[
  {
    "path": ".github/FUNDING.yml",
    "content": "custom: [\"https://intii.lemonsqueezy.com\", \"https://www.buymeacoffee.com/intitni\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "content": "name: Bug Report\ndescription: File a bug report\ntitle: \"[Bug]: \"\nlabels: [\"bug\"]\nassignees:\n  - intitni\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report! \n  - type: checkboxes\n    id: before-reporting\n    attributes:\n      label: Before Reporting\n      description: Before reporting the bug, we suggestion that you first refer to the [FAQ](https://github.com/intitni/CopilotForXcode/wiki/Frequently-Asked-Questions) to check if it may address your issue. And search for existing issues to avoid duplication. If you are reporting a bug from a beta build, please use the dedicated template for beta build.\n      options:\n        - label: I have checked FAQ, and there is no solution to my issue\n          required: true\n        - label: I have searched the existing issues, and there is no existing issue for my issue\n          required: true\n  - type: textarea\n    id: what-happened\n    attributes:\n      label: What happened?\n      description: Also tell us, what did you expect to happen?\n      placeholder: Tell us what you see!\n      value: \"A bug happened!\"\n    validations:\n      required: true\n  - type: textarea\n    id: reproduce\n    attributes:\n      label: How to reproduce the bug.\n      description: If possible, please provide the steps to reproduce the bug and relevant settings in screenshots.\n      placeholder: \"1. *****\\n2.*****\"\n      value: \"It just happened!\"\n  - type: textarea\n    id: logs\n    attributes:\n      label: Relevant log output\n      description: If it's a crash, please provide the crash report. You can find it in the Console.app.\n      render: shell\n  - type: input\n    id: mac-version\n    attributes:\n      label: macOS version\n  - type: input\n    id: xcode-version\n    attributes:\n      label: Xcode version\n  - type: input\n    id: copilot-for-xcode-version\n    attributes:\n      label: Copilot for Xcode version\n    \n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_reqeust.yaml",
    "content": "name: Feature Request\ndescription: Request a feature\ntitle: \"[Enhancement]: \"\nlabels: [\"enhancement\"]\nassignees:\n  - intitni\nbody: \n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this feature request! But please firstly [post your idea in discussion](https://github.com/intitni/CopilotForXcode/discussions/new?category=ideas) so that we can discuss about it in advance.\n  - type: checkboxes\n    id: before-reporting\n    attributes:\n      label: Before Requesting\n      description: Before requesting the feature, we suggestion that you first search for existing issues to avoid duplication.\n      options:\n        - label: I have searched the existing issues, and there is no existing issue for my feature request\n          required: true\n  - type: textarea\n    id: what-feature\n    attributes:\n      label: What feature do you want?\n      description: Please describe the feature you want.\n      placeholder: Tell us what you want!\n      value: \"I want a feature!\"\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/help_wanted.yml",
    "content": "name: Help Wanted\ndescription: Ask for help from the developer and the community\ntitle: \"[Help Wanted]: \"\nlabels: [\"help wanted\"]\nbody:\n  - type: checkboxes\n    id: before-reporting\n    attributes:\n      label: Before Reporting\n      description: Before asking for help, we suggestion that you first refer to the [FAQ](https://github.com/intitni/CopilotForXcode/wiki/Frequently-Asked-Questions) to check if it may address your issue. And search for existing issues to avoid duplication.\n      options:\n        - label: I have checked FAQ, and there is no solution to my issue\n          required: true\n        - label: I have searched the existing issues, and there is no existing issue for my issue\n          required: true\n  - type: textarea\n    id: what-help\n    attributes:\n      label: Describe your issue\n      description: Please describe the help you want.\n      placeholder: My issue is...\n      value: \"I want help!\"\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/z_bug_report_beta.yaml",
    "content": "name: Bug Report (Beta)\ndescription: File a bug report\ntitle: \"[Bug (Beta)]: \"\nlabels: [\"bug\", \"beta\"]\nassignees:\n  - intitni\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report! \n  - type: checkboxes\n    id: before-reporting\n    attributes:\n      label: Before Reporting\n      description: Before reporting the bug, we suggestion that you first refer to the [FAQ](https://github.com/intitni/CopilotForXcode/wiki/Frequently-Asked-Questions) to check if it may address your issue. And search for existing issues to avoid duplication.\n      options:\n        - label: I have checked FAQ, and there is no solution to my issue\n          required: true\n        - label: I have searched the existing issues, and there is no existing issue for my issue\n          required: true\n  - type: textarea\n    id: what-happened\n    attributes:\n      label: What happened?\n      description: Also tell us, what did you expect to happen?\n      placeholder: Tell us what you see!\n      value: \"A bug happened!\"\n    validations:\n      required: true\n  - type: textarea\n    id: reproduce\n    attributes:\n      label: How to reproduce the bug.\n      description: If possible, please provide the steps to reproduce the bug and relevant settings in screenshots.\n      placeholder: \"1. *****\\n2.*****\"\n      value: \"It just happened!\"\n  - type: textarea\n    id: logs\n    attributes:\n      label: Relevant log output\n      description: If it's a crash, please provide the crash report. You can find it in the Console.app.\n      render: shell\n  - type: input\n    id: mac-version\n    attributes:\n      label: macOS version\n  - type: input\n    id: xcode-version\n    attributes:\n      label: Xcode version\n  - type: input\n    id: copilot-for-xcode-version\n    attributes:\n      label: Copilot for Xcode version\n    \n"
  },
  {
    "path": ".github/workflows/close_inactive_issues.yml",
    "content": "name: Close inactive issues\non:\n  schedule:\n    - cron: \"30 1 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - uses: actions/stale@v5\n        with:\n          days-before-issue-stale: 30\n          days-before-issue-close: 14\n          stale-issue-label: \"stale\"\n          exempt-issue-labels: \"low priority, help wanted, planned, investigating, blocked\"\n          stale-issue-message: \"This issue is stale because it has been open for 30 days with no activity.\"\n          close-issue-message: \"This issue was closed because it has been inactive for 14 days since being marked as stale.\"\n          days-before-pr-stale: -1\n          days-before-pr-close: -1\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# IDE\n.idea\n\n# Created by \nhttps://www.toptal.com/developers/gitignore/api/xcode,macos,swift,swiftpackagemanager\n# Edit at \nhttps://www.toptal.com/developers/gitignore?templates=xcode,macos,swift,swiftpackagemanager\n\n### macOS ###\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n### macOS Patch ###\n# iCloud generated files\n*.icloud\n\n### Swift ###\n# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, \nObjective-C.gitignore & Swift.gitignore\n\n## User settings\nxcuserdata/\n\n## compatibility with Xcode 8 and earlier (ignoring not required starting \nXcode 9)\n*.xcscmblueprint\n*.xccheckout\n\n## compatibility with Xcode 3 and earlier (ignoring not required starting \nXcode 4)\nbuild/\nDerivedData/\n*.moved-aside\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\n\n## Obj-C/Swift specific\n*.hmap\n\n## App packaging\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n# Swift Package Manager\n# Add this line if you want to avoid checking in source code from Swift \nPackage Manager dependencies.\n# Packages/\n# Package.pins\n# Package.resolved\n# *.xcodeproj\n# Xcode automatically generates this directory with a .xcworkspacedata \nfile and xcuserdata\n# hence it is not needed unless you have added a package configuration \nfile to your project\n# .swiftpm\n\n.build/\n\n# CocoaPods\n# We recommend against adding the Pods directory to your .gitignore. \nHowever\n# you should judge for yourself, the pros and cons are mentioned at:\n# \nhttps://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n# Pods/\n# Add this line if you want to avoid checking in source code from the \n\n# Carthage\n# Add this line if you want to avoid checking in source code from Carthage \ndependencies.\n# Carthage/Checkouts\n\nCarthage/Build/\n\n# Accio dependency management\nDependencies/\n.accio/\n\n# fastlane\n# It is recommended to not store the screenshots in the git repo.\n# Instead, use fastlane to re-generate the screenshots whenever they are \nneeded.\n# For more information about the recommended setup visit:\n# \nhttps://docs.fastlane.tools/best-practices/source-control/#source-control\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots/**/*.png\nfastlane/test_output\n\n# Code Injection\n# After new code Injection tools there's a generated folder \n/iOSInjectionProject\n# https://github.com/johnno1962/injectionforxcode\n\niOSInjectionProject/\n\n\n# End of \nhttps://www.toptal.com/developers/gitignore/api/xcode,macos,swift,swiftpackagemanager\n\nSecrets.xcconfig\nPython/Python.xcframework\nPython/python-stdlib\nPython/site-packages/*\n!Python/site-packages/requirements.txt\n!Python/site-packages/install.sh\n\nPython/VERSIONS\nCopilot for Xcode Plus.xcworkspace\nPLUS\n"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": ".swiftformat",
    "content": "--allman false\n--beforemarks \n--binarygrouping 4,8\n--categorymark \"MARK: %c\"\n--classthreshold 0\n--closingparen balanced\n--commas always\n--conflictmarkers reject\n--decimalgrouping 3,6\n--elseposition same-line\n--enumthreshold 0\n--exponentcase lowercase\n--exponentgrouping disabled\n--fractiongrouping disabled\n--fragment false\n--funcattributes preserve\n--guardelse auto\n--header ignore\n--hexgrouping 4,8\n--hexliteralcase uppercase\n--ifdef no-indent\n--importgrouping testable-bottom\n--indent 4\n--indentcase false\n--lifecycle \n--linebreaks lf\n--maxwidth 100\n--modifierorder \n--nospaceoperators ...,..<\n--nowrapoperators \n--octalgrouping 4,8\n--operatorfunc spaced\n--patternlet hoist\n--ranges spaced\n--self remove\n--selfrequired \n--semicolons inline\n--shortoptionals always\n--smarttabs enabled\n--stripunusedargs unnamed-only\n--structthreshold 0\n--tabwidth unspecified\n--trailingclosures \n--trimwhitespace always\n--typeattributes preserve\n--varattributes preserve\n--voidtype void\n--wraparguments before-first\n--wrapcollections disabled\n--wrapparameters before-first\n--xcodeindentation disabled\n--yodaswap always\n\n--enable isEmpty\n\n--exclude Pods,**/Generated\n"
  },
  {
    "path": "ChatPlugins/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\nxcuserdata/\nDerivedData/\n.swiftpm/configuration/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "ChatPlugins/.swiftpm/xcode/xcshareddata/xcschemes/ChatPlugins.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1600\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ChatPlugins\"\n               BuildableName = \"ChatPlugins\"\n               BlueprintName = \"ChatPlugins\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"ChatPlugins\"\n            BuildableName = \"ChatPlugins\"\n            BlueprintName = \"ChatPlugins\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ChatPlugins/Package.swift",
    "content": "// swift-tools-version: 5.8\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"ChatPlugins\",\n    platforms: [.macOS(.v12)],\n    products: [\n        .library(\n            name: \"ChatPlugins\",\n            targets: [\"TerminalChatPlugin\", \"ShortcutChatPlugin\"]\n        ),\n    ],\n    dependencies: [\n        .package(path: \"../Tool\"),\n    ],\n    targets: [\n        .target(\n            name: \"TerminalChatPlugin\",\n            dependencies: [\n                .product(name: \"Chat\", package: \"Tool\"),\n                .product(name: \"Terminal\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n            ]\n        ),\n        .target(\n            name: \"ShortcutChatPlugin\",\n            dependencies: [\n                .product(name: \"Chat\", package: \"Tool\"),\n                .product(name: \"Terminal\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n            ]\n        ),\n    ]\n)\n\n"
  },
  {
    "path": "ChatPlugins/Sources/ShortcutChatPlugin/ShortcutChatPlugin.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Terminal\n\npublic final class ShortcutChatPlugin: ChatPlugin {\n    public static var id: String { \"com.intii.shortcut\" }\n    public static var command: String { \"shortcut\" }\n    public static var name: String { \"Shortcut\" }\n    public static var description: String { \"\"\"\n    Run a shortcut and use message content as input. You need to provide the shortcut name as an argument, for example, `/shortcut(Shortcut Name)`.\n    \"\"\" }\n\n    let terminal: TerminalType\n\n    init(terminal: TerminalType) {\n        self.terminal = terminal\n    }\n\n    public init() {\n        terminal = Terminal()\n    }\n\n    public func sendForTextResponse(_ request: Request) async\n        -> AsyncThrowingStream<String, any Error>\n    {\n        let stream = await sendForComplicatedResponse(request)\n        return .init { continuation in\n            let task = Task {\n                do {\n                    for try await response in stream {\n                        switch response {\n                        case let .content(.text(content)):\n                            continuation.yield(content)\n                        default:\n                            break\n                        }\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    public func sendForComplicatedResponse(_ request: Request) async\n        -> AsyncThrowingStream<Response, any Error>\n    {\n        return .init { continuation in\n            let task = Task {\n                let id = \"\\(Self.command)-\\(UUID().uuidString)\"\n\n                guard let shortcutName = request.arguments.first, !shortcutName.isEmpty else {\n                    continuation.yield(.content(.text(\n                        \"Please provide the shortcut name in format: `/\\(Self.command)(shortcut name)`\"\n                    )))\n                    return\n                }\n\n                var input = String(request.text).trimmingCharacters(in: .whitespacesAndNewlines)\n                if input.isEmpty {\n                    // if no input detected, use the previous message as input\n                    input = request.history.last?.content ?? \"\"\n                }\n\n                do {\n                    continuation.yield(.startAction(\n                        id: \"run\",\n                        task: \"Run shortcut `\\(shortcutName)`\"\n                    ))\n\n                    let env = ProcessInfo.processInfo.environment\n                    let shell = env[\"SHELL\"] ?? \"/bin/bash\"\n                    let temporaryURL = FileManager.default.temporaryDirectory\n                    let temporaryInputFileURL = temporaryURL\n                        .appendingPathComponent(\"\\(id)-input.txt\")\n                    let temporaryOutputFileURL = temporaryURL\n                        .appendingPathComponent(\"\\(id)-output\")\n\n                    try input.write(to: temporaryInputFileURL, atomically: true, encoding: .utf8)\n\n                    let command = \"\"\"\n                    shortcuts run \"\\(shortcutName)\" \\\n                    -i \"\\(temporaryInputFileURL.path)\" \\\n                    -o \"\\(temporaryOutputFileURL.path)\"\n                    \"\"\"\n\n                    continuation.yield(.startAction(\n                        id: \"run\",\n                        task: \"Run shortcut \\(shortcutName)\"\n                    ))\n\n                    do {\n                        let result = try await terminal.runCommand(\n                            shell,\n                            arguments: [\"-i\", \"-l\", \"-c\", command],\n                            currentDirectoryURL: nil,\n                            environment: [:]\n                        )\n                        continuation.yield(.finishAction(id: \"run\", result: .success(result)))\n                    } catch {\n                        continuation.yield(.finishAction(\n                            id: \"run\",\n                            result: .failure(error.localizedDescription)\n                        ))\n                        throw error\n                    }\n\n                    await Task.yield()\n                    try Task.checkCancellation()\n\n                    if FileManager.default.fileExists(atPath: temporaryOutputFileURL.path) {\n                        let data = try Data(contentsOf: temporaryOutputFileURL)\n                        if let text = String(data: data, encoding: .utf8) {\n                            var response = text\n                            if response.isEmpty {\n                                response = \"Finished\"\n                            }\n                            continuation.yield(.content(.text(response)))\n                        } else {\n                            let content = \"\"\"\n                            [View File](\\(temporaryOutputFileURL))\n                            \"\"\"\n                            continuation.yield(.content(.text(content)))\n                        }\n                    } else {\n                        continuation.yield(.content(.text(\"Finished\")))\n                    }\n\n                } catch {\n                    continuation.yield(.content(.text(error.localizedDescription)))\n                }\n\n                continuation.finish()\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "ChatPlugins/Sources/TerminalChatPlugin/TerminalChatPlugin.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Terminal\nimport XcodeInspector\n\npublic final class TerminalChatPlugin: ChatPlugin {\n    public static var id: String { \"com.intii.terminal\" }\n    public static var command: String { \"shell\" }\n    public static var name: String { \"Shell\" }\n    public static var description: String { \"\"\"\n    Run the command in the message from shell.\n\n    You can use environment variable `$FILE_PATH` and `$PROJECT_ROOT` to access the current file path and project root.\n    \"\"\" }\n\n    let terminal: TerminalType\n\n    init(terminal: TerminalType) {\n        self.terminal = terminal\n    }\n\n    public init() {\n        terminal = Terminal()\n    }\n\n    public func getTextContent(from request: Request) async\n        -> AsyncStream<String>\n    {\n        return .init { continuation in\n            let task = Task {\n                do {\n                    let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n                    let projectURL = XcodeInspector.shared.realtimeActiveProjectURL\n\n                    var environment = [String: String]()\n                    if let fileURL {\n                        environment[\"FILE_PATH\"] = fileURL.path\n                    }\n                    if let projectURL {\n                        environment[\"PROJECT_ROOT\"] = projectURL.path\n                    }\n\n                    try Task.checkCancellation()\n\n                    let env = ProcessInfo.processInfo.environment\n                    let shell = env[\"SHELL\"] ?? \"/bin/bash\"\n\n                    let output = terminal.streamCommand(\n                        shell,\n                        arguments: [\"-i\", \"-l\", \"-c\", request.text],\n                        currentDirectoryURL: projectURL,\n                        environment: environment\n                    )\n\n                    var accumulatedOutput = \"\"\n                    for try await content in output {\n                        try Task.checkCancellation()\n                        accumulatedOutput += content\n                        continuation.yield(accumulatedOutput)\n                    }\n                } catch let error as Terminal.TerminationError {\n                    let errorMessage = \"\\n\\n[error: \\(error.reason)]\"\n                    continuation.yield(errorMessage)\n                } catch {\n                    let errorMessage = \"\\n\\n[error: \\(error.localizedDescription)]\"\n                    continuation.yield(errorMessage)\n                }\n\n                continuation.finish()\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n                Task {\n                    await self.terminal.terminate()\n                }\n            }\n        }\n    }\n\n    public func sendForTextResponse(_ request: Request) async\n        -> AsyncThrowingStream<String, any Error>\n    {\n        let stream = await getTextContent(from: request)\n        return .init { continuation in\n            let task = Task {\n                continuation.yield(\"Executing command: `\\(request.text)`\\n\\n\")\n                continuation.yield(\"```console\\n\")\n                for await text in stream {\n                    try Task.checkCancellation()\n                    continuation.yield(text)\n                }\n                continuation.yield(\"\\n```\\n\")\n                continuation.finish()\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    public func formatContent(_ content: Response.Content) -> Response.Content {\n        switch content {\n        case let .text(content):\n            return .text(\"\"\"\n            ```console\n            \\(content)\n            ```\n            \"\"\")\n        }\n    }\n\n    public func sendForComplicatedResponse(_ request: Request) async\n        -> AsyncThrowingStream<Response, any Error>\n    {\n        return .init { continuation in\n            let task = Task {\n                var updateTime = Date()\n\n                continuation.yield(.startAction(id: \"run\", task: \"Run `\\(request.text)`\"))\n\n                let textStream = await getTextContent(from: request)\n                var previousOutput = \"\"\n\n                continuation.yield(.finishAction(\n                    id: \"run\",\n                    result: .success(\"Executed.\")\n                ))\n\n                for await accumulatedOutput in textStream {\n                    try Task.checkCancellation()\n\n                    let newContent = accumulatedOutput.dropFirst(previousOutput.count)\n                    previousOutput = accumulatedOutput\n\n                    if !newContent.isEmpty {\n                        if Date().timeIntervalSince(updateTime) > 60 * 2 {\n                            continuation.yield(.startNewMessage)\n                            continuation.yield(.startAction(\n                                id: \"run\",\n                                task: \"Continue `\\(request.text)`\"\n                            ))\n                            continuation.yield(.finishAction(\n                                id: \"run\",\n                                result: .success(\"Executed.\")\n                            ))\n                            continuation.yield(.content(.text(\"[continue]\\n\")))\n                            updateTime = Date()\n                        }\n\n                        continuation.yield(.content(.text(String(newContent))))\n                    }\n                }\n\n                continuation.finish()\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "ChatPlugins/Tests/ChatPluginsTests/ChatPluginsTests.swift",
    "content": "import Testing\n@testable import ChatPlugins\n\n@Test func example() async throws {\n    // Write your test here and use APIs like `#expect(...)` to check expected conditions.\n}\n"
  },
  {
    "path": "CommunicationBridge/ServiceDelegate.swift",
    "content": "import AppKit\nimport Foundation\nimport Logger\nimport XPCShared\n\nclass ServiceDelegate: NSObject, NSXPCListenerDelegate {\n    func listener(\n        _: NSXPCListener,\n        shouldAcceptNewConnection newConnection: NSXPCConnection\n    ) -> Bool {\n        newConnection.exportedInterface = NSXPCInterface(\n            with: CommunicationBridgeXPCServiceProtocol.self\n        )\n\n        let exportedObject = XPCService()\n        newConnection.exportedObject = exportedObject\n        newConnection.resume()\n\n        Logger.communicationBridge.info(\"Accepted new connection.\")\n\n        return true\n    }\n}\n\nclass XPCService: CommunicationBridgeXPCServiceProtocol {\n    static let eventHandler = EventHandler()\n\n    func launchExtensionServiceIfNeeded(\n        withReply reply: @escaping (NSXPCListenerEndpoint?) -> Void\n    ) {\n        Task {\n            await Self.eventHandler.launchExtensionServiceIfNeeded(withReply: reply)\n        }\n    }\n\n    func quit(withReply reply: @escaping () -> Void) {\n        Task {\n            await Self.eventHandler.quit(withReply: reply)\n        }\n    }\n\n    func updateServiceEndpoint(\n        endpoint: NSXPCListenerEndpoint,\n        withReply reply: @escaping () -> Void\n    ) {\n        Task {\n            await Self.eventHandler.updateServiceEndpoint(endpoint: endpoint, withReply: reply)\n        }\n    }\n}\n\nactor EventHandler {\n    var endpoint: NSXPCListenerEndpoint?\n    let launcher = ExtensionServiceLauncher()\n    var exitTask: Task<Void, Error>?\n\n    init() {\n        Task { await rescheduleExitTask() }\n    }\n\n    func launchExtensionServiceIfNeeded(\n        withReply reply: @escaping (NSXPCListenerEndpoint?) -> Void\n    ) async {\n        rescheduleExitTask()\n        #if DEBUG\n        if let endpoint, !(await testXPCListenerEndpoint(endpoint)) {\n            self.endpoint = nil\n        }\n        reply(endpoint)\n        #else\n        if await launcher.isApplicationValid {\n            Logger.communicationBridge.info(\"Service app is still valid\")\n            reply(endpoint)\n        } else {\n            endpoint = nil\n            await launcher.launch()\n            reply(nil)\n        }\n        #endif\n    }\n\n    func quit(withReply reply: () -> Void) {\n        Logger.communicationBridge.info(\"Exiting service.\")\n        listener.invalidate()\n        exit(0)\n    }\n\n    func updateServiceEndpoint(endpoint: NSXPCListenerEndpoint, withReply reply: () -> Void) {\n        rescheduleExitTask()\n        self.endpoint = endpoint\n        reply()\n    }\n\n    /// The bridge will kill itself when it's not used for a period.\n    /// It's fine that the bridge is killed because it will be launched again when needed.\n    private func rescheduleExitTask() {\n        exitTask?.cancel()\n        exitTask = Task {\n            #if DEBUG\n            try await Task.sleep(nanoseconds: 60_000_000_000)\n            Logger.communicationBridge.info(\"Exit will be called in release build.\")\n            #else\n            try await Task.sleep(nanoseconds: 1_800_000_000_000)\n            Logger.communicationBridge.info(\"Exiting service.\")\n            listener.invalidate()\n            exit(0)\n            #endif\n        }\n    }\n}\n\nactor ExtensionServiceLauncher {\n    let appIdentifier = bundleIdentifierBase.appending(\".ExtensionService\")\n    let appURL = Bundle.main.bundleURL.appendingPathComponent(\n        \"CopilotForXcodeExtensionService.app\"\n    )\n    var isLaunching: Bool = false\n    var application: NSRunningApplication?\n    var isApplicationValid: Bool {\n        guard let application else { return false }\n        if application.isTerminated { return false }\n        let identifier = application.processIdentifier\n        if let application = NSWorkspace.shared.runningApplications.first(where: {\n            $0.processIdentifier == identifier\n        }) {\n            Logger.communicationBridge.info(\n                \"Service app found: \\(application.processIdentifier) \\(String(describing: application.bundleIdentifier))\"\n            )\n            return true\n        }\n        return false\n    }\n\n    func launch() {\n        guard !isLaunching else { return }\n        isLaunching = true\n\n        Logger.communicationBridge.info(\"Launching extension service app.\")\n\n        NSWorkspace.shared.openApplication(\n            at: appURL,\n            configuration: {\n                let configuration = NSWorkspace.OpenConfiguration()\n                configuration.createsNewApplicationInstance = false\n                configuration.addsToRecentItems = false\n                configuration.activates = false\n                return configuration\n            }()\n        ) { app, error in\n            if let error = error {\n                Logger.communicationBridge.error(\n                    \"Failed to launch extension service app: \\(error)\"\n                )\n            } else {\n                Logger.communicationBridge.info(\n                    \"Finished launching extension service app.\"\n                )\n            }\n\n            self.application = app\n            self.isLaunching = false\n        }\n    }\n}\n\n"
  },
  {
    "path": "CommunicationBridge/main.swift",
    "content": "import AppKit\nimport Foundation\n\nclass AppDelegate: NSObject, NSApplicationDelegate {}\n\nlet bundleIdentifierBase = Bundle(url: Bundle.main.bundleURL.appendingPathComponent(\n    \"CopilotForXcodeExtensionService.app\"\n))?.object(forInfoDictionaryKey: \"BUNDLE_IDENTIFIER_BASE\") as? String ?? \"com.intii.CopilotForXcode\"\n\nlet serviceIdentifier = bundleIdentifierBase + \".CommunicationBridge\"\nlet appDelegate = AppDelegate()\nlet delegate = ServiceDelegate()\nlet listener = NSXPCListener(machServiceName: serviceIdentifier)\nlistener.delegate = delegate\nlistener.resume()\nlet app = NSApplication.shared\napp.delegate = appDelegate\napp.run()\n\n"
  },
  {
    "path": "Config.debug.xcconfig",
    "content": "#include \"Version.xcconfig\"\nSLASH = /\n\nHOST_APP_NAME = Copilot for Xcode Dev\nBUNDLE_IDENTIFIER_BASE = dev.com.intii.CopilotForXcode\nSPARKLE_FEED_URL = http:$(SLASH)$(SLASH)127.0.0.1:9433/appcast.xml\nSPARKLE_PUBLIC_KEY = WDzm5GHnc6c8kjeJEgX5GuGiPpW6Lc/ovGjLnrrZvPY=\nAPPLICATION_SUPPORT_FOLDER = dev.com.intii.CopilotForXcode\nEXTENSION_BUNDLE_NAME = Copilot Dev\nEXTENSION_BUNDLE_DISPLAY_NAME = Copilot Dev\nEXTENSION_SERVICE_NAME = CopilotForXcodeExtensionService\n\n// see also target Configs\n"
  },
  {
    "path": "Config.xcconfig",
    "content": "#include \"Version.xcconfig\"\nSLASH = /\n\nHOST_APP_NAME = Copilot for Xcode\nBUNDLE_IDENTIFIER_BASE = com.intii.CopilotForXcode\nSPARKLE_FEED_URL = https:$(SLASH)$(SLASH)copilotforxcode.intii.com/appcast.xml\nSPARKLE_PUBLIC_KEY = WDzm5GHnc6c8kjeJEgX5GuGiPpW6Lc/ovGjLnrrZvPY=\nAPPLICATION_SUPPORT_FOLDER = com.intii.CopilotForXcode\nEXTENSION_BUNDLE_NAME = Copilot\nEXTENSION_BUNDLE_DISPLAY_NAME = Copilot\nEXTENSION_SERVICE_NAME = CopilotForXcodeExtensionService\n\n// see also target Configs\n"
  },
  {
    "path": "Copilot for Xcode/App.swift",
    "content": "import Client\nimport HostApp\nimport LaunchAgentManager\nimport SwiftUI\nimport UpdateChecker\nimport XPCShared\n\nstruct VisualEffect: NSViewRepresentable {\n    func makeNSView(context: Self.Context) -> NSView { return NSVisualEffectView() }\n    func updateNSView(_ nsView: NSView, context: Context) {}\n}\n\nclass TheUpdateCheckerDelegate: UpdateCheckerDelegate {\n    func prepareForRelaunch(finish: @escaping () -> Void) {\n        Task {\n            let service = try? getService()\n            try? await service?.quitService()\n            finish()\n        }\n    }\n}\n\nlet updateCheckerDelegate = TheUpdateCheckerDelegate()\n\n@main\nstruct CopilotForXcodeApp: App {\n    var body: some Scene {\n        WindowGroup {\n            TabContainer()\n                .frame(minWidth: 800, minHeight: 600)\n                .background(VisualEffect().ignoresSafeArea())\n                .onAppear {\n                    UserDefaults.setupDefaultSettings()\n                }\n                .environment(\n                    \\.updateChecker,\n                    {\n                        let checker = UpdateChecker(\n                            hostBundle: Bundle.main,\n                            shouldAutomaticallyCheckForUpdate: false\n                        )\n                        checker.updateCheckerDelegate = updateCheckerDelegate\n                        return checker\n                    }()\n                )\n        }\n    }\n}\n\nvar isPreview: Bool { ProcessInfo.processInfo.environment[\"XCODE_RUNNING_FOR_PREVIEWS\"] == \"1\" }\n\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"app-icon@16w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"app-icon@32w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"app-icon@32w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"app-icon@64w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"app-icon@128w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"app-icon@256w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"app-icon@256w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"app-icon@512w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"app-icon@512w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"app-icon.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/BackgroundColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"40\",\n          \"green\" : \"23\",\n          \"red\" : \"25\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/BackgroundColorTop.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"54\",\n          \"green\" : \"25\",\n          \"red\" : \"30\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/ButtonBackgroundColorDefault.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x46\",\n          \"green\" : \"0x24\",\n          \"red\" : \"0x2C\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/ButtonBackgroundColorPressed.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.275\",\n          \"green\" : \"0.141\",\n          \"red\" : \"0.290\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode/Copilot_for_Xcode.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<false/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>$(TeamIdentifierPrefix)group.$(BUNDLE_IDENTIFIER_BASE)</string>\n\t</array>\n\t<key>com.apple.security.automation.apple-events</key>\n\t<true/>\n\t<key>com.apple.security.files.user-selected.read-only</key>\n\t<true/>\n\t<key>keychain-access-groups</key>\n\t<array>\n\t\t<string>$(AppIdentifierPrefix)$(BUNDLE_IDENTIFIER_BASE).Shared</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Copilot for Xcode/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tC8009BFF2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */; };\n\t\tC8009C032941C576007AA7E8 /* RealtimeSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8009C022941C576007AA7E8 /* RealtimeSuggestionCommand.swift */; };\n\t\tC800DBB1294C624D00B04CAC /* PrefetchSuggestionsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */; };\n\t\tC80FFB962A95F58200704A25 /* AcceptPromptToCodeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80FFB952A95F58200704A25 /* AcceptPromptToCodeCommand.swift */; };\n\t\tC81291D72994FE6900196E12 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C81291D52994FE6900196E12 /* Main.storyboard */; };\n\t\tC814588F2939EFDC00135263 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C814588E2939EFDC00135263 /* Cocoa.framework */; };\n\t\tC81458942939EFDC00135263 /* SourceEditorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81458932939EFDC00135263 /* SourceEditorExtension.swift */; };\n\t\tC81458962939EFDC00135263 /* GetSuggestionsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C81458952939EFDC00135263 /* GetSuggestionsCommand.swift */; };\n\t\tC814589B2939EFDC00135263 /* Copilot.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C814588C2939EFDC00135263 /* Copilot.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tC8189B1A2938972F00C9DCDA /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8189B192938972F00C9DCDA /* App.swift */; };\n\t\tC8189B1E2938973000C9DCDA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8189B1D2938973000C9DCDA /* Assets.xcassets */; };\n\t\tC8189B212938973000C9DCDA /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8189B202938973000C9DCDA /* Preview Assets.xcassets */; };\n\t\tC8216B73298036EC00AD38C7 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8216B72298036EC00AD38C7 /* main.swift */; };\n\t\tC8216B782980370100AD38C7 /* ReloadLaunchAgent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8216B772980370100AD38C7 /* ReloadLaunchAgent.swift */; };\n\t\tC8216B7D2980374300AD38C7 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C8216B7C2980374300AD38C7 /* ArgumentParser */; };\n\t\tC8216B802980378300AD38C7 /* Helper in Embed XPCService */ = {isa = PBXBuildFile; fileRef = C8216B70298036EC00AD38C7 /* Helper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };\n\t\tC828B27F2B1F7B4F00E7612A /* ExtensionPoint.appextensionpoint in Copy Extension Point */ = {isa = PBXBuildFile; fileRef = C828B27D2B1F241500E7612A /* ExtensionPoint.appextensionpoint */; };\n\t\tC8520301293C4D9000460097 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8520300293C4D9000460097 /* Helpers.swift */; };\n\t\tC861A6A329E5503F005C41A3 /* PromptToCodeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C861A6A229E5503F005C41A3 /* PromptToCodeCommand.swift */; };\n\t\tC861E6112994F6070056CB02 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C861E6102994F6070056CB02 /* AppDelegate.swift */; };\n\t\tC861E6152994F6080056CB02 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C861E6142994F6080056CB02 /* Assets.xcassets */; };\n\t\tC861E61E2994F6150056CB02 /* Service in Frameworks */ = {isa = PBXBuildFile; productRef = C861E61D2994F6150056CB02 /* Service */; };\n\t\tC861E6202994F63A0056CB02 /* ServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C861E61F2994F6390056CB02 /* ServiceDelegate.swift */; };\n\t\tC86612F82A06AF74009197D9 /* HostApp in Frameworks */ = {isa = PBXBuildFile; productRef = C86612F72A06AF74009197D9 /* HostApp */; };\n\t\tC8738B662BE4D4B900609E7F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8738B652BE4D4B900609E7F /* main.swift */; };\n\t\tC8738B6B2BE4D56F00609E7F /* ServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8738B6A2BE4D56F00609E7F /* ServiceDelegate.swift */; };\n\t\tC8738B6F2BE4F7A600609E7F /* XPCShared in Frameworks */ = {isa = PBXBuildFile; productRef = C8738B6E2BE4F7A600609E7F /* XPCShared */; };\n\t\tC8738B712BE4F8B700609E7F /* XPCController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8738B702BE4F8B700609E7F /* XPCController.swift */; };\n\t\tC8738B7B2BE5363800609E7F /* SandboxedClientTesterApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8738B7A2BE5363800609E7F /* SandboxedClientTesterApp.swift */; };\n\t\tC8738B7D2BE5363800609E7F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8738B7C2BE5363800609E7F /* ContentView.swift */; };\n\t\tC8738B7F2BE5363900609E7F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8738B7E2BE5363900609E7F /* Assets.xcassets */; };\n\t\tC8738B822BE5363900609E7F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8738B812BE5363900609E7F /* Preview Assets.xcassets */; };\n\t\tC8738B882BE5365000609E7F /* Client in Frameworks */ = {isa = PBXBuildFile; productRef = C8738B872BE5365000609E7F /* Client */; };\n\t\tC8738B8A2BE540D000609E7F /* bridgeLaunchAgent.plist in Copy Launch Agent */ = {isa = PBXBuildFile; fileRef = C8738B6D2BE4F3E800609E7F /* bridgeLaunchAgent.plist */; };\n\t\tC8738B8B2BE540DD00609E7F /* CommunicationBridge in Embed XPCService */ = {isa = PBXBuildFile; fileRef = C8738B632BE4D4B900609E7F /* CommunicationBridge */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };\n\t\tC8758E7029F04BFF00D29C1C /* CustomCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8758E6F29F04BFF00D29C1C /* CustomCommand.swift */; };\n\t\tC8758E7229F04CF100D29C1C /* SeparatorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8758E7129F04CF100D29C1C /* SeparatorCommand.swift */; };\n\t\tC87B03A5293B261200C77EAE /* AcceptSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87B03A4293B261200C77EAE /* AcceptSuggestionCommand.swift */; };\n\t\tC87B03A7293B261900C77EAE /* RejectSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87B03A6293B261900C77EAE /* RejectSuggestionCommand.swift */; };\n\t\tC87B03A9293B262600C77EAE /* NextSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87B03A8293B262600C77EAE /* NextSuggestionCommand.swift */; };\n\t\tC87B03AB293B262E00C77EAE /* PreviousSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87B03AA293B262E00C77EAE /* PreviousSuggestionCommand.swift */; };\n\t\tC87B03AC293B2CF300C77EAE /* XcodeKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C81458902939EFDC00135263 /* XcodeKit.framework */; };\n\t\tC87B03AD293B2CF300C77EAE /* XcodeKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C81458902939EFDC00135263 /* XcodeKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tC882175C294187EF00A22FD3 /* Client in Frameworks */ = {isa = PBXBuildFile; productRef = C882175B294187EF00A22FD3 /* Client */; };\n\t\tC89E75C32A46FB32000DD64F /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89E75C22A46FB32000DD64F /* AppDelegate+Menu.swift */; };\n\t\tC8C8B60929AFA35F00034BEE /* CopilotForXcodeExtensionService.app in Embed XPCService */ = {isa = PBXBuildFile; fileRef = C861E60E2994F6070056CB02 /* CopilotForXcodeExtensionService.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tC8DCF00029CE11D500FDDDD7 /* OpenChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DCEFFF29CE11D500FDDDD7 /* OpenChat.swift */; };\n\t\tC8DD9CB12BC673F80036641C /* CloseIdleTabsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tC81291AF2994F92700196E12 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C8189B0E2938972F00C9DCDA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C861E60D2994F6070056CB02;\n\t\t\tremoteInfo = ExtensionService;\n\t\t};\n\t\tC81458992939EFDC00135263 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C8189B0E2938972F00C9DCDA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C814588B2939EFDC00135263;\n\t\t\tremoteInfo = EditorExtension;\n\t\t};\n\t\tC8216B7E2980377E00AD38C7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C8189B0E2938972F00C9DCDA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C8216B6F298036EC00AD38C7;\n\t\t\tremoteInfo = Helper;\n\t\t};\n\t\tC8738B8C2BE540F900609E7F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C8189B0E2938972F00C9DCDA /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C8738B622BE4D4B900609E7F;\n\t\t\tremoteInfo = CommunicationBridge;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tC814589F2939EFDC00135263 /* Embed Foundation Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\tC814589B2939EFDC00135263 /* Copilot.appex in Embed Foundation Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed Foundation Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8216B6E298036EC00AD38C7 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = /usr/share/man/man1/;\n\t\t\tdstSubfolderSpec = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 1;\n\t\t};\n\t\tC828B27E2B1F7B3C00E7612A /* Copy Extension Point */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(EXTENSIONS_FOLDER_PATH)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tC828B27F2B1F7B4F00E7612A /* ExtensionPoint.appextensionpoint in Copy Extension Point */,\n\t\t\t);\n\t\t\tname = \"Copy Extension Point\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8520306293CF0EF00460097 /* Embed XPCService */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = ../Applications;\n\t\t\tdstSubfolderSpec = 6;\n\t\t\tfiles = (\n\t\t\t\tC8738B8B2BE540DD00609E7F /* CommunicationBridge in Embed XPCService */,\n\t\t\t\tC8216B802980378300AD38C7 /* Helper in Embed XPCService */,\n\t\t\t\tC8C8B60929AFA35F00034BEE /* CopilotForXcodeExtensionService.app in Embed XPCService */,\n\t\t\t);\n\t\t\tname = \"Embed XPCService\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B612BE4D4B900609E7F /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC87B03AE293B2CF300C77EAE /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tC87B03AD293B2CF300C77EAE /* XcodeKit.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8C8B60829AFA32800034BEE /* Embed Service */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/XPCServices\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Service\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8F1032A2A7A38D200D28F4F /* Copy Launch Agent */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = Contents/Library/LaunchAgents;\n\t\t\tdstSubfolderSpec = 1;\n\t\t\tfiles = (\n\t\t\t\tC8738B8A2BE540D000609E7F /* bridgeLaunchAgent.plist in Copy Launch Agent */,\n\t\t\t);\n\t\t\tname = \"Copy Launch Agent\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tC8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleRealtimeSuggestionsCommand.swift; sourceTree = \"<group>\"; };\n\t\tC8009C022941C576007AA7E8 /* RealtimeSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealtimeSuggestionCommand.swift; sourceTree = \"<group>\"; };\n\t\tC800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefetchSuggestionsCommand.swift; sourceTree = \"<group>\"; };\n\t\tC80FFB952A95F58200704A25 /* AcceptPromptToCodeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptPromptToCodeCommand.swift; sourceTree = \"<group>\"; };\n\t\tC81291D52994FE6900196E12 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = \"<group>\"; };\n\t\tC81291D92994FE7900196E12 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC814588C2939EFDC00135263 /* Copilot.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = Copilot.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC814588E2939EFDC00135263 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };\n\t\tC81458902939EFDC00135263 /* XcodeKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XcodeKit.framework; path = Library/Frameworks/XcodeKit.framework; sourceTree = DEVELOPER_DIR; };\n\t\tC81458932939EFDC00135263 /* SourceEditorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceEditorExtension.swift; sourceTree = \"<group>\"; };\n\t\tC81458952939EFDC00135263 /* GetSuggestionsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetSuggestionsCommand.swift; sourceTree = \"<group>\"; };\n\t\tC81458972939EFDC00135263 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC81458982939EFDC00135263 /* EditorExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = EditorExtension.entitlements; sourceTree = \"<group>\"; };\n\t\tC81458AD293A009600135263 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = \"<group>\"; };\n\t\tC81458AE293A009800135263 /* Config.debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tC8189B162938972F00C9DCDA /* Copilot for Xcode Dev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"Copilot for Xcode Dev.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8189B192938972F00C9DCDA /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = \"<group>\"; };\n\t\tC8189B1D2938973000C9DCDA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC8189B202938973000C9DCDA /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\tC8189B222938973000C9DCDA /* Copilot_for_Xcode.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Copilot_for_Xcode.entitlements; sourceTree = \"<group>\"; };\n\t\tC8189B282938979000C9DCDA /* Core */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Core; sourceTree = \"<group>\"; };\n\t\tC81D181E2A1B509B006C1B70 /* Tool */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Tool; sourceTree = \"<group>\"; };\n\t\tC81E867D296FE4420026E908 /* Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = \"<group>\"; };\n\t\tC8216B70298036EC00AD38C7 /* Helper */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = Helper; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8216B72298036EC00AD38C7 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\tC8216B772980370100AD38C7 /* ReloadLaunchAgent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReloadLaunchAgent.swift; sourceTree = \"<group>\"; };\n\t\tC828B27D2B1F241500E7612A /* ExtensionPoint.appextensionpoint */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = ExtensionPoint.appextensionpoint; sourceTree = \"<group>\"; };\n\t\tC82E38492A1F025F00D4EADF /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = \"<group>\"; };\n\t\tC84FD9D72CC671C600BE5093 /* ChatPlugins */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = ChatPlugins; sourceTree = \"<group>\"; };\n\t\tC8520300293C4D9000460097 /* Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = \"<group>\"; };\n\t\tC8520308293D805800460097 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n\t\tC861A6A229E5503F005C41A3 /* PromptToCodeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptToCodeCommand.swift; sourceTree = \"<group>\"; };\n\t\tC861E60E2994F6070056CB02 /* CopilotForXcodeExtensionService.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CopilotForXcodeExtensionService.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC861E6102994F6070056CB02 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tC861E6142994F6080056CB02 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC861E6192994F6080056CB02 /* ExtensionService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ExtensionService.entitlements; sourceTree = \"<group>\"; };\n\t\tC861E61F2994F6390056CB02 /* ServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceDelegate.swift; sourceTree = \"<group>\"; };\n\t\tC8738B632BE4D4B900609E7F /* CommunicationBridge */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = CommunicationBridge; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8738B652BE4D4B900609E7F /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = \"<group>\"; };\n\t\tC8738B6A2BE4D56F00609E7F /* ServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceDelegate.swift; sourceTree = \"<group>\"; };\n\t\tC8738B6D2BE4F3E800609E7F /* bridgeLaunchAgent.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = bridgeLaunchAgent.plist; sourceTree = \"<group>\"; };\n\t\tC8738B702BE4F8B700609E7F /* XPCController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XPCController.swift; sourceTree = \"<group>\"; };\n\t\tC8738B782BE5363800609E7F /* SandboxedClientTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SandboxedClientTester.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8738B7A2BE5363800609E7F /* SandboxedClientTesterApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxedClientTesterApp.swift; sourceTree = \"<group>\"; };\n\t\tC8738B7C2BE5363800609E7F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\tC8738B7E2BE5363900609E7F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC8738B812BE5363900609E7F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\tC8738B832BE5363900609E7F /* SandboxedClientTester.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SandboxedClientTester.entitlements; sourceTree = \"<group>\"; };\n\t\tC8738B892BE5379E00609E7F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC8758E6F29F04BFF00D29C1C /* CustomCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCommand.swift; sourceTree = \"<group>\"; };\n\t\tC8758E7129F04CF100D29C1C /* SeparatorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorCommand.swift; sourceTree = \"<group>\"; };\n\t\tC87B03A3293B24AB00C77EAE /* Copilot-for-Xcode-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = \"Copilot-for-Xcode-Info.plist\"; sourceTree = SOURCE_ROOT; };\n\t\tC87B03A4293B261200C77EAE /* AcceptSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptSuggestionCommand.swift; sourceTree = \"<group>\"; };\n\t\tC87B03A6293B261900C77EAE /* RejectSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RejectSuggestionCommand.swift; sourceTree = \"<group>\"; };\n\t\tC87B03A8293B262600C77EAE /* NextSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextSuggestionCommand.swift; sourceTree = \"<group>\"; };\n\t\tC87B03AA293B262E00C77EAE /* PreviousSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviousSuggestionCommand.swift; sourceTree = \"<group>\"; };\n\t\tC887BC832965D96000931567 /* DEVELOPMENT.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DEVELOPMENT.md; sourceTree = \"<group>\"; };\n\t\tC89E75C22A46FB32000DD64F /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"AppDelegate+Menu.swift\"; sourceTree = \"<group>\"; };\n\t\tC8BE64922EB9B42E00EDB2D7 /* OverlayWindow */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = OverlayWindow; sourceTree = \"<group>\"; };\n\t\tC8CD828229B88006008D044D /* TestPlan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = TestPlan.xctestplan; sourceTree = \"<group>\"; };\n\t\tC8DCEFFF29CE11D500FDDDD7 /* OpenChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenChat.swift; sourceTree = \"<group>\"; };\n\t\tC8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloseIdleTabsCommand.swift; sourceTree = \"<group>\"; };\n\t\tC8F103292A7A365000D28F4F /* launchAgent.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = launchAgent.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC81458892939EFDC00135263 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC87B03AC293B2CF300C77EAE /* XcodeKit.framework in Frameworks */,\n\t\t\t\tC814588F2939EFDC00135263 /* Cocoa.framework in Frameworks */,\n\t\t\t\tC882175C294187EF00A22FD3 /* Client in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8189B132938972F00C9DCDA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC86612F82A06AF74009197D9 /* HostApp in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8216B6D298036EC00AD38C7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8216B7D2980374300AD38C7 /* ArgumentParser in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC861E60B2994F6070056CB02 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC861E61E2994F6150056CB02 /* Service in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B602BE4D4B900609E7F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8738B6F2BE4F7A600609E7F /* XPCShared in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B752BE5363800609E7F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8738B882BE5365000609E7F /* Client in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tC814588D2939EFDC00135263 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC814588E2939EFDC00135263 /* Cocoa.framework */,\n\t\t\t\tC81458902939EFDC00135263 /* XcodeKit.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC81458922939EFDC00135263 /* EditorExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC81458932939EFDC00135263 /* SourceEditorExtension.swift */,\n\t\t\t\tC8758E7129F04CF100D29C1C /* SeparatorCommand.swift */,\n\t\t\t\tC8520300293C4D9000460097 /* Helpers.swift */,\n\t\t\t\tC81458952939EFDC00135263 /* GetSuggestionsCommand.swift */,\n\t\t\t\tC87B03A4293B261200C77EAE /* AcceptSuggestionCommand.swift */,\n\t\t\t\tC80FFB952A95F58200704A25 /* AcceptPromptToCodeCommand.swift */,\n\t\t\t\tC87B03A6293B261900C77EAE /* RejectSuggestionCommand.swift */,\n\t\t\t\tC87B03A8293B262600C77EAE /* NextSuggestionCommand.swift */,\n\t\t\t\tC87B03AA293B262E00C77EAE /* PreviousSuggestionCommand.swift */,\n\t\t\t\tC8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */,\n\t\t\t\tC8009C022941C576007AA7E8 /* RealtimeSuggestionCommand.swift */,\n\t\t\t\tC800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */,\n\t\t\t\tC8758E6F29F04BFF00D29C1C /* CustomCommand.swift */,\n\t\t\t\tC8DCEFFF29CE11D500FDDDD7 /* OpenChat.swift */,\n\t\t\t\tC8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */,\n\t\t\t\tC861A6A229E5503F005C41A3 /* PromptToCodeCommand.swift */,\n\t\t\t\tC81458972939EFDC00135263 /* Info.plist */,\n\t\t\t\tC81458982939EFDC00135263 /* EditorExtension.entitlements */,\n\t\t\t);\n\t\t\tpath = EditorExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8189B0D2938972F00C9DCDA = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC887BC832965D96000931567 /* DEVELOPMENT.md */,\n\t\t\t\tC8520308293D805800460097 /* README.md */,\n\t\t\t\tC82E38492A1F025F00D4EADF /* LICENSE */,\n\t\t\t\tC8F103292A7A365000D28F4F /* launchAgent.plist */,\n\t\t\t\tC8738B6D2BE4F3E800609E7F /* bridgeLaunchAgent.plist */,\n\t\t\t\tC81E867D296FE4420026E908 /* Version.xcconfig */,\n\t\t\t\tC81458AD293A009600135263 /* Config.xcconfig */,\n\t\t\t\tC81458AE293A009800135263 /* Config.debug.xcconfig */,\n\t\t\t\tC8CD828229B88006008D044D /* TestPlan.xctestplan */,\n\t\t\t\tC828B27D2B1F241500E7612A /* ExtensionPoint.appextensionpoint */,\n\t\t\t\tC8BE64922EB9B42E00EDB2D7 /* OverlayWindow */,\n\t\t\t\tC84FD9D72CC671C600BE5093 /* ChatPlugins */,\n\t\t\t\tC81D181E2A1B509B006C1B70 /* Tool */,\n\t\t\t\tC8189B282938979000C9DCDA /* Core */,\n\t\t\t\tC8189B182938972F00C9DCDA /* Copilot for Xcode */,\n\t\t\t\tC81458922939EFDC00135263 /* EditorExtension */,\n\t\t\t\tC8216B71298036EC00AD38C7 /* Helper */,\n\t\t\t\tC861E60F2994F6070056CB02 /* ExtensionService */,\n\t\t\t\tC8738B642BE4D4B900609E7F /* CommunicationBridge */,\n\t\t\t\tC8738B792BE5363800609E7F /* SandboxedClientTester */,\n\t\t\t\tC814588D2939EFDC00135263 /* Frameworks */,\n\t\t\t\tC8189B172938972F00C9DCDA /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8189B172938972F00C9DCDA /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8189B162938972F00C9DCDA /* Copilot for Xcode Dev.app */,\n\t\t\t\tC814588C2939EFDC00135263 /* Copilot.appex */,\n\t\t\t\tC8216B70298036EC00AD38C7 /* Helper */,\n\t\t\t\tC861E60E2994F6070056CB02 /* CopilotForXcodeExtensionService.app */,\n\t\t\t\tC8738B632BE4D4B900609E7F /* CommunicationBridge */,\n\t\t\t\tC8738B782BE5363800609E7F /* SandboxedClientTester.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8189B182938972F00C9DCDA /* Copilot for Xcode */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC87B03A3293B24AB00C77EAE /* Copilot-for-Xcode-Info.plist */,\n\t\t\t\tC8189B192938972F00C9DCDA /* App.swift */,\n\t\t\t\tC8189B1D2938973000C9DCDA /* Assets.xcassets */,\n\t\t\t\tC8189B222938973000C9DCDA /* Copilot_for_Xcode.entitlements */,\n\t\t\t\tC8189B1F2938973000C9DCDA /* Preview Content */,\n\t\t\t);\n\t\t\tpath = \"Copilot for Xcode\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8189B1F2938973000C9DCDA /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8189B202938973000C9DCDA /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8216B71298036EC00AD38C7 /* Helper */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8216B72298036EC00AD38C7 /* main.swift */,\n\t\t\t\tC8216B772980370100AD38C7 /* ReloadLaunchAgent.swift */,\n\t\t\t);\n\t\t\tpath = Helper;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC861E60F2994F6070056CB02 /* ExtensionService */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC81291D92994FE7900196E12 /* Info.plist */,\n\t\t\t\tC861E61F2994F6390056CB02 /* ServiceDelegate.swift */,\n\t\t\t\tC861E6102994F6070056CB02 /* AppDelegate.swift */,\n\t\t\t\tC89E75C22A46FB32000DD64F /* AppDelegate+Menu.swift */,\n\t\t\t\tC8738B702BE4F8B700609E7F /* XPCController.swift */,\n\t\t\t\tC81291D52994FE6900196E12 /* Main.storyboard */,\n\t\t\t\tC861E6142994F6080056CB02 /* Assets.xcassets */,\n\t\t\t\tC861E6192994F6080056CB02 /* ExtensionService.entitlements */,\n\t\t\t);\n\t\t\tpath = ExtensionService;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8738B642BE4D4B900609E7F /* CommunicationBridge */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8738B652BE4D4B900609E7F /* main.swift */,\n\t\t\t\tC8738B6A2BE4D56F00609E7F /* ServiceDelegate.swift */,\n\t\t\t);\n\t\t\tpath = CommunicationBridge;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8738B792BE5363800609E7F /* SandboxedClientTester */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8738B892BE5379E00609E7F /* Info.plist */,\n\t\t\t\tC8738B7A2BE5363800609E7F /* SandboxedClientTesterApp.swift */,\n\t\t\t\tC8738B7C2BE5363800609E7F /* ContentView.swift */,\n\t\t\t\tC8738B7E2BE5363900609E7F /* Assets.xcassets */,\n\t\t\t\tC8738B832BE5363900609E7F /* SandboxedClientTester.entitlements */,\n\t\t\t\tC8738B802BE5363900609E7F /* Preview Content */,\n\t\t\t);\n\t\t\tpath = SandboxedClientTester;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8738B802BE5363900609E7F /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8738B812BE5363900609E7F /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC814588B2939EFDC00135263 /* EditorExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C814589C2939EFDC00135263 /* Build configuration list for PBXNativeTarget \"EditorExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC81458882939EFDC00135263 /* Sources */,\n\t\t\t\tC81458892939EFDC00135263 /* Frameworks */,\n\t\t\t\tC814588A2939EFDC00135263 /* Resources */,\n\t\t\t\tC87B03AE293B2CF300C77EAE /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EditorExtension;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC882175B294187EF00A22FD3 /* Client */,\n\t\t\t);\n\t\t\tproductName = EditorExtension;\n\t\t\tproductReference = C814588C2939EFDC00135263 /* Copilot.appex */;\n\t\t\tproductType = \"com.apple.product-type.xcode-extension\";\n\t\t};\n\t\tC8189B152938972F00C9DCDA /* Copilot for Xcode */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8189B252938973000C9DCDA /* Build configuration list for PBXNativeTarget \"Copilot for Xcode\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8189B122938972F00C9DCDA /* Sources */,\n\t\t\t\tC8189B132938972F00C9DCDA /* Frameworks */,\n\t\t\t\tC8189B142938972F00C9DCDA /* Resources */,\n\t\t\t\tC814589F2939EFDC00135263 /* Embed Foundation Extensions */,\n\t\t\t\tC8520306293CF0EF00460097 /* Embed XPCService */,\n\t\t\t\tC8C8B60829AFA32800034BEE /* Embed Service */,\n\t\t\t\tC8F1032A2A7A38D200D28F4F /* Copy Launch Agent */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC8738B8D2BE540F900609E7F /* PBXTargetDependency */,\n\t\t\t\tC81291B02994F92700196E12 /* PBXTargetDependency */,\n\t\t\t\tC8216B7F2980377E00AD38C7 /* PBXTargetDependency */,\n\t\t\t\tC814589A2939EFDC00135263 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Copilot for Xcode\";\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC86612F72A06AF74009197D9 /* HostApp */,\n\t\t\t);\n\t\t\tproductName = \"Copilot for Xcode\";\n\t\t\tproductReference = C8189B162938972F00C9DCDA /* Copilot for Xcode Dev.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC8216B6F298036EC00AD38C7 /* Helper */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8216B74298036EC00AD38C7 /* Build configuration list for PBXNativeTarget \"Helper\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8216B6C298036EC00AD38C7 /* Sources */,\n\t\t\t\tC8216B6D298036EC00AD38C7 /* Frameworks */,\n\t\t\t\tC8216B6E298036EC00AD38C7 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Helper;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC8216B7C2980374300AD38C7 /* ArgumentParser */,\n\t\t\t);\n\t\t\tproductName = Helper;\n\t\t\tproductReference = C8216B70298036EC00AD38C7 /* Helper */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tC861E60D2994F6070056CB02 /* ExtensionService */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C861E61A2994F6080056CB02 /* Build configuration list for PBXNativeTarget \"ExtensionService\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC861E60A2994F6070056CB02 /* Sources */,\n\t\t\t\tC861E60B2994F6070056CB02 /* Frameworks */,\n\t\t\t\tC861E60C2994F6070056CB02 /* Resources */,\n\t\t\t\tC828B27E2B1F7B3C00E7612A /* Copy Extension Point */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ExtensionService;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC861E61D2994F6150056CB02 /* Service */,\n\t\t\t);\n\t\t\tproductName = ExtensionService;\n\t\t\tproductReference = C861E60E2994F6070056CB02 /* CopilotForXcodeExtensionService.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC8738B622BE4D4B900609E7F /* CommunicationBridge */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8738B672BE4D4B900609E7F /* Build configuration list for PBXNativeTarget \"CommunicationBridge\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8738B5F2BE4D4B900609E7F /* Sources */,\n\t\t\t\tC8738B602BE4D4B900609E7F /* Frameworks */,\n\t\t\t\tC8738B612BE4D4B900609E7F /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = CommunicationBridge;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC8738B6E2BE4F7A600609E7F /* XPCShared */,\n\t\t\t);\n\t\t\tproductName = CommunicationBridge;\n\t\t\tproductReference = C8738B632BE4D4B900609E7F /* CommunicationBridge */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tC8738B772BE5363800609E7F /* SandboxedClientTester */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8738B842BE5363900609E7F /* Build configuration list for PBXNativeTarget \"SandboxedClientTester\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8738B742BE5363800609E7F /* Sources */,\n\t\t\t\tC8738B752BE5363800609E7F /* Frameworks */,\n\t\t\t\tC8738B762BE5363800609E7F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SandboxedClientTester;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tC8738B872BE5365000609E7F /* Client */,\n\t\t\t);\n\t\t\tproductName = SandboxedClientTester;\n\t\t\tproductReference = C8738B782BE5363800609E7F /* SandboxedClientTester.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC8189B0E2938972F00C9DCDA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1520;\n\t\t\t\tLastUpgradeCheck = 1410;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC814588B2939EFDC00135263 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.1;\n\t\t\t\t\t};\n\t\t\t\t\tC8189B152938972F00C9DCDA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.1;\n\t\t\t\t\t};\n\t\t\t\t\tC8216B6F298036EC00AD38C7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.1;\n\t\t\t\t\t};\n\t\t\t\t\tC861E60D2994F6070056CB02 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.2;\n\t\t\t\t\t};\n\t\t\t\t\tC8738B622BE4D4B900609E7F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 15.2;\n\t\t\t\t\t};\n\t\t\t\t\tC8738B772BE5363800609E7F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 15.2;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C8189B112938972F00C9DCDA /* Build configuration list for PBXProject \"Copilot for Xcode\" */;\n\t\t\tcompatibilityVersion = \"Xcode 14.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = C8189B0D2938972F00C9DCDA;\n\t\t\tpackageReferences = (\n\t\t\t\tC8216B792980373800AD38C7 /* XCRemoteSwiftPackageReference \"swift-argument-parser\" */,\n\t\t\t\tC80C91742A588DD800B5EADA /* XCRemoteSwiftPackageReference \"usearch\" */,\n\t\t\t);\n\t\t\tproductRefGroup = C8189B172938972F00C9DCDA /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC8189B152938972F00C9DCDA /* Copilot for Xcode */,\n\t\t\t\tC814588B2939EFDC00135263 /* EditorExtension */,\n\t\t\t\tC8216B6F298036EC00AD38C7 /* Helper */,\n\t\t\t\tC861E60D2994F6070056CB02 /* ExtensionService */,\n\t\t\t\tC8738B622BE4D4B900609E7F /* CommunicationBridge */,\n\t\t\t\tC8738B772BE5363800609E7F /* SandboxedClientTester */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC814588A2939EFDC00135263 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8189B142938972F00C9DCDA /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8189B212938973000C9DCDA /* Preview Assets.xcassets in Resources */,\n\t\t\t\tC8189B1E2938973000C9DCDA /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC861E60C2994F6070056CB02 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC861E6152994F6080056CB02 /* Assets.xcassets in Resources */,\n\t\t\t\tC81291D72994FE6900196E12 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B762BE5363800609E7F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8738B822BE5363900609E7F /* Preview Assets.xcassets in Resources */,\n\t\t\t\tC8738B7F2BE5363900609E7F /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC81458882939EFDC00135263 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8DCF00029CE11D500FDDDD7 /* OpenChat.swift in Sources */,\n\t\t\t\tC81458942939EFDC00135263 /* SourceEditorExtension.swift in Sources */,\n\t\t\t\tC8DD9CB12BC673F80036641C /* CloseIdleTabsCommand.swift in Sources */,\n\t\t\t\tC8758E7029F04BFF00D29C1C /* CustomCommand.swift in Sources */,\n\t\t\t\tC8758E7229F04CF100D29C1C /* SeparatorCommand.swift in Sources */,\n\t\t\t\tC861A6A329E5503F005C41A3 /* PromptToCodeCommand.swift in Sources */,\n\t\t\t\tC8520301293C4D9000460097 /* Helpers.swift in Sources */,\n\t\t\t\tC8009BFF2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift in Sources */,\n\t\t\t\tC80FFB962A95F58200704A25 /* AcceptPromptToCodeCommand.swift in Sources */,\n\t\t\t\tC87B03A5293B261200C77EAE /* AcceptSuggestionCommand.swift in Sources */,\n\t\t\t\tC87B03A9293B262600C77EAE /* NextSuggestionCommand.swift in Sources */,\n\t\t\t\tC87B03AB293B262E00C77EAE /* PreviousSuggestionCommand.swift in Sources */,\n\t\t\t\tC87B03A7293B261900C77EAE /* RejectSuggestionCommand.swift in Sources */,\n\t\t\t\tC8009C032941C576007AA7E8 /* RealtimeSuggestionCommand.swift in Sources */,\n\t\t\t\tC800DBB1294C624D00B04CAC /* PrefetchSuggestionsCommand.swift in Sources */,\n\t\t\t\tC81458962939EFDC00135263 /* GetSuggestionsCommand.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8189B122938972F00C9DCDA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8189B1A2938972F00C9DCDA /* App.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8216B6C298036EC00AD38C7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8216B73298036EC00AD38C7 /* main.swift in Sources */,\n\t\t\t\tC8216B782980370100AD38C7 /* ReloadLaunchAgent.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC861E60A2994F6070056CB02 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC89E75C32A46FB32000DD64F /* AppDelegate+Menu.swift in Sources */,\n\t\t\t\tC8738B712BE4F8B700609E7F /* XPCController.swift in Sources */,\n\t\t\t\tC861E6202994F63A0056CB02 /* ServiceDelegate.swift in Sources */,\n\t\t\t\tC861E6112994F6070056CB02 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B5F2BE4D4B900609E7F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8738B6B2BE4D56F00609E7F /* ServiceDelegate.swift in Sources */,\n\t\t\t\tC8738B662BE4D4B900609E7F /* main.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8738B742BE5363800609E7F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8738B7D2BE5363800609E7F /* ContentView.swift in Sources */,\n\t\t\t\tC8738B7B2BE5363800609E7F /* SandboxedClientTesterApp.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tC81291B02994F92700196E12 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C861E60D2994F6070056CB02 /* ExtensionService */;\n\t\t\ttargetProxy = C81291AF2994F92700196E12 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC814589A2939EFDC00135263 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C814588B2939EFDC00135263 /* EditorExtension */;\n\t\t\ttargetProxy = C81458992939EFDC00135263 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC8216B7F2980377E00AD38C7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C8216B6F298036EC00AD38C7 /* Helper */;\n\t\t\ttargetProxy = C8216B7E2980377E00AD38C7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC8738B8D2BE540F900609E7F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C8738B622BE4D4B900609E7F /* CommunicationBridge */;\n\t\t\ttargetProxy = C8738B8C2BE540F900609E7F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\tC814589D2939EFDC00135263 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = EditorExtension/EditorExtension.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = EditorExtension/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = \"$(EXTENSION_BUNDLE_NAME)\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@executable_path/../../../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).EditorExtension\";\n\t\t\t\tPRODUCT_NAME = Copilot;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC814589E2939EFDC00135263 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = EditorExtension/EditorExtension.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tINFOPLIST_FILE = EditorExtension/Info.plist;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = \"$(EXTENSION_BUNDLE_NAME)\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@executable_path/../../../../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).EditorExtension\";\n\t\t\t\tPRODUCT_NAME = Copilot;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8189B232938973000C9DCDA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C81458AE293A009800135263 /* Config.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8189B242938973000C9DCDA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C81458AD293A009600135263 /* Config.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8189B262938973000C9DCDA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Copilot for Xcode/Copilot_for_Xcode.entitlements\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"Copilot for Xcode/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = \"Copilot-for-Xcode-Info.plist\";\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = \"\";\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE)\";\n\t\t\t\tPRODUCT_MODULE_NAME = Copilot_for_Xcode;\n\t\t\t\tPRODUCT_NAME = \"$(HOST_APP_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8189B272938973000C9DCDA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"Copilot for Xcode/Copilot_for_Xcode.entitlements\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"Copilot for Xcode/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = \"Copilot-for-Xcode-Info.plist\";\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = \"\";\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE)\";\n\t\t\t\tPRODUCT_NAME = \"$(HOST_APP_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8216B75298036EC00AD38C7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8216B76298036EC00AD38C7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC861E61B2994F6080056CB02 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = ExtensionService/ExtensionService.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = ExtensionService/Info.plist;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tINFOPLIST_KEY_NSMainStoryboardFile = Main;\n\t\t\t\tINFOPLIST_KEY_NSPrincipalClass = NSApplication;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).ExtensionService\";\n\t\t\t\tPRODUCT_NAME = \"$(EXTENSION_SERVICE_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC861E61C2994F6080056CB02 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = ExtensionService/ExtensionService.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(APP_BUILD)\";\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = ExtensionService/Info.plist;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"public.app-category.developer-tools\";\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tINFOPLIST_KEY_NSMainStoryboardFile = Main;\n\t\t\t\tINFOPLIST_KEY_NSPrincipalClass = NSApplication;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tMARKETING_VERSION = \"$(APP_VERSION)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).ExtensionService\";\n\t\t\t\tPRODUCT_NAME = \"$(EXTENSION_SERVICE_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8738B682BE4D4B900609E7F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).CommunicationBridge\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"DEBUG $(inherited)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8738B692BE4D4B900609E7F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 13.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"$(BUNDLE_IDENTIFIER_BASE).CommunicationBridge\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8738B852BE5363900609E7F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = SandboxedClientTester/SandboxedClientTester.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"SandboxedClientTester/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = SandboxedClientTester/Info.plist;\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 14.2;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.intii.CopilotForXcode.SandboxedClientTester;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"DEBUG $(inherited)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8738B862BE5363900609E7F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = SandboxedClientTester/SandboxedClientTester.entitlements;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"SandboxedClientTester/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = 5YKZ4Y3DAW;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = SandboxedClientTester/Info.plist;\n\t\t\t\tINFOPLIST_KEY_NSHumanReadableCopyright = \"\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 14.2;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.intii.CopilotForXcode.SandboxedClientTester;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC814589C2939EFDC00135263 /* Build configuration list for PBXNativeTarget \"EditorExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC814589D2939EFDC00135263 /* Debug */,\n\t\t\t\tC814589E2939EFDC00135263 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8189B112938972F00C9DCDA /* Build configuration list for PBXProject \"Copilot for Xcode\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8189B232938973000C9DCDA /* Debug */,\n\t\t\t\tC8189B242938973000C9DCDA /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8189B252938973000C9DCDA /* Build configuration list for PBXNativeTarget \"Copilot for Xcode\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8189B262938973000C9DCDA /* Debug */,\n\t\t\t\tC8189B272938973000C9DCDA /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8216B74298036EC00AD38C7 /* Build configuration list for PBXNativeTarget \"Helper\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8216B75298036EC00AD38C7 /* Debug */,\n\t\t\t\tC8216B76298036EC00AD38C7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC861E61A2994F6080056CB02 /* Build configuration list for PBXNativeTarget \"ExtensionService\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC861E61B2994F6080056CB02 /* Debug */,\n\t\t\t\tC861E61C2994F6080056CB02 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8738B672BE4D4B900609E7F /* Build configuration list for PBXNativeTarget \"CommunicationBridge\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8738B682BE4D4B900609E7F /* Debug */,\n\t\t\t\tC8738B692BE4D4B900609E7F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8738B842BE5363900609E7F /* Build configuration list for PBXNativeTarget \"SandboxedClientTester\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8738B852BE5363900609E7F /* Debug */,\n\t\t\t\tC8738B862BE5363900609E7F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCRemoteSwiftPackageReference section */\n\t\tC80C91742A588DD800B5EADA /* XCRemoteSwiftPackageReference \"usearch\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/unum-cloud/usearch\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMajorVersion;\n\t\t\t\tminimumVersion = 0.19.1;\n\t\t\t};\n\t\t};\n\t\tC8216B792980373800AD38C7 /* XCRemoteSwiftPackageReference \"swift-argument-parser\" */ = {\n\t\t\tisa = XCRemoteSwiftPackageReference;\n\t\t\trepositoryURL = \"https://github.com/apple/swift-argument-parser.git\";\n\t\t\trequirement = {\n\t\t\t\tkind = upToNextMajorVersion;\n\t\t\t\tminimumVersion = 1.0.0;\n\t\t\t};\n\t\t};\n/* End XCRemoteSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\tC8216B7C2980374300AD38C7 /* ArgumentParser */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = C8216B792980373800AD38C7 /* XCRemoteSwiftPackageReference \"swift-argument-parser\" */;\n\t\t\tproductName = ArgumentParser;\n\t\t};\n\t\tC861E61D2994F6150056CB02 /* Service */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Service;\n\t\t};\n\t\tC86612F72A06AF74009197D9 /* HostApp */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = HostApp;\n\t\t};\n\t\tC8738B6E2BE4F7A600609E7F /* XPCShared */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = XPCShared;\n\t\t};\n\t\tC8738B872BE5365000609E7F /* Client */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Client;\n\t\t};\n\t\tC882175B294187EF00A22FD3 /* Client */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tproductName = Client;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = C8189B0E2938972F00C9DCDA /* Project object */;\n}\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"combine-schedulers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/combine-schedulers\",\n      \"state\" : {\n        \"revision\" : \"0625932976b3ae23949f6b816d13bd97f3b40b7c\",\n        \"version\" : \"0.10.0\"\n      }\n    },\n    {\n      \"identity\" : \"fseventswrapper\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Frizlab/FSEventsWrapper\",\n      \"state\" : {\n        \"revision\" : \"e0c59a2ce2775e5f6642da6d19207445f10112d0\",\n        \"version\" : \"1.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"glob\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Bouke/Glob\",\n      \"state\" : {\n        \"revision\" : \"deda6e163d2ff2a8d7e138e2c3326dbd71157faf\",\n        \"version\" : \"1.0.5\"\n      }\n    },\n    {\n      \"identity\" : \"highlightr\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/raspu/Highlightr\",\n      \"state\" : {\n        \"revision\" : \"93199b9e434f04bda956a613af8f571933f9f037\",\n        \"version\" : \"2.1.2\"\n      }\n    },\n    {\n      \"identity\" : \"jsonrpc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/JSONRPC\",\n      \"state\" : {\n        \"revision\" : \"5da978702aece6ba5c7879b0d253c180d61e4ef3\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"keychainaccess\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kishikawakatsumi/KeychainAccess\",\n      \"state\" : {\n        \"revision\" : \"84e546727d66f1adc5439debad16270d0fdd04e7\",\n        \"version\" : \"4.2.2\"\n      }\n    },\n    {\n      \"identity\" : \"languageclient\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageClient\",\n      \"state\" : {\n        \"revision\" : \"f0198ee0a102d266078f7d9c28f086f2989f988a\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"languageserverprotocol\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageServerProtocol\",\n      \"state\" : {\n        \"revision\" : \"6e97f943dc024307c5524a80bd33cdbd1cc621de\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"operationplus\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/OperationPlus\",\n      \"state\" : {\n        \"revision\" : \"1340f95dce3e93d742497d88db18f8676f4badf4\",\n        \"version\" : \"1.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"processenv\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/ProcessEnv\",\n      \"state\" : {\n        \"revision\" : \"29487b6581bb785c372c611c943541ef4309d051\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"sparkle\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/sparkle-project/Sparkle\",\n      \"state\" : {\n        \"revision\" : \"631846cc829f0f0cae327df9bafe5a32b7ddadce\",\n        \"version\" : \"2.4.0\"\n      }\n    },\n    {\n      \"identity\" : \"splash\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/JohnSundell/Splash\",\n      \"state\" : {\n        \"branch\" : \"master\",\n        \"revision\" : \"2e3f17c2d09689c8bf175c4a84ff7f2ad3353301\"\n      }\n    },\n    {\n      \"identity\" : \"swift-argument-parser\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-argument-parser.git\",\n      \"state\" : {\n        \"revision\" : \"fee6933f37fde9a5e12a1e4aeaa93fe60116ff2a\",\n        \"version\" : \"1.2.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-async-algorithms\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-async-algorithms\",\n      \"state\" : {\n        \"revision\" : \"9cfed92b026c524674ed869a4ff2dcfdeedf8a2a\",\n        \"version\" : \"0.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-case-paths\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-case-paths\",\n      \"state\" : {\n        \"revision\" : \"fc45e7b2cfece9dd80b5a45e6469ffe67fe67984\",\n        \"version\" : \"0.14.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-clocks\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-clocks\",\n      \"state\" : {\n        \"revision\" : \"f9acfa1a45f4483fe0f2c434a74e6f68f865d12d\",\n        \"version\" : \"0.3.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections.git\",\n      \"state\" : {\n        \"revision\" : \"937e904258d22af6e447a0b72c0bc67583ef64a2\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-composable-architecture\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-composable-architecture\",\n      \"state\" : {\n        \"revision\" : \"89f80fe2400d21a853abc9556a060a2fa50eb2cb\",\n        \"version\" : \"0.55.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-custom-dump\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-custom-dump\",\n      \"state\" : {\n        \"revision\" : \"3a35f7892e7cf6ba28a78cd46a703c0be4e0c6dc\",\n        \"version\" : \"0.11.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-dependencies\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-dependencies\",\n      \"state\" : {\n        \"revision\" : \"de1a984a71e51f6e488e98ce3652035563eb8acb\",\n        \"version\" : \"0.5.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-identified-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-identified-collections\",\n      \"state\" : {\n        \"revision\" : \"d01446a78fb768adc9a78cbb6df07767c8ccfc29\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-markdown-ui\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/gonzalezreal/swift-markdown-ui\",\n      \"state\" : {\n        \"revision\" : \"12b351a75201a8124c2f2e1f9fc6ef5cd812c0b9\",\n        \"version\" : \"2.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-parsing\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-parsing\",\n      \"state\" : {\n        \"revision\" : \"27c941bbd22a4bbc53005a15a0440443fd892f70\",\n        \"version\" : \"0.12.1\"\n      }\n    },\n    {\n      \"identity\" : \"swiftsoup\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/scinfu/SwiftSoup.git\",\n      \"state\" : {\n        \"revision\" : \"0e96a20ffd37a515c5c963952d4335c89bed50a6\",\n        \"version\" : \"2.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"swiftui-navigation\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swiftui-navigation\",\n      \"state\" : {\n        \"revision\" : \"2aa885e719087ee19df251c08a5980ad3e787f12\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"tiktoken\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Tiktoken\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"6a2ac324c6daec167ca95268d5a487e6de6a1cea\"\n      }\n    },\n    {\n      \"identity\" : \"usearch\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/unum-cloud/usearch\",\n      \"state\" : {\n        \"revision\" : \"f2ab884d50902c3ad63f07a3a20bc34008a17449\",\n        \"version\" : \"0.19.3\"\n      }\n    },\n    {\n      \"identity\" : \"xctest-dynamic-overlay\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/xctest-dynamic-overlay\",\n      \"state\" : {\n        \"revision\" : \"4af50b38daf0037cfbab15514a241224c3f62f98\",\n        \"version\" : \"0.8.5\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/CommunicationBridge.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1540\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8738B622BE4D4B900609E7F\"\n               BuildableName = \"CommunicationBridge\"\n               BlueprintName = \"CommunicationBridge\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      viewDebuggingEnabled = \"No\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8738B622BE4D4B900609E7F\"\n            BuildableName = \"CommunicationBridge\"\n            BlueprintName = \"CommunicationBridge\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8738B622BE4D4B900609E7F\"\n            BuildableName = \"CommunicationBridge\"\n            BlueprintName = \"CommunicationBridge\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/Copilot for Xcode Debug.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n               BuildableName = \"Copilot for Xcode.app\"\n               BlueprintName = \"Copilot for Xcode\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <TestPlans>\n         <TestPlanReference\n            reference = \"container:TestPlan.xctestplan\"\n            default = \"YES\">\n         </TestPlanReference>\n      </TestPlans>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"-_NS_4445425547 YES\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Debug\"\n      customArchiveName = \"Copilot for Xcode Debug\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/Copilot for Xcode.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n               BuildableName = \"Copilot for Xcode.app\"\n               BlueprintName = \"Copilot for Xcode\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <TestPlans>\n         <TestPlanReference\n            reference = \"container:TestPlan.xctestplan\"\n            default = \"YES\">\n         </TestPlanReference>\n      </TestPlans>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"-_NS_4445425547 YES\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/EditorExtension.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   wasCreatedForAppExtension = \"YES\"\n   version = \"2.0\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C814588B2939EFDC00135263\"\n               BuildableName = \"Copilot.appex\"\n               BlueprintName = \"EditorExtension\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n               BuildableName = \"Copilot for Xcode.app\"\n               BlueprintName = \"Copilot for Xcode\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      askForAppToLaunch = \"Yes\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\"\n      launchAutomaticallySubstyle = \"2\">\n      <RemoteRunnable\n         runnableDebuggingMode = \"0\"\n         BundleIdentifier = \"com.apple.dt.Xcode\"\n         RemotePath = \"/Applications/Xcode-14.1.0.app\">\n      </RemoteRunnable>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      askForAppToLaunch = \"Yes\"\n      launchAutomaticallySubstyle = \"2\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8189B152938972F00C9DCDA\"\n            BuildableName = \"Copilot for Xcode.app\"\n            BlueprintName = \"Copilot for Xcode\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/ExtensionService.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C861E60D2994F6070056CB02\"\n               BuildableName = \"CopilotForXcodeExtensionService.app\"\n               BlueprintName = \"ExtensionService\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Service\"\n               BuildableName = \"Service\"\n               BlueprintName = \"Service\"\n               ReferencedContainer = \"container:Core\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <TestPlans>\n         <TestPlanReference\n            reference = \"container:TestPlan.xctestplan\"\n            default = \"YES\">\n         </TestPlanReference>\n      </TestPlans>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C861E60D2994F6070056CB02\"\n            BuildableName = \"CopilotForXcodeExtensionService.app\"\n            BlueprintName = \"ExtensionService\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"-_NS_4445425547 YES\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C861E60D2994F6070056CB02\"\n            BuildableName = \"CopilotForXcodeExtensionService.app\"\n            BlueprintName = \"ExtensionService\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcodeproj/xcshareddata/xcschemes/SandboxedClientTester.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1540\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8738B772BE5363800609E7F\"\n               BuildableName = \"SandboxedClientTester.app\"\n               BlueprintName = \"SandboxedClientTester\"\n               ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8738B772BE5363800609E7F\"\n            BuildableName = \"SandboxedClientTester.app\"\n            BlueprintName = \"SandboxedClientTester\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8738B772BE5363800609E7F\"\n            BuildableName = \"SandboxedClientTester.app\"\n            BlueprintName = \"SandboxedClientTester\"\n            ReferencedContainer = \"container:Copilot for Xcode.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Copilot for Xcode.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Playground.playground\">\n   </FileRef>\n   <FileRef\n      location = \"group:Copilot for Xcode.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Copilot for Xcode.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Copilot for Xcode.xcworkspace/xcshareddata/swiftpm/Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"aexml\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tadija/AEXML.git\",\n      \"state\" : {\n        \"revision\" : \"db806756c989760b35108146381535aec231092b\",\n        \"version\" : \"4.7.0\"\n      }\n    },\n    {\n      \"identity\" : \"cgeventoverride\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/CGEventOverride\",\n      \"state\" : {\n        \"revision\" : \"571d36d63e68fac30e4a350600cd186697936f74\",\n        \"version\" : \"1.2.3\"\n      }\n    },\n    {\n      \"identity\" : \"codablewrappers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/GottaGetSwifty/CodableWrappers\",\n      \"state\" : {\n        \"revision\" : \"4eb46a4c656333e8514db8aad204445741de7d40\",\n        \"version\" : \"2.0.7\"\n      }\n    },\n    {\n      \"identity\" : \"combine-schedulers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/combine-schedulers\",\n      \"state\" : {\n        \"revision\" : \"5928286acce13def418ec36d05a001a9641086f2\",\n        \"version\" : \"1.0.3\"\n      }\n    },\n    {\n      \"identity\" : \"copilotforxcodekit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/CopilotForXcodeKit\",\n      \"state\" : {\n        \"branch\" : \"feature/custom-chat-tab\",\n        \"revision\" : \"63915ee1f8aba5375bc0f0166c8645fe81fe5b88\"\n      }\n    },\n    {\n      \"identity\" : \"fseventswrapper\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Frizlab/FSEventsWrapper\",\n      \"state\" : {\n        \"revision\" : \"e0c59a2ce2775e5f6642da6d19207445f10112d0\",\n        \"version\" : \"1.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"generative-ai-swift\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/generative-ai-swift\",\n      \"state\" : {\n        \"branch\" : \"support-setting-base-url\",\n        \"revision\" : \"12d7b30b566a64cc0dd628130bfb99a07368fea7\"\n      }\n    },\n    {\n      \"identity\" : \"glob\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Bouke/Glob\",\n      \"state\" : {\n        \"revision\" : \"deda6e163d2ff2a8d7e138e2c3326dbd71157faf\",\n        \"version\" : \"1.0.5\"\n      }\n    },\n    {\n      \"identity\" : \"highlightr\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Highlightr\",\n      \"state\" : {\n        \"branch\" : \"master\",\n        \"revision\" : \"81d8c8b3733939bf5d9e52cd6318f944cc033bd2\"\n      }\n    },\n    {\n      \"identity\" : \"indexstore-db\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/indexstore-db.git\",\n      \"state\" : {\n        \"branch\" : \"release/6.1\",\n        \"revision\" : \"54212fce1aecb199070808bdb265e7f17e396015\"\n      }\n    },\n    {\n      \"identity\" : \"jsonrpc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/JSONRPC\",\n      \"state\" : {\n        \"revision\" : \"5da978702aece6ba5c7879b0d253c180d61e4ef3\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"keyboardshortcuts\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/KeyboardShortcuts\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"65fb410b0c6d3ed96623b460bab31ffce5f48b4d\"\n      }\n    },\n    {\n      \"identity\" : \"languageclient\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageClient\",\n      \"state\" : {\n        \"revision\" : \"f0198ee0a102d266078f7d9c28f086f2989f988a\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"languageserverprotocol\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageServerProtocol\",\n      \"state\" : {\n        \"revision\" : \"6e97f943dc024307c5524a80bd33cdbd1cc621de\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"messagepacker\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/hirotakan/MessagePacker.git\",\n      \"state\" : {\n        \"revision\" : \"4d8346c6bc579347e4df0429493760691c5aeca2\",\n        \"version\" : \"0.4.7\"\n      }\n    },\n    {\n      \"identity\" : \"networkimage\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/gonzalezreal/NetworkImage\",\n      \"state\" : {\n        \"revision\" : \"2849f5323265386e200484b0d0f896e73c3411b9\",\n        \"version\" : \"6.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"operationplus\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/OperationPlus\",\n      \"state\" : {\n        \"revision\" : \"1340f95dce3e93d742497d88db18f8676f4badf4\",\n        \"version\" : \"1.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"pathkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/PathKit.git\",\n      \"state\" : {\n        \"revision\" : \"3bfd2737b700b9a36565a8c94f4ad2b050a5e574\",\n        \"version\" : \"1.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"processenv\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/ProcessEnv\",\n      \"state\" : {\n        \"revision\" : \"29487b6581bb785c372c611c943541ef4309d051\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"sourcekitten\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jpsim/SourceKitten\",\n      \"state\" : {\n        \"revision\" : \"eb6656ed26bdef967ad8d07c27e2eab34dc582f2\",\n        \"version\" : \"0.37.0\"\n      }\n    },\n    {\n      \"identity\" : \"sparkle\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/sparkle-project/Sparkle\",\n      \"state\" : {\n        \"revision\" : \"0ca3004e98712ea2b39dd881d28448630cce1c99\",\n        \"version\" : \"2.7.0\"\n      }\n    },\n    {\n      \"identity\" : \"spectre\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/kylef/Spectre.git\",\n      \"state\" : {\n        \"revision\" : \"26cc5e9ae0947092c7139ef7ba612e34646086c7\",\n        \"version\" : \"0.10.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-argument-parser\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-argument-parser.git\",\n      \"state\" : {\n        \"revision\" : \"fee6933f37fde9a5e12a1e4aeaa93fe60116ff2a\",\n        \"version\" : \"1.2.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-async-algorithms\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-async-algorithms\",\n      \"state\" : {\n        \"revision\" : \"042e1c4d9d19748c9c228f8d4ebc97bb1e339b0b\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-case-paths\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-case-paths\",\n      \"state\" : {\n        \"revision\" : \"41b89b8b68d8c56c622dbb7132258f1a3e638b25\",\n        \"version\" : \"1.7.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-clocks\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-clocks\",\n      \"state\" : {\n        \"revision\" : \"cc46202b53476d64e824e0b6612da09d84ffde8e\",\n        \"version\" : \"1.0.6\"\n      }\n    },\n    {\n      \"identity\" : \"swift-cmark\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/swiftlang/swift-cmark\",\n      \"state\" : {\n        \"revision\" : \"b022b08312decdc46585e0b3440d97f6f22ef703\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections\",\n      \"state\" : {\n        \"revision\" : \"671108c96644956dddcd89dd59c203dcdb36cec7\",\n        \"version\" : \"1.1.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-composable-architecture\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-composable-architecture\",\n      \"state\" : {\n        \"revision\" : \"69247baf7be2fd6f5820192caef0082d01849cd0\",\n        \"version\" : \"1.16.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-concurrency-extras\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-concurrency-extras\",\n      \"state\" : {\n        \"revision\" : \"82a4ae7170d98d8538ec77238b7eb8e7199ef2e8\",\n        \"version\" : \"1.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-custom-dump\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-custom-dump\",\n      \"state\" : {\n        \"revision\" : \"82645ec760917961cfa08c9c0c7104a57a0fa4b1\",\n        \"version\" : \"1.3.3\"\n      }\n    },\n    {\n      \"identity\" : \"swift-dependencies\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-dependencies\",\n      \"state\" : {\n        \"revision\" : \"4c90d6b2b9bf0911af87b103bb40f41771891596\",\n        \"version\" : \"1.9.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-identified-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-identified-collections\",\n      \"state\" : {\n        \"revision\" : \"322d9ffeeba85c9f7c4984b39422ec7cc3c56597\",\n        \"version\" : \"1.1.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-markdown-ui\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/gonzalezreal/swift-markdown-ui\",\n      \"state\" : {\n        \"revision\" : \"5f613358148239d0292c0cef674a3c2314737f9e\",\n        \"version\" : \"2.4.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-navigation\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-navigation\",\n      \"state\" : {\n        \"revision\" : \"db6bc9dbfed001f21e6728fd36413d9342c235b4\",\n        \"version\" : \"2.3.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-parsing\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-parsing\",\n      \"state\" : {\n        \"revision\" : \"3432cb81164dd3d69a75d0d63205be5fbae2c34b\",\n        \"version\" : \"0.14.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-perception\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-perception\",\n      \"state\" : {\n        \"revision\" : \"d924c62a70fca5f43872f286dbd7cef0957f1c01\",\n        \"version\" : \"1.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-syntax\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-syntax.git\",\n      \"state\" : {\n        \"revision\" : \"0687f71944021d616d34d922343dcef086855920\",\n        \"version\" : \"600.0.1\"\n      }\n    },\n    {\n      \"identity\" : \"swiftsoup\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/scinfu/SwiftSoup.git\",\n      \"state\" : {\n        \"revision\" : \"8b6cf29eead8841a1fa7822481cb3af4ddaadba6\",\n        \"version\" : \"2.6.1\"\n      }\n    },\n    {\n      \"identity\" : \"swiftterm\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/migueldeicaza/SwiftTerm\",\n      \"state\" : {\n        \"revision\" : \"e2b431dbf73f775fb4807a33e4572ffd3dc6933a\",\n        \"version\" : \"1.2.5\"\n      }\n    },\n    {\n      \"identity\" : \"swifttreesitter\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/SwiftTreeSitter.git\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"fd499bfafcccfae12a1a579dc922d8418025a35d\"\n      }\n    },\n    {\n      \"identity\" : \"swiftui-introspect\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/siteline/swiftui-introspect\",\n      \"state\" : {\n        \"revision\" : \"807f73ce09a9b9723f12385e592b4e0aaebd3336\",\n        \"version\" : \"1.3.0\"\n      }\n    },\n    {\n      \"identity\" : \"swxmlhash\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/drmohundro/SWXMLHash.git\",\n      \"state\" : {\n        \"revision\" : \"a853604c9e9a83ad9954c7e3d2a565273982471f\",\n        \"version\" : \"7.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"tiktoken\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Tiktoken\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"6a2ac324c6daec167ca95268d5a487e6de6a1cea\"\n      }\n    },\n    {\n      \"identity\" : \"tree-sitter-objc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/lukepistrol/tree-sitter-objc\",\n      \"state\" : {\n        \"branch\" : \"feature/spm\",\n        \"revision\" : \"1b54ef0b5efddddf393b45e173788499cc572048\"\n      }\n    },\n    {\n      \"identity\" : \"usearch\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/unum-cloud/usearch\",\n      \"state\" : {\n        \"revision\" : \"f2ab884d50902c3ad63f07a3a20bc34008a17449\",\n        \"version\" : \"0.19.3\"\n      }\n    },\n    {\n      \"identity\" : \"xcodeproj\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/tuist/XcodeProj.git\",\n      \"state\" : {\n        \"revision\" : \"b1caa062d4aaab3e3d2bed5fe0ac5f8ce9bf84f4\",\n        \"version\" : \"8.27.7\"\n      }\n    },\n    {\n      \"identity\" : \"xctest-dynamic-overlay\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/xctest-dynamic-overlay\",\n      \"state\" : {\n        \"revision\" : \"39de59b2d47f7ef3ca88a039dff3084688fe27f4\",\n        \"version\" : \"1.5.2\"\n      }\n    },\n    {\n      \"identity\" : \"yams\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/jpsim/Yams.git\",\n      \"state\" : {\n        \"revision\" : \"b4b8042411dc7bbb696300a34a4bf3ba1b7ad19b\",\n        \"version\" : \"5.3.1\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Copilot-for-Xcode-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>APPLICATION_SUPPORT_FOLDER</key>\n\t<string>$(APPLICATION_SUPPORT_FOLDER)</string>\n\t<key>APP_ID_PREFIX</key>\n\t<string>$(AppIdentifierPrefix)</string>\n\t<key>BUNDLE_IDENTIFIER_BASE</key>\n\t<string>$(BUNDLE_IDENTIFIER_BASE)</string>\n\t<key>EXTENSION_BUNDLE_NAME</key>\n\t<string>$(EXTENSION_BUNDLE_NAME)</string>\n\t<key>HOST_APP_NAME</key>\n\t<string>$(HOST_APP_NAME)</string>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>SUEnableJavaScript</key>\n\t<string>YES</string>\n\t<key>SUFeedURL</key>\n\t<string>$(SPARKLE_FEED_URL)</string>\n\t<key>SUPublicEDKey</key>\n\t<string>$(SPARKLE_PUBLIC_KEY)</string>\n\t<key>TEAM_ID_PREFIX</key>\n\t<string>$(TeamIdentifierPrefix)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Core/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "Core/.swiftpm/xcode/xcshareddata/xcschemes/Client.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1540\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Client\"\n               BuildableName = \"Client\"\n               BlueprintName = \"Client\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Client\"\n            BuildableName = \"Client\"\n            BlueprintName = \"Client\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Core/.swiftpm/xcode/xcshareddata/xcschemes/HostApp.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1540\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"HostApp\"\n               BuildableName = \"HostApp\"\n               BlueprintName = \"HostApp\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"HostApp\"\n            BuildableName = \"HostApp\"\n            BlueprintName = \"HostApp\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Core/.swiftpm/xcode/xcshareddata/xcschemes/Service.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Service\"\n               BuildableName = \"Service\"\n               BlueprintName = \"Service\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ServiceTests\"\n               BuildableName = \"ServiceTests\"\n               BlueprintName = \"ServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Service\"\n            BuildableName = \"Service\"\n            BlueprintName = \"Service\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Core/.swiftpm/xcode/xcshareddata/xcschemes/SuggestionInjector.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1520\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SuggestionInjector\"\n               BuildableName = \"SuggestionInjector\"\n               BlueprintName = \"SuggestionInjector\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SuggestionInjectorTests\"\n               BuildableName = \"SuggestionInjectorTests\"\n               BlueprintName = \"SuggestionInjectorTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SuggestionInjector\"\n            BuildableName = \"SuggestionInjector\"\n            BlueprintName = \"SuggestionInjector\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Core/Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"codablewrappers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/GottaGetSwifty/CodableWrappers\",\n      \"state\" : {\n        \"revision\" : \"4eb46a4c656333e8514db8aad204445741de7d40\",\n        \"version\" : \"2.0.7\"\n      }\n    },\n    {\n      \"identity\" : \"combine-schedulers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/combine-schedulers\",\n      \"state\" : {\n        \"revision\" : \"ec62f32d21584214a4b27c8cee2b2ad70ab2c38a\",\n        \"version\" : \"0.11.0\"\n      }\n    },\n    {\n      \"identity\" : \"fseventswrapper\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Frizlab/FSEventsWrapper\",\n      \"state\" : {\n        \"revision\" : \"e0c59a2ce2775e5f6642da6d19207445f10112d0\",\n        \"version\" : \"1.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"glob\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Bouke/Glob\",\n      \"state\" : {\n        \"revision\" : \"deda6e163d2ff2a8d7e138e2c3326dbd71157faf\",\n        \"version\" : \"1.0.5\"\n      }\n    },\n    {\n      \"identity\" : \"highlightr\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Highlightr\",\n      \"state\" : {\n        \"branch\" : \"bump-highlight-js-version\",\n        \"revision\" : \"4ffbb1b0b721378263297cafea6f2838044eb1eb\"\n      }\n    },\n    {\n      \"identity\" : \"jsonrpc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/JSONRPC\",\n      \"state\" : {\n        \"revision\" : \"5da978702aece6ba5c7879b0d253c180d61e4ef3\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"languageclient\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageClient\",\n      \"state\" : {\n        \"revision\" : \"f0198ee0a102d266078f7d9c28f086f2989f988a\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"languageserverprotocol\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageServerProtocol\",\n      \"state\" : {\n        \"revision\" : \"6e97f943dc024307c5524a80bd33cdbd1cc621de\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"operationplus\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/OperationPlus\",\n      \"state\" : {\n        \"revision\" : \"1340f95dce3e93d742497d88db18f8676f4badf4\",\n        \"version\" : \"1.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"processenv\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/ProcessEnv\",\n      \"state\" : {\n        \"revision\" : \"29487b6581bb785c372c611c943541ef4309d051\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"sparkle\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/sparkle-project/Sparkle\",\n      \"state\" : {\n        \"revision\" : \"631846cc829f0f0cae327df9bafe5a32b7ddadce\",\n        \"version\" : \"2.4.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-async-algorithms\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-async-algorithms\",\n      \"state\" : {\n        \"revision\" : \"9cfed92b026c524674ed869a4ff2dcfdeedf8a2a\",\n        \"version\" : \"0.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-case-paths\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-case-paths\",\n      \"state\" : {\n        \"revision\" : \"fc45e7b2cfece9dd80b5a45e6469ffe67fe67984\",\n        \"version\" : \"0.14.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-clocks\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-clocks\",\n      \"state\" : {\n        \"revision\" : \"0fbaebfc013715dab44d715a4d350ba37f297e4d\",\n        \"version\" : \"0.4.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections.git\",\n      \"state\" : {\n        \"revision\" : \"937e904258d22af6e447a0b72c0bc67583ef64a2\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-composable-architecture\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-composable-architecture\",\n      \"state\" : {\n        \"revision\" : \"9f4202ab5b8422aa90f0ed983bf7652c3af7abf0\",\n        \"version\" : \"0.59.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-concurrency-extras\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-concurrency-extras\",\n      \"state\" : {\n        \"revision\" : \"479750bd98fac2e813fffcf2af0728b5b0085795\",\n        \"version\" : \"0.1.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-custom-dump\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-custom-dump\",\n      \"state\" : {\n        \"revision\" : \"4a87bb75be70c983a9548597e8783236feb3401e\",\n        \"version\" : \"0.11.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-dependencies\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-dependencies\",\n      \"state\" : {\n        \"revision\" : \"16fd42ae04c6e7f74a6a86395d04722c641cccee\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-identified-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-identified-collections\",\n      \"state\" : {\n        \"revision\" : \"d01446a78fb768adc9a78cbb6df07767c8ccfc29\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-markdown-ui\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/gonzalezreal/swift-markdown-ui\",\n      \"state\" : {\n        \"revision\" : \"12b351a75201a8124c2f2e1f9fc6ef5cd812c0b9\",\n        \"version\" : \"2.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-parsing\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-parsing\",\n      \"state\" : {\n        \"revision\" : \"27c941bbd22a4bbc53005a15a0440443fd892f70\",\n        \"version\" : \"0.12.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-syntax\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-syntax.git\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"e149b01cfd3e96240e102729697e2095c19157ef\"\n      }\n    },\n    {\n      \"identity\" : \"swiftsoup\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/scinfu/SwiftSoup.git\",\n      \"state\" : {\n        \"revision\" : \"8b6cf29eead8841a1fa7822481cb3af4ddaadba6\",\n        \"version\" : \"2.6.1\"\n      }\n    },\n    {\n      \"identity\" : \"swifttreesitter\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/SwiftTreeSitter\",\n      \"state\" : {\n        \"revision\" : \"a9b1335d5151b62b11f07599bd07d07dc5965de3\",\n        \"version\" : \"0.7.2\"\n      }\n    },\n    {\n      \"identity\" : \"swiftui-navigation\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swiftui-navigation\",\n      \"state\" : {\n        \"revision\" : \"2aa885e719087ee19df251c08a5980ad3e787f12\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"tiktoken\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Tiktoken\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"6a2ac324c6daec167ca95268d5a487e6de6a1cea\"\n      }\n    },\n    {\n      \"identity\" : \"tree-sitter-objc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/lukepistrol/tree-sitter-objc\",\n      \"state\" : {\n        \"branch\" : \"feature/spm\",\n        \"revision\" : \"1b54ef0b5efddddf393b45e173788499cc572048\"\n      }\n    },\n    {\n      \"identity\" : \"tree-sitter-swift\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/alex-pinkus/tree-sitter-swift\",\n      \"state\" : {\n        \"branch\" : \"with-generated-files\",\n        \"revision\" : \"eda05af7ac41adb4eb19c346883c0fa32fe3bdd8\"\n      }\n    },\n    {\n      \"identity\" : \"usearch\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/unum-cloud/usearch\",\n      \"state\" : {\n        \"revision\" : \"33c53288b44ccb55de77776820676132a6e4c42a\",\n        \"version\" : \"0.23.0\"\n      }\n    },\n    {\n      \"identity\" : \"xctest-dynamic-overlay\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/xctest-dynamic-overlay\",\n      \"state\" : {\n        \"revision\" : \"50843cbb8551db836adec2290bb4bc6bac5c1865\",\n        \"version\" : \"0.9.0\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Core/Package.swift",
    "content": "// swift-tools-version: 5.7\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport Foundation\nimport PackageDescription\n\n// MARK: - Package\n\nlet package = Package(\n    name: \"Core\",\n    platforms: [.macOS(.v13)],\n    products: [\n        .library(\n            name: \"Service\",\n            targets: [\n                \"Service\",\n                \"FileChangeChecker\",\n                \"LaunchAgentManager\",\n                \"UpdateChecker\",\n            ]\n        ),\n        .library(\n            name: \"Client\",\n            targets: [\n                \"Client\",\n            ]\n        ),\n        .library(\n            name: \"HostApp\",\n            targets: [\n                \"HostApp\",\n                \"Client\",\n                \"LaunchAgentManager\",\n                \"UpdateChecker\",\n            ]\n        ),\n    ],\n    dependencies: [\n        .package(path: \"../Tool\"),\n        .package(path: \"../ChatPlugins\"),\n        .package(path: \"../OverlayWindow\"),\n        .package(url: \"https://github.com/apple/swift-async-algorithms\", from: \"1.0.0\"),\n        .package(url: \"https://github.com/gonzalezreal/swift-markdown-ui\", from: \"2.4.1\"),\n        .package(url: \"https://github.com/sparkle-project/Sparkle\", from: \"2.6.4\"),\n        .package(url: \"https://github.com/pointfreeco/swift-parsing\", from: \"0.12.1\"),\n        .package(url: \"https://github.com/pointfreeco/swift-dependencies\", from: \"1.0.0\"),\n        .package(\n            url: \"https://github.com/pointfreeco/swift-composable-architecture\",\n            exact: \"1.16.1\"\n        ),\n        // quick hack to support custom UserDefaults\n        // https://github.com/sindresorhus/KeyboardShortcuts\n        .package(url: \"https://github.com/intitni/KeyboardShortcuts\", branch: \"main\"),\n        .package(url: \"https://github.com/intitni/CGEventOverride\", from: \"1.2.1\"),\n        .package(url: \"https://github.com/intitni/Highlightr\", branch: \"master\"),\n    ].pro,\n    targets: [\n        // MARK: - Main\n\n        .target(\n            name: \"Client\",\n            dependencies: [\n                .product(name: \"XPCShared\", package: \"Tool\"),\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n            ].proCore([\n                \"LicenseManagement\",\n            ])\n        ),\n        .target(\n            name: \"Service\",\n            dependencies: [\n                \"SuggestionWidget\",\n                \"SuggestionService\",\n                \"ChatService\",\n                \"PromptToCodeService\",\n                \"ServiceUpdateMigration\",\n                \"ChatGPTChatTab\",\n                \"PlusFeatureFlag\",\n                \"KeyBindingManager\",\n                \"XcodeThemeController\",\n                .product(name: \"XPCShared\", package: \"Tool\"),\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n                .product(name: \"Workspace\", package: \"Tool\"),\n                .product(name: \"WorkspaceSuggestionService\", package: \"Tool\"),\n                .product(name: \"UserDefaultsObserver\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"PromptToCode\", package: \"Tool\"),\n                .product(name: \"ChatTab\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"CommandHandler\", package: \"Tool\"),\n                .product(name: \"OverlayWindow\", package: \"OverlayWindow\"),\n                .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n                .product(name: \"Dependencies\", package: \"swift-dependencies\"),\n                .product(name: \"KeyboardShortcuts\", package: \"KeyboardShortcuts\"),\n                .product(name: \"CustomCommandTemplateProcessor\", package: \"Tool\"),\n            ].pro([\n                \"ProService\",\n            ])\n        ),\n        .testTarget(\n            name: \"ServiceTests\",\n            dependencies: [\n                \"Service\",\n                \"Client\",\n                .product(name: \"XPCShared\", package: \"Tool\"),\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n            ]\n        ),\n\n        // MARK: - Host App\n\n        .target(\n            name: \"HostApp\",\n            dependencies: [\n                \"Client\",\n                \"LaunchAgentManager\",\n                \"PlusFeatureFlag\",\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n                .product(name: \"Toast\", package: \"Tool\"),\n                .product(name: \"SharedUIComponents\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"WebSearchService\", package: \"Tool\"),\n                .product(name: \"MarkdownUI\", package: \"swift-markdown-ui\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n                .product(name: \"KeyboardShortcuts\", package: \"KeyboardShortcuts\"),\n            ].pro([\n                \"ProHostApp\",\n            ])\n        ),\n\n        // MARK: - Suggestion Service\n\n        .target(\n            name: \"SuggestionService\",\n            dependencies: [\n                .product(name: \"UserDefaultsObserver\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n            ].pro([\n                \"ProExtension\",\n            ])\n        ),\n\n        // MARK: - Prompt To Code\n\n        .target(\n            name: \"PromptToCodeService\",\n            dependencies: [\n                .product(name: \"PromptToCode\", package: \"Tool\"),\n                .product(name: \"FocusedCodeFinder\", package: \"Tool\"),\n                .product(name: \"SuggestionBasic\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ].pro([\n                \"ProService\",\n            ])\n        ),\n        .testTarget(name: \"PromptToCodeServiceTests\", dependencies: [\"PromptToCodeService\"]),\n\n        // MARK: - Chat\n\n        .target(\n            name: \"ChatService\",\n            dependencies: [\n                \"LegacyChatPlugin\",\n\n                // context collectors\n                \"WebChatContextCollector\",\n                \"SystemInfoChatContextCollector\",\n\n                .product(name: \"ChatContextCollector\", package: \"Tool\"),\n                .product(name: \"PromptToCode\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"CustomCommandTemplateProcessor\", package: \"Tool\"),\n                .product(name: \"ChatPlugins\", package: \"ChatPlugins\"),\n                .product(name: \"Parsing\", package: \"swift-parsing\"),\n            ].pro([\n                \"ProService\",\n            ])\n        ),\n        .testTarget(name: \"ChatServiceTests\", dependencies: [\"ChatService\"]),\n        .target(\n            name: \"LegacyChatPlugin\",\n            dependencies: [\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"Terminal\", package: \"Tool\"),\n            ]\n        ),\n\n        .target(\n            name: \"ChatGPTChatTab\",\n            dependencies: [\n                \"ChatService\",\n                .product(name: \"SharedUIComponents\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"ChatTab\", package: \"Tool\"),\n                .product(name: \"Terminal\", package: \"Tool\"),\n                .product(name: \"MarkdownUI\", package: \"swift-markdown-ui\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n\n        // MARK: - UI\n\n        .target(\n            name: \"SuggestionWidget\",\n            dependencies: [\n                \"PromptToCodeService\",\n                \"ChatGPTChatTab\",\n                .product(name: \"PromptToCode\", package: \"Tool\"),\n                .product(name: \"Toast\", package: \"Tool\"),\n                .product(name: \"UserDefaultsObserver\", package: \"Tool\"),\n                .product(name: \"SharedUIComponents\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"ChatTab\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"CustomAsyncAlgorithms\", package: \"Tool\"),\n                .product(name: \"CodeDiff\", package: \"Tool\"),\n                .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n                .product(name: \"MarkdownUI\", package: \"swift-markdown-ui\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n        .testTarget(name: \"SuggestionWidgetTests\", dependencies: [\"SuggestionWidget\"]),\n\n        // MARK: - Helpers\n\n        .target(name: \"FileChangeChecker\"),\n        .target(name: \"LaunchAgentManager\"),\n        .target(\n            name: \"UpdateChecker\",\n            dependencies: [\n                \"Sparkle\",\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n            ]\n        ),\n        .target(\n            name: \"ServiceUpdateMigration\",\n            dependencies: [\n                .product(name: \"SuggestionProvider\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"Keychain\", package: \"Tool\"),\n            ]\n        ),\n        .testTarget(\n            name: \"ServiceUpdateMigrationTests\",\n            dependencies: [\n                \"ServiceUpdateMigration\",\n            ]\n        ),\n        .target(\n            name: \"PlusFeatureFlag\",\n            dependencies: [\n            ].pro([\n                \"LicenseManagement\",\n            ])\n        ),\n\n        // MAKR: - Chat Context Collector\n\n        .target(\n            name: \"WebChatContextCollector\",\n            dependencies: [\n                .product(name: \"ChatContextCollector\", package: \"Tool\"),\n                .product(name: \"LangChain\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n                .product(name: \"ExternalServices\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n            ],\n            path: \"Sources/ChatContextCollectors/WebChatContextCollector\"\n        ),\n\n        .target(\n            name: \"SystemInfoChatContextCollector\",\n            dependencies: [\n                .product(name: \"ChatContextCollector\", package: \"Tool\"),\n                .product(name: \"OpenAIService\", package: \"Tool\"),\n            ],\n            path: \"Sources/ChatContextCollectors/SystemInfoChatContextCollector\"\n        ),\n\n        // MARK: Key Binding\n\n        .target(\n            name: \"KeyBindingManager\",\n            dependencies: [\n                .product(name: \"CommandHandler\", package: \"Tool\"),\n                .product(name: \"Workspace\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"UserDefaultsObserver\", package: \"Tool\"),\n                .product(name: \"CGEventOverride\", package: \"CGEventOverride\"),\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n        .testTarget(\n            name: \"KeyBindingManagerTests\",\n            dependencies: [\"KeyBindingManager\"]\n        ),\n\n        // MARK: Theming\n\n        .target(\n            name: \"XcodeThemeController\",\n            dependencies: [\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"Highlightr\", package: \"Highlightr\"),\n            ]\n        ),\n    ]\n)\n\nextension [Target.Dependency] {\n    func pro(_ targetNames: [String]) -> [Target.Dependency] {\n        if isProIncluded {\n            return self + targetNames.map { Target.Dependency.product(name: $0, package: \"Pro\") }\n        }\n        return self\n    }\n\n    func proCore(_ targetNames: [String]) -> [Target.Dependency] {\n        if isProIncluded {\n            return self + targetNames\n                .map { Target.Dependency.product(name: $0, package: \"ProCore\") }\n        }\n        return self\n    }\n}\n\nextension [Package.Dependency] {\n    var pro: [Package.Dependency] {\n        if isProIncluded {\n            return self + [.package(path: \"../../Pro\"), .package(path: \"../../Pro/ProCore\")]\n        }\n        return self\n    }\n}\n\nvar isProIncluded: Bool {\n    func isProIncluded(file: StaticString = #file) -> Bool {\n        let filePath = \"\\(file)\"\n        let fileURL = URL(fileURLWithPath: filePath)\n        let rootURL = fileURL\n            .deletingLastPathComponent()\n            .deletingLastPathComponent()\n            .deletingLastPathComponent()\n        let confURL = rootURL.appendingPathComponent(\"PLUS\")\n        return FileManager.default.fileExists(atPath: confURL.path)\n    }\n\n    return isProIncluded()\n}\n\n"
  },
  {
    "path": "Core/README.md",
    "content": "# Core\n\nA description of this package.\n"
  },
  {
    "path": "Core/Sources/ChatContextCollectors/SystemInfoChatContextCollector/SystemInfoChatContextCollector.swift",
    "content": "import ChatContextCollector\nimport Foundation\nimport OpenAIService\n\npublic final class SystemInfoChatContextCollector: ChatContextCollector {\n    static let dateFormatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"EEEE, yyyy-MM-dd HH:mm:ssZ\"\n        return formatter\n    }()\n\n    public init() {}\n\n    public func generateContext(\n        history: [ChatMessage],\n        scopes: Set<ChatContext.Scope>,\n        content: String,\n        configuration: ChatGPTConfiguration\n    ) -> ChatContext {\n        return .init(\n            systemPrompt: \"\"\"\n            ## System Info\n            \n            Current Time: \\(\n                Self.dateFormatter.string(from: Date())\n            ) (You can use it to calculate time in another time zone)\n            \"\"\",\n            retrievedContent: [],\n            functions: []\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatContextCollectors/WebChatContextCollector/QueryWebsiteFunction.swift",
    "content": "import ChatBasic\nimport Foundation\nimport LangChain\nimport OpenAIService\nimport Preferences\n\nstruct QueryWebsiteFunction: ChatGPTFunction {\n    struct Arguments: Codable {\n        var query: String\n        var urls: [String]\n    }\n\n    struct Result: ChatGPTFunctionResult {\n        var answers: [String]\n\n        var botReadableContent: String {\n            return answers.joined(separator: \"\\n\")\n        }\n        \n        var userReadableContent: ChatGPTFunctionResultUserReadableContent {\n            .text(botReadableContent)\n        }\n    }\n\n    var name: String {\n        \"queryWebsite\"\n    }\n\n    var description: String {\n        \"Useful for when you need to answer a question using information from a website.\"\n    }\n\n    var argumentSchema: JSONSchemaValue {\n        return [\n            .type: \"object\",\n            .properties: [\n                \"query\": [\n                    .type: \"string\",\n                    .description: \"things you want to know about the website\",\n                ],\n                \"urls\": [\n                    .type: \"array\",\n                    .description: \"urls of the website, you can use urls appearing in the conversation\",\n                    .items: [\n                        .type: \"string\",\n                    ],\n                ],\n            ],\n            .required: [\"query\", \"urls\"],\n        ]\n    }\n\n    func prepare(reportProgress: @escaping (String) async -> Void) async {\n        await reportProgress(\"Reading..\")\n    }\n\n    func call(\n        arguments: Arguments,\n        reportProgress: @escaping (String) async -> Void\n    ) async throws -> Result {\n        do {\n            let configuration = UserPreferenceEmbeddingConfiguration()\n            let embedding = OpenAIEmbedding(configuration: configuration)\n            let dimensions = configuration.dimensions\n            let modelName = configuration.model?.name ?? \"model\"\n\n            let result = try await withThrowingTaskGroup(of: String.self) { group in\n                for urlString in arguments.urls {\n                    let storeIdentifier = \"\\(urlString)-\\(modelName)-\\(dimensions)\"\n                    guard let url = URL(string: urlString) else { continue }\n                    group.addTask {\n                        // 1. grab the website content\n                        await reportProgress(\"Loading \\(url)..\")\n\n                        if let database = await TemporaryUSearch.view(\n                            identifier: storeIdentifier,\n                            dimensions: dimensions\n                        ) {\n                            await reportProgress(\"Getting relevant information..\")\n                            let qa = QAInformationRetrievalChain(\n                                vectorStore: database,\n                                embedding: embedding\n                            )\n                            return try await qa.call(.init(arguments.query)).information\n                        }\n                        let loader = WebLoader(urls: [url])\n                        let documents = try await loader.load()\n                        await reportProgress(\"Processing \\(url)..\")\n                        // 2. split the content\n                        let splitter = RecursiveCharacterTextSplitter(\n                            chunkSize: 1500,\n                            chunkOverlap: 100\n                        )\n                        let splitDocuments = try await splitter.transformDocuments(documents)\n                        // 3. embedding and store in db\n                        await reportProgress(\"Embedding \\(url)..\")\n                        let embeddedDocuments = try await embedding.embed(documents: splitDocuments)\n                        let database = TemporaryUSearch(\n                            identifier: storeIdentifier,\n                            dimensions: dimensions\n                        )\n                        try await database.set(embeddedDocuments)\n                        // 4. generate answer\n                        await reportProgress(\"Getting relevant information..\")\n                        let qa = QAInformationRetrievalChain(\n                            vectorStore: database,\n                            embedding: embedding\n                        )\n                        let result = try await qa.call(.init(arguments.query))\n                        return result.information\n                    }\n                }\n\n                var all = [String]()\n                for try await result in group {\n                    all.append(result)\n                }\n                await reportProgress(\"\"\"\n                Finish reading websites.\n                \\(\n                    arguments.urls\n                        .map { \"- [\\($0)](\\($0))\" }\n                        .joined(separator: \"\\n\")\n                )\n                \"\"\")\n\n                return all\n            }\n\n            return .init(answers: result)\n        } catch {\n            await reportProgress(\"Failed reading websites.\")\n            throw error\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatContextCollectors/WebChatContextCollector/SearchFunction.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\nimport Preferences\nimport WebSearchService\n\nstruct SearchFunction: ChatGPTFunction {\n    static let dateFormatter = {\n        let it = DateFormatter()\n        it.dateFormat = \"yyyy-MM-dd\"\n        return it\n    }()\n\n    struct Arguments: Codable {\n        var query: String\n        var freshness: String?\n    }\n\n    struct Result: ChatGPTFunctionResult {\n        var result: WebSearchResult\n\n        var botReadableContent: String {\n            result.webPages.enumerated().map {\n                let (index, page) = $0\n                return \"\"\"\n                \\(index + 1). \\(page.title) \\(page.urlString)\n                \\(page.snippet)\n                \"\"\"\n            }.joined(separator: \"\\n\")\n        }\n        \n        var userReadableContent: ChatGPTFunctionResultUserReadableContent {\n            .text(botReadableContent)\n        }\n    }\n\n    let maxTokens: Int\n\n    var name: String {\n        \"searchWeb\"\n    }\n\n    var description: String {\n        \"Useful for when you need to answer questions about latest information.\"\n    }\n\n    var argumentSchema: JSONSchemaValue {\n        let today = Self.dateFormatter.string(from: Date())\n        return [\n            .type: \"object\",\n            .properties: [\n                \"query\": [\n                    .type: \"string\",\n                    .description: \"the search query\",\n                ],\n                \"freshness\": [\n                    .type: \"string\",\n                    .description: .string(\n                        \"limit the search result to a specific range, use only when I ask the question about current events. Today is \\(today). Format: yyyy-MM-dd..yyyy-MM-dd\"\n                    ),\n                    .examples: [\"1919-10-20..1988-10-20\"],\n                ],\n            ],\n            .required: [\"query\"],\n        ]\n    }\n\n    func prepare(reportProgress: @escaping ReportProgress) async {\n        await reportProgress(\"Searching..\")\n    }\n\n    func call(\n        arguments: Arguments,\n        reportProgress: @escaping ReportProgress\n    ) async throws -> Result {\n        await reportProgress(\"Searching \\(arguments.query)\")\n\n        do {\n            let search = WebSearchService(provider: .userPreferred)\n\n            let result = try await search.search(query: arguments.query)\n\n            await reportProgress(\"\"\"\n            Finish searching \\(arguments.query)\n            \\(\n                result.webPages\n                    .map { \"- [\\($0.title)](\\($0.urlString))\" }\n                    .joined(separator: \"\\n\")\n            )\n            \"\"\")\n\n            return .init(result: result)\n        } catch {\n            await reportProgress(\"Failed searching: \\(error.localizedDescription)\")\n            throw error\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatContextCollectors/WebChatContextCollector/WebChatContextCollector.swift",
    "content": "import ChatBasic\nimport ChatContextCollector\nimport Foundation\nimport OpenAIService\n\npublic final class WebChatContextCollector: ChatContextCollector {\n    var recentLinks = [String]()\n\n    public init() {}\n\n    public func generateContext(\n        history: [ChatMessage],\n        scopes: Set<ChatContext.Scope>,\n        content: String,\n        configuration: ChatGPTConfiguration\n    ) -> ChatContext {\n        guard scopes.contains(.web) else { return .empty }\n        let links = Self.detectLinks(from: history) + Self.detectLinks(from: content)\n        let functions: [(any ChatGPTFunction)?] = [\n            SearchFunction(maxTokens: configuration.maxTokens),\n            // allow this function only when there is a link in the memory.\n            links.isEmpty ? nil : QueryWebsiteFunction(),\n        ]\n        return .init(\n            systemPrompt: \"You prefer to answer questions with latest content on the internet.\",\n            retrievedContent: [],\n            functions: functions.compactMap { $0 }\n        )\n    }\n}\n\nextension WebChatContextCollector {\n    static func detectLinks(from messages: [ChatMessage]) -> [String] {\n        return messages.lazy\n            .compactMap {\n                $0.content ?? $0.toolCalls?.map(\\.function.arguments).joined(separator: \" \") ?? \"\"\n            }\n            .map(detectLinks(from:))\n            .flatMap { $0 }\n    }\n\n    static func detectLinks(from content: String) -> [String] {\n        var links = [String]()\n        let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)\n        let matches = detector?.matches(\n            in: content,\n            options: [],\n            range: NSRange(content.startIndex..., in: content)\n        )\n\n        for match in matches ?? [] {\n            guard let range = Range(match.range, in: content) else { continue }\n            let url = content[range]\n            links.append(String(url))\n        }\n        return links\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Chat.swift",
    "content": "import AppKit\nimport ChatBasic\nimport ChatService\nimport ComposableArchitecture\nimport Foundation\nimport MarkdownUI\nimport OpenAIService\nimport Preferences\nimport Terminal\n\npublic struct DisplayedChatMessage: Equatable {\n    public enum Role: Equatable {\n        case user\n        case assistant\n        case tool\n        case ignored\n    }\n\n    public struct Reference: Equatable {\n        public typealias Kind = ChatMessage.Reference.Kind\n\n        public var title: String\n        public var subtitle: String\n        public var uri: String\n        public var startLine: Int?\n        public var kind: Kind\n\n        public init(\n            title: String,\n            subtitle: String,\n            uri: String,\n            startLine: Int?,\n            kind: Kind\n        ) {\n            self.title = title\n            self.subtitle = subtitle\n            self.uri = uri\n            self.startLine = startLine\n            self.kind = kind\n        }\n    }\n\n    public var id: String\n    public var role: Role\n    public var text: String\n    public var markdownContent: MarkdownContent\n    public var references: [Reference] = []\n\n    public init(id: String, role: Role, text: String, references: [Reference]) {\n        self.id = id\n        self.role = role\n        self.text = text\n        markdownContent = .init(text)\n        self.references = references\n    }\n}\n\nprivate var isPreview: Bool {\n    ProcessInfo.processInfo.environment[\"XCODE_RUNNING_FOR_PREVIEWS\"] == \"1\"\n}\n\n@Reducer\nstruct Chat {\n    public typealias MessageID = String\n\n    @ObservableState\n    struct State: Equatable {\n        var title: String = \"Chat\"\n        var typedMessage = \"\"\n        var history: [DisplayedChatMessage] = []\n        var isReceivingMessage = false\n        var chatMenu = ChatMenu.State()\n        var focusedField: Field?\n        var isEnabled = true\n        var isPinnedToBottom = true\n\n        enum Field: String, Hashable {\n            case textField\n        }\n    }\n\n    enum Action: Equatable, BindableAction {\n        case binding(BindingAction<State>)\n\n        case appear\n        case refresh\n        case setIsEnabled(Bool)\n        case sendButtonTapped\n        case returnButtonTapped\n        case stopRespondingButtonTapped\n        case clearButtonTap\n        case deleteMessageButtonTapped(MessageID)\n        case resendMessageButtonTapped(MessageID)\n        case setAsExtraPromptButtonTapped(MessageID)\n        case manuallyScrolledUp\n        case scrollToBottomButtonTapped\n        case focusOnTextField\n        case referenceClicked(DisplayedChatMessage.Reference)\n\n        case observeChatService\n        case observeHistoryChange\n        case observeIsReceivingMessageChange\n        case observeSystemPromptChange\n        case observeExtraSystemPromptChange\n        case observeDefaultScopesChange\n\n        case historyChanged\n        case isReceivingMessageChanged\n        case systemPromptChanged\n        case extraSystemPromptChanged\n        case defaultScopesChanged\n\n        case chatMenu(ChatMenu.Action)\n    }\n\n    let service: ChatService\n    let id = UUID()\n\n    enum CancelID: Hashable {\n        case observeHistoryChange(UUID)\n        case observeIsReceivingMessageChange(UUID)\n        case observeSystemPromptChange(UUID)\n        case observeExtraSystemPromptChange(UUID)\n        case observeDefaultScopesChange(UUID)\n        case sendMessage(UUID)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Scope(state: \\.chatMenu, action: \\.chatMenu) {\n            ChatMenu(service: service)\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run { send in\n                    if isPreview { return }\n                    await send(.observeChatService)\n                    await send(.historyChanged)\n                    await send(.isReceivingMessageChanged)\n                    await send(.systemPromptChanged)\n                    await send(.extraSystemPromptChanged)\n                    await send(.focusOnTextField)\n                    await send(.refresh)\n                }\n\n            case .refresh:\n                return .run { send in\n                    await send(.chatMenu(.refresh))\n                }\n\n            case let .setIsEnabled(isEnabled):\n                state.isEnabled = isEnabled\n                return .none\n\n            case .sendButtonTapped:\n                guard !state.typedMessage.isEmpty else { return .none }\n                let message = state.typedMessage\n                state.typedMessage = \"\"\n                return .run { _ in\n                    try await service.send(content: message)\n                }.cancellable(id: CancelID.sendMessage(id))\n\n            case .returnButtonTapped:\n                state.typedMessage += \"\\n\"\n                return .none\n\n            case .stopRespondingButtonTapped:\n                return .merge(\n                    .run { _ in\n                        await service.stopReceivingMessage()\n                    },\n                    .cancel(id: CancelID.sendMessage(id))\n                )\n\n            case .clearButtonTap:\n                return .run { _ in\n                    await service.clearHistory()\n                }\n\n            case let .deleteMessageButtonTapped(id):\n                return .run { _ in\n                    await service.deleteMessage(id: id)\n                }\n\n            case let .resendMessageButtonTapped(id):\n                return .run { _ in\n                    try await service.resendMessage(id: id)\n                }\n\n            case let .setAsExtraPromptButtonTapped(id):\n                return .run { _ in\n                    await service.setMessageAsExtraPrompt(id: id)\n                }\n\n            case let .referenceClicked(reference):\n                let fileURL = URL(fileURLWithPath: reference.uri)\n                return .run { _ in\n                    if FileManager.default.fileExists(atPath: fileURL.path) {\n                        let terminal = Terminal()\n                        do {\n                            _ = try await terminal.runCommand(\n                                \"/bin/bash\",\n                                arguments: [\n                                    \"-c\",\n                                    \"xed -l \\(reference.startLine ?? 0) ${TARGET_FILE}\",\n                                ],\n                                environment: [\"TARGET_FILE\": reference.uri]\n                            )\n                        } catch {\n                            print(error)\n                        }\n                    } else if let url = URL(string: reference.uri), url.scheme != nil {\n                        NSWorkspace.shared.open(url)\n                    }\n                }\n\n            case .manuallyScrolledUp:\n                state.isPinnedToBottom = false\n                return .none\n\n            case .scrollToBottomButtonTapped:\n                state.isPinnedToBottom = true\n                return .none\n\n            case .focusOnTextField:\n                state.focusedField = .textField\n                return .none\n\n            case .observeChatService:\n                return .run { send in\n                    await send(.observeHistoryChange)\n                    await send(.observeIsReceivingMessageChange)\n                    await send(.observeSystemPromptChange)\n                    await send(.observeExtraSystemPromptChange)\n                    await send(.observeDefaultScopesChange)\n                }\n\n            case .observeHistoryChange:\n                return .run { send in\n                    let stream = AsyncStream<Void> { continuation in\n                        let cancellable = service.$chatHistory.sink { _ in\n                            continuation.yield()\n                        }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    let debouncedHistoryChange = TimedDebounceFunction(duration: 0.2) {\n                        await send(.historyChanged)\n                    }\n\n                    for await _ in stream {\n                        await debouncedHistoryChange()\n                    }\n                }.cancellable(id: CancelID.observeHistoryChange(id), cancelInFlight: true)\n\n            case .observeIsReceivingMessageChange:\n                return .run { send in\n                    let stream = AsyncStream<Void> { continuation in\n                        let cancellable = service.$isReceivingMessage\n                            .sink { _ in\n                                continuation.yield()\n                            }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    for await _ in stream {\n                        await send(.isReceivingMessageChanged)\n                    }\n                }.cancellable(\n                    id: CancelID.observeIsReceivingMessageChange(id),\n                    cancelInFlight: true\n                )\n\n            case .observeSystemPromptChange:\n                return .run { send in\n                    let stream = AsyncStream<Void> { continuation in\n                        let cancellable = service.$systemPrompt.sink { _ in\n                            continuation.yield()\n                        }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    for await _ in stream {\n                        await send(.systemPromptChanged)\n                    }\n                }.cancellable(id: CancelID.observeSystemPromptChange(id), cancelInFlight: true)\n\n            case .observeExtraSystemPromptChange:\n                return .run { send in\n                    let stream = AsyncStream<Void> { continuation in\n                        let cancellable = service.$extraSystemPrompt\n                            .sink { _ in\n                                continuation.yield()\n                            }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    for await _ in stream {\n                        await send(.extraSystemPromptChanged)\n                    }\n                }.cancellable(id: CancelID.observeExtraSystemPromptChange(id), cancelInFlight: true)\n\n            case .observeDefaultScopesChange:\n                return .run { send in\n                    let stream = AsyncStream<Void> { continuation in\n                        let cancellable = service.$defaultScopes\n                            .sink { _ in\n                                continuation.yield()\n                            }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    for await _ in stream {\n                        await send(.defaultScopesChanged)\n                    }\n                }.cancellable(id: CancelID.observeDefaultScopesChange(id), cancelInFlight: true)\n\n            case .historyChanged:\n                state.history = service.chatHistory.flatMap { message in\n                    var all = [DisplayedChatMessage]()\n                    all.append(.init(\n                        id: message.id,\n                        role: {\n                            switch message.role {\n                            case .system: return .ignored\n                            case .user: return .user\n                            case .assistant:\n                                if let text = message.summary ?? message.content,\n                                   !text.isEmpty\n                                {\n                                    return .assistant\n                                }\n                                return .ignored\n                            }\n                        }(),\n                        text: message.summary ?? message.content ?? \"\",\n                        references: message.references.map(convertReference)\n                    ))\n\n                    for call in message.toolCalls ?? [] {\n                        all.append(.init(\n                            id: message.id + call.id,\n                            role: .tool,\n                            text: call.response.summary ?? call.response.content,\n                            references: []\n                        ))\n                    }\n\n                    return all\n                }\n\n                state.title = {\n                    let defaultTitle = \"Chat\"\n                    guard let lastMessageText = state.history\n                        .filter({ $0.role == .assistant || $0.role == .user })\n                        .last?\n                        .text else { return defaultTitle }\n                    if lastMessageText.isEmpty { return defaultTitle }\n                    let trimmed = lastMessageText\n                        .trimmingCharacters(in: .punctuationCharacters)\n                        .trimmingCharacters(in: .whitespacesAndNewlines)\n                    if trimmed.starts(with: \"```\") {\n                        return \"Code Block\"\n                    } else {\n                        return trimmed\n                    }\n                }()\n                return .none\n\n            case .isReceivingMessageChanged:\n                state.isReceivingMessage = service.isReceivingMessage\n                if service.isReceivingMessage {\n                    state.isPinnedToBottom = true\n                }\n                return .none\n\n            case .systemPromptChanged:\n                state.chatMenu.systemPrompt = service.systemPrompt\n                return .none\n\n            case .extraSystemPromptChanged:\n                state.chatMenu.extraSystemPrompt = service.extraSystemPrompt\n                return .none\n\n            case .defaultScopesChanged:\n                state.chatMenu.defaultScopes = service.defaultScopes\n                return .none\n\n            case .binding:\n                return .none\n\n            case .chatMenu:\n                return .none\n            }\n        }\n    }\n}\n\n@Reducer\nstruct ChatMenu {\n    @ObservableState\n    struct State: Equatable {\n        var systemPrompt: String = \"\"\n        var extraSystemPrompt: String = \"\"\n        var temperatureOverride: Double? = nil\n        var chatModelIdOverride: String? = nil\n        var defaultScopes: Set<ChatService.Scope> = []\n    }\n\n    enum Action: Equatable {\n        case appear\n        case refresh\n        case resetPromptButtonTapped\n        case temperatureOverrideSelected(Double?)\n        case chatModelIdOverrideSelected(String?)\n        case customCommandButtonTapped(CustomCommand)\n        case resetDefaultScopesButtonTapped\n        case toggleScope(ChatService.Scope)\n    }\n\n    let service: ChatService\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run {\n                    await $0(.refresh)\n                }\n\n            case .refresh:\n                state.temperatureOverride = service.configuration.overriding.temperature\n                state.chatModelIdOverride = service.configuration.overriding.modelId\n                return .none\n\n            case .resetPromptButtonTapped:\n                return .run { _ in\n                    await service.resetPrompt()\n                }\n            case let .temperatureOverrideSelected(temperature):\n                state.temperatureOverride = temperature\n                return .run { _ in\n                    service.configuration.overriding.temperature = temperature\n                }\n            case let .chatModelIdOverrideSelected(chatModelId):\n                state.chatModelIdOverride = chatModelId\n                return .run { _ in\n                    service.configuration.overriding.modelId = chatModelId\n                }\n            case let .customCommandButtonTapped(command):\n                return .run { _ in\n                    try await service.handleCustomCommand(command)\n                }\n\n            case .resetDefaultScopesButtonTapped:\n                return .run { _ in\n                    service.resetDefaultScopes()\n                }\n            case let .toggleScope(scope):\n                return .run { _ in\n                    service.defaultScopes.formSymmetricDifference([scope])\n                }\n            }\n        }\n    }\n}\n\nprivate actor TimedDebounceFunction {\n    let duration: TimeInterval\n    let block: () async -> Void\n\n    var task: Task<Void, Error>?\n    var lastFireTime: Date = .init(timeIntervalSince1970: 0)\n\n    init(duration: TimeInterval, block: @escaping () async -> Void) {\n        self.duration = duration\n        self.block = block\n    }\n\n    func callAsFunction() async {\n        task?.cancel()\n        if lastFireTime.timeIntervalSinceNow < -duration {\n            await fire()\n            task = nil\n        } else {\n            task = Task.detached { [weak self, duration] in\n                try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                await self?.fire()\n            }\n        }\n    }\n\n    func fire() async {\n        lastFireTime = Date()\n        await block()\n    }\n}\n\nprivate func convertReference(\n    _ reference: ChatMessage.Reference\n) -> DisplayedChatMessage.Reference {\n    .init(\n        title: reference.title,\n        subtitle: {\n            switch reference.kind {\n            case let .symbol(_, uri, _, _):\n                return uri\n            case let .webpage(uri):\n                return uri\n            case let .textFile(uri):\n                return uri\n            case let .other(kind):\n                return kind\n            case .text:\n                return reference.content\n            case .error:\n                return reference.content\n            }\n        }(),\n        uri: {\n            switch reference.kind {\n            case let .symbol(_, uri, _, _):\n                return uri\n            case let .webpage(uri):\n                return uri\n            case let .textFile(uri):\n                return uri\n            case .other:\n                return \"\"\n            case .text:\n                return \"\"\n            case .error:\n                return \"\"\n            }\n        }(),\n        startLine: {\n            switch reference.kind {\n            case let .symbol(_, _, startLine, _):\n                return startLine\n            default:\n                return nil\n            }\n        }(),\n        kind: reference.kind\n    )\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/ChatContextMenu.swift",
    "content": "import AppKit\nimport ChatService\nimport ComposableArchitecture\nimport SharedUIComponents\nimport SwiftUI\n\nstruct ChatTabItemView: View {\n    let chat: StoreOf<Chat>\n\n    var body: some View {\n        WithPerceptionTracking {\n            Text(chat.title)\n        }\n    }\n}\n\nstruct ChatContextMenu: View {\n    let store: StoreOf<ChatMenu>\n    @AppStorage(\\.customCommands) var customCommands\n    @AppStorage(\\.chatModels) var chatModels\n    @AppStorage(\\.defaultChatFeatureChatModelId) var defaultChatModelId\n    @AppStorage(\\.chatGPTTemperature) var defaultTemperature\n\n    var body: some View {\n        WithPerceptionTracking {\n            currentSystemPrompt\n                .onAppear { store.send(.appear) }\n            currentExtraSystemPrompt\n            resetPrompt\n\n            Divider()\n\n            chatModel\n            temperature\n            defaultScopes\n\n            Divider()\n\n            customCommandMenu\n        }\n    }\n\n    @ViewBuilder\n    var currentSystemPrompt: some View {\n        Text(\"System Prompt:\")\n        Text({\n            var text = store.systemPrompt\n            if text.isEmpty { text = \"N/A\" }\n            if text.count > 30 { text = String(text.prefix(30)) + \"...\" }\n            return text\n        }() as String)\n    }\n\n    @ViewBuilder\n    var currentExtraSystemPrompt: some View {\n        Text(\"Extra Prompt:\")\n        Text({\n            var text = store.extraSystemPrompt\n            if text.isEmpty { text = \"N/A\" }\n            if text.count > 30 { text = String(text.prefix(30)) + \"...\" }\n            return text\n        }() as String)\n    }\n\n    var resetPrompt: some View {\n        Button(\"Reset System Prompt\") {\n            store.send(.resetPromptButtonTapped)\n        }\n    }\n\n    @ViewBuilder\n    var chatModel: some View {\n        let allModels = chatModels + [.init(\n            id: \"com.github.copilot\",\n            name: \"GitHub Copilot Language Server\",\n            format: .openAI,\n            info: .init()\n        )]\n        \n        Menu(\"Chat Model\") {\n            Button(action: {\n                store.send(.chatModelIdOverrideSelected(nil))\n            }) {\n                HStack {\n                    if let defaultModel = allModels\n                        .first(where: { $0.id == defaultChatModelId })\n                    {\n                        Text(\"Default (\\(defaultModel.name))\")\n                        if store.chatModelIdOverride == nil {\n                            Image(systemName: \"checkmark\")\n                        }\n                    } else {\n                        Text(\"No Model Available\")\n                    }\n                }\n            }\n\n            if let id = store.chatModelIdOverride, !allModels.map(\\.id).contains(id) {\n                Button(action: {\n                    store.send(.chatModelIdOverrideSelected(nil))\n                }) {\n                    HStack {\n                        Text(\"Default (Selected Model Not Found)\")\n                        Image(systemName: \"checkmark\")\n                    }\n                }\n            }\n\n            Divider()\n\n            ForEach(allModels, id: \\.id) { model in\n                Button(action: {\n                    store.send(.chatModelIdOverrideSelected(model.id))\n                }) {\n                    HStack {\n                        Text(model.name)\n                        if model.id == store.chatModelIdOverride {\n                            Image(systemName: \"checkmark\")\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    var temperature: some View {\n        Menu(\"Temperature\") {\n            Button(action: {\n                store.send(.temperatureOverrideSelected(nil))\n            }) {\n                HStack {\n                    Text(\n                        \"Default (\\(defaultTemperature.formatted(.number.precision(.fractionLength(1)))))\"\n                    )\n                    if store.temperatureOverride == nil {\n                        Image(systemName: \"checkmark\")\n                    }\n                }\n            }\n\n            Divider()\n\n            ForEach(Array(stride(from: 0.0, through: 2.0, by: 0.1)), id: \\.self) { value in\n                Button(action: {\n                    store.send(.temperatureOverrideSelected(value))\n                }) {\n                    HStack {\n                        Text(\"\\(value.formatted(.number.precision(.fractionLength(1))))\")\n                        if value == store.temperatureOverride {\n                            Image(systemName: \"checkmark\")\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    var defaultScopes: some View {\n        Menu(\"Default Scopes\") {\n            Button(action: {\n                store.send(.resetDefaultScopesButtonTapped)\n            }) {\n                Text(\"Reset Default Scopes\")\n            }\n\n            Divider()\n\n            ForEach(ChatService.Scope.allCases, id: \\.rawValue) { value in\n                Button(action: {\n                    store.send(.toggleScope(value))\n                }) {\n                    HStack {\n                        Text(\"@\" + value.rawValue)\n                        if store.defaultScopes.contains(value) {\n                            Image(systemName: \"checkmark\")\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    var customCommandMenu: some View {\n        Menu(\"Custom Commands\") {\n            ForEach(\n                customCommands.filter {\n                    switch $0.feature {\n                    case .chatWithSelection, .customChat: return true\n                    case .promptToCode: return false\n                    case .singleRoundDialog: return false\n                    }\n                },\n                id: \\.name\n            ) { command in\n                Button(action: {\n                    store.send(.customCommandButtonTapped(command))\n                }) {\n                    Text(command.name)\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift",
    "content": "import ChatContextCollector\nimport ChatService\nimport ChatTab\nimport CodableWrappers\nimport Combine\nimport ComposableArchitecture\nimport DebounceFunction\nimport Foundation\nimport OpenAIService\nimport Preferences\nimport SwiftUI\n\n/// A chat tab that provides a context aware chat bot, powered by ChatGPT.\npublic class ChatGPTChatTab: ChatTab {\n    public static var name: String { \"Chat\" }\n\n    public let service: ChatService\n    let chat: StoreOf<Chat>\n    private var cancellable = Set<AnyCancellable>()\n    private var observer = NSObject()\n    private let updateContentDebounce = DebounceRunner(duration: 0.5)\n\n    struct RestorableState: Codable {\n        var history: [OpenAIService.ChatMessage]\n        var configuration: OverridingChatGPTConfiguration.Overriding\n        var systemPrompt: String\n        var extraSystemPrompt: String\n        var defaultScopes: Set<ChatContext.Scope>?\n    }\n\n    struct Builder: ChatTabBuilder {\n        var title: String\n        var customCommand: CustomCommand?\n        var afterBuild: (ChatGPTChatTab) async -> Void = { _ in }\n\n        func build(store: StoreOf<ChatTabItem>) async -> (any ChatTab)? {\n            let tab = await ChatGPTChatTab(store: store)\n            if let customCommand {\n                try? await tab.service.handleCustomCommand(customCommand)\n            }\n            await afterBuild(tab)\n            return tab\n        }\n    }\n\n    public func buildView() -> any View {\n        ChatPanel(chat: chat)\n    }\n\n    public func buildTabItem() -> any View {\n        ChatTabItemView(chat: chat)\n    }\n\n    public func buildIcon() -> any View {\n        WithPerceptionTracking {\n            if self.chat.isReceivingMessage {\n                Image(systemName: \"ellipsis.message\")\n            } else {\n                Image(systemName: \"message\")\n            }\n        }\n    }\n\n    public func buildMenu() -> any View {\n        ChatContextMenu(store: chat.scope(state: \\.chatMenu, action: \\.chatMenu))\n    }\n\n    public func restorableState() async -> Data {\n        let state = RestorableState(\n            history: await service.memory.history,\n            configuration: service.configuration.overriding,\n            systemPrompt: service.systemPrompt,\n            extraSystemPrompt: service.extraSystemPrompt,\n            defaultScopes: service.defaultScopes\n        )\n        return (try? JSONEncoder().encode(state)) ?? Data()\n    }\n\n    public static func restore(from data: Data) async throws -> any ChatTabBuilder {\n        let state = try JSONDecoder().decode(RestorableState.self, from: data)\n        let builder = Builder(title: \"Chat\") { @MainActor tab in\n            tab.service.configuration.overriding = state.configuration\n            tab.service.mutateSystemPrompt(state.systemPrompt)\n            tab.service.mutateExtraSystemPrompt(state.extraSystemPrompt)\n            if let scopes = state.defaultScopes {\n                tab.service.defaultScopes = scopes\n            }\n            await tab.service.memory.mutateHistory { history in\n                history = state.history\n            }\n            tab.chat.send(.refresh)\n        }\n        return builder\n    }\n\n    public static func chatBuilders() -> [ChatTabBuilder] {\n        let customCommands = UserDefaults.shared.value(for: \\.customCommands).compactMap {\n            command in\n            if case .customChat = command.feature {\n                return Builder(title: command.name, customCommand: command)\n            }\n            return nil\n        }\n\n        return [Builder(title: \"Legacy Chat\", customCommand: nil)] + customCommands\n    }\n\n    public static func defaultBuilder() -> ChatTabBuilder {\n        Builder(title: \"Legacy Chat\", customCommand: nil)\n    }\n\n    @MainActor\n    public init(service: ChatService = .init(), store: StoreOf<ChatTabItem>) {\n        self.service = service\n        chat = .init(initialState: .init(), reducer: { Chat(service: service) })\n        super.init(store: store)\n    }\n\n    public func start() {\n        observer = .init()\n        cancellable = []\n\n        chatTabStore.send(.updateTitle(\"Chat\"))\n\n        service.$systemPrompt.removeDuplicates().sink { [weak self] _ in\n            Task { @MainActor [weak self] in\n                self?.chatTabStore.send(.tabContentUpdated)\n            }\n        }.store(in: &cancellable)\n\n        service.$extraSystemPrompt.removeDuplicates().sink { [weak self] _ in\n            Task { @MainActor [weak self] in\n                self?.chatTabStore.send(.tabContentUpdated)\n            }\n        }.store(in: &cancellable)\n\n        Task { @MainActor in\n            var lastTrigger = -1\n            observer.observe { [weak self] in\n                guard let self else { return }\n                let trigger = chatTabStore.focusTrigger\n                guard lastTrigger != trigger else { return }\n                lastTrigger = trigger\n                Task { @MainActor [weak self] in\n                    self?.chat.send(.focusOnTextField)\n                }\n            }\n        }\n\n        Task { @MainActor in\n            var lastTitle = \"\"\n            observer.observe { [weak self] in\n                guard let self else { return }\n                let title = self.chatTabStore.state.title\n                guard lastTitle != title else { return }\n                lastTitle = title\n                Task { @MainActor [weak self] in\n                    self?.chatTabStore.send(.updateTitle(title))\n                }\n            }\n        }\n\n        Task { @MainActor in\n            observer.observe { [weak self] in\n                guard let self else { return }\n                _ = chat.history\n                _ = chat.title\n                _ = chat.isReceivingMessage\n                Task {\n                    await self.updateContentDebounce.debounce { @MainActor [weak self] in\n                        self?.chatTabStore.send(.tabContentUpdated)\n                    }\n                }\n            }\n        }\n    }\n\n    public func handleCustomCommand(_ customCommand: CustomCommand) -> Bool {\n        Task {\n            if service.isReceivingMessage {\n                await service.stopReceivingMessage()\n            }\n            try? await service.handleCustomCommand(customCommand)\n        }\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/ChatPanel.swift",
    "content": "import AppKit\nimport Combine\nimport ComposableArchitecture\nimport MarkdownUI\nimport OpenAIService\nimport SharedUIComponents\nimport SwiftUI\n\nprivate let r: Double = 8\n\npublic struct ChatPanel: View {\n    let chat: StoreOf<Chat>\n    @Namespace var inputAreaNamespace\n\n    public var body: some View {\n        VStack(spacing: 0) {\n            ChatPanelMessages(chat: chat)\n            Divider()\n            ChatPanelInputArea(chat: chat)\n        }\n        .background(Color(nsColor: .windowBackgroundColor))\n        .onAppear { chat.send(.appear) }\n    }\n}\n\nprivate struct ScrollViewOffsetPreferenceKey: PreferenceKey {\n    static var defaultValue = CGFloat.zero\n\n    static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {\n        value += nextValue()\n    }\n}\n\nprivate struct ListHeightPreferenceKey: PreferenceKey {\n    static var defaultValue = CGFloat.zero\n\n    static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {\n        value += nextValue()\n    }\n}\n\nstruct ChatPanelMessages: View {\n    let chat: StoreOf<Chat>\n    @State var cancellable = Set<AnyCancellable>()\n    @State var isScrollToBottomButtonDisplayed = true\n    @Namespace var bottomID\n    @Namespace var topID\n    @Namespace var scrollSpace\n    @State var scrollOffset: Double = 0\n    @State var listHeight: Double = 0\n    @State var didScrollToBottomOnAppearOnce = false\n    @State var isBottomHidden = true\n    @Environment(\\.isEnabled) var isEnabled\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollViewReader { proxy in\n                GeometryReader { listGeo in\n                    List {\n                        Group {\n                            Spacer(minLength: 12)\n                                .id(topID)\n\n                            Instruction(chat: chat)\n\n                            ChatHistory(chat: chat)\n                                .listItemTint(.clear)\n\n                            ExtraSpacingInResponding(chat: chat)\n\n                            Spacer(minLength: 12)\n                                .id(bottomID)\n                                .onAppear {\n                                    isBottomHidden = false\n                                    if !didScrollToBottomOnAppearOnce {\n                                        proxy.scrollTo(bottomID, anchor: .bottom)\n                                        didScrollToBottomOnAppearOnce = true\n                                    }\n                                }\n                                .onDisappear {\n                                    isBottomHidden = true\n                                }\n                                .background(GeometryReader { geo in\n                                    let offset = geo.frame(in: .named(scrollSpace)).minY\n                                    Color.clear.preference(\n                                        key: ScrollViewOffsetPreferenceKey.self,\n                                        value: offset\n                                    )\n                                })\n                        }\n                        .modify { view in\n                            if #available(macOS 13.0, *) {\n                                view\n                                    .listRowSeparator(.hidden)\n                                    .listSectionSeparator(.hidden)\n                            } else {\n                                view\n                            }\n                        }\n                    }\n                    .listStyle(.plain)\n                    .listRowBackground(EmptyView())\n                    .modify { view in\n                        if #available(macOS 13.0, *) {\n                            view.scrollContentBackground(.hidden)\n                        } else {\n                            view\n                        }\n                    }\n                    .coordinateSpace(name: scrollSpace)\n                    .preference(\n                        key: ListHeightPreferenceKey.self,\n                        value: listGeo.size.height\n                    )\n                    .onPreferenceChange(ListHeightPreferenceKey.self) { value in\n                        listHeight = value\n                        updatePinningState()\n                    }\n                    .onPreferenceChange(ScrollViewOffsetPreferenceKey.self) { value in\n                        scrollOffset = value\n                        updatePinningState()\n                    }\n                    .overlay(alignment: .bottom) {\n                        StopRespondingButton(chat: chat)\n                    }\n                    .overlay(alignment: .bottomTrailing) {\n                        scrollToBottomButton(proxy: proxy)\n                    }\n                    .background {\n                        PinToBottomHandler(chat: chat, isBottomHidden: isBottomHidden) {\n                            proxy.scrollTo(bottomID, anchor: .bottom)\n                        }\n                    }\n                    .onAppear {\n                        proxy.scrollTo(bottomID, anchor: .bottom)\n                    }\n                    .task {\n                        proxy.scrollTo(bottomID, anchor: .bottom)\n                    }\n                }\n            }\n            .onAppear {\n                trackScrollWheel()\n            }\n            .onDisappear {\n                cancellable.forEach { $0.cancel() }\n                cancellable = []\n            }\n            .onChange(of: isEnabled) { isEnabled in\n                chat.send(.setIsEnabled(isEnabled))\n            }\n        }\n    }\n\n    func trackScrollWheel() {\n        NSApplication.shared.publisher(for: \\.currentEvent)\n            .receive(on: DispatchQueue.main)\n            .filter { [chat] in\n                guard chat.withState(\\.isEnabled) else { return false }\n                return $0?.type == .scrollWheel\n            }\n            .compactMap { $0 }\n            .sink { event in\n                guard chat.withState(\\.isPinnedToBottom) else { return }\n                let delta = event.deltaY\n                let scrollUp = delta > 0\n                if scrollUp {\n                    chat.send(.manuallyScrolledUp)\n                }\n            }\n            .store(in: &cancellable)\n    }\n\n    @MainActor\n    func updatePinningState() {\n        // where does the 32 come from?\n        withAnimation(.linear(duration: 0.1)) {\n            isScrollToBottomButtonDisplayed = scrollOffset > listHeight + 32 + 20\n                || scrollOffset <= 0\n        }\n    }\n\n    @ViewBuilder\n    func scrollToBottomButton(proxy: ScrollViewProxy) -> some View {\n        Button(action: {\n            chat.send(.scrollToBottomButtonTapped)\n            withAnimation(.easeInOut(duration: 0.1)) {\n                proxy.scrollTo(bottomID, anchor: .bottom)\n            }\n        }) {\n            Image(systemName: \"arrow.down\")\n                .padding(4)\n                .background {\n                    Circle()\n                        .fill(.thickMaterial)\n                        .shadow(color: .black.opacity(0.2), radius: 2)\n                }\n                .overlay {\n                    Circle().stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                }\n                .foregroundStyle(.secondary)\n                .padding(4)\n        }\n        .keyboardShortcut(.downArrow, modifiers: [.command])\n        .opacity(isScrollToBottomButtonDisplayed ? 1 : 0)\n        .buttonStyle(.plain)\n    }\n\n    struct ExtraSpacingInResponding: View {\n        let chat: StoreOf<Chat>\n\n        var body: some View {\n            WithPerceptionTracking {\n                if chat.isReceivingMessage {\n                    Spacer(minLength: 12)\n                }\n            }\n        }\n    }\n\n    struct PinToBottomHandler: View {\n        let chat: StoreOf<Chat>\n        let isBottomHidden: Bool\n        let scrollToBottom: () -> Void\n\n        @State var isInitialLoad = true\n\n        var body: some View {\n            WithPerceptionTracking {\n                EmptyView()\n                    .onChange(of: chat.isReceivingMessage) { isReceiving in\n                        if isReceiving {\n                            Task {\n                                await Task.yield()\n                                withAnimation(.easeInOut(duration: 0.1)) {\n                                    scrollToBottom()\n                                }\n                            }\n                        }\n                    }\n                    .onChange(of: chat.history.last) { _ in\n                        if chat.withState(\\.isPinnedToBottom) || isInitialLoad {\n                            if isInitialLoad {\n                                isInitialLoad = false\n                            }\n                            Task {\n                                await Task.yield()\n                                withAnimation(.easeInOut(duration: 0.1)) {\n                                    scrollToBottom()\n                                }\n                            }\n                        }\n                    }\n                    .onChange(of: isBottomHidden) { value in\n                        // This is important to prevent it from jumping to the top!\n                        if value, chat.withState(\\.isPinnedToBottom) {\n                            scrollToBottom()\n                        }\n                    }\n            }\n        }\n    }\n}\n\nstruct ChatHistory: View {\n    let chat: StoreOf<Chat>\n\n    var body: some View {\n        WithPerceptionTracking {\n            ForEach(chat.history, id: \\.id) { message in\n                WithPerceptionTracking {\n                    ChatHistoryItem(chat: chat, message: message).id(message.id)\n                }\n            }\n        }\n    }\n}\n\nstruct ChatHistoryItem: View {\n    let chat: StoreOf<Chat>\n    let message: DisplayedChatMessage\n\n    var body: some View {\n        WithPerceptionTracking {\n            let text = message.text\n            let markdownContent = message.markdownContent\n            switch message.role {\n            case .user:\n                UserMessage(\n                    id: message.id,\n                    text: text,\n                    markdownContent: markdownContent,\n                    chat: chat\n                )\n                .listRowInsets(EdgeInsets(\n                    top: 0,\n                    leading: -8,\n                    bottom: 0,\n                    trailing: -8\n                ))\n                .padding(.vertical, 4)\n            case .assistant:\n                BotMessage(\n                    id: message.id,\n                    text: text,\n                    markdownContent: markdownContent,\n                    references: message.references,\n                    chat: chat\n                )\n                .listRowInsets(EdgeInsets(\n                    top: 0,\n                    leading: -8,\n                    bottom: 0,\n                    trailing: -8\n                ))\n                .padding(.vertical, 4)\n            case .tool:\n                FunctionMessage(id: message.id, text: text)\n            case .ignored:\n                EmptyView()\n            }\n        }\n    }\n}\n\nprivate struct StopRespondingButton: View {\n    let chat: StoreOf<Chat>\n\n    var body: some View {\n        WithPerceptionTracking {\n            if chat.isReceivingMessage {\n                Button(action: {\n                    chat.send(.stopRespondingButtonTapped)\n                }) {\n                    HStack(spacing: 4) {\n                        Image(systemName: \"stop.fill\")\n                        Text(\"Stop Responding\")\n                    }\n                    .padding(8)\n                    .background(\n                        .regularMaterial,\n                        in: RoundedRectangle(cornerRadius: r, style: .continuous)\n                    )\n                    .overlay {\n                        RoundedRectangle(cornerRadius: r, style: .continuous)\n                            .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                    }\n                }\n                .buttonStyle(.borderless)\n                .frame(maxWidth: .infinity, alignment: .center)\n                .padding(.bottom, 8)\n                .opacity(chat.isReceivingMessage ? 1 : 0)\n                .disabled(!chat.isReceivingMessage)\n                .transformEffect(.init(\n                    translationX: 0,\n                    y: chat.isReceivingMessage ? 0 : 20\n                ))\n            }\n        }\n    }\n}\n\nstruct ChatPanelInputArea: View {\n    let chat: StoreOf<Chat>\n    @FocusState var focusedField: Chat.State.Field?\n\n    var body: some View {\n        HStack {\n            clearButton\n            InputAreaTextEditor(chat: chat, focusedField: $focusedField)\n        }\n        .padding(8)\n        .background(.ultraThickMaterial)\n    }\n\n    @MainActor\n    var clearButton: some View {\n        Button(action: {\n            chat.send(.clearButtonTap)\n        }) {\n            Group {\n                if #available(macOS 13.0, *) {\n                    Image(systemName: \"eraser.line.dashed.fill\")\n                } else {\n                    Image(systemName: \"trash.fill\")\n                }\n            }\n            .padding(6)\n            .background {\n                Circle().fill(Color(nsColor: .controlBackgroundColor))\n            }\n            .overlay {\n                Circle().stroke(Color(nsColor: .controlColor), lineWidth: 1)\n            }\n        }\n        .buttonStyle(.plain)\n    }\n\n    struct InputAreaTextEditor: View {\n        @Perception.Bindable var chat: StoreOf<Chat>\n        var focusedField: FocusState<Chat.State.Field?>.Binding\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack(spacing: 0) {\n                    AutoresizingCustomTextEditor(\n                        text: $chat.typedMessage,\n                        font: .systemFont(ofSize: 14),\n                        isEditable: true,\n                        maxHeight: 400,\n                        onSubmit: { chat.send(.sendButtonTapped) },\n                        completions: chatAutoCompletion\n                    )\n                    .focused(focusedField, equals: .textField)\n                    .bind($chat.focusedField, to: focusedField)\n                    .padding(8)\n                    .fixedSize(horizontal: false, vertical: true)\n\n                    Button(action: {\n                        chat.send(.sendButtonTapped)\n                    }) {\n                        Image(systemName: \"paperplane.fill\")\n                            .padding(8)\n                    }\n                    .buttonStyle(.plain)\n                    .disabled(chat.isReceivingMessage)\n                    .keyboardShortcut(KeyEquivalent.return, modifiers: [])\n                }\n                .frame(maxWidth: .infinity)\n                .background {\n                    RoundedRectangle(cornerRadius: 6)\n                        .fill(Color(nsColor: .controlBackgroundColor))\n                }\n                .overlay {\n                    RoundedRectangle(cornerRadius: 6)\n                        .stroke(Color(nsColor: .controlColor), lineWidth: 1)\n                }\n                .background {\n                    Button(action: {\n                        chat.send(.returnButtonTapped)\n                    }) {\n                        EmptyView()\n                    }\n                    .keyboardShortcut(KeyEquivalent.return, modifiers: [.shift])\n\n                    Button(action: {\n                        focusedField.wrappedValue = .textField\n                    }) {\n                        EmptyView()\n                    }\n                    .keyboardShortcut(\"l\", modifiers: [.command])\n                }\n            }\n        }\n\n        func chatAutoCompletion(text: String, proposed: [String], range: NSRange) -> [String] {\n            guard text.count == 1 else { return [] }\n            let plugins = [String]() // chat.pluginIdentifiers.map { \"/\\($0)\" }\n            let availableFeatures = plugins + [\n                \"/exit\",\n                \"@code\",\n                \"@sense\",\n                \"@project\",\n                \"@web\",\n            ]\n\n            let result: [String] = availableFeatures\n                .filter { $0.hasPrefix(text) && $0 != text }\n                .compactMap {\n                    guard let index = $0.index(\n                        $0.startIndex,\n                        offsetBy: range.location,\n                        limitedBy: $0.endIndex\n                    ) else { return nil }\n                    return String($0[index...])\n                }\n            return result\n        }\n    }\n}\n\n// MARK: - Previews\n\nstruct ChatPanel_Preview: PreviewProvider {\n    static let history: [DisplayedChatMessage] = [\n        .init(\n            id: \"1\",\n            role: .user,\n            text: \"**Hello**\",\n            references: []\n        ),\n        .init(\n            id: \"2\",\n            role: .assistant,\n            text: \"\"\"\n            ```swift\n            func foo() {}\n            ```\n            **Hey**! What can I do for you?**Hey**! What can I do for you?**Hey**! What can I do for you?**Hey**! What can I do for you?\n            \"\"\",\n            references: [\n                .init(\n                    title: \"Hello Hello Hello Hello\",\n                    subtitle: \"Hi Hi Hi Hi\",\n                    uri: \"https://google.com\",\n                    startLine: nil,\n                    kind: .symbol(.class, uri: \"https://google.com\", startLine: nil, endLine: nil)\n                ),\n            ]\n        ),\n        .init(\n            id: \"7\",\n            role: .ignored,\n            text: \"Ignored\",\n            references: []\n        ),\n        .init(\n            id: \"6\",\n            role: .tool,\n            text: \"\"\"\n            Searching for something...\n            - abc\n            - [def](https://1.com)\n            > hello\n            > hi\n            \"\"\",\n            references: []\n        ),\n        .init(\n            id: \"5\",\n            role: .assistant,\n            text: \"Yooo\",\n            references: []\n        ),\n        .init(\n            id: \"4\",\n            role: .user,\n            text: \"Yeeeehh\",\n            references: []\n        ),\n        .init(\n            id: \"3\",\n            role: .user,\n            text: #\"\"\"\n            Please buy me a coffee!\n            | Coffee | Milk |\n            |--------|------|\n            | Espresso | No |\n            | Latte | Yes |\n\n            ```swift\n            func foo() {}\n            ```\n            ```objectivec\n            - (void)bar {}\n            ```\n            \"\"\"#,\n            references: []\n        ),\n    ]\n\n    static var previews: some View {\n        ChatPanel(chat: .init(\n            initialState: .init(history: ChatPanel_Preview.history, isReceivingMessage: true),\n            reducer: { Chat(service: .init()) }\n        ))\n        .frame(width: 450, height: 1200)\n        .colorScheme(.dark)\n    }\n}\n\nstruct ChatPanel_EmptyChat_Preview: PreviewProvider {\n    static var previews: some View {\n        ChatPanel(chat: .init(\n            initialState: .init(history: [DisplayedChatMessage](), isReceivingMessage: false),\n            reducer: { Chat(service: .init()) }\n        ))\n        .padding()\n        .frame(width: 450, height: 600)\n        .colorScheme(.dark)\n    }\n}\n\nstruct ChatPanel_InputText_Preview: PreviewProvider {\n    static var previews: some View {\n        ChatPanel(chat: .init(\n            initialState: .init(history: ChatPanel_Preview.history, isReceivingMessage: false),\n            reducer: { Chat(service: .init()) }\n        ))\n        .padding()\n        .frame(width: 450, height: 600)\n        .colorScheme(.dark)\n    }\n}\n\nstruct ChatPanel_InputMultilineText_Preview: PreviewProvider {\n    static var previews: some View {\n        ChatPanel(\n            chat: .init(\n                initialState: .init(\n                    typedMessage: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce turpis dolor, malesuada quis fringilla sit amet, placerat at nunc. Suspendisse orci tortor, tempor nec blandit a, malesuada vel tellus. Nunc sed leo ligula. Ut at ligula eget turpis pharetra tristique. Integer luctus leo non elit rhoncus fermentum.\",\n\n                    history: ChatPanel_Preview.history,\n                    isReceivingMessage: false\n                ),\n                reducer: { Chat(service: .init()) }\n            )\n        )\n        .padding()\n        .frame(width: 450, height: 600)\n        .colorScheme(.dark)\n    }\n}\n\nstruct ChatPanel_Light_Preview: PreviewProvider {\n    static var previews: some View {\n        ChatPanel(chat: .init(\n            initialState: .init(history: ChatPanel_Preview.history, isReceivingMessage: true),\n            reducer: { Chat(service: .init()) }\n        ))\n        .padding()\n        .frame(width: 450, height: 600)\n        .colorScheme(.light)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/CodeBlockHighlighter.swift",
    "content": "import Combine\nimport ComposableArchitecture\nimport DebounceFunction\nimport Foundation\nimport MarkdownUI\nimport Perception\nimport SharedUIComponents\nimport SwiftUI\n\n/// Use this instead of the built in ``CodeBlockView`` to highlight code blocks asynchronously,\n/// so that the UI doesn't freeze when rendering large code blocks.\nstruct AsyncCodeBlockView: View {\n    @Perceptible\n    class Storage {\n        static let queue = DispatchQueue(\n            label: \"chat-code-block-highlight\",\n            qos: .userInteractive,\n            attributes: .concurrent\n        )\n\n        var highlighted: AttributedString?\n        @PerceptionIgnored var debounceFunction: DebounceFunction<AsyncCodeBlockView>?\n        @PerceptionIgnored private var highlightTask: Task<Void, Error>?\n\n        init() {\n            debounceFunction = .init(duration: 0.5, block: { [weak self] view in\n                self?.highlight(for: view)\n            })\n        }\n\n        func highlight(debounce: Bool, for view: AsyncCodeBlockView) {\n            if debounce {\n                Task { await debounceFunction?(view) }\n            } else {\n                highlight(for: view)\n            }\n        }\n\n        func highlight(for view: AsyncCodeBlockView) {\n            highlightTask?.cancel()\n            let content = view.content\n            let language = view.fenceInfo ?? \"\"\n            let brightMode = view.colorScheme != .dark\n            let font = CodeHighlighting.SendableFont(font: view.font)\n            highlightTask = Task {\n                let string = await withUnsafeContinuation { continuation in\n                    Self.queue.async {\n                        let content = CodeHighlighting.highlightedCodeBlock(\n                            code: content,\n                            language: language,\n                            scenario: \"chat\",\n                            brightMode: brightMode,\n                            font:font\n                        )\n                        continuation.resume(returning: AttributedString(content))\n                    }\n                }\n                try Task.checkCancellation()\n                await MainActor.run {\n                    self.highlighted = string\n                }\n            }\n        }\n    }\n\n    let fenceInfo: String?\n    let content: String\n    let font: NSFont\n\n    @Environment(\\.colorScheme) var colorScheme\n    @State var storage = Storage()\n    @AppStorage(\\.syncChatCodeHighlightTheme) var syncCodeHighlightTheme\n    @AppStorage(\\.codeForegroundColorLight) var codeForegroundColorLight\n    @AppStorage(\\.codeBackgroundColorLight) var codeBackgroundColorLight\n    @AppStorage(\\.codeForegroundColorDark) var codeForegroundColorDark\n    @AppStorage(\\.codeBackgroundColorDark) var codeBackgroundColorDark\n\n    init(fenceInfo: String?, content: String, font: NSFont) {\n        self.fenceInfo = fenceInfo\n        self.content = content.hasSuffix(\"\\n\") ? String(content.dropLast()) : content\n        self.font = font\n    }\n\n    var body: some View {\n        WithPerceptionTracking {\n            Group {\n                if let highlighted = storage.highlighted {\n                    Text(highlighted)\n                } else {\n                    Text(content).font(.init(font))\n                }\n            }\n            .onAppear {\n                storage.highlight(debounce: false, for: self)\n            }\n            .onChange(of: colorScheme) { _ in\n                storage.highlight(debounce: false, for: self)\n            }\n            .onChange(of: syncCodeHighlightTheme) { _ in\n                storage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: codeForegroundColorLight) { _ in\n                storage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: codeBackgroundColorLight) { _ in\n                storage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: codeForegroundColorDark) { _ in\n                storage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: codeBackgroundColorDark) { _ in\n                storage.highlight(debounce: true, for: self)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Styles.swift",
    "content": "import AppKit\nimport MarkdownUI\nimport SharedUIComponents\nimport SwiftUI\n\nextension Color {\n    static var contentBackground: Color {\n        Color(nsColor: NSColor(name: nil, dynamicProvider: { appearance in\n            if appearance.isDarkMode {\n                return #colorLiteral(red: 0.1580096483, green: 0.1730263829, blue: 0.2026666105, alpha: 1)\n            }\n            return #colorLiteral(red: 0.9896564803, green: 0.9896564803, blue: 0.9896564803, alpha: 1)\n        }))\n    }\n\n    static var userChatContentBackground: Color {\n        Color(nsColor: NSColor(name: nil, dynamicProvider: { appearance in\n            if appearance.isDarkMode {\n                return #colorLiteral(red: 0.2284317913, green: 0.2145925438, blue: 0.3214019983, alpha: 1)\n            }\n            return #colorLiteral(red: 0.9458052187, green: 0.9311983998, blue: 0.9906365955, alpha: 1)\n        }))\n    }\n}\n\nextension NSAppearance {\n    var isDarkMode: Bool {\n        if bestMatch(from: [.darkAqua, .aqua]) == .darkAqua {\n            return true\n        } else {\n            return false\n        }\n    }\n}\n\nextension View {\n    var messageBubbleCornerRadius: Double { 8 }\n\n    func codeBlockLabelStyle() -> some View {\n        relativeLineSpacing(.em(0.225))\n            .markdownTextStyle {\n                FontFamilyVariant(.monospaced)\n                FontSize(.em(0.85))\n            }\n            .padding(16)\n            .padding(.top, 14)\n    }\n\n    func codeBlockStyle(\n        _ configuration: CodeBlockConfiguration,\n        backgroundColor: Color,\n        labelColor: Color\n    ) -> some View {\n        background(backgroundColor)\n            .clipShape(RoundedRectangle(cornerRadius: 6))\n            .overlay(alignment: .top) {\n                HStack(alignment: .center) {\n                    Text(configuration.language ?? \"code\")\n                        .foregroundStyle(labelColor)\n                        .font(.callout.bold())\n                        .padding(.leading, 8)\n                        .lineLimit(1)\n                    Spacer()\n                    CopyButton {\n                        NSPasteboard.general.clearContents()\n                        NSPasteboard.general.setString(configuration.content, forType: .string)\n                    }\n                }\n            }\n            .overlay {\n                RoundedRectangle(cornerRadius: 6).stroke(Color.primary.opacity(0.05), lineWidth: 1)\n            }\n            .markdownMargin(top: 4, bottom: 16)\n    }\n}\n\nfinal class VerticalScrollingFixHostingView<Content>: NSHostingView<Content> where Content: View {\n    override func wantsForwardedScrollEvents(for axis: NSEvent.GestureAxis) -> Bool {\n        return axis == .vertical\n    }\n}\n\nstruct VerticalScrollingFixViewRepresentable<Content>: NSViewRepresentable where Content: View {\n    let content: Content\n\n    func makeNSView(context: Context) -> NSHostingView<Content> {\n        return VerticalScrollingFixHostingView<Content>(rootView: content)\n    }\n\n    func updateNSView(_ nsView: NSHostingView<Content>, context: Context) {}\n}\n\nstruct VerticalScrollingFixWrapper<Content>: View where Content: View {\n    let content: () -> Content\n\n    init(@ViewBuilder content: @escaping () -> Content) {\n        self.content = content\n    }\n\n    var body: some View {\n        VerticalScrollingFixViewRepresentable(content: self.content())\n    }\n}\n\nextension View {\n    /// https://stackoverflow.com/questions/64920744/swiftui-nested-scrollviews-problem-on-macos\n    @ViewBuilder func workaroundForVerticalScrollingBugInMacOS() -> some View {\n        VerticalScrollingFixWrapper { self }\n    }\n}\n\nstruct RoundedCorners: Shape {\n    var tl: CGFloat = 0.0\n    var tr: CGFloat = 0.0\n    var bl: CGFloat = 0.0\n    var br: CGFloat = 0.0\n\n    func path(in rect: CGRect) -> Path {\n        Path { path in\n\n            let w = rect.size.width\n            let h = rect.size.height\n\n            // Make sure we do not exceed the size of the rectangle\n            let tr = min(min(self.tr, h / 2), w / 2)\n            let tl = min(min(self.tl, h / 2), w / 2)\n            let bl = min(min(self.bl, h / 2), w / 2)\n            let br = min(min(self.br, h / 2), w / 2)\n\n            path.move(to: CGPoint(x: w / 2.0, y: 0))\n            path.addLine(to: CGPoint(x: w - tr, y: 0))\n            path.addArc(\n                center: CGPoint(x: w - tr, y: tr),\n                radius: tr,\n                startAngle: Angle(degrees: -90),\n                endAngle: Angle(degrees: 0),\n                clockwise: false\n            )\n            path.addLine(to: CGPoint(x: w, y: h - br))\n            path.addArc(\n                center: CGPoint(x: w - br, y: h - br),\n                radius: br,\n                startAngle: Angle(degrees: 0),\n                endAngle: Angle(degrees: 90),\n                clockwise: false\n            )\n            path.addLine(to: CGPoint(x: bl, y: h))\n            path.addArc(\n                center: CGPoint(x: bl, y: h - bl),\n                radius: bl,\n                startAngle: Angle(degrees: 90),\n                endAngle: Angle(degrees: 180),\n                clockwise: false\n            )\n            path.addLine(to: CGPoint(x: 0, y: tl))\n            path.addArc(\n                center: CGPoint(x: tl, y: tl),\n                radius: tl,\n                startAngle: Angle(degrees: 180),\n                endAngle: Angle(degrees: 270),\n                clockwise: false\n            )\n            path.closeSubpath()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/BotMessage.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport MarkdownUI\nimport SharedUIComponents\nimport SwiftUI\n\nstruct BotMessage: View {\n    var r: Double { messageBubbleCornerRadius }\n    let id: String\n    let text: String\n    let markdownContent: MarkdownContent\n    let references: [DisplayedChatMessage.Reference]\n    let chat: StoreOf<Chat>\n    @Environment(\\.colorScheme) var colorScheme\n\n    @State var isReferencesPresented = false\n    @State var isReferencesHovered = false\n\n    var body: some View {\n        HStack(alignment: .bottom, spacing: 2) {\n            VStack(alignment: .leading, spacing: 16) {\n                if !references.isEmpty {\n                    Button(action: {\n                        isReferencesPresented.toggle()\n                    }, label: {\n                        HStack(spacing: 4) {\n                            Image(systemName: \"plus.circle\")\n                            Text(\"Used \\(references.count) references\")\n                        }\n                        .padding(8)\n                        .background {\n                            RoundedRectangle(cornerRadius: r - 4)\n                                .foregroundStyle(Color(isReferencesHovered ? .black : .clear))\n                        }\n                        .overlay {\n                            RoundedRectangle(cornerRadius: r - 4)\n                                .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                        }\n                        .foregroundStyle(.secondary)\n                    })\n                    .buttonStyle(.plain)\n                    .popover(isPresented: $isReferencesPresented, arrowEdge: .trailing) {\n                        ReferenceList(references: references, chat: chat)\n                    }\n                }\n\n                ThemedMarkdownText(markdownContent)\n            }\n            .frame(alignment: .trailing)\n            .padding()\n            .background {\n                RoundedCorners(tl: r, tr: r, bl: 0, br: r)\n                    .fill(Color.contentBackground)\n            }\n            .overlay {\n                RoundedCorners(tl: r, tr: r, bl: 0, br: r)\n                    .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n            }\n            .padding(.leading, 8)\n            .shadow(color: .black.opacity(0.05), radius: 6)\n            .contextMenu {\n                Button(\"Copy\") {\n                    NSPasteboard.general.clearContents()\n                    NSPasteboard.general.setString(text, forType: .string)\n                }\n\n                Button(\"Set as Extra System Prompt\") {\n                    chat.send(.setAsExtraPromptButtonTapped(id))\n                }\n\n                Divider()\n\n                Button(\"Delete\") {\n                    chat.send(.deleteMessageButtonTapped(id))\n                }\n            }\n\n            CopyButton {\n                NSPasteboard.general.clearContents()\n                NSPasteboard.general.setString(text, forType: .string)\n            }\n        }\n        .frame(maxWidth: .infinity, alignment: .leading)\n        .padding(.trailing, 2)\n    }\n}\n\nstruct ReferenceList: View {\n    let references: [DisplayedChatMessage.Reference]\n    let chat: StoreOf<Chat>\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollView {\n                VStack(alignment: .leading, spacing: 8) {\n                    ForEach(0..<references.endIndex, id: \\.self) { index in\n                        WithPerceptionTracking {\n                            let reference = references[index]\n\n                            Button(action: {\n                                chat.send(.referenceClicked(reference))\n                            }) {\n                                HStack(spacing: 8) {\n                                    ReferenceIcon(kind: reference.kind)\n                                        .layoutPriority(2)\n                                    Text(reference.title)\n                                        .truncationMode(.middle)\n                                        .lineLimit(1)\n                                        .layoutPriority(1)\n                                    Text(reference.subtitle)\n                                        .lineLimit(1)\n                                        .truncationMode(.middle)\n                                        .foregroundStyle(.tertiary)\n                                        .layoutPriority(0)\n                                }\n                                .padding(.vertical, 4)\n                                .padding(.horizontal, 4)\n                                .frame(maxWidth: .infinity, alignment: .leading)\n                                .overlay {\n                                    RoundedRectangle(cornerRadius: 4)\n                                        .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                                }\n                            }\n                            .buttonStyle(.plain)\n                        }\n                    }\n                }\n                .padding()\n            }\n            .frame(maxWidth: 500, maxHeight: 500)\n        }\n    }\n}\n\nstruct ReferenceIcon: View {\n    let kind: DisplayedChatMessage.Reference.Kind\n\n    var body: some View {\n        RoundedRectangle(cornerRadius: 4)\n            .fill({\n                switch kind {\n                case .symbol(let symbol, _, _, _):\n                    switch symbol {\n                    case .class:\n                        Color.purple\n                    case .struct:\n                        Color.purple\n                    case .enum:\n                        Color.purple\n                    case .actor:\n                        Color.purple\n                    case .protocol:\n                        Color.purple\n                    case .extension:\n                        Color.indigo\n                    case .case:\n                        Color.green\n                    case .property:\n                        Color.teal\n                    case .typealias:\n                        Color.orange\n                    case .function:\n                        Color.teal\n                    case .method:\n                        Color.blue\n                    }\n                case .text:\n                    Color.gray\n                case .webpage:\n                    Color.blue\n                case .textFile:\n                    Color.gray\n                case .other:\n                    Color.gray\n                case .error:\n                    Color.red\n                }\n            }())\n            .frame(width: 22, height: 22)\n            .overlay(alignment: .center) {\n                Group {\n                    switch kind {\n                    case .symbol(let symbol, _, _, _):\n                        switch symbol {\n                        case .class:\n                            Text(\"C\")\n                        case .struct:\n                            Text(\"S\")\n                        case .enum:\n                            Text(\"E\")\n                        case .actor:\n                            Text(\"A\")\n                        case .protocol:\n                            Text(\"Pr\")\n                        case .extension:\n                            Text(\"Ex\")\n                        case .case:\n                            Text(\"K\")\n                        case .property:\n                            Text(\"P\")\n                        case .typealias:\n                            Text(\"T\")\n                        case .function:\n                            Text(\"𝑓\")\n                        case .method:\n                            Text(\"M\")\n                        }\n                    case .text:\n                        Text(\"Tx\")\n                    case .webpage:\n                        Text(\"Wb\")\n                    case .other:\n                        Text(\"Ot\")\n                    case .textFile:\n                        Text(\"Tx\")\n                    case .error:\n                        Text(\"Er\")\n                    }\n                }\n                .font(.system(size: 12).monospaced())\n                .foregroundColor(.white)\n            }\n    }\n}\n\n#Preview(\"Bot Message\") {\n    let text = \"\"\"\n        **Hey**! What can I do for you?**Hey**! What can I do for you?**Hey**! What can I do for you?**Hey**! What can I do for you?\n        ```swift\n        func foo() {}\n        ```\n        \"\"\"\n    return BotMessage(\n        id: \"1\",\n        text: text,\n        markdownContent: .init(text),\n        references: .init(repeating: .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.class, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ), count: 20),\n        chat: .init(initialState: .init(), reducer: { Chat(service: .init()) })\n    )\n    .padding()\n    .fixedSize(horizontal: true, vertical: true)\n}\n\n#Preview(\"Reference List\") {\n    ReferenceList(references: [\n        .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.class, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ),\n        .init(\n            title: \"BotMessage.swift:100-102\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.struct, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ),\n        .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.function, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ),\n        .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.case, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ),\n        .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .symbol(.extension, uri: \"https://google.com\", startLine: nil, endLine: nil)\n        ),\n        .init(\n            title: \"ReferenceList\",\n            subtitle: \"/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift:100\",\n            uri: \"https://google.com\",\n            startLine: nil,\n            kind: .webpage(uri: \"https://google.com\")\n        ),\n    ], chat: .init(initialState: .init(), reducer: { Chat(service: .init()) }))\n}\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/FunctionCallMarkdownTheme.swift",
    "content": "import Foundation\nimport MarkdownUI\nimport SwiftUI\n\nextension MarkdownUI.Theme {\n    static func functionCall(fontSize: Double) -> MarkdownUI.Theme {\n        .gitHub.text {\n            ForegroundColor(.secondary)\n            BackgroundColor(Color.clear)\n            FontSize(fontSize - 1)\n        }\n        .list { configuration in\n            configuration.label\n                .markdownMargin(top: 4, bottom: 4)\n        }\n        .paragraph { configuration in\n            configuration.label\n                .markdownMargin(top: 0, bottom: 4)\n        }\n        .codeBlock { configuration in\n            configuration.label\n                .relativeLineSpacing(.em(0.225))\n                .markdownTextStyle {\n                    FontFamilyVariant(.monospaced)\n                    FontSize(.em(0.85))\n                }\n                .padding(16)\n                .background(Color(nsColor: .textBackgroundColor).opacity(0.7))\n                .clipShape(RoundedRectangle(cornerRadius: 6))\n                .markdownMargin(top: 4, bottom: 4)\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/FunctionMessage.swift",
    "content": "import Foundation\nimport MarkdownUI\nimport SwiftUI\n\nstruct FunctionMessage: View {\n    let id: String\n    let text: String\n    @AppStorage(\\.chatFontSize) var chatFontSize\n\n    var body: some View {\n        Markdown(text)\n            .textSelection(.enabled)\n            .markdownTheme(.functionCall(fontSize: chatFontSize))\n            .padding(.vertical, 2)\n            .padding(.trailing, 2)\n    }\n}\n\n#Preview {\n    FunctionMessage(id: \"1\", text: \"\"\"\n    Searching for something...\n    - abc\n    - [def](https://1.com)\n    > hello\n    > hi\n    \"\"\")\n    .padding()\n    .fixedSize()\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/InstructionMarkdownTheme.swift",
    "content": "import Foundation\nimport MarkdownUI\nimport SwiftUI\n\nextension MarkdownUI.Theme {\n    static func instruction(fontSize: Double) -> MarkdownUI.Theme {\n        .gitHub.text {\n            ForegroundColor(.primary)\n            BackgroundColor(Color.clear)\n            FontSize(fontSize)\n        }\n        .code {\n            FontFamilyVariant(.monospaced)\n            FontSize(.em(0.85))\n            BackgroundColor(Color.secondary.opacity(0.2))\n        }\n        .codeBlock { configuration in\n            let wrapCode = UserDefaults.shared.value(for: \\.wrapCodeInChatCodeBlock)\n\n            if wrapCode {\n                configuration.label\n                    .codeBlockLabelStyle()\n                    .codeBlockStyle(\n                        configuration,\n                        backgroundColor: Color(nsColor: .textBackgroundColor).opacity(0.7),\n                        labelColor: Color.secondary.opacity(0.7)\n                    )\n            } else {\n                ScrollView(.horizontal) {\n                    configuration.label\n                        .codeBlockLabelStyle()\n                }\n                .workaroundForVerticalScrollingBugInMacOS()\n                .codeBlockStyle(\n                    configuration,\n                    backgroundColor: Color(nsColor: .textBackgroundColor).opacity(0.7),\n                    labelColor: Color.secondary.opacity(0.7)\n                )\n            }\n        }\n        .table { configuration in\n            configuration.label\n                .fixedSize(horizontal: false, vertical: true)\n                .markdownTableBorderStyle(.init(\n                    color: .init(nsColor: .separatorColor),\n                    strokeStyle: .init(lineWidth: 1)\n                ))\n                .markdownTableBackgroundStyle(\n                    .alternatingRows(Color.secondary.opacity(0.1), Color.secondary.opacity(0.2))\n                )\n                .markdownMargin(top: 0, bottom: 16)\n        }\n        .tableCell { configuration in\n            configuration.label\n                .markdownTextStyle {\n                    if configuration.row == 0 {\n                        FontWeight(.semibold)\n                    }\n                    BackgroundColor(nil)\n                }\n                .fixedSize(horizontal: false, vertical: true)\n                .padding(.vertical, 6)\n                .padding(.horizontal, 13)\n                .relativeLineSpacing(.em(0.25))\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/Instructions.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport MarkdownUI\nimport SwiftUI\n\nstruct Instruction: View {\n    let chat: StoreOf<Chat>\n\n    var body: some View {\n        WithPerceptionTracking {\n            Group {\n                Markdown(\n                \"\"\"\n                You can use plugins to perform various tasks.\n                \n                | Plugin Name | Description |\n                | --- | --- |\n                | `/shell` | Runs a command under the project root |\n                | `/shortcut(name)` | Runs a shortcut from the Shortcuts.app, with the previous message as input |\n                \n                To use plugins, you can prefix a message with `/pluginName`.\n                \"\"\"\n                )\n                .modifier(InstructionModifier())\n                \n                Markdown(\n                \"\"\"\n                You can use scopes to give the bot extra abilities.\n                \n                | Scope Name | Abilities |\n                | --- | --- |\n                | `@file` | Read the metadata of the editing file |\n                | `@code` | Read the code and metadata in the editing file |\n                | `@sense`| Experimental. Read the relevant code of the focused editor |\n                | `@project` | Experimental. Access content of the project |\n                | `@web` (beta) | Search on Bing or query from a web page |\n                \n                To use scopes, you can prefix a message with `@code`.\n                \n                You can use shorthand to represent a scope, such as `@c`, and enable multiple scopes with `@c+web`.\n                \"\"\"\n                )\n                .modifier(InstructionModifier())\n                \n                let scopes = chat.chatMenu.defaultScopes\n                Markdown(\n                \"\"\"\n                Hello, I am your AI programming assistant. I can identify issues, explain and even improve code.\n                \n                \\({\n                    if scopes.isEmpty {\n                        return \"No scope is enabled by default\"\n                    } else {\n                        let scopes = scopes.map(\\.rawValue).sorted()\n                            .joined(separator: \", \")\n                        return \"Default scopes: `\\(scopes)`\"\n                    }\n                }())\n                \"\"\"\n                )\n                .modifier(InstructionModifier())\n            }\n        }\n    }\n\n    struct InstructionModifier: ViewModifier {\n        @AppStorage(\\.chatFontSize) var chatFontSize\n\n        func body(content: Content) -> some View {\n            content\n                .textSelection(.enabled)\n                .markdownTheme(.instruction(fontSize: chatFontSize))\n                .opacity(0.8)\n                .frame(maxWidth: .infinity, alignment: .leading)\n                .padding()\n                .overlay {\n                    RoundedRectangle(cornerRadius: 8)\n                        .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/ThemedMarkdownText.swift",
    "content": "import Foundation\nimport MarkdownUI\nimport SwiftUI\n\nstruct ThemedMarkdownText: View {\n    @AppStorage(\\.syncChatCodeHighlightTheme) var syncCodeHighlightTheme\n    @AppStorage(\\.codeForegroundColorLight) var codeForegroundColorLight\n    @AppStorage(\\.codeBackgroundColorLight) var codeBackgroundColorLight\n    @AppStorage(\\.codeForegroundColorDark) var codeForegroundColorDark\n    @AppStorage(\\.codeBackgroundColorDark) var codeBackgroundColorDark\n    @AppStorage(\\.chatFontSize) var chatFontSize\n    @AppStorage(\\.chatCodeFont) var chatCodeFont\n    @Environment(\\.colorScheme) var colorScheme\n\n    let content: MarkdownContent\n\n    init(_ text: String) {\n        content = .init(text)\n    }\n\n    init(_ content: MarkdownContent) {\n        self.content = content\n    }\n\n    var body: some View {\n        Markdown(content)\n            .textSelection(.enabled)\n            .markdownTheme(.custom(\n                fontSize: chatFontSize,\n                codeFont: chatCodeFont.value.nsFont,\n                codeBlockBackgroundColor: {\n                    if syncCodeHighlightTheme {\n                        if colorScheme == .light, let color = codeBackgroundColorLight.value {\n                            return color.swiftUIColor\n                        } else if let color = codeBackgroundColorDark.value {\n                            return color.swiftUIColor\n                        }\n                    }\n\n                    return Color(nsColor: .textBackgroundColor).opacity(0.7)\n                }(),\n                codeBlockLabelColor: {\n                    if syncCodeHighlightTheme {\n                        if colorScheme == .light,\n                           let color = codeForegroundColorLight.value\n                        {\n                            return color.swiftUIColor.opacity(0.5)\n                        } else if let color = codeForegroundColorDark.value {\n                            return color.swiftUIColor.opacity(0.5)\n                        }\n                    }\n                    return Color.secondary.opacity(0.7)\n                }()\n            ))\n    }\n}\n\n// MARK: - Theme\n\nextension MarkdownUI.Theme {\n    static func custom(\n        fontSize: Double,\n        codeFont: NSFont,\n        codeBlockBackgroundColor: Color,\n        codeBlockLabelColor: Color\n    ) -> MarkdownUI.Theme {\n        .gitHub.text {\n            ForegroundColor(.primary)\n            BackgroundColor(Color.clear)\n            FontSize(fontSize)\n        }\n        .codeBlock { configuration in\n            let wrapCode = UserDefaults.shared.value(for: \\.wrapCodeInChatCodeBlock)\n                || [\n                    \"plaintext\", \"text\", \"markdown\", \"sh\", \"console\", \"bash\", \"shell\", \"latex\",\n                    \"tex\"\n                ]\n                .contains(configuration.language)\n\n            if wrapCode {\n                AsyncCodeBlockView(\n                    fenceInfo: configuration.language,\n                    content: configuration.content,\n                    font: codeFont\n                )\n                .codeBlockLabelStyle()\n                .codeBlockStyle(\n                    configuration,\n                    backgroundColor: codeBlockBackgroundColor,\n                    labelColor: codeBlockLabelColor\n                )\n            } else {\n                ScrollView(.horizontal) {\n                    AsyncCodeBlockView(\n                        fenceInfo: configuration.language,\n                        content: configuration.content,\n                        font: codeFont\n                    )\n                    .codeBlockLabelStyle()\n                }\n                .workaroundForVerticalScrollingBugInMacOS()\n                .codeBlockStyle(\n                    configuration,\n                    backgroundColor: codeBlockBackgroundColor,\n                    labelColor: codeBlockLabelColor\n                )\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatGPTChatTab/Views/UserMessage.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport MarkdownUI\nimport SwiftUI\n\nstruct UserMessage: View {\n    var r: Double { messageBubbleCornerRadius }\n    let id: String\n    let text: String\n    let markdownContent: MarkdownContent\n    let chat: StoreOf<Chat>\n    @Environment(\\.colorScheme) var colorScheme\n\n    var body: some View {\n        ThemedMarkdownText(markdownContent)\n            .frame(alignment: .leading)\n            .padding()\n            .background {\n                RoundedCorners(tl: r, tr: r, bl: r, br: 0)\n                    .fill(Color.userChatContentBackground)\n            }\n            .overlay {\n                RoundedCorners(tl: r, tr: r, bl: r, br: 0)\n                    .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n            }\n            .padding(.leading)\n            .padding(.trailing, 8)\n            .shadow(color: .black.opacity(0.05), radius: 6)\n            .frame(maxWidth: .infinity, alignment: .trailing)\n            .contextMenu {\n                Button(\"Copy\") {\n                    NSPasteboard.general.clearContents()\n                    NSPasteboard.general.setString(text, forType: .string)\n                }\n\n                Button(\"Send Again\") {\n                    chat.send(.resendMessageButtonTapped(id))\n                }\n\n                Button(\"Set as Extra System Prompt\") {\n                    chat.send(.setAsExtraPromptButtonTapped(id))\n                }\n\n                Divider()\n\n                Button(\"Delete\") {\n                    chat.send(.deleteMessageButtonTapped(id))\n                }\n            }\n    }\n}\n\n#Preview {\n    let text = #\"\"\"\n    Please buy me a coffee!\n    | Coffee | Milk |\n    |--------|------|\n    | Espresso | No |\n    | Latte | Yes |\n    ```swift\n    func foo() {}\n    ```\n    ```objectivec\n    - (void)bar {}\n    ```\n    \"\"\"#\n\n    return UserMessage(\n        id: \"A\",\n        text: text,\n        markdownContent: .init(text),\n        chat: .init(\n            initialState: .init(history: [] as [DisplayedChatMessage], isReceivingMessage: false),\n            reducer: { Chat(service: .init()) }\n        )\n    )\n    .padding()\n    .fixedSize(horizontal: true, vertical: true)\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/AllContextCollector.swift",
    "content": "import ActiveDocumentChatContextCollector\nimport ChatContextCollector\nimport SystemInfoChatContextCollector\nimport WebChatContextCollector\n#if canImport(ProChatContextCollectors)\nimport ProChatContextCollectors\nlet allContextCollectors: [any ChatContextCollector] = [\n    SystemInfoChatContextCollector(),\n    WebChatContextCollector(),\n    ProChatContextCollectors(),\n]\n#else\nlet allContextCollectors: [any ChatContextCollector] = [\n    SystemInfoChatContextCollector(),\n    ActiveDocumentChatContextCollector(),\n    WebChatContextCollector(),\n]\n#endif\n\n"
  },
  {
    "path": "Core/Sources/ChatService/AllPlugins.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\nimport ShortcutChatPlugin\nimport TerminalChatPlugin\n\nlet allPlugins: [LegacyChatPlugin.Type] = [\n    LegacyChatPluginWrapper<TerminalChatPlugin>.self,\n    LegacyChatPluginWrapper<ShortcutChatPlugin>.self,\n]\n\nprotocol LegacyChatPlugin: AnyObject {\n    static var command: String { get }\n    var name: String { get }\n\n    init(inside chatGPTService: any LegacyChatGPTServiceType, delegate: LegacyChatPluginDelegate)\n    func send(content: String, originalMessage: String) async\n    func cancel() async\n    func stopResponding() async\n}\n\nprotocol LegacyChatPluginDelegate: AnyObject {\n    func pluginDidStart(_ plugin: LegacyChatPlugin)\n    func pluginDidEnd(_ plugin: LegacyChatPlugin)\n    func pluginDidStartResponding(_ plugin: LegacyChatPlugin)\n    func pluginDidEndResponding(_ plugin: LegacyChatPlugin)\n    func shouldStartAnotherPlugin(_ type: LegacyChatPlugin.Type, withContent: String)\n}\n\nfinal class LegacyChatPluginWrapper<Plugin: ChatPlugin>: LegacyChatPlugin {\n    static var command: String { Plugin.command }\n    var name: String { Plugin.name }\n\n    let chatGPTService: any LegacyChatGPTServiceType\n    weak var delegate: LegacyChatPluginDelegate?\n    var isCancelled = false\n\n    required init(\n        inside chatGPTService: any LegacyChatGPTServiceType,\n        delegate: any LegacyChatPluginDelegate\n    ) {\n        self.chatGPTService = chatGPTService\n        self.delegate = delegate\n    }\n\n    func send(content: String, originalMessage: String) async {\n        delegate?.pluginDidStart(self)\n        delegate?.pluginDidStartResponding(self)\n\n        let id = \"\\(Self.command)-\\(UUID().uuidString)\"\n        var reply = ChatMessage(id: id, role: .assistant, content: \"\")\n\n        await chatGPTService.memory.mutateHistory { history in\n            history.append(.init(role: .user, content: originalMessage))\n        }\n\n        let plugin = Plugin()\n\n        let stream = await plugin.sendForComplicatedResponse(.init(\n            text: content,\n            arguments: [],\n            history: chatGPTService.memory.history\n        ))\n\n        do {\n            var actions = [(id: String, name: String)]()\n            var actionResults = [String: String]()\n            var message = \"\"\n\n            for try await response in stream {\n                guard !isCancelled else { break }\n                if Task.isCancelled { break }\n\n                switch response {\n                case .status:\n                    break\n                case let .content(content):\n                    switch content {\n                    case let .text(token):\n                        message.append(token)\n                    }\n                case .attachments:\n                    break\n                case let .startAction(id, task):\n                    actions.append((id: id, name: task))\n                case let .finishAction(id, result):\n                    actionResults[id] = switch result {\n                    case let .failure(error):\n                        error\n                    case let .success(result):\n                        result\n                    }\n                case .references:\n                    break\n                case .startNewMessage:\n                    break\n                case .reasoning:\n                    break\n                }\n\n                await chatGPTService.memory.mutateHistory { history in\n                    if history.last?.id == id {\n                        history.removeLast()\n                    }\n\n                    let actionString = actions.map {\n                        \"> \\($0.name): \\(actionResults[$0.id] ?? \"...\")\"\n                    }.joined(separator: \"\\n>\\n\")\n\n                    if message.isEmpty {\n                        reply.content = actionString\n                    } else {\n                        reply.content = \"\"\"\n                        \\(actionString)\n\n                        \\(message)\n                        \"\"\"\n                    }\n                    history.append(reply)\n                }\n            }\n        } catch {\n            await chatGPTService.memory.mutateHistory { history in\n                if history.last?.id == id {\n                    history.removeLast()\n                }\n                reply.content = error.localizedDescription\n                history.append(reply)\n            }\n        }\n\n        delegate?.pluginDidEndResponding(self)\n        delegate?.pluginDidEnd(self)\n    }\n\n    func cancel() async {\n        isCancelled = true\n    }\n\n    func stopResponding() async {\n        isCancelled = true\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/ChatFunctionProvider.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\n\nfinal class ChatFunctionProvider {\n    var functions: [any ChatGPTFunction] = []\n    \n    init() {}\n    \n    func removeAll() {\n        functions = []\n    }\n    \n    func append(functions others: [any ChatGPTFunction]) {\n        functions.append(contentsOf: others)\n    }\n}\n\nextension ChatFunctionProvider: ChatGPTFunctionProvider {\n    var functionCallStrategy: OpenAIService.FunctionCallStrategy? {\n        nil\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/ChatPluginController.swift",
    "content": "import Combine\nimport Foundation\nimport LegacyChatPlugin\nimport OpenAIService\n\nfinal class ChatPluginController {\n    let chatGPTService: any LegacyChatGPTServiceType\n    let plugins: [String: LegacyChatPlugin.Type]\n    var runningPlugin: LegacyChatPlugin?\n    weak var chatService: ChatService?\n\n    init(chatGPTService: any LegacyChatGPTServiceType, plugins: [LegacyChatPlugin.Type]) {\n        self.chatGPTService = chatGPTService\n        var all = [String: LegacyChatPlugin.Type]()\n        for plugin in plugins {\n            all[plugin.command.lowercased()] = plugin\n        }\n        self.plugins = all\n    }\n\n    convenience init(\n        chatGPTService: any LegacyChatGPTServiceType,\n        plugins: LegacyChatPlugin.Type...\n    ) {\n        self.init(chatGPTService: chatGPTService, plugins: plugins)\n    }\n\n    /// Handle the message in a plugin if required. Return false if no plugin handles the message.\n    func handleContent(_ content: String) async throws -> Bool {\n        // look for the prefix of content, see if there is something like /command.\n        // If there is, then we need to find the plugin that can handle this command.\n        // If there is no such plugin, then we just send the message to the GPT service.\n        let regex = try NSRegularExpression(pattern: #\"^\\/([a-zA-Z0-9]+)\"#)\n        let matches = regex.matches(in: content, range: NSRange(content.startIndex..., in: content))\n        if let match = matches.first {\n            let command = String(content[Range(match.range(at: 1), in: content)!]).lowercased()\n            // handle exit plugin\n            if command == \"exit\" {\n                if let plugin = runningPlugin {\n                    runningPlugin = nil\n                    _ = await chatGPTService.memory.mutateHistory { history in\n                        history.append(.init(\n                            role: .user,\n                            content: \"\",\n                            summary: \"Exit plugin \\(plugin.name).\"\n                        ))\n                        history.append(.init(\n                            role: .system,\n                            content: \"\",\n                            summary: \"Exited plugin \\(plugin.name).\"\n                        ))\n                    }\n                } else {\n                    _ = await chatGPTService.memory.mutateHistory { history in\n                        history.append(.init(\n                            role: .system,\n                            content: \"\",\n                            summary: \"No plugin running.\"\n                        ))\n                    }\n                }\n                return true\n            }\n\n            // pass message to running plugin\n            if let runningPlugin {\n                await runningPlugin.send(content: content, originalMessage: content)\n                return true\n            }\n\n            // pass message to new plugin\n            if let pluginType = plugins[command] {\n                let plugin = pluginType.init(inside: chatGPTService, delegate: self)\n                if #available(macOS 13.0, *) {\n                    await plugin.send(\n                        content: String(\n                            content.dropFirst(command.count + 1)\n                                .trimmingPrefix(while: { $0 == \" \" })\n                        ),\n                        originalMessage: content\n                    )\n                } else {\n                    await plugin.send(\n                        content: String(content.dropFirst(command.count + 1)),\n                        originalMessage: content\n                    )\n                }\n                return true\n            }\n\n            return false\n        } else if let runningPlugin {\n            // pass message to running plugin\n            await runningPlugin.send(content: content, originalMessage: content)\n            return true\n        } else {\n            return false\n        }\n    }\n\n    func stopResponding() async {\n        await runningPlugin?.stopResponding()\n    }\n\n    func cancel() async {\n        await runningPlugin?.cancel()\n    }\n}\n\n// MARK: - ChatPluginDelegate\n\nextension ChatPluginController: LegacyChatPluginDelegate {\n    public func pluginDidStartResponding(_: LegacyChatPlugin) {\n        chatService?.isReceivingMessage = true\n    }\n\n    public func pluginDidEndResponding(_: LegacyChatPlugin) {\n        chatService?.isReceivingMessage = false\n    }\n\n    public func pluginDidStart(_ plugin: LegacyChatPlugin) {\n        runningPlugin = plugin\n    }\n\n    public func pluginDidEnd(_ plugin: LegacyChatPlugin) {\n        if runningPlugin === plugin {\n            runningPlugin = nil\n        }\n    }\n\n    public func shouldStartAnotherPlugin(\n        _ type: LegacyChatPlugin.Type,\n        withContent content: String\n    ) {\n        let plugin = type.init(inside: chatGPTService, delegate: self)\n        Task {\n            await plugin.send(content: content, originalMessage: content)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/ChatService.swift",
    "content": "import ChatContextCollector\nimport LegacyChatPlugin\nimport Combine\nimport CustomCommandTemplateProcessor\nimport Foundation\nimport OpenAIService\nimport Preferences\n\npublic final class ChatService: ObservableObject {\n    public typealias Scope = ChatContext.Scope\n\n    public let memory: ContextAwareAutoManagedChatGPTMemory\n    public let configuration: OverridingChatGPTConfiguration\n    public let chatGPTService: any LegacyChatGPTServiceType\n    public var allPluginCommands: [String] { allPlugins.map { $0.command } }\n    @Published public internal(set) var chatHistory: [ChatMessage] = []\n    @Published public internal(set) var isReceivingMessage = false\n    @Published public internal(set) var systemPrompt = UserDefaults.shared\n        .value(for: \\.defaultChatSystemPrompt)\n    @Published public internal(set) var extraSystemPrompt = \"\"\n    @Published public var defaultScopes = Set<Scope>()\n\n    let pluginController: ChatPluginController\n    var cancellable = Set<AnyCancellable>()\n\n    init<T: LegacyChatGPTServiceType>(\n        memory: ContextAwareAutoManagedChatGPTMemory,\n        configuration: OverridingChatGPTConfiguration,\n        chatGPTService: T\n    ) {\n        self.memory = memory\n        self.configuration = configuration\n        self.chatGPTService = chatGPTService\n        pluginController = ChatPluginController(\n            chatGPTService: chatGPTService,\n            plugins: allPlugins\n        )\n\n        pluginController.chatService = self\n    }\n\n    public convenience init() {\n        let configuration = UserPreferenceChatGPTConfiguration().overriding()\n        /// Used by context collector\n        let extraConfiguration = configuration.overriding()\n        extraConfiguration.textWindowTerminator = {\n            guard let last = $0.last else { return false }\n            return last.isNewline || last.isPunctuation\n        }\n        let memory = ContextAwareAutoManagedChatGPTMemory(\n            configuration: extraConfiguration,\n            functionProvider: ChatFunctionProvider()\n        )\n        self.init(\n            memory: memory,\n            configuration: configuration,\n            chatGPTService: LegacyChatGPTService(\n                memory: memory,\n                configuration: extraConfiguration,\n                functionProvider: memory.functionProvider\n            )\n        )\n\n        resetDefaultScopes()\n\n        memory.chatService = self\n        memory.observeHistoryChange { [weak self] in\n            Task { [weak self] in\n                self?.chatHistory = await memory.history\n            }\n        }\n    }\n\n    public func resetDefaultScopes() {\n        var scopes = Set<Scope>()\n        if UserDefaults.shared.value(for: \\.enableFileScopeByDefaultInChatContext) {\n            scopes.insert(.file)\n        }\n\n        if UserDefaults.shared.value(for: \\.enableCodeScopeByDefaultInChatContext) {\n            scopes.insert(.code)\n        }\n\n        if UserDefaults.shared.value(for: \\.enableProjectScopeByDefaultInChatContext) {\n            scopes.insert(.project)\n        }\n\n        if UserDefaults.shared.value(for: \\.enableSenseScopeByDefaultInChatContext) {\n            scopes.insert(.sense)\n        }\n\n        if UserDefaults.shared.value(for: \\.enableWebScopeByDefaultInChatContext) {\n            scopes.insert(.web)\n        }\n\n        defaultScopes = scopes\n    }\n\n    public func send(content: String) async throws {\n        memory.contextController.defaultScopes = defaultScopes\n        guard !isReceivingMessage else { throw CancellationError() }\n        let handledInPlugin = try await pluginController.handleContent(content)\n        if handledInPlugin { return }\n        isReceivingMessage = true\n        defer { isReceivingMessage = false }\n\n        let stream = try await chatGPTService.send(content: content, summary: nil)\n        do {\n            for try await _ in stream {\n                try Task.checkCancellation()\n            }\n        } catch {}\n    }\n\n    public func sendAndWait(content: String) async throws -> String {\n        try await send(content: content)\n        if let reply = await memory.history.last(where: { $0.role == .assistant })?.content {\n            return reply\n        }\n        return \"\"\n    }\n\n    public func stopReceivingMessage() async {\n        await pluginController.stopResponding()\n        await chatGPTService.stopReceivingMessage()\n        isReceivingMessage = false\n\n        // if it's stopped before the tool calls finish, remove the message.\n        await memory.mutateHistory { history in\n            if history.last?.role == .assistant, history.last?.toolCalls != nil {\n                history.removeLast()\n            }\n        }\n    }\n\n    public func clearHistory() async {\n        await pluginController.cancel()\n        await memory.clearHistory()\n        await chatGPTService.stopReceivingMessage()\n        isReceivingMessage = false\n    }\n\n    public func resetPrompt() async {\n        systemPrompt = UserDefaults.shared.value(for: \\.defaultChatSystemPrompt)\n        extraSystemPrompt = \"\"\n    }\n\n    public func deleteMessage(id: String) async {\n        await memory.removeMessage(id)\n    }\n\n    public func resendMessage(id: String) async throws {\n        if let message = (await memory.history).first(where: { $0.id == id }),\n           let content = message.content\n        {\n            try await send(content: content)\n        }\n    }\n\n    public func setMessageAsExtraPrompt(id: String) async {\n        if let message = (await memory.history).first(where: { $0.id == id }),\n           let content = message.content\n        {\n            mutateExtraSystemPrompt(content)\n            await mutateHistory { history in\n                history.append(.init(\n                    role: .assistant,\n                    content: \"\",\n                    summary: \"System prompt updated.\"\n                ))\n            }\n        }\n    }\n\n    /// Setting it to `nil` to reset the system prompt\n    public func mutateSystemPrompt(_ newPrompt: String?) {\n        systemPrompt = newPrompt ?? UserDefaults.shared.value(for: \\.defaultChatSystemPrompt)\n    }\n\n    public func mutateExtraSystemPrompt(_ newPrompt: String) {\n        extraSystemPrompt = newPrompt\n    }\n\n    public func mutateHistory(_ mutator: @escaping (inout [ChatMessage]) -> Void) async {\n        await memory.mutateHistory(mutator)\n    }\n\n    public func handleCustomCommand(_ command: CustomCommand) async throws {\n        struct CustomCommandInfo {\n            var specifiedSystemPrompt: String?\n            var extraSystemPrompt: String?\n            var sendingMessageImmediately: String?\n            var name: String?\n        }\n\n        let info: CustomCommandInfo? = {\n            switch command.feature {\n            case let .chatWithSelection(extraSystemPrompt, prompt, useExtraSystemPrompt):\n                let updatePrompt = useExtraSystemPrompt ?? true\n                return .init(\n                    extraSystemPrompt: updatePrompt ? extraSystemPrompt : nil,\n                    sendingMessageImmediately: prompt,\n                    name: command.name\n                )\n            case let .customChat(systemPrompt, prompt):\n                memory.contextController.defaultScopes = []\n                return .init(\n                    specifiedSystemPrompt: systemPrompt,\n                    extraSystemPrompt: \"\",\n                    sendingMessageImmediately: prompt,\n                    name: command.name\n                )\n            case .promptToCode: return nil\n            case .singleRoundDialog: return nil\n            }\n        }()\n\n        guard let info else { return }\n\n        let templateProcessor = CustomCommandTemplateProcessor()\n        if let specifiedSystemPrompt = info.specifiedSystemPrompt {\n            await mutateSystemPrompt(templateProcessor.process(specifiedSystemPrompt))\n        }\n        if let extraSystemPrompt = info.extraSystemPrompt {\n            await mutateExtraSystemPrompt(templateProcessor.process(extraSystemPrompt))\n        } else {\n            mutateExtraSystemPrompt(\"\")\n        }\n\n        let customCommandPrefix = {\n            if let name = info.name { return \"[\\(name)] \" }\n            return \"\"\n        }()\n\n        if info.specifiedSystemPrompt != nil || info.extraSystemPrompt != nil {\n            await mutateHistory { history in\n                history.append(.init(\n                    role: .assistant,\n                    content: \"\",\n                    summary: \"\\(customCommandPrefix)System prompt is updated.\"\n                ))\n            }\n        }\n\n        if let sendingMessageImmediately = info.sendingMessageImmediately,\n           !sendingMessageImmediately.isEmpty\n        {\n            try await send(content: templateProcessor.process(sendingMessageImmediately))\n        }\n    }\n\n    public func handleSingleRoundDialogCommand(\n        systemPrompt: String?,\n        overwriteSystemPrompt: Bool,\n        prompt: String\n    ) async throws -> String {\n        let templateProcessor = CustomCommandTemplateProcessor()\n        if let systemPrompt {\n            if overwriteSystemPrompt {\n                await mutateSystemPrompt(templateProcessor.process(systemPrompt))\n            } else {\n                await mutateExtraSystemPrompt(templateProcessor.process(systemPrompt))\n            }\n        }\n        return try await sendAndWait(content: templateProcessor.process(prompt))\n    }\n\n    public func processMessage(\n        systemPrompt: String?,\n        extraSystemPrompt: String?,\n        prompt: String\n    ) async throws -> String {\n        let templateProcessor = CustomCommandTemplateProcessor()\n        if let systemPrompt {\n            await mutateSystemPrompt(templateProcessor.process(systemPrompt))\n        }\n        if let extraSystemPrompt {\n            await mutateExtraSystemPrompt(templateProcessor.process(extraSystemPrompt))\n        }\n        return try await sendAndWait(content: templateProcessor.process(prompt))\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/ContextAwareAutoManagedChatGPTMemory.swift",
    "content": "import Foundation\nimport OpenAIService\n\npublic final class ContextAwareAutoManagedChatGPTMemory: ChatGPTMemory {\n    private let memory: AutoManagedChatGPTMemory\n    let contextController: DynamicContextController\n    let functionProvider: ChatFunctionProvider\n    weak var chatService: ChatService?\n\n    public var history: [ChatMessage] {\n        get async { await memory.history }\n    }\n\n    func observeHistoryChange(_ observer: @escaping () -> Void) {\n        memory.observeHistoryChange(observer)\n    }\n\n    init(\n        configuration: OverridingChatGPTConfiguration,\n        functionProvider: ChatFunctionProvider\n    ) {\n        memory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: configuration,\n            functionProvider: functionProvider,\n            maxNumberOfMessages: UserDefaults.shared.value(for: \\.chatGPTMaxMessageCount)\n        )\n        contextController = DynamicContextController(\n            memory: memory,\n            functionProvider: functionProvider,\n            configuration: configuration,\n            contextCollectors: allContextCollectors\n        )\n        self.functionProvider = functionProvider\n    }\n\n    public func mutateHistory(_ update: (inout [ChatMessage]) -> Void) async {\n        await memory.mutateHistory(update)\n    }\n\n    public func generatePrompt() async -> ChatGPTPrompt {\n        let content = (await memory.history)\n            .last(where: { $0.role == .user  })?.content\n        try? await contextController.collectContextInformation(\n            systemPrompt: \"\"\"\n            \\(chatService?.systemPrompt ?? \"\")\n            \\(chatService?.extraSystemPrompt ?? \"\")\n            \"\"\".trimmingCharacters(in: .whitespacesAndNewlines),\n            content: content ?? \"\"\n        )\n        return await memory.generatePrompt()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ChatService/DynamicContextController.swift",
    "content": "import ChatContextCollector\nimport Foundation\nimport OpenAIService\nimport Preferences\nimport XcodeInspector\n\nfinal class DynamicContextController {\n    let contextCollectors: [ChatContextCollector]\n    let memory: AutoManagedChatGPTMemory\n    let functionProvider: ChatFunctionProvider\n    let configuration: OverridingChatGPTConfiguration\n    var defaultScopes = [] as Set<ChatContext.Scope>\n\n    convenience init(\n        memory: AutoManagedChatGPTMemory,\n        functionProvider: ChatFunctionProvider,\n        configuration: OverridingChatGPTConfiguration,\n        contextCollectors: ChatContextCollector...\n    ) {\n        self.init(\n            memory: memory,\n            functionProvider: functionProvider,\n            configuration: configuration,\n            contextCollectors: contextCollectors\n        )\n    }\n\n    init(\n        memory: AutoManagedChatGPTMemory,\n        functionProvider: ChatFunctionProvider,\n        configuration: OverridingChatGPTConfiguration,\n        contextCollectors: [ChatContextCollector]\n    ) {\n        self.memory = memory\n        self.functionProvider = functionProvider\n        self.configuration = configuration\n        self.contextCollectors = contextCollectors\n    }\n\n    func collectContextInformation(systemPrompt: String, content: String) async throws {\n        var content = content\n        var scopes = Self.parseScopes(&content)\n        scopes.formUnion(defaultScopes)\n\n        let overridingChatModelId = {\n            var ids = [String]()\n            if scopes.contains(.sense) {\n                ids.append(UserDefaults.shared.value(for: \\.preferredChatModelIdForSenseScope))\n            }\n\n            if scopes.contains(.project) {\n                ids.append(UserDefaults.shared.value(for: \\.preferredChatModelIdForProjectScope))\n            }\n\n            if scopes.contains(.web) {\n                ids.append(UserDefaults.shared.value(for: \\.preferredChatModelIdForWebScope))\n            }\n\n            let chatModels = UserDefaults.shared.value(for: \\.chatModels)\n            let idIndexMap = chatModels.enumerated().reduce(into: [String: Int]()) {\n                $0[$1.element.id] = $1.offset\n            }\n            return ids.filter { !$0.isEmpty }.sorted(by: {\n                let lhs = idIndexMap[$0] ?? Int.max\n                let rhs = idIndexMap[$1] ?? Int.max\n                return lhs < rhs\n            }).first\n        }()\n\n        configuration.overriding.modelId = overridingChatModelId\n\n        functionProvider.removeAll()\n        let language = UserDefaults.shared.value(for: \\.chatGPTLanguage)\n        let oldMessages = await memory.history\n        let contexts = await withTaskGroup(\n            of: ChatContext.self\n        ) { [scopes, content, configuration] group in\n            for collector in contextCollectors {\n                group.addTask {\n                    await collector.generateContext(\n                        history: oldMessages,\n                        scopes: scopes,\n                        content: content,\n                        configuration: configuration\n                    )\n                }\n            }\n            var contexts = [ChatContext]()\n            for await context in group {\n                contexts.append(context)\n            }\n            return contexts\n        }\n\n        let contextSystemPrompt = contexts\n            .map(\\.systemPrompt)\n            .filter { !$0.isEmpty }\n            .joined(separator: \"\\n\\n\")\n\n        let retrievedContent = contexts\n            .flatMap(\\.retrievedContent)\n            .filter { !$0.document.content.isEmpty }\n            .sorted { $0.priority > $1.priority }\n            .prefix(15)\n\n        let contextualSystemPrompt = \"\"\"\n        \\(language.isEmpty ? \"\" : \"You must always reply in \\(language)\")\n        \\(systemPrompt)\n        \"\"\".trimmingCharacters(in: .whitespacesAndNewlines)\n        await memory.mutateSystemPrompt(contextualSystemPrompt)\n        await memory.mutateContextSystemPrompt(contextSystemPrompt)\n        await memory.mutateRetrievedContent(retrievedContent.map(\\.document))\n        functionProvider.append(functions: contexts.flatMap(\\.functions))\n    }\n}\n\nextension DynamicContextController {\n    static func parseScopes(_ prompt: inout String) -> Set<ChatContext.Scope> {\n        let parser = MessageScopeParser()\n        return parser(&prompt)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Client/XPCService.swift",
    "content": "import Foundation\nimport Logger\nimport os.log\nimport XPCShared\n\nlet shared = XPCExtensionService(logger: .client)\n\npublic func getService() throws -> XPCExtensionService {\n    if ProcessInfo.processInfo.environment[\"XCODE_RUNNING_FOR_PREVIEWS\"] == \"1\" {\n        struct RunningInPreview: Error {}\n        throw RunningInPreview()\n    }\n    return shared\n}\n"
  },
  {
    "path": "Core/Sources/FileChangeChecker/FileChangeChecker.swift",
    "content": "import CryptoKit\nimport Dispatch\nimport Foundation\n\n/// Check that a file is changed.\npublic actor FileChangeChecker {\n    let url: URL\n    var checksum: Data?\n\n    public init(fileURL: URL) async {\n        url = fileURL\n        checksum = getChecksum()\n    }\n\n    public func checkIfChanged() -> Bool {\n        guard let newChecksum = getChecksum() else { return false }\n        return newChecksum != checksum\n    }\n\n    func getChecksum() -> Data? {\n        let bufferSize = 16 * 1024\n        guard let file = try? FileHandle(forReadingFrom: url) else { return nil }\n        defer { try? file.close() }\n        var md5 = CryptoKit.Insecure.MD5()\n        while autoreleasepool(invoking: {\n            let data = file.readData(ofLength: bufferSize)\n            if !data.isEmpty {\n                md5.update(data: data)\n                return true // Continue\n            } else {\n                return false // End of file\n            }\n        }) {}\n\n        let data = Data(md5.finalize())\n\n        return data\n    }\n}\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManagementView.swift",
    "content": "import ComposableArchitecture\nimport SharedUIComponents\nimport SwiftUI\n\nstruct APIKeyManagementView: View {\n    @Perception.Bindable var store: StoreOf<APIKeyManagement>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                HStack {\n                    Button(action: {\n                        store.send(.closeButtonClicked)\n                    }) {\n                        Image(systemName: \"xmark.circle.fill\")\n                            .foregroundStyle(.secondary)\n                            .padding()\n                    }\n                    .buttonStyle(.plain)\n                    Text(\"API Keys\")\n                    Spacer()\n                    Button(action: {\n                        store.send(.addButtonClicked)\n                    }) {\n                        Image(systemName: \"plus.circle.fill\")\n                            .foregroundStyle(.secondary)\n                            .padding()\n                    }\n                    .buttonStyle(.plain)\n                }\n                .background(Color(nsColor: .separatorColor))\n\n                List {\n                    ForEach(store.availableAPIKeyNames, id: \\.self) { name in\n                        WithPerceptionTracking {\n                            HStack {\n                                Text(name)\n                                    .contextMenu {\n                                        Button(\"Remove\") {\n                                            store.send(.deleteButtonClicked(name: name))\n                                        }\n                                    }\n                                Spacer()\n\n                                Button(action: {\n                                    store.send(.deleteButtonClicked(name: name))\n                                }) {\n                                    Image(systemName: \"trash.fill\")\n                                        .foregroundStyle(.secondary)\n                                }\n                                .buttonStyle(.plain)\n                            }\n                        }\n                    }\n                    .modify { view in\n                        if #available(macOS 13.0, *) {\n                            view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                        } else {\n                            view\n                        }\n                    }\n                }\n                .removeBackground()\n                .overlay {\n                    if store.availableAPIKeyNames.isEmpty {\n                        Text(\"\"\"\n                        Empty\n                        Add a new key by clicking the add button\n                        \"\"\")\n                        .multilineTextAlignment(.center)\n                        .padding()\n                    }\n                }\n            }\n            .focusable(false)\n            .frame(width: 300, height: 400)\n            .background(.thickMaterial)\n            .onAppear {\n                store.send(.appear)\n            }\n            .sheet(item: $store.scope(\n                state: \\.apiKeySubmission,\n                action: \\.apiKeySubmission\n            )) { store in\n                WithPerceptionTracking {\n                    APIKeySubmissionView(store: store)\n                        .frame(minWidth: 400)\n                }\n            }\n        }\n    }\n}\n\nstruct APIKeySubmissionView: View {\n    @Perception.Bindable var store: StoreOf<APIKeySubmission>\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollView {\n                VStack(spacing: 0) {\n                    Form {\n                        TextField(\"Name\", text: $store.name)\n                        SecureField(\"Key\", text: $store.key)\n                    }\n                    .padding()\n\n                    Divider()\n\n                    HStack {\n                        Spacer()\n\n                        Button(\"Cancel\") { store.send(.cancelButtonClicked) }\n                            .keyboardShortcut(.cancelAction)\n\n                        Button(\"Save\", action: { store.send(.saveButtonClicked) })\n                            .keyboardShortcut(.defaultAction)\n                    }.padding()\n                }\n            }\n            .textFieldStyle(.roundedBorder)\n        }\n    }\n}\n\nclass APIKeyManagementView_Preview: PreviewProvider {\n    static var previews: some View {\n        APIKeyManagementView(\n            store: .init(\n                initialState: .init(\n                    availableAPIKeyNames: [\"test1\", \"test2\"]\n                ),\n                reducer: { APIKeyManagement() }\n            )\n        )\n    }\n}\n\nclass APIKeySubmissionView_Preview: PreviewProvider {\n    static var previews: some View {\n        APIKeySubmissionView(\n            store: .init(\n                initialState: .init(),\n                reducer: { APIKeySubmission() }\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManangement.swift",
    "content": "import ComposableArchitecture\nimport Foundation\n\n@Reducer\nstruct APIKeyManagement {\n    @ObservableState\n    struct State: Equatable {\n        var availableAPIKeyNames: [String] = []\n        @Presents var apiKeySubmission: APIKeySubmission.State?\n    }\n\n    enum Action: Equatable {\n        case appear\n        case closeButtonClicked\n        case addButtonClicked\n        case deleteButtonClicked(name: String)\n        case refreshAvailableAPIKeyNames\n\n        case apiKeySubmission(PresentationAction<APIKeySubmission.Action>)\n    }\n\n    @Dependency(\\.toast) var toast\n    @Dependency(\\.apiKeyKeychain) var keychain\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                if isPreview { return .none }\n                \n                return .run { send in\n                    await send(.refreshAvailableAPIKeyNames)\n                }\n            case .closeButtonClicked:\n                return .none\n                \n            case .addButtonClicked:\n                state.apiKeySubmission = .init()\n                \n                return .none\n\n            case let .deleteButtonClicked(name):\n                do {\n                    try keychain.remove(name)\n                    return .run { send in\n                        await send(.refreshAvailableAPIKeyNames)\n                    }\n                } catch {\n                    toast(error.localizedDescription, .error)\n                    return .none\n                }\n\n            case .refreshAvailableAPIKeyNames:\n                do {\n                    let pairs = try keychain.getAll()\n                    state.availableAPIKeyNames = Array(pairs.keys).sorted()\n                } catch {\n                    toast(error.localizedDescription, .error)\n                }\n\n                return .none\n\n            case .apiKeySubmission(.presented(.saveFinished)):\n                state.apiKeySubmission = nil\n                return .run { send in\n                    await send(.refreshAvailableAPIKeyNames)\n                }\n\n            case .apiKeySubmission(.presented(.cancelButtonClicked)):\n                state.apiKeySubmission = nil\n                return .none\n\n            case .apiKeySubmission:\n                return .none\n            }\n        }\n        .ifLet(\\.$apiKeySubmission, action: \\.apiKeySubmission) {\n            APIKeySubmission()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyPicker.swift",
    "content": "import ComposableArchitecture\nimport SwiftUI\n\nstruct APIKeyPicker: View {\n    @Perception.Bindable var store: StoreOf<APIKeySelection>\n\n    var body: some View {\n        WithPerceptionTracking {\n            HStack {\n                Picker(\n                    selection: $store.apiKeyName,\n                    content: {\n                        Text(\"No API Key\").tag(\"\")\n                        if store.availableAPIKeyNames.isEmpty {\n                            Text(\"No API key found, please add a new one →\")\n                        }\n\n                        if !store.availableAPIKeyNames.contains(store.apiKeyName),\n                           !store.apiKeyName.isEmpty\n                        {\n                            Text(\"Key not found: \\(store.apiKeyName)\")\n                                .tag(store.apiKeyName)\n                        }\n\n                        ForEach(store.availableAPIKeyNames, id: \\.self) { name in\n                            Text(name).tag(name)\n                        }\n\n                    },\n                    label: { Text(\"API Key\") }\n                )\n\n                Button(action: { store.send(.manageAPIKeysButtonClicked) }) {\n                    Text(Image(systemName: \"key\"))\n                }\n            }.sheet(isPresented: $store.isAPIKeyManagementPresented) {\n                WithPerceptionTracking {\n                    APIKeyManagementView(store: store.scope(\n                        state: \\.apiKeyManagement,\n                        action: \\.apiKeyManagement\n                    ))\n                }\n            }\n            .onAppear {\n                store.send(.appear)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySelection.swift",
    "content": "import Foundation\nimport SwiftUI\nimport ComposableArchitecture\n\n@Reducer\nstruct APIKeySelection {\n    @ObservableState\n    struct State: Equatable {\n        var apiKeyName: String = \"\"\n        var availableAPIKeyNames: [String] {\n            apiKeyManagement.availableAPIKeyNames\n        }\n        var apiKeyManagement: APIKeyManagement.State = .init()\n        var isAPIKeyManagementPresented: Bool = false\n    }\n    \n    enum Action: Equatable, BindableAction {\n        case appear\n        case manageAPIKeysButtonClicked\n        \n        case binding(BindingAction<State>)\n        case apiKeyManagement(APIKeyManagement.Action)\n    }\n    \n    @Dependency(\\.toast) var toast\n    @Dependency(\\.apiKeyKeychain) var keychain\n    \n    var body: some ReducerOf<Self> {\n        BindingReducer()\n        \n        Scope(state: \\.apiKeyManagement, action: \\.apiKeyManagement) {\n            APIKeyManagement()\n        }\n        \n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run { send in\n                    await send(.apiKeyManagement(.refreshAvailableAPIKeyNames))\n                }\n           \n            case .manageAPIKeysButtonClicked:\n                state.isAPIKeyManagementPresented = true\n                return .none\n                \n            case .binding:\n                return .none\n\n            case .apiKeyManagement(.closeButtonClicked):\n                state.isAPIKeyManagementPresented = false\n                return .none\n                \n            case .apiKeyManagement:\n                return .none\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySubmission.swift",
    "content": "import ComposableArchitecture\nimport Foundation\n\n@Reducer\nstruct APIKeySubmission {\n    @ObservableState\n    struct State: Equatable {\n        var name: String = \"\"\n        var key: String = \"\"\n    }\n\n    enum Action: Equatable, BindableAction {\n        case binding(BindingAction<State>)\n        case saveButtonClicked\n        case cancelButtonClicked\n        case saveFinished\n    }\n\n    @Dependency(\\.toast) var toast\n    @Dependency(\\.apiKeyKeychain) var keychain\n\n    enum E: Error, LocalizedError {\n        case nameIsEmpty\n        case keyIsEmpty\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { state, action in\n            switch action {\n            case .saveButtonClicked:\n                do {\n                    guard !state.name.isEmpty else { throw E.nameIsEmpty }\n                    guard !state.key.isEmpty else { throw E.keyIsEmpty }\n\n                    try keychain.update(\n                        state.key,\n                        key: state.name.trimmingCharacters(in: .whitespacesAndNewlines)\n                    )\n                    return .run { send in\n                        await send(.saveFinished)\n                    }\n                } catch {\n                    toast(error.localizedDescription, .error)\n                    return .none\n                }\n\n            case .cancelButtonClicked:\n                return .none\n\n            case .saveFinished:\n                return .none\n\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport Dependencies\nimport Keychain\nimport OpenAIService\nimport Preferences\nimport SwiftUI\nimport Toast\n\n@Reducer\nstruct ChatModelEdit {\n    @ObservableState\n    struct State: Equatable, Identifiable {\n        var id: String\n        var name: String\n        var format: ChatModel.Format\n        var maxTokens: Int = 4000\n        var supportsFunctionCalling: Bool = true\n        var modelName: String = \"\"\n        var ollamaKeepAlive: String = \"\"\n        var apiVersion: String = \"\"\n        var apiKeyName: String { apiKeySelection.apiKeyName }\n        var baseURL: String { baseURLSelection.baseURL }\n        var isFullURL: Bool { baseURLSelection.isFullURL }\n        var availableModelNames: [String] = []\n        var availableAPIKeys: [String] = []\n        var isTesting = false\n        var suggestedMaxTokens: Int?\n        var apiKeySelection: APIKeySelection.State = .init()\n        var baseURLSelection: BaseURLSelection.State = .init()\n        var enforceMessageOrder: Bool = false\n        var openAIOrganizationID: String = \"\"\n        var openAIProjectID: String = \"\"\n        var customHeaders: [ChatModel.Info.CustomHeaderInfo.HeaderField] = []\n        var openAICompatibleSupportsMultipartMessageContent = true\n        var requiresBeginWithUserMessage = false\n        var customBody: String = \"\"\n        var supportsImages: Bool = true\n    }\n\n    enum Action: Equatable, BindableAction {\n        case binding(BindingAction<State>)\n        case appear\n        case saveButtonClicked\n        case cancelButtonClicked\n        case refreshAvailableModelNames\n        case testButtonClicked\n        case testSucceeded(String)\n        case testFailed(String)\n        case checkSuggestedMaxTokens\n        case selectModelFormat(ModelFormat)\n        case apiKeySelection(APIKeySelection.Action)\n        case baseURLSelection(BaseURLSelection.Action)\n    }\n\n    enum ModelFormat: CaseIterable {\n        case openAI\n        case azureOpenAI\n        case googleAI\n        case ollama\n        case claude\n        case gitHubCopilot\n        case openAICompatible\n        case deepSeekOpenAICompatible\n        case openRouterOpenAICompatible\n        case grokOpenAICompatible\n        case mistralOpenAICompatible\n\n        init(_ format: ChatModel.Format) {\n            switch format {\n            case .openAI:\n                self = .openAI\n            case .azureOpenAI:\n                self = .azureOpenAI\n            case .googleAI:\n                self = .googleAI\n            case .ollama:\n                self = .ollama\n            case .claude:\n                self = .claude\n            case .openAICompatible:\n                self = .openAICompatible\n            case .gitHubCopilot:\n                self = .gitHubCopilot\n            }\n        }\n    }\n\n    var toast: (String, ToastType) -> Void {\n        @Dependency(\\.namespacedToast) var toast\n        return {\n            toast($0, $1, \"ChatModelEdit\")\n        }\n    }\n\n    @Dependency(\\.apiKeyKeychain) var keychain\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Scope(state: \\.apiKeySelection, action: \\.apiKeySelection) {\n            APIKeySelection()\n        }\n\n        Scope(state: \\.baseURLSelection, action: \\.baseURLSelection) {\n            BaseURLSelection()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run { send in\n                    await send(.refreshAvailableModelNames)\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .saveButtonClicked:\n                return .none\n\n            case .cancelButtonClicked:\n                return .none\n\n            case .testButtonClicked:\n                guard !state.isTesting else { return .none }\n                state.isTesting = true\n                let model = ChatModel(state: state)\n                return .run { send in\n                    do {\n                        let configuration = UserPreferenceChatGPTConfiguration().overriding {\n                            $0.model = model\n                        }\n                        let service = ChatGPTService(configuration: configuration)\n                        let stream = service.send(TemplateChatGPTMemory(\n                            memoryTemplate: .init(messages: [\n                                .init(chatMessage: .init(\n                                    role: .system,\n                                    content: \"You are a bot. Just do what is told.\"\n                                )),\n                                .init(chatMessage: .init(\n                                    role: .assistant,\n                                    content: \"Hello\"\n                                )),\n                                .init(chatMessage: .init(\n                                    role: .user,\n                                    content: \"Respond with \\\"Test succeeded.\\\"\"\n                                )),\n                                .init(chatMessage: .init(\n                                    role: .user,\n                                    content: \"Respond with \\\"Test succeeded.\\\"\"\n                                )),\n                            ]),\n                            configuration: configuration,\n                            functionProvider: NoChatGPTFunctionProvider()\n                        ))\n                        let streamReply = try await stream.asText()\n                        await send(.testSucceeded(streamReply))\n                    } catch {\n                        await send(.testFailed(error.localizedDescription))\n                    }\n                }\n\n            case let .testSucceeded(message):\n                state.isTesting = false\n                toast(message.trimmingCharacters(in: .whitespacesAndNewlines), .info)\n                return .none\n\n            case let .testFailed(message):\n                state.isTesting = false\n                toast(message.trimmingCharacters(in: .whitespacesAndNewlines), .error)\n                return .none\n\n            case .refreshAvailableModelNames:\n                if state.format == .openAI {\n                    state.availableModelNames = ChatGPTModel.allCases.map(\\.rawValue)\n                }\n\n                return .none\n\n            case .checkSuggestedMaxTokens:\n                switch state.format {\n                case .openAI:\n                    if let knownModel = ChatGPTModel(rawValue: state.modelName) {\n                        state.suggestedMaxTokens = knownModel.maxToken\n                    } else {\n                        state.suggestedMaxTokens = nil\n                    }\n                    return .none\n                case .googleAI:\n                    if let knownModel = GoogleGenerativeAIModel(rawValue: state.modelName) {\n                        state.suggestedMaxTokens = knownModel.maxToken\n                    } else {\n                        state.suggestedMaxTokens = nil\n                    }\n                    return .none\n                case .claude:\n                    if let knownModel = ClaudeChatCompletionsService\n                        .KnownModel(rawValue: state.modelName)\n                    {\n                        state.suggestedMaxTokens = knownModel.contextWindow\n                    } else {\n                        state.suggestedMaxTokens = nil\n                    }\n                    return .none\n                case .gitHubCopilot:\n                    if let knownModel = AvailableGitHubCopilotModel(rawValue: state.modelName) {\n                        state.suggestedMaxTokens = knownModel.contextWindow\n                    } else {\n                        state.suggestedMaxTokens = nil\n                    }\n                    return .none\n                default:\n                    state.suggestedMaxTokens = nil\n                    return .none\n                }\n\n            case let .selectModelFormat(format):\n                switch format {\n                case .openAI:\n                    state.format = .openAI\n                case .azureOpenAI:\n                    state.format = .azureOpenAI\n                case .googleAI:\n                    state.format = .googleAI\n                case .ollama:\n                    state.format = .ollama\n                case .claude:\n                    state.format = .claude\n                case .gitHubCopilot:\n                    state.format = .gitHubCopilot\n                case .openAICompatible:\n                    state.format = .openAICompatible\n                case .deepSeekOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://api.deepseek.com\"\n                    state.baseURLSelection.isFullURL = false\n                case .openRouterOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://openrouter.ai\"\n                    state.baseURLSelection.isFullURL = false\n                case .grokOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://api.x.ai\"\n                    state.baseURLSelection.isFullURL = false\n                case .mistralOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://api.mistral.ai\"\n                    state.baseURLSelection.isFullURL = false\n                }\n                return .none\n\n            case .apiKeySelection:\n                return .none\n\n            case .baseURLSelection:\n                return .none\n\n            case .binding(\\.format):\n                return .run { send in\n                    await send(.refreshAvailableModelNames)\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .binding(\\.modelName):\n                return .run { send in\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\nextension ChatModel {\n    init(state: ChatModelEdit.State) {\n        self.init(\n            id: state.id,\n            name: state.name,\n            format: state.format,\n            info: .init(\n                apiKeyName: state.apiKeyName,\n                baseURL: state.baseURL.trimmingCharacters(in: .whitespacesAndNewlines),\n                isFullURL: state.isFullURL,\n                maxTokens: state.maxTokens,\n                supportsFunctionCalling: {\n                    switch state.format {\n                    case .googleAI, .ollama, .claude:\n                        return false\n                    case .azureOpenAI, .openAI, .openAICompatible, .gitHubCopilot:\n                        return state.supportsFunctionCalling\n                    }\n                }(),\n                supportsImage: state.supportsImages,\n                modelName: state.modelName\n                    .trimmingCharacters(in: .whitespacesAndNewlines),\n                openAIInfo: .init(\n                    organizationID: state.openAIOrganizationID,\n                    projectID: state.openAIProjectID\n                ),\n                ollamaInfo: .init(keepAlive: state.ollamaKeepAlive),\n                googleGenerativeAIInfo: .init(apiVersion: state.apiVersion),\n                openAICompatibleInfo: .init(\n                    enforceMessageOrder: state.enforceMessageOrder,\n                    supportsMultipartMessageContent: state\n                        .openAICompatibleSupportsMultipartMessageContent,\n                    requiresBeginWithUserMessage: state.requiresBeginWithUserMessage\n                ),\n                customHeaderInfo: .init(headers: state.customHeaders),\n                customBodyInfo: .init(jsonBody: state.customBody)\n            )\n        )\n    }\n\n    func toState() -> ChatModelEdit.State {\n        .init(\n            id: id,\n            name: name,\n            format: format,\n            maxTokens: info.maxTokens,\n            supportsFunctionCalling: info.supportsFunctionCalling,\n            modelName: info.modelName,\n            ollamaKeepAlive: info.ollamaInfo.keepAlive,\n            apiVersion: info.googleGenerativeAIInfo.apiVersion,\n            apiKeySelection: .init(\n                apiKeyName: info.apiKeyName,\n                apiKeyManagement: .init(availableAPIKeyNames: [info.apiKeyName])\n            ),\n            baseURLSelection: .init(baseURL: info.baseURL, isFullURL: info.isFullURL),\n            enforceMessageOrder: info.openAICompatibleInfo.enforceMessageOrder,\n            openAIOrganizationID: info.openAIInfo.organizationID,\n            openAIProjectID: info.openAIInfo.projectID,\n            customHeaders: info.customHeaderInfo.headers,\n            openAICompatibleSupportsMultipartMessageContent: info.openAICompatibleInfo\n                .supportsMultipartMessageContent,\n            requiresBeginWithUserMessage: info.openAICompatibleInfo.requiresBeginWithUserMessage,\n            customBody: info.customBodyInfo.jsonBody,\n            supportsImages: info.supportsImage\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport OpenAIService\nimport Preferences\nimport SwiftUI\n\n@MainActor\nstruct ChatModelEditView: View {\n    @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollView {\n                VStack(spacing: 0) {\n                    Form {\n                        NameTextField(store: store)\n                        FormatPicker(store: store)\n\n                        switch store.format {\n                        case .openAI:\n                            OpenAIForm(store: store)\n                        case .azureOpenAI:\n                            AzureOpenAIForm(store: store)\n                        case .openAICompatible:\n                            OpenAICompatibleForm(store: store)\n                        case .googleAI:\n                            GoogleAIForm(store: store)\n                        case .ollama:\n                            OllamaForm(store: store)\n                        case .claude:\n                            ClaudeForm(store: store)\n                        case .gitHubCopilot:\n                            GitHubCopilotForm(store: store)\n                        }\n                    }\n                    .padding()\n\n                    Divider()\n\n                    HStack {\n                        HStack(spacing: 8) {\n                            Button(\"Test\") {\n                                store.send(.testButtonClicked)\n                            }\n                            .disabled(store.isTesting)\n\n                            if store.isTesting {\n                                ProgressView()\n                                    .controlSize(.small)\n                            }\n                        }\n\n                        CustomBodyEdit(store: store)\n                            .disabled({\n                                switch store.format {\n                                case .openAI, .openAICompatible, .claude:\n                                    return false\n                                default:\n                                    return true\n                                }\n                            }())\n                        CustomHeaderEdit(store: store)\n                            .disabled({\n                                switch store.format {\n                                case .openAI, .openAICompatible, .ollama, .gitHubCopilot, .claude:\n                                    return false\n                                default:\n                                    return true\n                                }\n                            }())\n\n                        Spacer()\n\n                        Button(\"Cancel\") {\n                            store.send(.cancelButtonClicked)\n                        }\n                        .keyboardShortcut(.cancelAction)\n\n                        Button(action: { store.send(.saveButtonClicked) }) {\n                            Text(\"Save\")\n                        }\n                        .keyboardShortcut(.defaultAction)\n                    }\n                    .padding()\n                }\n            }\n            .textFieldStyle(.roundedBorder)\n            .onAppear {\n                store.send(.appear)\n            }\n            .fixedSize(horizontal: false, vertical: true)\n            .handleToast(namespace: \"ChatModelEdit\")\n        }\n    }\n\n    struct NameTextField: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                TextField(\"Name\", text: $store.name)\n            }\n        }\n    }\n\n    struct FormatPicker: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                Picker(\n                    selection: Binding(\n                        get: { .init(store.format) },\n                        set: { store.send(.selectModelFormat($0)) }\n                    ),\n                    content: {\n                        ForEach(\n                            ChatModelEdit.ModelFormat.allCases,\n                            id: \\.self\n                        ) { format in\n                            switch format {\n                            case .openAI:\n                                Text(\"OpenAI\")\n                            case .azureOpenAI:\n                                Text(\"Azure OpenAI\")\n                            case .openAICompatible:\n                                Text(\"OpenAI Compatible\")\n                            case .googleAI:\n                                Text(\"Google AI\")\n                            case .ollama:\n                                Text(\"Ollama\")\n                            case .claude:\n                                Text(\"Claude\")\n                            case .gitHubCopilot:\n                                Text(\"GitHub Copilot\")\n                            case .deepSeekOpenAICompatible:\n                                Text(\"DeepSeek (OpenAI Compatible)\")\n                            case .openRouterOpenAICompatible:\n                                Text(\"OpenRouter (OpenAI Compatible)\")\n                            case .grokOpenAICompatible:\n                                Text(\"Grok (OpenAI Compatible)\")\n                            case .mistralOpenAICompatible:\n                                Text(\"Mistral (OpenAI Compatible)\")\n                            }\n                        }\n                    },\n                    label: { Text(\"Format\") }\n                )\n                .pickerStyle(.menu)\n            }\n        }\n    }\n\n    struct BaseURLTextField<V: View>: View {\n        let store: StoreOf<ChatModelEdit>\n        var title: String = \"Base URL\"\n        let prompt: Text?\n        @ViewBuilder var trailingContent: () -> V\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLPicker(\n                    title: title,\n                    prompt: prompt,\n                    store: store.scope(\n                        state: \\.baseURLSelection,\n                        action: \\.baseURLSelection\n                    ),\n                    trailingContent: trailingContent\n                )\n            }\n        }\n    }\n\n    struct SupportsFunctionCallingToggle: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                Toggle(\n                    \"Supports Function Calling\",\n                    isOn: $store.supportsFunctionCalling\n                )\n\n                Text(\n                    \"Function calling is required by some features, if this model doesn't support function calling, you should turn it off to avoid undefined behaviors.\"\n                )\n                .foregroundColor(.secondary)\n                .font(.callout)\n                .dynamicHeightTextInFormWorkaround()\n            }\n        }\n    }\n\n    struct MaxTokensTextField: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack {\n                    let textFieldBinding = Binding(\n                        get: { String(store.maxTokens) },\n                        set: {\n                            if let selectionMaxToken = Int($0) {\n                                $store.maxTokens.wrappedValue = selectionMaxToken\n                            } else {\n                                $store.maxTokens.wrappedValue = 0\n                            }\n                        }\n                    )\n\n                    TextField(text: textFieldBinding) {\n                        Text(\"Context Window\")\n                            .multilineTextAlignment(.trailing)\n                    }\n                    .overlay(alignment: .trailing) {\n                        Stepper(\n                            value: $store.maxTokens,\n                            in: 0...Int.max,\n                            step: 100\n                        ) {\n                            EmptyView()\n                        }\n                    }\n                    .foregroundColor({\n                        guard let max = store.suggestedMaxTokens else {\n                            return .primary\n                        }\n                        if store.maxTokens > max {\n                            return .red\n                        }\n                        return .primary\n                    }() as Color)\n\n                    if let max = store.suggestedMaxTokens {\n                        Text(\"Max: \\(max)\")\n                    }\n                }\n            }\n        }\n    }\n\n    struct ApiKeyNamePicker: View {\n        let store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                APIKeyPicker(store: store.scope(\n                    state: \\.apiKeySelection,\n                    action: \\.apiKeySelection\n                ))\n            }\n        }\n    }\n\n    struct CustomBodyEdit: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        @State private var isEditing = false\n        @Dependency(\\.namespacedToast) var toast\n\n        var body: some View {\n            Button(\"Custom Body\") {\n                isEditing = true\n            }\n            .sheet(isPresented: $isEditing) {\n                WithPerceptionTracking {\n                    VStack {\n                        TextEditor(text: $store.customBody)\n                            .font(Font.system(.body, design: .monospaced))\n                            .padding(4)\n                            .frame(minHeight: 120)\n                            .multilineTextAlignment(.leading)\n                            .overlay(\n                                RoundedRectangle(cornerRadius: 4)\n                                    .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                            )\n                            .handleToast(namespace: \"CustomBodyEdit\")\n\n                        Text(\n                            \"The custom body will be added to the request body. Please use it to add parameters that are not yet available in the form. It should be a valid JSON object.\"\n                        )\n                        .foregroundColor(.secondary)\n                        .font(.callout)\n                        .padding(.bottom)\n\n                        Button(action: {\n                            if store.customBody.trimmingCharacters(in: .whitespacesAndNewlines)\n                                .isEmpty\n                            {\n                                isEditing = false\n                                return\n                            }\n                            guard let _ = try? JSONSerialization\n                                .jsonObject(with: store.customBody.data(using: .utf8) ?? Data())\n                            else {\n                                toast(\"Invalid JSON object\", .error, \"CustomBodyEdit\")\n                                return\n                            }\n                            isEditing = false\n                        }) {\n                            Text(\"Done\")\n                        }\n                        .keyboardShortcut(.defaultAction)\n                    }\n                    .padding()\n                    .frame(width: 600, height: 500)\n                    .background(Color(nsColor: .windowBackgroundColor))\n                }\n            }\n        }\n    }\n\n    struct CustomHeaderEdit: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        @State private var isEditing = false\n\n        var body: some View {\n            Button(\"Custom Headers\") {\n                isEditing = true\n            }\n            .sheet(isPresented: $isEditing) {\n                WithPerceptionTracking {\n                    CustomHeaderSettingsView(headers: $store.customHeaders)\n                }\n            }\n        }\n    }\n\n    struct OpenAIForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"https://api.openai.com\")) {\n                    Text(\"/v1/chat/completions\")\n                }\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.modelName,\n                            content: {\n                                if ChatGPTModel(rawValue: store.modelName) == nil {\n                                    Text(\"Custom Model\").tag(store.modelName)\n                                }\n                                ForEach(ChatGPTModel.allCases, id: \\.self) { model in\n                                    Text(model.rawValue).tag(model.rawValue)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                MaxTokensTextField(store: store)\n                SupportsFunctionCallingToggle(store: store)\n\n                TextField(text: $store.openAIOrganizationID, prompt: Text(\"Optional\")) {\n                    Text(\"Organization ID\")\n                }\n\n                TextField(text: $store.openAIProjectID, prompt: Text(\"Optional\")) {\n                    Text(\"Project ID\")\n                }\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" To get an API key, please visit [https://platform.openai.com/api-keys](https://platform.openai.com/api-keys)\"\n                    )\n\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" If you don't have access to GPT-4, you may need to visit [https://platform.openai.com/account/billing/overview](https://platform.openai.com/account/billing/overview) to buy some credits. A ChatGPT Plus subscription is not enough to access GPT-4 through API.\"\n                    )\n                }\n                .padding(.vertical)\n            }\n        }\n    }\n\n    struct AzureOpenAIForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"https://xxxx.openai.azure.com\")) {\n                    EmptyView()\n                }\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Deployment Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n                SupportsFunctionCallingToggle(store: store)\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n            }\n        }\n    }\n\n    struct OpenAICompatibleForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                Picker(\n                    selection: $store.baseURLSelection.isFullURL,\n                    content: {\n                        Text(\"Base URL\").tag(false)\n                        Text(\"Full URL\").tag(true)\n                    },\n                    label: { Text(\"URL\") }\n                )\n                .pickerStyle(.segmented)\n\n                BaseURLTextField(\n                    store: store,\n                    title: \"\",\n                    prompt: store.isFullURL\n                        ? Text(\"https://api.openai.com/v1/chat/completions\")\n                        : Text(\"https://api.openai.com\")\n                ) {\n                    if !store.isFullURL {\n                        Text(\"/v1/chat/completions\")\n                    }\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n                SupportsFunctionCallingToggle(store: store)\n\n                Toggle(isOn: $store.enforceMessageOrder) {\n                    Text(\"Enforce message order to be user/assistant alternated\")\n                }\n\n                Toggle(isOn: $store.openAICompatibleSupportsMultipartMessageContent) {\n                    Text(\"Support multi-part message content\")\n                }\n\n                Toggle(isOn: $store.requiresBeginWithUserMessage) {\n                    Text(\"Requires the first message to be from the user\")\n                }\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n            }\n        }\n    }\n\n    struct GoogleAIForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(\n                    store: store,\n                    prompt: Text(\"https://generativelanguage.googleapis.com\")\n                ) {\n                    Text(\"/v1\")\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.modelName,\n                            content: {\n                                if GoogleGenerativeAIModel(rawValue: store.modelName) == nil {\n                                    Text(\"Custom Model\").tag(store.modelName)\n                                }\n                                ForEach(GoogleGenerativeAIModel.allCases, id: \\.self) { model in\n                                    Text(model.rawValue).tag(model.rawValue)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                MaxTokensTextField(store: store)\n\n                TextField(\"API Version\", text: $store.apiVersion, prompt: Text(\"v1\"))\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n            }\n        }\n    }\n\n    struct OllamaForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"http://127.0.0.1:11434\")) {\n                    Text(\"/api/chat\")\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n\n                TextField(text: $store.ollamaKeepAlive, prompt: Text(\"Default Value\")) {\n                    Text(\"Keep Alive\")\n                }\n\n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n                \n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" For more details, please visit [https://ollama.com](https://ollama.com).\"\n                    )\n                }\n                .padding(.vertical)\n            }\n        }\n    }\n\n    struct ClaudeForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"https://api.anthropic.com\")) {\n                    Text(\"/v1/messages\")\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.modelName,\n                            content: {\n                                if ClaudeChatCompletionsService\n                                    .KnownModel(rawValue: store.modelName) == nil\n                                {\n                                    Text(\"Custom Model\").tag(store.modelName)\n                                }\n                                ForEach(\n                                    ClaudeChatCompletionsService.KnownModel.allCases,\n                                    id: \\.self\n                                ) { model in\n                                    Text(model.rawValue).tag(model.rawValue)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                MaxTokensTextField(store: store)\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" For more details, please visit [https://anthropic.com](https://anthropic.com).\"\n                    )\n                }\n                .padding(.vertical)\n            }\n        }\n    }\n\n    struct GitHubCopilotForm: View {\n        @Perception.Bindable var store: StoreOf<ChatModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                #warning(\"Todo: use the old picker and update the context window limit.\")\n                GitHubCopilotModelPicker(\n                    title: \"Model Name\",\n                    hasDefaultModel: false,\n                    gitHubCopilotModelId: $store.modelName\n                )\n\n                MaxTokensTextField(store: store)\n                SupportsFunctionCallingToggle(store: store)\n\n                Toggle(isOn: $store.enforceMessageOrder) {\n                    Text(\"Enforce message order to be user/assistant alternated\")\n                }\n\n                Toggle(isOn: $store.openAICompatibleSupportsMultipartMessageContent) {\n                    Text(\"Support multi-part message content\")\n                }\n                \n                Toggle(isOn: $store.supportsImages) {\n                    Text(\"Supports Images\")\n                }\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" Please login in the GitHub Copilot settings to use the model.\"\n                    )\n\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" This will call the APIs directly, which may not be allowed by GitHub. But it's used in other popular apps like Zed.\"\n                    )\n                }\n                .dynamicHeightTextInFormWorkaround()\n                .padding(.vertical)\n            }\n        }\n    }\n}\n\n#Preview(\"OpenAI\") {\n    ChatModelEditView(\n        store: .init(\n            initialState: ChatModel(\n                id: \"3\",\n                name: \"Test Model 3\",\n                format: .openAI,\n                info: .init(\n                    apiKeyName: \"key\",\n                    baseURL: \"apple.com\",\n                    maxTokens: 3000,\n                    supportsFunctionCalling: false,\n                    modelName: \"gpt-3.5-turbo\"\n                )\n            ).toState(),\n            reducer: { ChatModelEdit() }\n        )\n    )\n}\n\n#Preview(\"OpenAI Compatible\") {\n    ChatModelEditView(\n        store: .init(\n            initialState: ChatModel(\n                id: \"3\",\n                name: \"Test Model 3\",\n                format: .openAICompatible,\n                info: .init(\n                    apiKeyName: \"key\",\n                    baseURL: \"apple.com\",\n                    isFullURL: false,\n                    maxTokens: 3000,\n                    supportsFunctionCalling: false,\n                    modelName: \"gpt-3.5-turbo\"\n                )\n            ).toState(),\n            reducer: { ChatModelEdit() }\n        )\n    )\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagement.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport Keychain\nimport Preferences\nimport SwiftUI\n\nextension ChatModel: ManageableAIModel {\n    var formatName: String {\n        switch format {\n        case .openAI: return \"OpenAI\"\n        case .azureOpenAI: return \"Azure OpenAI\"\n        case .openAICompatible: return \"OpenAI Compatible\"\n        case .googleAI: return \"Google Generative AI\"\n        case .ollama: return \"Ollama\"\n        case .claude: return \"Claude\"\n        case .gitHubCopilot: return \"GitHub Copilot\"\n        }\n    }\n\n    @ViewBuilder\n    var infoDescriptors: some View {\n        Text(info.modelName)\n\n        if !info.baseURL.isEmpty {\n            Image(systemName: \"line.diagonal\")\n            Text(info.baseURL)\n        }\n\n        Image(systemName: \"line.diagonal\")\n\n        Text(\"\\(info.maxTokens) tokens\")\n\n        Image(systemName: \"line.diagonal\")\n\n        Text(\n            \"function calling \\(info.supportsFunctionCalling ? Image(systemName: \"checkmark.square\") : Image(systemName: \"xmark.square\"))\"\n        )\n    }\n}\n\n@Reducer\nstruct ChatModelManagement: AIModelManagement {\n    typealias Model = ChatModel\n\n    @ObservableState\n    struct State: Equatable, AIModelManagementState {\n        typealias Model = ChatModel\n        var models: IdentifiedArrayOf<ChatModel> = []\n        @Presents var editingModel: ChatModelEdit.State?\n        var selectedModelId: String? { editingModel?.id }\n    }\n\n    enum Action: Equatable, AIModelManagementAction {\n        typealias Model = ChatModel\n        case appear\n        case createModel\n        case removeModel(id: Model.ID)\n        case selectModel(id: Model.ID)\n        case duplicateModel(id: Model.ID)\n        case moveModel(from: IndexSet, to: Int)\n        case chatModelItem(PresentationAction<ChatModelEdit.Action>)\n    }\n\n    @Dependency(\\.toast) var toast\n    @Dependency(\\.userDefaults) var userDefaults\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                if isPreview { return .none }\n                state.models = .init(\n                    userDefaults.value(for: \\.chatModels),\n                    id: \\.id,\n                    uniquingIDsWith: { a, _ in a }\n                )\n\n                return .none\n\n            case .createModel:\n                state.editingModel = .init(\n                    id: UUID().uuidString,\n                    name: \"New Model\",\n                    format: .openAI\n                )\n                return .none\n\n            case let .removeModel(id):\n                state.models.remove(id: id)\n                persist(state)\n                return .none\n\n            case let .selectModel(id):\n                guard let model = state.models[id: id] else { return .none }\n                state.editingModel = model.toState()\n                return .none\n\n            case let .duplicateModel(id):\n                guard var model = state.models[id: id] else { return .none }\n                model.id = UUID().uuidString\n                model.name += \" (Copy)\"\n\n                if let index = state.models.index(id: id) {\n                    state.models.insert(model, at: index + 1)\n                } else {\n                    state.models.append(model)\n                }\n                persist(state)\n                return .none\n\n            case let .moveModel(from, to):\n                state.models.move(fromOffsets: from, toOffset: to)\n                persist(state)\n                return .none\n\n            case .chatModelItem(.presented(.saveButtonClicked)):\n                guard let editingModel = state.editingModel, validateModel(editingModel)\n                else { return .none }\n\n                if let index = state.models\n                    .firstIndex(where: { $0.id == editingModel.id })\n                {\n                    state.models[index] = .init(state: editingModel)\n                } else {\n                    state.models.append(.init(state: editingModel))\n                }\n                persist(state)\n                return .run { send in\n                    await send(.chatModelItem(.dismiss))\n                }\n\n            case .chatModelItem(.presented(.cancelButtonClicked)):\n                return .run { send in\n                    await send(.chatModelItem(.dismiss))\n                }\n\n            case .chatModelItem:\n                return .none\n            }\n        }.ifLet(\\.$editingModel, action: \\.chatModelItem) {\n            ChatModelEdit()\n        }\n    }\n\n    func persist(_ state: State) {\n        let models = state.models\n        userDefaults.set(Array(models), for: \\.chatModels)\n    }\n\n    func validateModel(_ chatModel: ChatModelEdit.State) -> Bool {\n        guard !chatModel.name.isEmpty else {\n            toast(\"Model name cannot be empty\", .error)\n            return false\n        }\n        guard !chatModel.id.isEmpty else {\n            toast(\"Model ID cannot be empty\", .error)\n            return false\n        }\n\n        guard !chatModel.modelName.isEmpty else {\n            toast(\"Model name cannot be empty\", .error)\n            return false\n        }\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagementView.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport SwiftUI\n\nstruct ChatModelManagementView: View {\n    @Perception.Bindable var store: StoreOf<ChatModelManagement>\n\n    var body: some View {\n        WithPerceptionTracking {\n            AIModelManagementView<ChatModelManagement, ChatModelManagement.Model>(store: store)\n                .sheet(item: $store.scope(\n                    state: \\.editingModel,\n                    action: \\.chatModelItem\n                )) { store in\n                    ChatModelEditView(store: store)\n                        .frame(width: 800)\n                }\n        }\n    }\n}\n\n// MARK: - Previews\n\nclass ChatModelManagementView_Previews: PreviewProvider {\n    static var previews: some View {\n        ChatModelManagementView(\n            store: .init(\n                initialState: .init(\n                    models: IdentifiedArray<String, ChatModel>(uniqueElements: [\n                        ChatModel(\n                            id: \"1\",\n                            name: \"Test Model\",\n                            format: .openAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"google.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: true,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        ChatModel(\n                            id: \"2\",\n                            name: \"Test Model 2\",\n                            format: .azureOpenAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: false,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        ChatModel(\n                            id: \"3\",\n                            name: \"Test Model 3\",\n                            format: .openAICompatible,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: false,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                    ]),\n                    editingModel: ChatModel(\n                        id: \"3\",\n                        name: \"Test Model 3\",\n                        format: .openAICompatible,\n                        info: .init(\n                            apiKeyName: \"key\",\n                            baseURL: \"apple.com\",\n                            maxTokens: 3000,\n                            supportsFunctionCalling: false,\n                            modelName: \"gpt-3.5-turbo\"\n                        )\n                    ).toState()\n                ),\n                reducer: { ChatModelManagement() }\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/CodeiumView.swift",
    "content": "import CodeiumService\nimport Foundation\nimport SharedUIComponents\nimport SwiftUI\n\nstruct CodeiumView: View {\n    class ViewModel: ObservableObject {\n        let codeiumAuthService = CodeiumAuthService()\n        let installationManager = CodeiumInstallationManager()\n        @Published var isSignedIn: Bool\n        @Published var installationStatus: CodeiumInstallationManager.InstallationStatus\n        @Published var installationStep: CodeiumInstallationManager.InstallationStep?\n        @AppStorage(\\.codeiumVerboseLog) var codeiumVerboseLog\n        @AppStorage(\\.codeiumEnterpriseMode) var codeiumEnterpriseMode\n        @AppStorage(\\.codeiumPortalUrl) var codeiumPortalUrl\n        @AppStorage(\\.codeiumApiUrl) var codeiumApiUrl\n        @AppStorage(\\.codeiumIndexEnabled) var indexEnabled\n\n        init() {\n            isSignedIn = codeiumAuthService.isSignedIn\n            installationStatus = .notInstalled\n            Task { @MainActor in\n                installationStatus = await installationManager.checkInstallation()\n            }\n        }\n\n        init(\n            isSignedIn: Bool,\n            installationStatus: CodeiumInstallationManager.InstallationStatus,\n            installationStep: CodeiumInstallationManager.InstallationStep?\n        ) {\n            assert(isPreview)\n            self.isSignedIn = isSignedIn\n            self.installationStatus = installationStatus\n            self.installationStep = installationStep\n        }\n\n        func generateAuthURL() -> URL {\n            if codeiumEnterpriseMode && (codeiumPortalUrl != \"\") {\n                return URL(\n                    string: codeiumPortalUrl +\n                        \"/profile?response_type=token&redirect_uri=show-auth-token&state=\\(UUID().uuidString)&scope=openid%20profile%20email&redirect_parameters_type=query\"\n                )!\n            }\n\n            return URL(\n                string: \"https://www.codeium.com/profile?response_type=token&redirect_uri=show-auth-token&state=\\(UUID().uuidString)&scope=openid%20profile%20email&redirect_parameters_type=query\"\n            )!\n        }\n\n        func signIn(token: String) async throws {\n            try await codeiumAuthService.signIn(token: token)\n            Task { @MainActor in isSignedIn = true }\n        }\n\n        func signOut() async throws {\n            try await codeiumAuthService.signOut()\n            Task { @MainActor in isSignedIn = false }\n        }\n\n        func refreshInstallationStatus() {\n            Task { @MainActor in\n                installationStatus = await installationManager.checkInstallation()\n            }\n        }\n\n        func install() async throws {\n            defer { refreshInstallationStatus() }\n            do {\n                for try await step in installationManager.installLatestVersion() {\n                    Task { @MainActor in\n                        self.installationStep = step\n                    }\n                }\n                Task {\n                    try await Task.sleep(nanoseconds: 1_000_000_000)\n                    Task { @MainActor in\n                        self.installationStep = nil\n                    }\n                }\n            } catch {\n                Task { @MainActor in\n                    installationStep = nil\n                }\n                throw error\n            }\n        }\n\n        func uninstall() {\n            Task {\n                defer { refreshInstallationStatus() }\n                try await installationManager.uninstall()\n            }\n        }\n    }\n\n    @StateObject var viewModel = ViewModel()\n    @Environment(\\.toast) var toast\n    @State var isSignInPanelPresented = false\n\n    var installButton: some View {\n        Button(action: {\n            Task {\n                do {\n                    try await viewModel.install()\n                } catch {\n                    toast(error.localizedDescription, .error)\n                }\n            }\n        }) {\n            Text(\"Install\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var updateButton: some View {\n        Button(action: {\n            Task {\n                do {\n                    try await viewModel.install()\n                } catch {\n                    toast(error.localizedDescription, .error)\n                }\n            }\n        }) {\n            Text(\"Update\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var uninstallButton: some View {\n        Button(action: {\n            viewModel.uninstall()\n        }) {\n            Text(\"Uninstall\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var body: some View {\n        VStack(alignment: .leading) {\n            SubSection(title: Text(\"Codeium Language Server\")) {\n                switch viewModel.installationStatus {\n                case .notInstalled:\n                    HStack {\n                        Text(\"Language Server Version: Not Installed\")\n                        installButton\n                    }\n                case let .installed(version):\n                    HStack {\n                        Text(\"Language Server Version: \\(version)\")\n                        uninstallButton\n                    }\n                case let .outdated(current: current, latest: latest, _):\n                    HStack {\n                        Text(\"Language Server Version: \\(current) (Update Available: \\(latest))\")\n                        uninstallButton\n                        updateButton\n                    }\n                case let .unsupported(current: current, latest: latest):\n                    HStack {\n                        Text(\"Language Server Version: \\(current) (Supported Version: \\(latest))\")\n                        uninstallButton\n                        updateButton\n                    }\n                }\n\n                if viewModel.isSignedIn {\n                    Text(\"Status: Signed In\")\n\n                    Button(action: {\n                        Task {\n                            do {\n                                try await viewModel.signOut()\n                            } catch {\n                                toast(error.localizedDescription, .error)\n                            }\n                        }\n                    }) {\n                        Text(\"Sign Out\")\n                    }\n                } else {\n                    Text(\"Status: Not Signed In\")\n\n                    Button(action: {\n                        isSignInPanelPresented = true\n                    }) {\n                        Text(\"Sign In\")\n                    }\n                }\n            }\n            .sheet(isPresented: $isSignInPanelPresented) {\n                CodeiumSignInView(viewModel: viewModel, isPresented: $isSignInPanelPresented)\n            }\n            .onChange(of: viewModel.installationStep) { newValue in\n                if let step = newValue {\n                    switch step {\n                    case .downloading:\n                        toast(\"Downloading..\", .info)\n                    case .uninstalling:\n                        toast(\"Uninstalling old version..\", .info)\n                    case .decompressing:\n                        toast(\"Decompressing..\", .info)\n                    case .done:\n                        toast(\"Done!\", .info)\n                    }\n                }\n            }\n            \n            SubSection(title: Text(\"Indexing\")) {\n                Form {\n                    Toggle(\"Enable Indexing\", isOn: $viewModel.indexEnabled)\n                }\n            }\n\n            SubSection(title: Text(\"Enterprise\")) {\n                Form {\n                    Toggle(\"Codeium Enterprise Mode\", isOn: $viewModel.codeiumEnterpriseMode)\n                    TextField(\"Codeium Portal URL\", text: $viewModel.codeiumPortalUrl)\n                    TextField(\"Codeium API URL\", text: $viewModel.codeiumApiUrl)\n                }\n            }\n\n            SettingsDivider(\"Advanced\")\n\n            Form {\n                Toggle(\"Verbose Log\", isOn: $viewModel.codeiumVerboseLog)\n            }\n        }\n    }\n}\n\nstruct CodeiumSignInView: View {\n    let viewModel: CodeiumView.ViewModel\n    @Binding var isPresented: Bool\n    @Environment(\\.openURL) var openURL\n    @Environment(\\.toast) var toast\n    @State var isGeneratingKey = false\n    @State var token = \"\"\n\n    var body: some View {\n        VStack {\n            Text(\n                \"You will be redirected to codeium.com. Please paste the generated token below and click the \\\"Sign In\\\" button.\"\n            )\n\n            TextEditor(text: $token)\n                .font(Font.system(.body, design: .monospaced))\n                .padding(4)\n                .frame(minHeight: 120)\n                .multilineTextAlignment(.leading)\n                .overlay(\n                    RoundedRectangle(cornerRadius: 4)\n                        .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                )\n\n            HStack {\n                Spacer()\n\n                Button(action: {\n                    isPresented = false\n                }) {\n                    Text(\"Cancel\")\n                }\n\n                Button(action: {\n                    isGeneratingKey = true\n                    Task {\n                        do {\n                            try await viewModel.signIn(token: token)\n                            isGeneratingKey = false\n                            isPresented = false\n                        } catch {\n                            isGeneratingKey = false\n                            toast(error.localizedDescription, .error)\n                        }\n                    }\n                }) {\n                    Text(isGeneratingKey ? \"Signing In..\" : \"Sign In\")\n                }\n                .disabled(isGeneratingKey)\n                .keyboardShortcut(.defaultAction)\n            }\n        }\n        .padding()\n        .onAppear {\n            openURL(viewModel.generateAuthURL())\n        }\n    }\n}\n\nstruct CodeiumView_Previews: PreviewProvider {\n    class TestViewModel: CodeiumView.ViewModel {\n        override func generateAuthURL() -> URL {\n            return URL(string: \"about:blank\")!\n        }\n\n        override func signIn(token: String) async throws {}\n\n        override func signOut() async throws {}\n\n        override func refreshInstallationStatus() {}\n\n        override func install() async throws {}\n\n        override func uninstall() {}\n    }\n\n    static var previews: some View {\n        ScrollView {\n            VStack(alignment: .leading, spacing: 8) {\n                CodeiumView(viewModel: TestViewModel(\n                    isSignedIn: false,\n                    installationStatus: .notInstalled,\n                    installationStep: nil\n                ))\n                \n                CodeiumView(viewModel: TestViewModel(\n                    isSignedIn: true,\n                    installationStatus: .installed(\"1.2.9\"),\n                    installationStep: nil\n                ))\n                \n                CodeiumView(viewModel: TestViewModel(\n                    isSignedIn: true,\n                    installationStatus: .outdated(current: \"1.2.9\", latest: \"1.3.0\", mandatory: true),\n                    installationStep: .downloading\n                ))\n                \n                CodeiumView(viewModel: TestViewModel(\n                    isSignedIn: true,\n                    installationStatus: .unsupported(current: \"1.5.9\", latest: \"1.3.0\"),\n                    installationStep: .downloading\n                ))\n            }\n            .padding(8)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/CustomHeaderSettingsView.swift",
    "content": "import AIModel\nimport Foundation\nimport SwiftUI\n\nstruct CustomHeaderSettingsView: View {\n    @Binding var headers: [ChatModel.Info.CustomHeaderInfo.HeaderField]\n    @Environment(\\.dismiss) var dismiss\n    @State private var newKey = \"\"\n    @State private var newValue = \"\"\n\n    var body: some View {\n        VStack {\n            List {\n                ForEach(headers.indices, id: \\.self) { index in\n                    HStack {\n                        TextField(\"Key\", text: Binding(\n                            get: { headers[index].key },\n                            set: { newKey in\n                                headers[index].key = newKey\n                            }\n                        ))\n                        TextField(\"Value\", text: Binding(\n                            get: { headers[index].value },\n                            set: { headers[index].value = $0 }\n                        ))\n                        Button(action: {\n                            headers.remove(at: index)\n                        }) {\n                            Image(systemName: \"trash\")\n                                .foregroundColor(.red)\n                        }\n                    }\n                }\n\n                HStack {\n                    TextField(\"New Key\", text: $newKey)\n                    TextField(\"New Value\", text: $newValue)\n                    Button(action: {\n                        if !newKey.isEmpty {\n                            headers.append(ChatModel.Info.CustomHeaderInfo.HeaderField(\n                                key: newKey,\n                                value: newValue\n                            ))\n                            newKey = \"\"\n                            newValue = \"\"\n                        }\n                    }) {\n                        Image(systemName: \"plus.circle.fill\")\n                            .foregroundColor(.green)\n                    }\n                }\n            }\n\n            HStack {\n                Spacer()\n                Button(\"Done\") {\n                    dismiss()\n                }\n            }.padding()\n        }\n        .frame(height: 500)\n    }\n}\n\n#Preview {\n    struct V: View {\n        @State var headers: [ChatModel.Info.CustomHeaderInfo.HeaderField] = [\n            .init(key: \"key\", value: \"value\"),\n            .init(key: \"key2\", value: \"value2\"),\n        ]\n        var body: some View {\n            CustomHeaderSettingsView(headers: $headers)\n        }\n    }\n\n    return V()\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/EmbeddingModel.swift",
    "content": "import SwiftUI\nimport Keychain\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEdit.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport Dependencies\nimport Keychain\nimport OpenAIService\nimport Preferences\nimport SwiftUI\nimport Toast\n\n@Reducer\nstruct EmbeddingModelEdit {\n    @ObservableState\n    struct State: Equatable, Identifiable {\n        var id: String\n        var name: String\n        var format: EmbeddingModel.Format\n        var maxTokens: Int = 8191\n        var dimensions: Int = 1536\n        var modelName: String = \"\"\n        var ollamaKeepAlive: String = \"\"\n        var apiKeyName: String { apiKeySelection.apiKeyName }\n        var baseURL: String { baseURLSelection.baseURL }\n        var isFullURL: Bool { baseURLSelection.isFullURL }\n        var availableModelNames: [String] = []\n        var availableAPIKeys: [String] = []\n        var isTesting = false\n        var suggestedMaxTokens: Int?\n        var apiKeySelection: APIKeySelection.State = .init()\n        var baseURLSelection: BaseURLSelection.State = .init()\n        var customHeaders: [ChatModel.Info.CustomHeaderInfo.HeaderField] = []\n    }\n\n    enum Action: Equatable, BindableAction {\n        case binding(BindingAction<State>)\n        case appear\n        case saveButtonClicked\n        case cancelButtonClicked\n        case refreshAvailableModelNames\n        case testButtonClicked\n        case testSucceeded(String)\n        case testFailed(String)\n        case fixDimensions(Int)\n        case checkSuggestedMaxTokens\n        case selectModelFormat(ModelFormat)\n        case apiKeySelection(APIKeySelection.Action)\n        case baseURLSelection(BaseURLSelection.Action)\n    }\n    \n    enum ModelFormat: CaseIterable {\n        case openAI\n        case azureOpenAI\n        case ollama\n        case gitHubCopilot\n        case openAICompatible\n        case mistralOpenAICompatible\n        case voyageAIOpenAICompatible\n        \n        init(_ format: EmbeddingModel.Format) {\n            switch format {\n            case .openAI:\n                self = .openAI\n            case .azureOpenAI:\n                self = .azureOpenAI\n            case .ollama:\n                self = .ollama\n            case .openAICompatible:\n                self = .openAICompatible\n            case .gitHubCopilot:\n                self = .gitHubCopilot\n            }\n        }\n    }\n\n    var toast: (String, ToastType) -> Void {\n        @Dependency(\\.namespacedToast) var toast\n        return {\n            toast($0, $1, \"EmbeddingModelEdit\")\n        }\n    }\n\n    @Dependency(\\.apiKeyKeychain) var keychain\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Scope(state: \\.apiKeySelection, action: \\.apiKeySelection) {\n            APIKeySelection()\n        }\n\n        Scope(state: \\.baseURLSelection, action: \\.baseURLSelection) {\n            BaseURLSelection()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run { send in\n                    await send(.refreshAvailableModelNames)\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .saveButtonClicked:\n                return .none\n\n            case .cancelButtonClicked:\n                return .none\n\n            case .testButtonClicked:\n                guard !state.isTesting else { return .none }\n                state.isTesting = true\n                let dimensions = state.dimensions\n                let model = EmbeddingModel(\n                    id: state.id,\n                    name: state.name,\n                    format: state.format,\n                    info: .init(\n                        apiKeyName: state.apiKeyName,\n                        baseURL: state.baseURL,\n                        isFullURL: state.isFullURL,\n                        maxTokens: state.maxTokens,\n                        dimensions: dimensions,\n                        modelName: state.modelName\n                    )\n                )\n                return .run { send in\n                    do {\n                        let result = try await EmbeddingService(\n                            configuration: UserPreferenceEmbeddingConfiguration()\n                                .overriding {\n                                    $0.model = model\n                                }\n                        ).embed(text: \"Hello\")\n                        if result.data.isEmpty {\n                            await send(.testFailed(\"No data returned\"))\n                            return\n                        }\n                        let actualDimensions = result.data.first?.embedding.count ?? 0\n                        if actualDimensions != dimensions {\n                            await send(\n                                .testFailed(\"Invalid dimension, should be \\(actualDimensions)\")\n                            )\n                            await send(.fixDimensions(actualDimensions))\n                        } else {\n                            await send(\n                                .testSucceeded(\"Succeeded! (Dimensions: \\(actualDimensions))\")\n                            )\n                        }\n                    } catch {\n                        await send(.testFailed(error.localizedDescription))\n                    }\n                }\n\n            case let .testSucceeded(message):\n                state.isTesting = false\n                toast(message, .info)\n                return .none\n\n            case let .testFailed(message):\n                state.isTesting = false\n                toast(message, .error)\n                return .none\n\n            case .refreshAvailableModelNames:\n                if state.format == .openAI {\n                    state.availableModelNames = ChatGPTModel.allCases.map(\\.rawValue)\n                }\n\n                return .none\n\n            case .checkSuggestedMaxTokens:\n                guard state.format == .openAI,\n                      let knownModel = OpenAIEmbeddingModel(rawValue: state.modelName)\n                else {\n                    state.suggestedMaxTokens = nil\n                    return .none\n                }\n                state.suggestedMaxTokens = knownModel.maxToken\n                state.dimensions = knownModel.dimensions\n                return .none\n\n            case let .fixDimensions(value):\n                state.dimensions = value\n                return .none\n                \n            case let .selectModelFormat(format):\n                switch format {\n                case .openAI:\n                    state.format = .openAI\n                case .azureOpenAI:\n                    state.format = .azureOpenAI\n                case .ollama:\n                    state.format = .ollama\n                case .openAICompatible:\n                    state.format = .openAICompatible\n                case .gitHubCopilot:\n                    state.format = .gitHubCopilot\n                case .mistralOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://api.mistral.ai\"\n                    state.baseURLSelection.isFullURL = false\n                case .voyageAIOpenAICompatible:\n                    state.format = .openAICompatible\n                    state.baseURLSelection.baseURL = \"https://api.voyage.ai\"\n                    state.baseURLSelection.isFullURL = false\n                }\n                return .none\n\n            case .apiKeySelection:\n                return .none\n\n            case .baseURLSelection:\n                return .none\n\n            case .binding(\\.format):\n                return .run { send in\n                    await send(.refreshAvailableModelNames)\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .binding(\\.modelName):\n                return .run { send in\n                    await send(.checkSuggestedMaxTokens)\n                }\n\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\nextension EmbeddingModel {\n    init(state: EmbeddingModelEdit.State) {\n        self.init(\n            id: state.id,\n            name: state.name,\n            format: state.format,\n            info: .init(\n                apiKeyName: state.apiKeyName,\n                baseURL: state.baseURL.trimmingCharacters(in: .whitespacesAndNewlines),\n                isFullURL: state.isFullURL,\n                maxTokens: state.maxTokens,\n                dimensions: state.dimensions,\n                modelName: state.modelName.trimmingCharacters(in: .whitespacesAndNewlines),\n                ollamaInfo: .init(keepAlive: state.ollamaKeepAlive),\n                customHeaderInfo: .init(headers: state.customHeaders)\n            )\n        )\n    }\n\n    func toState() -> EmbeddingModelEdit.State {\n        .init(\n            id: id,\n            name: name,\n            format: format,\n            maxTokens: info.maxTokens,\n            dimensions: info.dimensions,\n            modelName: info.modelName,\n            ollamaKeepAlive: info.ollamaInfo.keepAlive,\n            apiKeySelection: .init(\n                apiKeyName: info.apiKeyName,\n                apiKeyManagement: .init(availableAPIKeyNames: [info.apiKeyName])\n            ),\n            baseURLSelection: .init(\n                baseURL: info.baseURL,\n                isFullURL: info.isFullURL\n            ),\n            customHeaders: info.customHeaderInfo.headers\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEditView.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport Preferences\nimport SwiftUI\n\n@MainActor\nstruct EmbeddingModelEditView: View {\n    @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollView {\n                VStack(spacing: 0) {\n                    Form {\n                        NameTextField(store: store)\n                        FormatPicker(store: store)\n\n                        switch store.format {\n                        case .openAI:\n                            OpenAIForm(store: store)\n                        case .azureOpenAI:\n                            AzureOpenAIForm(store: store)\n                        case .openAICompatible:\n                            OpenAICompatibleForm(store: store)\n                        case .ollama:\n                            OllamaForm(store: store)\n                        case .gitHubCopilot:\n                            GitHubCopilotForm(store: store)\n                        }\n                    }\n                    .padding()\n\n                    Divider()\n\n                    HStack {\n                        HStack(spacing: 8) {\n                            Button(\"Test\") {\n                                store.send(.testButtonClicked)\n                            }\n                            .disabled(store.isTesting)\n\n                            if store.isTesting {\n                                ProgressView()\n                                    .controlSize(.small)\n                            }\n                        }\n\n                        Spacer()\n\n                        Button(\"Cancel\") {\n                            store.send(.cancelButtonClicked)\n                        }\n                        .keyboardShortcut(.cancelAction)\n\n                        Button(action: { store.send(.saveButtonClicked) }) {\n                            Text(\"Save\")\n                        }\n                        .keyboardShortcut(.defaultAction)\n                    }\n                    .padding()\n                }\n            }\n            .textFieldStyle(.roundedBorder)\n            .onAppear {\n                store.send(.appear)\n            }\n            .fixedSize(horizontal: false, vertical: true)\n            .handleToast(namespace: \"EmbeddingModelEdit\")\n        }\n    }\n\n    struct NameTextField: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                TextField(\"Name\", text: $store.name)\n            }\n        }\n    }\n\n    struct FormatPicker: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                Picker(\n                    selection: Binding(\n                        get: { .init(store.format) },\n                        set: { store.send(.selectModelFormat($0)) }\n                    ),\n                    content: {\n                        ForEach(\n                            EmbeddingModelEdit.ModelFormat.allCases,\n                            id: \\.self\n                        ) { format in\n                            switch format {\n                            case .openAI:\n                                Text(\"OpenAI\")\n                            case .azureOpenAI:\n                                Text(\"Azure OpenAI\")\n                            case .ollama:\n                                Text(\"Ollama\")\n                            case .openAICompatible:\n                                Text(\"OpenAI Compatible\")\n                            case .mistralOpenAICompatible:\n                                Text(\"Mistral (OpenAI Compatible)\")\n                            case .voyageAIOpenAICompatible:\n                                Text(\"Voyage (OpenAI Compatible)\")\n                            case .gitHubCopilot:\n                                Text(\"GitHub Copilot\")\n                            }\n                        }\n                    },\n                    label: { Text(\"Format\") }\n                )\n                .pickerStyle(.menu)\n            }\n        }\n    }\n\n    struct BaseURLTextField<V: View>: View {\n        let store: StoreOf<EmbeddingModelEdit>\n        var title: String = \"Base URL\"\n        let prompt: Text?\n        @ViewBuilder var trailingContent: () -> V\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLPicker(\n                    title: title,\n                    prompt: prompt,\n                    store: store.scope(\n                        state: \\.baseURLSelection,\n                        action: \\.baseURLSelection\n                    ),\n                    trailingContent: trailingContent\n                )\n            }\n        }\n    }\n\n    struct MaxTokensTextField: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack {\n                    let textFieldBinding = Binding(\n                        get: { String(store.maxTokens) },\n                        set: {\n                            if let selectionMaxToken = Int($0) {\n                                $store.maxTokens.wrappedValue = selectionMaxToken\n                            } else {\n                                $store.maxTokens.wrappedValue = 0\n                            }\n                        }\n                    )\n\n                    TextField(text: textFieldBinding) {\n                        Text(\"Max Input Tokens\")\n                            .multilineTextAlignment(.trailing)\n                    }\n                    .overlay(alignment: .trailing) {\n                        Stepper(\n                            value: $store.maxTokens,\n                            in: 0...Int.max,\n                            step: 100\n                        ) {\n                            EmptyView()\n                        }\n                    }\n                    .foregroundColor({\n                        guard let max = store.suggestedMaxTokens else {\n                            return .primary\n                        }\n                        if store.maxTokens > max {\n                            return .red\n                        }\n                        return .primary\n                    }() as Color)\n\n                    if let max = store.suggestedMaxTokens {\n                        Text(\"Max: \\(max)\")\n                    }\n                }\n            }\n        }\n    }\n\n    struct DimensionsTextField: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack {\n                    let textFieldBinding = Binding(\n                        get: { String(store.dimensions) },\n                        set: {\n                            if let selectionDimensions = Int($0) {\n                                $store.dimensions.wrappedValue = selectionDimensions\n                            } else {\n                                $store.dimensions.wrappedValue = 0\n                            }\n                        }\n                    )\n\n                    TextField(text: textFieldBinding) {\n                        Text(\"Dimensions\")\n                            .multilineTextAlignment(.trailing)\n                    }\n                    .overlay(alignment: .trailing) {\n                        Stepper(\n                            value: $store.dimensions,\n                            in: 0...Int.max,\n                            step: 100\n                        ) {\n                            EmptyView()\n                        }\n                    }\n                    .foregroundColor({\n                        if store.dimensions <= 0 {\n                            return .red\n                        }\n                        return .primary\n                    }() as Color)\n                }\n\n                Text(\"If you are not sure, run test to get the correct value.\")\n                    .font(.caption)\n                    .dynamicHeightTextInFormWorkaround()\n            }\n        }\n    }\n\n    struct ApiKeyNamePicker: View {\n        let store: StoreOf<EmbeddingModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                APIKeyPicker(store: store.scope(\n                    state: \\.apiKeySelection,\n                    action: \\.apiKeySelection\n                ))\n            }\n        }\n    }\n\n    struct OpenAIForm: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"https://api.openai.com\")) {\n                    Text(\"/v1/embeddings\")\n                }\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.modelName,\n                            content: {\n                                if OpenAIEmbeddingModel(rawValue: store.modelName) == nil {\n                                    Text(\"Custom Model\").tag(store.modelName)\n                                }\n                                ForEach(OpenAIEmbeddingModel.allCases, id: \\.self) { model in\n                                    Text(model.rawValue).tag(model.rawValue)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                MaxTokensTextField(store: store)\n                DimensionsTextField(store: store)\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" To get an API key, please visit [https://platform.openai.com/api-keys](https://platform.openai.com/api-keys)\"\n                    )\n\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" If you don't have access to GPT-4, you may need to visit [https://platform.openai.com/account/billing/overview](https://platform.openai.com/account/billing/overview) to buy some credits. A ChatGPT Plus subscription is not enough to access GPT-4 through API.\"\n                    )\n                }\n                .padding(.vertical)\n            }\n        }\n    }\n\n    struct AzureOpenAIForm: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"https://xxxx.openai.azure.com\")) {\n                    EmptyView()\n                }\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Deployment Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n                DimensionsTextField(store: store)\n            }\n        }\n    }\n\n    struct OpenAICompatibleForm: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        @State var isEditingCustomHeader = false\n\n        var body: some View {\n            WithPerceptionTracking {\n                Picker(\n                    selection: $store.baseURLSelection.isFullURL,\n                    content: {\n                        Text(\"Base URL\").tag(false)\n                        Text(\"Full URL\").tag(true)\n                    },\n                    label: { Text(\"URL\") }\n                )\n                .pickerStyle(.segmented)\n\n                BaseURLTextField(\n                    store: store,\n                    title: \"\",\n                    prompt: store.isFullURL\n                        ? Text(\"https://api.openai.com/v1/embeddings\")\n                        : Text(\"https://api.openai.com\")\n                ) {\n                    if !store.isFullURL {\n                        Text(\"/v1/embeddings\")\n                    }\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n                DimensionsTextField(store: store)\n\n                Button(\"Custom Headers\") {\n                    isEditingCustomHeader.toggle()\n                }\n            }.sheet(isPresented: $isEditingCustomHeader) {\n                CustomHeaderSettingsView(headers: $store.customHeaders)\n            }\n        }\n    }\n\n    struct OllamaForm: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        @State var isEditingCustomHeader = false\n\n        var body: some View {\n            WithPerceptionTracking {\n                BaseURLTextField(store: store, prompt: Text(\"http://127.0.0.1:11434\")) {\n                    Text(\"/api/embeddings\")\n                }\n\n                ApiKeyNamePicker(store: store)\n\n                TextField(\"Model Name\", text: $store.modelName)\n\n                MaxTokensTextField(store: store)\n                DimensionsTextField(store: store)\n\n                WithPerceptionTracking {\n                    TextField(text: $store.ollamaKeepAlive, prompt: Text(\"Default Value\")) {\n                        Text(\"Keep Alive\")\n                    }\n                }\n\n                Button(\"Custom Headers\") {\n                    isEditingCustomHeader.toggle()\n                }\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" For more details, please visit [https://ollama.com](https://ollama.com).\"\n                    )\n                }\n                .padding(.vertical)\n\n            }.sheet(isPresented: $isEditingCustomHeader) {\n                CustomHeaderSettingsView(headers: $store.customHeaders)\n            }\n        }\n    }\n\n    struct GitHubCopilotForm: View {\n        @Perception.Bindable var store: StoreOf<EmbeddingModelEdit>\n        @State var isEditingCustomHeader = false\n\n        var body: some View {\n            WithPerceptionTracking {\n                TextField(\"Model Name\", text: $store.modelName)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.modelName,\n                            content: {\n                                if OpenAIEmbeddingModel(rawValue: store.modelName) == nil {\n                                    Text(\"Custom Model\").tag(store.modelName)\n                                }\n                                ForEach(OpenAIEmbeddingModel.allCases, id: \\.self) { model in\n                                    Text(model.rawValue).tag(model.rawValue)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                MaxTokensTextField(store: store)\n                DimensionsTextField(store: store)\n\n                Button(\"Custom Headers\") {\n                    isEditingCustomHeader.toggle()\n                }\n\n                VStack(alignment: .leading, spacing: 8) {\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" Please login in the GitHub Copilot settings to use the model.\"\n                    )\n\n                    Text(Image(systemName: \"exclamationmark.triangle.fill\")) + Text(\n                        \" This will call the APIs directly, which may not be allowed by GitHub. But it's used in other popular apps like Zed.\"\n                    )\n                }\n                .dynamicHeightTextInFormWorkaround()\n                .padding(.vertical)\n            }.sheet(isPresented: $isEditingCustomHeader) {\n                CustomHeaderSettingsView(headers: $store.customHeaders)\n            }\n        }\n    }\n}\n\nclass EmbeddingModelManagementView_Editing_Previews: PreviewProvider {\n    static var previews: some View {\n        EmbeddingModelEditView(\n            store: .init(\n                initialState: EmbeddingModel(\n                    id: \"3\",\n                    name: \"Test Model 3\",\n                    format: .openAICompatible,\n                    info: .init(\n                        apiKeyName: \"key\",\n                        baseURL: \"apple.com\",\n                        maxTokens: 3000,\n                        modelName: \"gpt-3.5-turbo\"\n                    )\n                ).toState(),\n                reducer: { EmbeddingModelEdit() }\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagement.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport Keychain\nimport Preferences\nimport SwiftUI\n\nextension EmbeddingModel: ManageableAIModel {\n    var formatName: String {\n        switch format {\n        case .openAI: return \"OpenAI\"\n        case .azureOpenAI: return \"Azure OpenAI\"\n        case .openAICompatible: return \"OpenAI Compatible\"\n        case .ollama: return \"Ollama\"\n        case .gitHubCopilot: return \"GitHub Copilot\"\n        }\n    }\n\n    @ViewBuilder\n    var infoDescriptors: some View {\n        Text(info.modelName)\n\n        if !info.baseURL.isEmpty {\n            Image(systemName: \"line.diagonal\")\n            Text(info.baseURL)\n        }\n\n        Image(systemName: \"line.diagonal\")\n\n        Text(\"\\(info.maxTokens) tokens\")\n    }\n}\n\n@Reducer\nstruct EmbeddingModelManagement: AIModelManagement {\n    typealias Model = EmbeddingModel\n\n    @ObservableState\n    struct State: Equatable, AIModelManagementState {\n        typealias Model = EmbeddingModel\n        var models: IdentifiedArrayOf<EmbeddingModel> = []\n        @Presents var editingModel: EmbeddingModelEdit.State?\n        var selectedModelId: Model.ID? { editingModel?.id }\n    }\n\n    enum Action: Equatable, AIModelManagementAction {\n        typealias Model = EmbeddingModel\n        case appear\n        case createModel\n        case removeModel(id: Model.ID)\n        case selectModel(id: Model.ID)\n        case duplicateModel(id: Model.ID)\n        case moveModel(from: IndexSet, to: Int)\n        case embeddingModelItem(PresentationAction<EmbeddingModelEdit.Action>)\n    }\n\n    @Dependency(\\.toast) var toast\n    @Dependency(\\.userDefaults) var userDefaults\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                if isPreview { return .none }\n                state.models = .init(\n                    userDefaults.value(for: \\.embeddingModels),\n                    id: \\.id,\n                    uniquingIDsWith: { a, _ in a }\n                )\n\n                return .none\n\n            case .createModel:\n                state.editingModel = .init(\n                    id: UUID().uuidString,\n                    name: \"New Model\",\n                    format: .openAI\n                )\n                return .none\n\n            case let .removeModel(id):\n                state.models.remove(id: id)\n                persist(state)\n                return .none\n\n            case let .selectModel(id):\n                guard let model = state.models[id: id] else { return .none }\n                state.editingModel = model.toState()\n                return .none\n\n            case let .duplicateModel(id):\n                guard var model = state.models[id: id] else { return .none }\n                model.id = UUID().uuidString\n                model.name += \" (Copy)\"\n\n                if let index = state.models.index(id: id) {\n                    state.models.insert(model, at: index + 1)\n                } else {\n                    state.models.append(model)\n                }\n                persist(state)\n                return .none\n\n            case let .moveModel(from, to):\n                state.models.move(fromOffsets: from, toOffset: to)\n                persist(state)\n                return .none\n\n            case .embeddingModelItem(.presented(.saveButtonClicked)):\n                guard let editingModel = state.editingModel, validateModel(editingModel)\n                else { return .none }\n\n                if let index = state.models\n                    .firstIndex(where: { $0.id == editingModel.id })\n                {\n                    state.models[index] = .init(state: editingModel)\n                } else {\n                    state.models.append(.init(state: editingModel))\n                }\n                persist(state)\n                return .run { send in\n                    await send(.embeddingModelItem(.dismiss))\n                }\n\n            case .embeddingModelItem(.presented(.cancelButtonClicked)):\n                return .run { send in\n                    await send(.embeddingModelItem(.dismiss))\n                }\n\n            case .embeddingModelItem:\n                return .none\n            }\n        }.ifLet(\\.$editingModel, action: \\.embeddingModelItem) {\n            EmbeddingModelEdit()\n        }\n    }\n\n    func persist(_ state: State) {\n        let models = state.models\n        userDefaults.set(Array(models), for: \\.embeddingModels)\n    }\n\n    func validateModel(_ chatModel: EmbeddingModelEdit.State) -> Bool {\n        guard !chatModel.name.isEmpty else {\n            toast(\"Model name cannot be empty\", .error)\n            return false\n        }\n        guard !chatModel.id.isEmpty else {\n            toast(\"Model ID cannot be empty\", .error)\n            return false\n        }\n\n        guard !chatModel.modelName.isEmpty else {\n            toast(\"Model name cannot be empty\", .error)\n            return false\n        }\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagementView.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport SwiftUI\n\nstruct EmbeddingModelManagementView: View {\n    @Perception.Bindable var store: StoreOf<EmbeddingModelManagement>\n\n    var body: some View {\n        WithPerceptionTracking {\n            AIModelManagementView<EmbeddingModelManagement, _>(store: store)\n                .sheet(item: $store.scope(\n                    state: \\.editingModel,\n                    action: \\.embeddingModelItem\n                )) { store in\n                    EmbeddingModelEditView(store: store)\n                        .frame(width: 800)\n                }\n        }\n    }\n}\n\n// MARK: - Previews\n\nclass EmbeddingModelManagementView_Previews: PreviewProvider {\n    static var previews: some View {\n        EmbeddingModelManagementView(\n            store: .init(\n                initialState: .init(\n                    models: IdentifiedArray<String, EmbeddingModel>(uniqueElements: [\n                        EmbeddingModel(\n                            id: \"1\",\n                            name: \"Test Model\",\n                            format: .openAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"google.com\",\n                                maxTokens: 3000,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        EmbeddingModel(\n                            id: \"2\",\n                            name: \"Test Model 2\",\n                            format: .azureOpenAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        EmbeddingModel(\n                            id: \"3\",\n                            name: \"Test Model 3\",\n                            format: .openAICompatible,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                    ]),\n                    editingModel: EmbeddingModel(\n                        id: \"3\",\n                        name: \"Test Model 3\",\n                        format: .openAICompatible,\n                        info: .init(\n                            apiKeyName: \"key\",\n                            baseURL: \"apple.com\",\n                            maxTokens: 3000,\n                            modelName: \"gpt-3.5-turbo\"\n                        )\n                    ).toState()\n                ),\n                reducer: { EmbeddingModelManagement() }\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/GitHubCopilotModelPicker.swift",
    "content": "import Dependencies\nimport Foundation\nimport GitHubCopilotService\nimport Perception\nimport SwiftUI\nimport Toast\n\npublic struct GitHubCopilotModelPicker: View {\n    @Perceptible\n    final class ViewModel {\n        var availableModels: [GitHubCopilotLLMModel] = []\n        @PerceptionIgnored @Dependency(\\.toast) var toast\n\n        init() {}\n\n        func appear() {\n            reloadAvailableModels()\n        }\n\n        func disappear() {}\n\n        func reloadAvailableModels() {\n            Task { @MainActor in\n                do {\n                    availableModels = try await GitHubCopilotExtension.fetchLLMModels()\n                } catch {\n                    toast(\"Failed to fetch GitHub Copilot models: \\(error)\", .error)\n                }\n            }\n        }\n    }\n\n    let title: String\n    let hasDefaultModel: Bool\n    @Binding var gitHubCopilotModelId: String\n    @State var viewModel: ViewModel\n\n    init(\n        title: String,\n        hasDefaultModel: Bool = true,\n        gitHubCopilotModelId: Binding<String>\n    ) {\n        self.title = title\n        _gitHubCopilotModelId = gitHubCopilotModelId\n        self.hasDefaultModel = hasDefaultModel\n        viewModel = .init()\n    }\n\n    public var body: some View {\n        WithPerceptionTracking {\n            TextField(title, text: $gitHubCopilotModelId)\n                .overlay(alignment: .trailing) {\n                    Picker(\n                        \"\",\n                        selection: $gitHubCopilotModelId,\n                        content: {\n                            if hasDefaultModel {\n                                Text(\"Default\").tag(\"\")\n                            }\n\n                            if !gitHubCopilotModelId.isEmpty,\n                               !viewModel.availableModels.contains(where: {\n                                   $0.modelId == gitHubCopilotModelId\n                               })\n                            {\n                                Text(gitHubCopilotModelId).tag(gitHubCopilotModelId)\n                            }\n                            if viewModel.availableModels.isEmpty {\n                                Text({\n                                    viewModel.reloadAvailableModels()\n                                    return \"Loading...\"\n                                }()).tag(\"Loading...\")\n                            }\n                            ForEach(viewModel.availableModels) { model in\n                                Text(model.modelId)\n                                    .tag(model.modelId)\n                            }\n                        }\n                    )\n                    .frame(width: 20)\n                }\n                .onAppear {\n                    viewModel.appear()\n                }\n                .onDisappear {\n                    viewModel.disappear()\n                }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/GitHubCopilotView.swift",
    "content": "import AppKit\nimport Client\nimport GitHubCopilotService\nimport Preferences\nimport SharedUIComponents\nimport SuggestionBasic\nimport SwiftUI\n\nstruct GitHubCopilotView: View {\n    static var copilotAuthService: GitHubCopilotAuthServiceType?\n\n    class Settings: ObservableObject {\n        @AppStorage(\\.nodePath) var nodePath: String\n        @AppStorage(\\.runNodeWith) var runNodeWith\n        @AppStorage(\"username\") var username: String = \"\"\n        @AppStorage(\\.gitHubCopilotVerboseLog) var gitHubCopilotVerboseLog\n        @AppStorage(\\.gitHubCopilotProxyHost) var gitHubCopilotProxyHost\n        @AppStorage(\\.gitHubCopilotProxyPort) var gitHubCopilotProxyPort\n        @AppStorage(\\.gitHubCopilotProxyUsername) var gitHubCopilotProxyUsername\n        @AppStorage(\\.gitHubCopilotProxyPassword) var gitHubCopilotProxyPassword\n        @AppStorage(\\.gitHubCopilotUseStrictSSL) var gitHubCopilotUseStrictSSL\n        @AppStorage(\\.gitHubCopilotEnterpriseURI) var gitHubCopilotEnterpriseURI\n        @AppStorage(\\.gitHubCopilotPretendIDEToBeVSCode) var pretendIDEToBeVSCode\n        @AppStorage(\\.disableGitHubCopilotSettingsAutoRefreshOnAppear)\n        var disableGitHubCopilotSettingsAutoRefreshOnAppear\n        @AppStorage(\\.gitHubCopilotLoadKeyChainCertificates)\n        var gitHubCopilotLoadKeyChainCertificates\n        @AppStorage(\\.gitHubCopilotModelId) var gitHubCopilotModelId\n        init() {}\n    }\n\n    class ViewModel: ObservableObject {\n        let installationManager = GitHubCopilotInstallationManager()\n\n        @Published var installationStatus: GitHubCopilotInstallationManager.InstallationStatus?\n        @Published var installationStep: GitHubCopilotInstallationManager.InstallationStep?\n\n        init() {}\n\n        init(\n            installationStatus: GitHubCopilotInstallationManager.InstallationStatus,\n            installationStep: GitHubCopilotInstallationManager.InstallationStep?\n        ) {\n            assert(isPreview)\n            self.installationStatus = installationStatus\n            self.installationStep = installationStep\n        }\n\n        func refreshInstallationStatus() {\n            Task { @MainActor in\n                installationStatus = installationManager.checkInstallation()\n            }\n        }\n\n        func install() async throws {\n            defer { refreshInstallationStatus() }\n            do {\n                for try await step in installationManager.installLatestVersion() {\n                    Task { @MainActor in\n                        self.installationStep = step\n                    }\n                }\n                Task {\n                    try await Task.sleep(nanoseconds: 1_000_000_000)\n                    Task { @MainActor in\n                        self.installationStep = nil\n                    }\n                }\n            } catch {\n                Task { @MainActor in\n                    installationStep = nil\n                }\n                throw error\n            }\n        }\n\n        func uninstall() {\n            Task {\n                defer { refreshInstallationStatus() }\n                try await installationManager.uninstall()\n                Task { @MainActor in\n                    GitHubCopilotView.copilotAuthService = nil\n                }\n            }\n        }\n    }\n\n    @Environment(\\.openURL) var openURL\n    @Environment(\\.toast) var toast\n    @StateObject var settings = Settings()\n    @StateObject var viewModel = ViewModel()\n\n    @State var status: GitHubCopilotAccountStatus?\n    @State var userCode: String?\n    @State var version: String?\n    @State var isRunningAction: Bool = false\n    @State var isUserCodeCopiedAlertPresented = false\n\n    func getGitHubCopilotAuthService() throws -> GitHubCopilotAuthServiceType {\n        if let service = Self.copilotAuthService { return service }\n        let service = try GitHubCopilotAuthService()\n        Self.copilotAuthService = service\n        return service\n    }\n\n    var installButton: some View {\n        Button(action: {\n            Task {\n                do {\n                    try await viewModel.install()\n                } catch {\n                    toast(error.localizedDescription, .error)\n                }\n            }\n        }) {\n            Text(\"Install\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var updateButton: some View {\n        Button(action: {\n            Task {\n                do {\n                    try await viewModel.install()\n                } catch {\n                    toast(error.localizedDescription, .error)\n                }\n            }\n        }) {\n            Text(\"Update\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var uninstallButton: some View {\n        Button(action: {\n            viewModel.uninstall()\n        }) {\n            Text(\"Uninstall\")\n        }\n        .disabled(viewModel.installationStep != nil)\n    }\n\n    var body: some View {\n        HStack {\n            VStack(alignment: .leading, spacing: 8) {\n                SubSection(\n                    title: Text(\"Node Settings\"),\n                    description: \"\"\"\n                    You may have to restart the extension app to apply the changes. To do so, simply close the helper app by clicking on the menu bar icon that looks like a tentacle, it will automatically restart as needed.\n                    \"\"\"\n                ) {\n                    Form {\n                        TextField(\n                            text: $settings.nodePath,\n                            prompt: Text(\n                                \"node\"\n                            )\n                        ) {\n                            Text(\"Path to Node (v22.0+)\")\n                        }\n\n                        Text(\n                            \"Provide the path to the executable if it can't be found by the app, shim executable is not supported\"\n                        )\n                        .lineLimit(10)\n                        .foregroundColor(.secondary)\n                        .font(.callout)\n                        .dynamicHeightTextInFormWorkaround()\n\n                        Picker(selection: $settings.runNodeWith) {\n                            ForEach(NodeRunner.allCases, id: \\.rawValue) { runner in\n                                switch runner {\n                                case .env:\n                                    Text(\"/usr/bin/env\").tag(runner)\n                                case .bash:\n                                    Text(\"/bin/bash -i -l\").tag(runner)\n                                case .shell:\n                                    Text(\"$SHELL -i -l\").tag(runner)\n                                }\n                            }\n                        } label: {\n                            Text(\"Run Node with\")\n                        }\n\n                        Group {\n                            switch settings.runNodeWith {\n                            case .env:\n                                Text(\n                                    \"PATH: `/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`\"\n                                )\n                            case .bash:\n                                Text(\"PATH inherited from bash configurations.\")\n                            case .shell:\n                                Text(\"PATH inherited from $SHELL configurations.\")\n                            }\n                        }\n                        .lineLimit(10)\n                        .foregroundColor(.secondary)\n                        .font(.callout)\n                        .dynamicHeightTextInFormWorkaround()\n\n                        Toggle(isOn: $settings.gitHubCopilotLoadKeyChainCertificates) {\n                            Text(\"Load certificates in keychain\")\n                        }\n                    }\n                }\n\n                SubSection(\n                    title: Text(\"GitHub Copilot Language Server\")\n                ) {\n                    HStack {\n                        switch viewModel.installationStatus {\n                        case .none:\n                            Text(\"Copilot.Vim Version: Loading..\")\n                        case .notInstalled:\n                            Text(\"Copilot.Vim Version: Not Installed\")\n                            installButton\n                        case let .installed(version):\n                            Text(\"Copilot.Vim Version: \\(version)\")\n                            uninstallButton\n                        case let .outdated(version, latest, _):\n                            Text(\"Copilot.Vim Version: \\(version) (Update Available: \\(latest))\")\n                            updateButton\n                            uninstallButton\n                        case let .unsupported(version, latest):\n                            Text(\"Copilot.Vim Version: \\(version) (Supported Version: \\(latest))\")\n                            updateButton\n                            uninstallButton\n                        }\n                    }\n\n                    Text(\"Language Server Version: \\(version ?? \"Loading..\")\")\n\n                    Text(\"Status: \\(status?.description ?? \"Loading..\")\")\n\n                    HStack(alignment: .center) {\n                        Button(\"Refresh\") {\n                            viewModel.refreshInstallationStatus()\n                            checkStatus()\n                        }\n                        if status == .notSignedIn {\n                            Button(\"Sign In\") { signIn() }\n                                .alert(isPresented: $isUserCodeCopiedAlertPresented) {\n                                    Alert(\n                                        title: Text(userCode ?? \"\"),\n                                        message: Text(\n                                            \"The user code is pasted into your clipboard, please paste it in the opened website to login.\\nAfter that, click \\\"Confirm Sign-in\\\" to finish.\"\n                                        ),\n                                        dismissButton: .default(Text(\"OK\"))\n                                    )\n                                }\n                            Button(\"Confirm Sign-in\") { confirmSignIn() }\n                        }\n                        if status == .ok || status == .alreadySignedIn ||\n                            status == .notAuthorized\n                        {\n                            Button(\"Sign Out\") { signOut() }\n                        }\n                        if isRunningAction {\n                            ActivityIndicatorView()\n                        }\n                    } \n                    .opacity(isRunningAction ? 0.8 : 1)\n                    .disabled(isRunningAction)\n\n                    Button(\"Refresh configurations\") {\n                        refreshConfiguration()\n                    }\n\n                    Form {\n                        GitHubCopilotModelPicker(\n                            title: \"Chat Model Name\",\n                            gitHubCopilotModelId: $settings.gitHubCopilotModelId\n                        )\n                    }\n                }\n\n                SettingsDivider(\"Advanced\")\n\n                Form {\n                    Toggle(\"Verbose log\", isOn: $settings.gitHubCopilotVerboseLog)\n                    Toggle(\"Pretend IDE to be VSCode\", isOn: $settings.pretendIDEToBeVSCode)\n                }\n\n                SettingsDivider(\"Enterprise\")\n\n                Form {\n                    TextField(\n                        text: $settings.gitHubCopilotEnterpriseURI,\n                        prompt: Text(\"Leave it blank if non is available.\")\n                    ) {\n                        Text(\"Auth provider URL\")\n                    }\n                }\n\n                SettingsDivider(\"Proxy\")\n\n                Form {\n                    TextField(\n                        text: $settings.gitHubCopilotProxyHost,\n                        prompt: Text(\"xxx.xxx.xxx.xxx, leave it blank to disable proxy.\")\n                    ) {\n                        Text(\"Proxy host\")\n                    }\n                    TextField(text: $settings.gitHubCopilotProxyPort, prompt: Text(\"80\")) {\n                        Text(\"Proxy port\")\n                    }\n                    TextField(text: $settings.gitHubCopilotProxyUsername) {\n                        Text(\"Proxy username\")\n                    }\n                    SecureField(text: $settings.gitHubCopilotProxyPassword) {\n                        Text(\"Proxy password\")\n                    }\n                    Toggle(\"Proxy strict SSL\", isOn: $settings.gitHubCopilotUseStrictSSL)\n                }\n            }\n            Spacer()\n        }.onAppear {\n            if isPreview { return }\n            if settings.disableGitHubCopilotSettingsAutoRefreshOnAppear { return }\n            viewModel.refreshInstallationStatus()\n            checkStatus()\n        }.onChange(of: settings.runNodeWith) { _ in\n            Self.copilotAuthService = nil\n        }.onChange(of: settings.nodePath) { _ in\n            Self.copilotAuthService = nil\n        }.onChange(of: viewModel.installationStep) { newValue in\n            if let step = newValue {\n                switch step {\n                case .downloading:\n                    toast(\"Downloading..\", .info)\n                case .uninstalling:\n                    toast(\"Uninstalling old version..\", .info)\n                case .decompressing:\n                    toast(\"Decompressing..\", .info)\n                case .done:\n                    toast(\"Done!\", .info)\n                    checkStatus()\n                }\n            }\n        }\n        .textFieldStyle(.roundedBorder)\n    }\n\n    func checkStatus() {\n        Task {\n            isRunningAction = true\n            defer { isRunningAction = false }\n            do {\n                let service = try getGitHubCopilotAuthService()\n                status = try await service.checkStatus()\n                version = try await service.version()\n                isRunningAction = false\n\n                if status != .ok, status != .notSignedIn {\n                    toast(\n                        \"GitHub Copilot status is not \\\"ok\\\". Please check if you have a valid GitHub Copilot subscription.\",\n                        .error\n                    )\n                }\n            } catch {\n                toast(error.localizedDescription, .error)\n            }\n        }\n    }\n\n    func signIn() {\n        Task {\n            isRunningAction = true\n            defer { isRunningAction = false }\n            do {\n                let service = try getGitHubCopilotAuthService()\n                let (uri, userCode) = try await service.signInInitiate()\n                self.userCode = userCode\n                guard let url = URL(string: uri) else {\n                    toast(\"Verification URI is incorrect.\", .error)\n                    return\n                }\n                let pasteboard = NSPasteboard.general\n                pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)\n                pasteboard.setString(userCode, forType: NSPasteboard.PasteboardType.string)\n                toast(\"Usercode \\(userCode) already copied!\", .info)\n                openURL(url)\n                isUserCodeCopiedAlertPresented = true\n            } catch {\n                toast(error.localizedDescription, .error)\n            }\n        }\n    }\n\n    func confirmSignIn() {\n        Task {\n            isRunningAction = true\n            defer { isRunningAction = false }\n            do {\n                let service = try getGitHubCopilotAuthService()\n                guard let userCode else {\n                    toast(\"Usercode is empty.\", .error)\n                    return\n                }\n                let (username, status) = try await service.signInConfirm(userCode: userCode)\n                self.settings.username = username\n                self.status = status\n            } catch {\n                toast(error.localizedDescription, .error)\n            }\n        }\n    }\n\n    func signOut() {\n        Task {\n            isRunningAction = true\n            defer { isRunningAction = false }\n            do {\n                let service = try getGitHubCopilotAuthService()\n                status = try await service.signOut()\n            } catch {\n                toast(error.localizedDescription, .error)\n            }\n        }\n    }\n\n    func refreshConfiguration() {\n        NotificationCenter.default.post(\n            name: .gitHubCopilotShouldRefreshEditorInformation,\n            object: nil\n        )\n\n        Task {\n            let service = try getService()\n            do {\n                try await service.postNotification(\n                    name: Notification.Name\n                        .gitHubCopilotShouldRefreshEditorInformation.rawValue\n                )\n            } catch {\n                toast(error.localizedDescription, .error)\n            }\n        }\n    }\n}\n\nstruct ActivityIndicatorView: NSViewRepresentable {\n    func makeNSView(context _: Context) -> NSProgressIndicator {\n        let progressIndicator = NSProgressIndicator()\n        progressIndicator.style = .spinning\n        progressIndicator.appearance = NSAppearance(named: .vibrantLight)\n        progressIndicator.controlSize = .small\n        progressIndicator.startAnimation(nil)\n        return progressIndicator\n    }\n\n    func updateNSView(_: NSProgressIndicator, context _: Context) {\n        // No-op\n    }\n}\n\nstruct CopilotView_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack(alignment: .leading, spacing: 8) {\n            GitHubCopilotView(status: .notSignedIn, version: \"1.0.0\")\n            GitHubCopilotView(status: .alreadySignedIn, isRunningAction: true)\n        }\n        .padding(.all, 8)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/OtherSuggestionServicesView.swift",
    "content": "import Foundation\nimport SwiftUI\n\nstruct OtherSuggestionServicesView: View {\n    @Environment(\\.openURL) var openURL\n    var body: some View {\n        VStack(alignment: .leading) {\n            Text(\n                \"You can use other locally run services (Tabby, Ollma, etc.) to generate suggestions with the Custom Suggestion Service extension.\"\n            )\n            .lineLimit(nil)\n            .multilineTextAlignment(.leading)\n\n            Button(action: {\n                if let url = URL(\n                    string: \"https://github.com/intitni/CustomSuggestionServiceForCopilotForXcode\"\n                ) {\n                    openURL(url)\n                }\n            }) {\n                Text(\"Get It Now\")\n            }\n        }\n    }\n}\n\n#Preview {\n    OtherSuggestionServicesView()\n        .frame(width: 200)\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/SharedModelManagement/AIModelManagementVIew.swift",
    "content": "import AIModel\nimport ComposableArchitecture\nimport PlusFeatureFlag\nimport SharedUIComponents\nimport SwiftUI\n\nprotocol AIModelManagementAction {\n    associatedtype Model: ManageableAIModel\n    static var appear: Self { get }\n    static var createModel: Self { get }\n    static func removeModel(id: Model.ID) -> Self\n    static func selectModel(id: Model.ID) -> Self\n    static func duplicateModel(id: Model.ID) -> Self\n    static func moveModel(from: IndexSet, to: Int) -> Self\n}\n\nprotocol AIModelManagementState: Equatable {\n    associatedtype Model: ManageableAIModel\n    var models: IdentifiedArrayOf<Model> { get }\n    var selectedModelId: Model.ID? { get }\n}\n\nprotocol AIModelManagement: Reducer where\n    Action: AIModelManagementAction,\n    State: AIModelManagementState & ObservableState,\n    Action.Model == Self.Model,\n    State.Model == Self.Model\n{\n    associatedtype Model: ManageableAIModel\n}\n\nprotocol ManageableAIModel: Identifiable {\n    associatedtype V: View\n    var name: String { get }\n    var formatName: String { get }\n    var infoDescriptors: V { get }\n}\n\nstruct AIModelManagementView<Management: AIModelManagement, Model: ManageableAIModel>: View\n    where Management.Model == Model\n{\n    @Perception.Bindable var store: StoreOf<Management>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                HStack {\n                    Spacer()\n                    if isFeatureAvailable(\\.unlimitedChatAndEmbeddingModels) {\n                        Button(\"Add Model\") {\n                            store.send(.createModel)\n                        }\n                    } else {\n                        Text(\"\\(store.models.count) / 2\")\n                            .foregroundColor(.secondary)\n\n                        let disabled = store.models.count >= 2\n\n                        Button(disabled ? \"Add More Model (Plus)\" : \"Add Model\") {\n                            store.send(.createModel)\n                        }.disabled(disabled)\n                    }\n                }.padding(4)\n\n                Divider()\n\n                ModelList(store: store)\n            }\n            .onAppear {\n                store.send(.appear)\n            }\n        }\n    }\n\n    struct ModelList: View {\n        @Perception.Bindable var store: StoreOf<Management>\n\n        var body: some View {\n            WithPerceptionTracking {\n                List {\n                    ForEach(store.models) { model in\n                        WithPerceptionTracking {\n                            let isSelected = store.selectedModelId == model.id\n                            HStack(spacing: 4) {\n                                Image(systemName: \"line.3.horizontal\")\n\n                                Button(action: {\n                                    store.send(.selectModel(id: model.id))\n                                }) {\n                                    Cell(model: model, isSelected: isSelected)\n                                        .contentShape(Rectangle())\n                                }\n                                .buttonStyle(.plain)\n                                .contextMenu {\n                                    Button(\"Duplicate\") {\n                                        store.send(.duplicateModel(id: model.id))\n                                    }\n                                    Button(\"Remove\") {\n                                        store.send(.removeModel(id: model.id))\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    .onMove(perform: { indices, newOffset in\n                        store.send(.moveModel(from: indices, to: newOffset))\n                    })\n                    .modify { view in\n                        if #available(macOS 13.0, *) {\n                            view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                        } else {\n                            view\n                        }\n                    }\n                }\n                .removeBackground()\n                .listStyle(.plain)\n                .listRowInsets(EdgeInsets())\n                .overlay {\n                    if store.models.isEmpty {\n                        Text(\"No model found, please add a new one.\")\n                            .foregroundColor(.secondary)\n                    }\n                }\n            }\n        }\n    }\n\n    struct Cell: View {\n        let model: Model\n        let isSelected: Bool\n        @State var isHovered: Bool = false\n\n        var body: some View {\n            HStack {\n                VStack(alignment: .leading, spacing: 2) {\n                    HStack {\n                        Text(model.formatName)\n                            .foregroundColor(isSelected ? .white : .primary)\n                            .font(.subheadline.bold())\n                            .padding(.vertical, 2)\n                            .padding(.horizontal, 4)\n                            .background {\n                                RoundedRectangle(cornerRadius: 4)\n                                    .fill(\n                                        isSelected\n                                            ? .white.opacity(0.2)\n                                            : Color.primary.opacity(0.1)\n                                    )\n                            }\n\n                        Text(model.name)\n                            .font(.headline)\n                    }\n\n                    HStack(spacing: 4) {\n                        model.infoDescriptors\n                    }\n                    .font(.subheadline)\n                    .opacity(0.7)\n                    .padding(.leading, 2)\n                }\n                Spacer()\n            }\n            .onHover(perform: {\n                isHovered = $0\n            })\n            .padding(.vertical, 8)\n            .padding(.horizontal, 8)\n            .background {\n                RoundedRectangle(cornerRadius: 8, style: .continuous)\n                    .fill({\n                        switch (isSelected, isHovered) {\n                        case (true, _):\n                            return Color.accentColor\n                        case (_, true):\n                            return Color.primary.opacity(0.1)\n                        case (_, false):\n                            return Color.clear\n                        }\n                    }() as Color)\n            }\n            .foregroundColor(isSelected ? .white : .primary)\n            .animation(.easeInOut(duration: 0.1), value: isSelected)\n            .animation(.easeInOut(duration: 0.1), value: isHovered)\n        }\n    }\n}\n\n// MARK: - Previews\n\nclass AIModelManagement_Previews: PreviewProvider {\n    static var previews: some View {\n        AIModelManagementView<ChatModelManagement, _>(\n            store: .init(\n                initialState: .init(\n                    models: IdentifiedArray<String, ChatModel>(uniqueElements: [\n                        ChatModel(\n                            id: \"1\",\n                            name: \"Test Model\",\n                            format: .openAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"google.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: true,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        ChatModel(\n                            id: \"2\",\n                            name: \"Test Model 2\",\n                            format: .azureOpenAI,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: false,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                        ChatModel(\n                            id: \"3\",\n                            name: \"Test Model 3\",\n                            format: .openAICompatible,\n                            info: .init(\n                                apiKeyName: \"key\",\n                                baseURL: \"apple.com\",\n                                maxTokens: 3000,\n                                supportsFunctionCalling: false,\n                                modelName: \"gpt-3.5-turbo\"\n                            )\n                        ),\n                    ]),\n                    editingModel: ChatModel(\n                        id: \"3\",\n                        name: \"Test Model 3\",\n                        format: .openAICompatible,\n                        info: .init(\n                            apiKeyName: \"key\",\n                            baseURL: \"apple.com\",\n                            maxTokens: 3000,\n                            supportsFunctionCalling: false,\n                            modelName: \"gpt-3.5-turbo\"\n                        )\n                    ).toState()\n                ),\n                reducer: { ChatModelManagement() }\n            )\n        )\n    }\n}\n\nclass AIModelManagement_Empty_Previews: PreviewProvider {\n    static var previews: some View {\n        AIModelManagementView<ChatModelManagement, _>(\n            store: .init(\n                initialState: .init(models: [] as IdentifiedArrayOf<ChatModel>),\n                reducer: { ChatModelManagement() }\n            )\n        )\n    }\n}\n\nclass AIModelManagement_Cell_Previews: PreviewProvider {\n    static var previews: some View {\n        AIModelManagementView<ChatModelManagement, ChatModel>.Cell(model: ChatModel(\n            id: \"1\",\n            name: \"Test Model\",\n            format: .openAI,\n            info: .init(\n                apiKeyName: \"key\",\n                baseURL: \"google.com\",\n                maxTokens: 3000,\n                supportsFunctionCalling: true,\n                modelName: \"gpt-3.5-turbo\"\n            )\n        ), isSelected: false)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLPicker.swift",
    "content": "import ComposableArchitecture\nimport SwiftUI\n\nstruct BaseURLPicker<TrailingContent: View>: View {\n    let title: String\n    let prompt: Text?\n    @Perception.Bindable var store: StoreOf<BaseURLSelection>\n    @ViewBuilder let trailingContent: () -> TrailingContent\n\n    var body: some View {\n        WithPerceptionTracking {\n            HStack {\n                TextField(title, text: $store.baseURL, prompt: prompt)\n                    .overlay(alignment: .trailing) {\n                        Picker(\n                            \"\",\n                            selection: $store.baseURL,\n                            content: {\n                                if !store.availableBaseURLs\n                                    .contains(store.baseURL),\n                                    !store.baseURL.isEmpty\n                                {\n                                    Text(\"Custom Value\").tag(store.baseURL)\n                                }\n\n                                Text(\"Empty (Default Value)\").tag(\"\")\n\n                                ForEach(store.availableBaseURLs, id: \\.self) { baseURL in\n                                    Text(baseURL).tag(baseURL)\n                                }\n                            }\n                        )\n                        .frame(width: 20)\n                    }\n\n                trailingContent()\n                    .foregroundStyle(.secondary)\n            }\n            .onAppear {\n                store.send(.appear)\n            }\n        }\n    }\n}\n\nextension BaseURLPicker where TrailingContent == EmptyView {\n    init(\n        title: String,\n        prompt: Text? = nil,\n        store: StoreOf<BaseURLSelection>\n    ) {\n        self.init(\n            title: title,\n            prompt: prompt,\n            store: store,\n            trailingContent: { EmptyView() }\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLSelection.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport Preferences\nimport SwiftUI\n\n@Reducer\nstruct BaseURLSelection {\n    @ObservableState\n    struct State: Equatable {\n        var baseURL: String = \"\"\n        var isFullURL: Bool = false\n        var availableBaseURLs: [String] = []\n    }\n\n    enum Action: Equatable, BindableAction {\n        case appear\n        case refreshAvailableBaseURLNames\n        case binding(BindingAction<State>)\n    }\n\n    @Dependency(\\.toast) var toast\n    @Dependency(\\.userDefaults) var userDefaults\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                return .run { send in\n                    await send(.refreshAvailableBaseURLNames)\n                }\n\n            case .refreshAvailableBaseURLNames:\n                let chatModels = userDefaults.value(for: \\.chatModels)\n                let embeddingModels = userDefaults.value(for: \\.embeddingModels)\n                var allBaseURLs = Set(\n                    chatModels.map(\\.info.baseURL)\n                        .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }\n                        + embeddingModels.map(\\.info.baseURL)\n                        .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }\n                )\n                allBaseURLs.remove(\"\")\n                state.availableBaseURLs = Array(allBaseURLs).sorted()\n                return .none\n\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/AccountSettings/WebSearchView.swift",
    "content": "import AppKit\nimport Client\nimport ComposableArchitecture\nimport OpenAIService\nimport Preferences\nimport SuggestionBasic\nimport SwiftUI\nimport WebSearchService\nimport SharedUIComponents\n\n@Reducer\nstruct WebSearchSettings {\n    struct TestResult: Identifiable, Equatable {\n        let id = UUID()\n        var duration: TimeInterval\n        var result: Result<WebSearchResult, Error>?\n\n        static func == (lhs: Self, rhs: Self) -> Bool {\n            lhs.id == rhs.id\n        }\n    }\n\n    @ObservableState\n    struct State: Equatable {\n        var apiKeySelection: APIKeySelection.State = .init()\n        var testResult: TestResult?\n    }\n\n    enum Action: BindableAction {\n        case binding(BindingAction<State>)\n        case appear\n        case test\n        case bringUpTestResult\n        case updateTestResult(TimeInterval, Result<WebSearchResult, Error>)\n        case apiKeySelection(APIKeySelection.Action)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Scope(state: \\.apiKeySelection, action: \\.apiKeySelection) {\n            APIKeySelection()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .binding:\n                return .none\n            case .appear:\n                state.testResult = nil\n                state.apiKeySelection.apiKeyName = UserDefaults.shared.value(for: \\.serpAPIKeyName)\n                return .none\n            case .test:\n                return .run { send in\n                    let searchService = WebSearchService(provider: .userPreferred)\n                    await send(.bringUpTestResult)\n                    let start = Date()\n                    do {\n                        let result = try await searchService.search(query: \"Swift\")\n                        let duration = Date().timeIntervalSince(start)\n                        await send(.updateTestResult(duration, .success(result)))\n                    } catch {\n                        let duration = Date().timeIntervalSince(start)\n                        await send(.updateTestResult(duration, .failure(error)))\n                    }\n                }\n            case .bringUpTestResult:\n                state.testResult = .init(duration: 0)\n                return .none\n            case let .updateTestResult(duration, result):\n                state.testResult?.duration = duration\n                state.testResult?.result = result\n                return .none\n            case let .apiKeySelection(action):\n                switch action {\n                case .binding(\\APIKeySelection.State.apiKeyName):\n                    UserDefaults.shared.set(state.apiKeySelection.apiKeyName, for: \\.serpAPIKeyName)\n                    return .none\n                default:\n                    return .none\n                }\n            }\n        }\n    }\n}\n\nfinal class WebSearchViewSettings: ObservableObject {\n    @AppStorage(\\.serpAPIEngine) var serpAPIEngine\n    @AppStorage(\\.headlessBrowserEngine) var headlessBrowserEngine\n    @AppStorage(\\.searchProvider) var searchProvider\n    init() {}\n}\n\nstruct WebSearchView: View {\n    @Perception.Bindable var store: StoreOf<WebSearchSettings>\n    @Environment(\\.openURL) var openURL\n    @StateObject var settings = WebSearchViewSettings()\n\n    var body: some View {\n        WithPerceptionTracking {\n            ScrollView {\n                VStack(alignment: .leading) {\n                    Form {\n                        Picker(\"Search Provider\", selection: $settings.searchProvider) {\n                            ForEach(UserDefaultPreferenceKeys.SearchProvider.allCases, id: \\.self) {\n                                provider in\n                                switch provider {\n                                case .serpAPI:\n                                    Text(\"Serp API\").tag(provider)\n                                case .headlessBrowser:\n                                    Text(\"Headless Browser\").tag(provider)\n                                }\n                                \n                            }\n                        }\n                        .pickerStyle(.segmented)\n                    }\n\n                    switch settings.searchProvider {\n                    case .serpAPI:\n                        serpAPIForm()\n                    case .headlessBrowser:\n                        headlessBrowserForm()\n                    }\n                }\n                .padding()\n            }\n            .safeAreaInset(edge: .bottom) {\n                VStack(spacing: 0) {\n                    Divider()\n                    HStack {\n                        Button(\"Test Search\") {\n                            store.send(.test)\n                        }\n                        Spacer()\n                    }\n                    .padding()\n                }\n                .background(.regularMaterial)\n            }\n            .sheet(item: $store.testResult) { testResult in\n                testResultView(testResult: testResult)\n            }\n            .onAppear {\n                store.send(.appear)\n            }\n        }\n    }\n\n    @ViewBuilder\n    func serpAPIForm() -> some View {\n        SubSection(\n            title: Text(\"Serp API Settings\"),\n            description: \"\"\"\n            Use Serp API to do web search. Serp API is more reliable and faster than headless browser. But you need to provide an API key for it.\n            \"\"\"\n        ) {\n            Picker(\"Engine\", selection: $settings.serpAPIEngine) {\n                ForEach(\n                    UserDefaultPreferenceKeys.SerpAPIEngine.allCases,\n                    id: \\.self\n                ) { engine in\n                    Text(engine.rawValue).tag(engine)\n                }\n            }\n            \n            WithPerceptionTracking {\n                APIKeyPicker(store: store.scope(\n                    state: \\.apiKeySelection,\n                    action: \\.apiKeySelection\n                ))\n            }\n        }\n    }\n\n    @ViewBuilder\n    func headlessBrowserForm() -> some View {\n        SubSection(\n            title: Text(\"Headless Browser Settings\"),\n            description: \"\"\"\n            The app will open a webview in the background to do web search. This method uses a set of rules to extract information from the web page, if you notice that it stops working, please submit an issue to the developer.\n            \"\"\"\n        ) {\n            Picker(\"Engine\", selection: $settings.headlessBrowserEngine) {\n                ForEach(\n                    UserDefaultPreferenceKeys.HeadlessBrowserEngine.allCases,\n                    id: \\.self\n                ) { engine in\n                    Text(engine.rawValue).tag(engine)\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    func testResultView(testResult: WebSearchSettings.TestResult) -> some View {\n        VStack {\n            Text(\"Test Result\")\n                .padding(.top)\n                .font(.headline)\n\n            if let result = testResult.result {\n                switch result {\n                case let .success(webSearchResult):\n                    VStack(alignment: .leading) {\n                        Text(\"Success (Completed in \\(testResult.duration, specifier: \"%.2f\")s)\")\n                            .foregroundColor(.green)\n\n                        Text(\"Found \\(webSearchResult.webPages.count) results:\")\n\n                        ScrollView {\n                            ForEach(webSearchResult.webPages, id: \\.urlString) { page in\n                                HStack {\n                                    VStack(alignment: .leading) {\n                                        Text(page.title)\n                                            .font(.headline)\n                                        Text(page.urlString)\n                                            .font(.caption)\n                                            .foregroundColor(.blue)\n                                        Text(page.snippet)\n                                            .padding(.top, 2)\n                                    }\n                                    Spacer(minLength: 0)\n                                }\n                                .padding(.vertical, 4)\n                                Divider()\n                            }\n                        }\n                    }\n                    .padding()\n                case let .failure(error):\n                    VStack(alignment: .leading) {\n                        Text(\"Error (Completed in \\(testResult.duration, specifier: \"%.2f\")s)\")\n                            .foregroundColor(.red)\n                        Text(error.localizedDescription)\n                    }\n                }\n            } else {\n                ProgressView().padding()\n            }\n\n            Spacer()\n            \n            VStack(spacing: 0) {\n                Divider()\n                \n                HStack {\n                    Spacer()\n                    \n                    Button(\"Close\") {\n                        store.testResult = nil\n                    }\n                    .keyboardShortcut(.cancelAction)\n                }\n                .padding()\n            }\n        }\n        .frame(minWidth: 400, minHeight: 300)\n    }\n}\n\n// Helper struct to make TestResult identifiable for sheet presentation\nprivate struct TestResultWrapper: Identifiable {\n    var id: UUID = .init()\n    var testResult: WebSearchSettings.TestResult\n}\n\nstruct WebSearchView_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack(alignment: .leading, spacing: 8) {\n            WebSearchView(store: .init(initialState: .init(), reducer: { WebSearchSettings() }))\n        }\n        .frame(height: 800)\n        .padding(.all, 8)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/CustomCommandSettings/CustomCommand.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport PlusFeatureFlag\nimport Preferences\nimport SwiftUI\nimport Toast\n\n@Reducer\nstruct CustomCommandFeature {\n    @ObservableState\n    struct State: Equatable {\n        var editCustomCommand: EditCustomCommand.State?\n    }\n\n    let settings: CustomCommandView.Settings\n\n    enum Action: Equatable {\n        case createNewCommand\n        case editCommand(CustomCommand)\n        case editCustomCommand(EditCustomCommand.Action)\n        case deleteCommand(CustomCommand)\n        case exportCommand(CustomCommand)\n        case importCommand(at: URL)\n        case importCommandClicked\n    }\n\n    @Dependency(\\.toast) var toast\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .createNewCommand:\n                if !isFeatureAvailable(\\.unlimitedCustomCommands),\n                   settings.customCommands.count >= 10\n                {\n                    toast(\"Upgrade to Plus to add more commands\", .info)\n                    return .none\n                }\n                state.editCustomCommand = EditCustomCommand.State(nil)\n                return .none\n            case let .editCommand(command):\n                state.editCustomCommand = EditCustomCommand.State(command)\n                return .none\n            case .editCustomCommand(.close):\n                state.editCustomCommand = nil\n                return .none\n            case let .deleteCommand(command):\n                settings.customCommands.removeAll(\n                    where: { $0.id == command.id }\n                )\n                if state.editCustomCommand?.commandId == command.id {\n                    state.editCustomCommand = nil\n                }\n                return .none\n            case .editCustomCommand:\n                return .none\n            case let .exportCommand(command):\n                return .run { _ in\n                    do {\n                        let data = try JSONEncoder().encode(command)\n                        let filename = \"CustomCommand-\\(command.name).json\"\n\n                        let url = await withCheckedContinuation { continuation in\n                            Task { @MainActor in\n                                let panel = NSSavePanel()\n                                panel.canCreateDirectories = true\n                                panel.nameFieldStringValue = filename\n                                let result = await panel.begin()\n                                switch result {\n                                case .OK:\n                                    continuation.resume(returning: panel.url)\n                                default:\n                                    continuation.resume(returning: nil)\n                                }\n                            }\n                        }\n\n                        if let url {\n                            try data.write(to: url)\n                            toast(\"Saved!\", .info)\n                        }\n\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                    }\n                }\n\n            case let .importCommand(url):\n                if !isFeatureAvailable(\\.unlimitedCustomCommands),\n                   settings.customCommands.count >= 10\n                {\n                    toast(\"Upgrade to Plus to add more commands\", .info)\n                    return .none\n                }\n                \n                do {\n                    let data = try Data(contentsOf: url)\n                    var command = try JSONDecoder().decode(CustomCommand.self, from: data)\n                    command.commandId = UUID().uuidString\n                    settings.customCommands.append(command)\n                    toast(\"Imported custom command \\(command.name)!\", .info)\n                } catch {\n                    toast(\"Failed to import command: \\(error.localizedDescription)\", .error)\n                }\n                return .none\n\n            case .importCommandClicked:\n                return .run { send in\n                    let url = await withCheckedContinuation { continuation in\n                        Task { @MainActor in\n                            let panel = NSOpenPanel()\n                            panel.allowedContentTypes = [.json]\n                            let result = await panel.begin()\n                            if result == .OK {\n                                continuation.resume(returning: panel.url)\n                            } else {\n                                continuation.resume(returning: nil)\n                            }\n                        }\n                    }\n                    \n                    if let url {\n                        await send(.importCommand(at: url))\n                    }\n                }\n            }\n        }.ifLet(\\.editCustomCommand, action: \\.editCustomCommand) {\n            EditCustomCommand(settings: settings)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/CustomCommandSettings/CustomCommandView.swift",
    "content": "import ComposableArchitecture\nimport MarkdownUI\nimport PlusFeatureFlag\nimport Preferences\nimport SharedUIComponents\nimport SwiftUI\nimport Toast\n\nextension List {\n    @ViewBuilder\n    func removeBackground() -> some View {\n        if #available(macOS 13.0, *) {\n            scrollContentBackground(.hidden)\n                .listRowBackground(EmptyView())\n        } else {\n            background(Color.clear)\n                .listRowBackground(EmptyView())\n        }\n    }\n}\n\nlet customCommandStore = StoreOf<CustomCommandFeature>(\n    initialState: .init(),\n    reducer: { CustomCommandFeature(settings: .init()) }\n)\n\nstruct CustomCommandView: View {\n    final class Settings: ObservableObject {\n        @AppStorage(\\.customCommands) var customCommands\n\n        init(customCommands: AppStorage<[CustomCommand]>? = nil) {\n            if let list = customCommands {\n                _customCommands = list\n            }\n        }\n    }\n\n    var store: StoreOf<CustomCommandFeature>\n    @StateObject var settings = Settings()\n    @Environment(\\.toast) var toast\n\n    var body: some View {\n        HStack(spacing: 0) {\n            LeftPanel(store: store, settings: settings)\n            Divider()\n            RightPanel(store: store)\n        }\n    }\n\n    struct LeftPanel: View {\n        let store: StoreOf<CustomCommandFeature>\n        @ObservedObject var settings: Settings\n        @Environment(\\.toast) var toast\n\n        var body: some View {\n            WithPerceptionTracking {\n                List {\n                    ForEach(settings.customCommands, id: \\.commandId) { command in\n                        CommandButton(store: store, command: command)\n                    }\n                    .onMove(perform: { indices, newOffset in\n                        settings.customCommands.move(fromOffsets: indices, toOffset: newOffset)\n                    })\n                    .modify { view in\n                        if #available(macOS 13.0, *) {\n                            view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                        } else {\n                            view\n                        }\n                    }\n                }\n                .removeBackground()\n                .padding(.vertical, 4)\n                .listStyle(.plain)\n                .frame(width: 200)\n                .background(Color.primary.opacity(0.05))\n                .overlay {\n                    if settings.customCommands.isEmpty {\n                        Text(\"\"\"\n                        Empty\n                        Add command with \"+\" button\n                        \"\"\")\n                        .multilineTextAlignment(.center)\n                    }\n                }\n                .safeAreaInset(edge: .bottom) {\n                    Button(action: {\n                        store.send(.createNewCommand)\n                    }) {\n                        if isFeatureAvailable(\\.unlimitedCustomCommands) {\n                            Text(Image(systemName: \"plus.circle.fill\")) + Text(\" New Command\")\n                        } else {\n                            Text(Image(systemName: \"plus.circle.fill\")) +\n                                Text(\" New Command (\\(settings.customCommands.count)/10)\")\n                        }\n                    }\n                    .buttonStyle(.plain)\n                    .padding()\n                    .contextMenu {\n                        Button(\"Import\") {\n                            store.send(.importCommandClicked)\n                        }\n                    }\n                }\n                .onDrop(of: [.json], delegate: FileDropDelegate(store: store, toast: toast))\n            }\n        }\n    }\n\n    struct FileDropDelegate: DropDelegate {\n        let store: StoreOf<CustomCommandFeature>\n        let toast: (String, ToastType) -> Void\n        func performDrop(info: DropInfo) -> Bool {\n            let jsonFiles = info.itemProviders(for: [.json])\n            for file in jsonFiles {\n                file\n                    .loadInPlaceFileRepresentation(forTypeIdentifier: \"public.json\") { url, _, error in\n                        Task { @MainActor in\n                            if let url {\n                                store.send(.importCommand(at: url))\n                            } else if let error {\n                                toast(error.localizedDescription, .error)\n                            }\n                        }\n                    }\n            }\n\n            return !jsonFiles.isEmpty\n        }\n    }\n\n    struct CommandButton: View {\n        @Perception.Bindable var store: StoreOf<CustomCommandFeature>\n        let command: CustomCommand\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack(spacing: 4) {\n                    Image(systemName: \"line.3.horizontal\")\n\n                    VStack(alignment: .leading) {\n                        Text(command.name)\n                            .foregroundStyle(.primary)\n\n                        Group {\n                            switch command.feature {\n                            case .chatWithSelection:\n                                Text(\"Send Message\")\n                            case .customChat:\n                                Text(\"Custom Chat\")\n                            case .promptToCode:\n                                Text(\"Modification\")\n                            case .singleRoundDialog:\n                                Text(\"Single Round Dialog\")\n                            }\n                        }\n                        .font(.caption)\n                        .foregroundStyle(.tertiary)\n                    }\n                    .frame(maxWidth: .infinity, alignment: .leading)\n                    .contentShape(Rectangle())\n                    .onTapGesture {\n                        store.send(.editCommand(command))\n                    }\n                }\n                .padding(4)\n                .background {\n                    RoundedRectangle(cornerRadius: 4)\n                        .fill(\n                            store.editCustomCommand?.commandId == command.id\n                                ? Color.primary.opacity(0.05)\n                                : Color.clear\n                        )\n                }\n                .contextMenu {\n                    Button(\"Remove\") {\n                        store.send(.deleteCommand(command))\n                    }\n\n                    Button(\"Export\") {\n                        store.send(.exportCommand(command))\n                    }\n                }\n            }\n        }\n    }\n\n    struct RightPanel: View {\n        let store: StoreOf<CustomCommandFeature>\n        var body: some View {\n            WithPerceptionTracking {\n                if let store = store.scope(\n                    state: \\.editCustomCommand,\n                    action: \\.editCustomCommand\n                ) {\n                    EditCustomCommandView(store: store)\n                } else {\n                    VStack {\n                        SubSection(title: Text(\"Send Message\")) {\n                            Text(\n                                \"This command sends a message to the active chat tab. You can provide additional context as well. The additional context will be removed once a message is sent. If the message provided is empty, you can manually type the message in the chat.\"\n                            )\n                        }\n                        SubSection(title: Text(\"Modification\")) {\n                            Text(\n                                \"This command opens the prompt-to-code panel and executes the provided requirements on the selected code. You can provide additional context through the \\\"Extra Context\\\" as well.\"\n                            )\n                        }\n                        SubSection(title: Text(\"Custom Chat\")) {\n                            Text(\n                                \"This command will overwrite the context of the chat. You can use it to switch to different contexts in the chat. If a message is provided, it will be sent to the chat as well.\"\n                            )\n                        }\n                        SubSection(title: Text(\"Single Round Dialog\")) {\n                            Text(\n                                \"This command allows you to send a message to a temporary chat without opening the chat panel. It is particularly useful for one-time commands, such as running a terminal command with `/shell`. For example, you can set the prompt to `/shell open .` to open the project in Finder.\"\n                            )\n                        }\n                    }\n                    .padding()\n                }\n            }\n        }\n    }\n}\n\nstruct CustomCommandTypeDescription: View {\n    let text: String\n    var body: some View {\n        ScrollView {\n            Markdown(text)\n                .lineLimit(nil)\n                .markdownTheme(\n                    .gitHub\n                        .text {\n                            ForegroundColor(.secondary)\n                            BackgroundColor(.clear)\n                            FontSize(14)\n                        }\n                        .heading1 { conf in\n                            VStack(alignment: .leading, spacing: 0) {\n                                conf.label\n                                    .relativePadding(.bottom, length: .em(0.3))\n                                    .relativeLineSpacing(.em(0.125))\n                                    .markdownMargin(top: 24, bottom: 16)\n                                    .markdownTextStyle {\n                                        FontWeight(.semibold)\n                                        FontSize(.em(1.25))\n                                    }\n                                Divider()\n                            }\n                        }\n                )\n                .padding()\n                .background(Color.primary.opacity(0.02), in: RoundedRectangle(cornerRadius: 8))\n                .overlay {\n                    RoundedRectangle(cornerRadius: 8)\n                        .stroke(style: .init(lineWidth: 1))\n                        .foregroundColor(Color(nsColor: .separatorColor))\n                }\n                .padding()\n        }\n    }\n}\n\n// MARK: - Previews\n\nstruct CustomCommandView_Preview: PreviewProvider {\n    static var previews: some View {\n        let settings = CustomCommandView.Settings(customCommands: .init(wrappedValue: [\n            .init(\n                commandId: \"1\",\n                name: \"Explain Code\",\n                feature: .chatWithSelection(\n                    extraSystemPrompt: nil,\n                    prompt: \"Hello\",\n                    useExtraSystemPrompt: false\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n            .init(\n                commandId: \"2\",\n                name: \"Refactor Code\",\n                feature: .promptToCode(\n                    extraSystemPrompt: nil,\n                    prompt: \"Refactor\",\n                    continuousMode: false,\n                    generateDescription: true\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n        ], \"CustomCommandView_Preview\"))\n\n        return CustomCommandView(\n            store: .init(\n                initialState: .init(\n                    editCustomCommand: .init(.init(.init(\n                        commandId: \"1\",\n                        name: \"Explain Code\",\n                        feature: .chatWithSelection(\n                            extraSystemPrompt: nil,\n                            prompt: \"Hello\",\n                            useExtraSystemPrompt: false\n                        ),\n                        ignoreExistingAttachments: false,\n                        attachments: [] as [CustomCommand.Attachment]\n                    )))\n                ),\n                reducer: { CustomCommandFeature(settings: settings) }\n            ),\n            settings: settings\n        )\n    }\n}\n\nstruct CustomCommandView_NoEditing_Preview: PreviewProvider {\n    static var previews: some View {\n        let settings = CustomCommandView.Settings(customCommands: .init(wrappedValue: [\n            .init(\n                commandId: \"1\",\n                name: \"Explain Code\",\n                feature: .chatWithSelection(\n                    extraSystemPrompt: nil,\n                    prompt: \"Hello\",\n                    useExtraSystemPrompt: false\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n            .init(\n                commandId: \"2\",\n                name: \"Refactor Code\",\n                feature: .promptToCode(\n                    extraSystemPrompt: nil,\n                    prompt: \"Refactor\",\n                    continuousMode: false,\n                    generateDescription: true\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n        ], \"CustomCommandView_Preview\"))\n\n        return CustomCommandView(\n            store: .init(\n                initialState: .init(\n                    editCustomCommand: nil\n                ),\n                reducer: { CustomCommandFeature(settings: settings) }\n            ),\n            settings: settings\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/CustomCommandSettings/EditCustomCommand.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport Preferences\nimport SwiftUI\n\n@Reducer\nstruct EditCustomCommand {\n    enum CommandType: Int, CaseIterable, Equatable {\n        case sendMessage\n        case promptToCode\n        case customChat\n        case singleRoundDialog\n    }\n\n    @ObservableState\n    struct State: Equatable {\n        var name: String = \"\"\n        var commandType: CommandType = .sendMessage\n        var isNewCommand: Bool = false\n        let commandId: String\n\n        var sendMessage = EditSendMessageCommand.State()\n        var promptToCode = EditPromptToCodeCommand.State()\n        var customChat = EditCustomChatCommand.State()\n        var singleRoundDialog = EditSingleRoundDialogCommand.State()\n        var attachments = EditCustomCommandAttachment.State()\n\n        init(_ command: CustomCommand?) {\n            isNewCommand = command == nil\n            commandId = command?.id ?? UUID().uuidString\n            name = command?.name ?? \"New Command\"\n            attachments = .init(\n                attachments: command?.attachments ?? [],\n                ignoreExistingAttachments: command?.ignoreExistingAttachments ?? false\n            )\n\n            switch command?.feature {\n            case let .chatWithSelection(extraSystemPrompt, prompt, useExtraSystemPrompt):\n                commandType = .sendMessage\n                sendMessage = .init(\n                    extraSystemPrompt: extraSystemPrompt ?? \"\",\n                    useExtraSystemPrompt: useExtraSystemPrompt ?? false,\n                    prompt: prompt ?? \"\"\n                )\n            case .none:\n                commandType = .sendMessage\n                sendMessage = .init(\n                    extraSystemPrompt: \"\",\n                    useExtraSystemPrompt: false,\n                    prompt: \"Hello\"\n                )\n            case let .customChat(systemPrompt, prompt):\n                commandType = .customChat\n                customChat = .init(\n                    systemPrompt: systemPrompt ?? \"\",\n                    prompt: prompt ?? \"\"\n                )\n            case let .singleRoundDialog(\n                systemPrompt,\n                overwriteSystemPrompt,\n                prompt,\n                receiveReplyInNotification\n            ):\n                commandType = .singleRoundDialog\n                singleRoundDialog = .init(\n                    systemPrompt: systemPrompt ?? \"\",\n                    overwriteSystemPrompt: overwriteSystemPrompt ?? false,\n                    prompt: prompt ?? \"\",\n                    receiveReplyInNotification: receiveReplyInNotification ?? false\n                )\n            case let .promptToCode(extraSystemPrompt, prompt, continuousMode, generateDescription):\n                commandType = .promptToCode\n                promptToCode = .init(\n                    extraSystemPrompt: extraSystemPrompt ?? \"\",\n                    prompt: prompt ?? \"\",\n                    continuousMode: continuousMode ?? false,\n                    generateDescription: generateDescription ?? true\n                )\n            }\n        }\n    }\n\n    enum Action: BindableAction, Equatable {\n        case saveCommand\n        case close\n        case binding(BindingAction<State>)\n        case sendMessage(EditSendMessageCommand.Action)\n        case promptToCode(EditPromptToCodeCommand.Action)\n        case customChat(EditCustomChatCommand.Action)\n        case singleRoundDialog(EditSingleRoundDialogCommand.Action)\n        case attachments(EditCustomCommandAttachment.Action)\n    }\n\n    let settings: CustomCommandView.Settings\n\n    @Dependency(\\.toast) var toast\n\n    var body: some ReducerOf<Self> {\n        Scope(state: \\.sendMessage, action: \\.sendMessage) {\n            EditSendMessageCommand()\n        }\n\n        Scope(state: \\.promptToCode, action: \\.promptToCode) {\n            EditPromptToCodeCommand()\n        }\n\n        Scope(state: \\.customChat, action: \\.customChat) {\n            EditCustomChatCommand()\n        }\n\n        Scope(state: \\.singleRoundDialog, action: \\.singleRoundDialog) {\n            EditSingleRoundDialogCommand()\n        }\n\n        Scope(state: \\.attachments, action: \\.attachments) {\n            EditCustomCommandAttachment()\n        }\n\n        BindingReducer()\n\n        Reduce { state, action in\n            switch action {\n            case .saveCommand:\n                guard !state.name.isEmpty else {\n                    toast(\"Command name cannot be empty.\", .error)\n                    return .none\n                }\n\n                let newCommand = CustomCommand(\n                    commandId: state.commandId,\n                    name: state.name,\n                    feature: {\n                        switch state.commandType {\n                        case .sendMessage:\n                            let state = state.sendMessage\n                            return .chatWithSelection(\n                                extraSystemPrompt: state.extraSystemPrompt,\n                                prompt: state.prompt,\n                                useExtraSystemPrompt: state.useExtraSystemPrompt\n                            )\n                        case .promptToCode:\n                            let state = state.promptToCode\n                            return .promptToCode(\n                                extraSystemPrompt: state.extraSystemPrompt,\n                                prompt: state.prompt,\n                                continuousMode: state.continuousMode,\n                                generateDescription: state.generateDescription\n                            )\n                        case .customChat:\n                            let state = state.customChat\n                            return .customChat(\n                                systemPrompt: state.systemPrompt,\n                                prompt: state.prompt\n                            )\n                        case .singleRoundDialog:\n                            let state = state.singleRoundDialog\n                            return .singleRoundDialog(\n                                systemPrompt: state.systemPrompt,\n                                overwriteSystemPrompt: state.overwriteSystemPrompt,\n                                prompt: state.prompt,\n                                receiveReplyInNotification: state.receiveReplyInNotification\n                            )\n                        }\n                    }(),\n                    ignoreExistingAttachments: state.attachments.ignoreExistingAttachments,\n                    attachments: state.attachments.attachments\n                )\n\n                if state.isNewCommand {\n                    settings.customCommands.append(newCommand)\n                    state.isNewCommand = false\n                    toast(\"The command is created.\", .info)\n                } else {\n                    if let index = settings.customCommands.firstIndex(where: {\n                        $0.id == newCommand.id\n                    }) {\n                        settings.customCommands[index] = newCommand\n                    } else {\n                        settings.customCommands.append(newCommand)\n                    }\n                    toast(\"The command is updated.\", .info)\n                }\n\n                return .none\n\n            case .close:\n                return .none\n\n            case .binding:\n                return .none\n            case .sendMessage:\n                return .none\n            case .promptToCode:\n                return .none\n            case .customChat:\n                return .none\n            case .singleRoundDialog:\n                return .none\n            case .attachments:\n                return .none\n            }\n        }\n    }\n}\n\n@Reducer\nstruct EditCustomCommandAttachment {\n    @ObservableState\n    struct State: Equatable {\n        var attachments: [CustomCommand.Attachment] = []\n        var ignoreExistingAttachments: Bool = false\n    }\n\n    enum Action: BindableAction, Equatable {\n        case binding(BindingAction<State>)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { _, action in\n            switch action {\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\n@Reducer\nstruct EditSendMessageCommand {\n    @ObservableState\n    struct State: Equatable {\n        var extraSystemPrompt: String = \"\"\n        var useExtraSystemPrompt: Bool = false\n        var prompt: String = \"\"\n    }\n\n    enum Action: BindableAction, Equatable {\n        case binding(BindingAction<State>)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { _, action in\n            switch action {\n            case .binding:\n                return .none\n            }\n        }\n    }\n}\n\n@Reducer\nstruct EditPromptToCodeCommand {\n    @ObservableState\n    struct State: Equatable {\n        var extraSystemPrompt: String = \"\"\n        var prompt: String = \"\"\n        var continuousMode: Bool = false\n        var generateDescription: Bool = false\n    }\n\n    enum Action: BindableAction, Equatable {\n        case binding(BindingAction<State>)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n    }\n}\n\n@Reducer\nstruct EditCustomChatCommand {\n    @ObservableState\n    struct State: Equatable {\n        var systemPrompt: String = \"\"\n        var prompt: String = \"\"\n    }\n\n    enum Action: BindableAction, Equatable {\n        case binding(BindingAction<State>)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n    }\n}\n\n@Reducer\nstruct EditSingleRoundDialogCommand {\n    @ObservableState\n    struct State: Equatable {\n        var systemPrompt: String = \"\"\n        var overwriteSystemPrompt: Bool = false\n        var prompt: String = \"\"\n        var receiveReplyInNotification: Bool = false\n    }\n\n    enum Action: BindableAction, Equatable {\n        case binding(BindingAction<State>)\n    }\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/CustomCommandSettings/EditCustomCommandView.swift",
    "content": "import ComposableArchitecture\nimport MarkdownUI\nimport Preferences\nimport SwiftUI\n\n@MainActor\nstruct EditCustomCommandView: View {\n    @Environment(\\.toast) var toast\n    @Perception.Bindable var store: StoreOf<EditCustomCommand>\n\n    init(store: StoreOf<EditCustomCommand>) {\n        self.store = store\n    }\n\n    var body: some View {\n        ScrollView {\n            Form {\n                sharedForm\n                featureSpecificForm\n            }.padding()\n        }.safeAreaInset(edge: .bottom) {\n            bottomBar\n        }\n    }\n\n    @ViewBuilder var sharedForm: some View {\n        WithPerceptionTracking {\n            TextField(\"Name\", text: $store.name)\n\n            Picker(\"Command Type\", selection: $store.commandType) {\n                ForEach(\n                    EditCustomCommand.CommandType.allCases,\n                    id: \\.rawValue\n                ) { commandType in\n                    Text({\n                        switch commandType {\n                        case .sendMessage:\n                            return \"Send Message\"\n                        case .promptToCode:\n                            return \"Modification\"\n                        case .customChat:\n                            return \"Custom Chat\"\n                        case .singleRoundDialog:\n                            return \"Single Round Dialog\"\n                        }\n                    }() as String).tag(commandType)\n                }\n            }\n        }\n    }\n\n    @ViewBuilder var featureSpecificForm: some View {\n        WithPerceptionTracking {\n            switch store.commandType {\n            case .sendMessage:\n                EditSendMessageCommandView(\n                    store: store.scope(\n                        state: \\.sendMessage,\n                        action: \\.sendMessage\n                    ),\n                    attachmentStore: store.scope(\n                        state: \\.attachments,\n                        action: \\.attachments\n                    )\n                )\n            case .promptToCode:\n                EditPromptToCodeCommandView(\n                    store: store.scope(\n                        state: \\.promptToCode,\n                        action: \\.promptToCode\n                    )\n                )\n            case .customChat:\n                EditCustomChatCommandView(\n                    store: store.scope(\n                        state: \\.customChat,\n                        action: \\.customChat\n                    ),\n                    attachmentStore: store.scope(\n                        state: \\.attachments,\n                        action: \\.attachments\n                    )\n                )\n            case .singleRoundDialog:\n                EditSingleRoundDialogCommandView(\n                    store: store.scope(\n                        state: \\.singleRoundDialog,\n                        action: \\.singleRoundDialog\n                    )\n                )\n            }\n        }\n    }\n\n    @ViewBuilder var bottomBar: some View {\n        WithPerceptionTracking {\n            VStack {\n                Divider()\n\n                VStack(alignment: .trailing) {\n                    Text(\n                        \"After renaming or adding a custom command, please restart Xcode to refresh the menu.\"\n                    )\n                    .foregroundStyle(.secondary)\n\n                    HStack {\n                        Spacer()\n                        Button(\"Close\") {\n                            store.send(.close)\n                        }\n\n                        if store.isNewCommand {\n                            Button(\"Add\") {\n                                store.send(.saveCommand)\n                            }\n                        } else {\n                            Button(\"Save\") {\n                                store.send(.saveCommand)\n                            }\n                        }\n                    }\n                }\n                .padding(.horizontal)\n            }\n            .padding(.bottom)\n            .background(.regularMaterial)\n        }\n    }\n}\n\nstruct CustomCommandAttachmentPickerView: View {\n    @Perception.Bindable var store: StoreOf<EditCustomCommandAttachment>\n    @State private var isFileInputPresented = false\n    @State private var filePath = \"\"\n\n    #if canImport(ProHostApp)\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading) {\n                Text(\"Contexts\")\n\n                HStack(alignment: .top) {\n                    VStack(alignment: .leading, spacing: 8) {\n                        if store.attachments.isEmpty {\n                            Text(\"No context\")\n                                .foregroundStyle(.secondary)\n                        } else {\n                            ForEach(store.attachments, id: \\.kind) { attachment in\n                                HStack {\n                                    switch attachment.kind {\n                                    case let .file(path: path):\n                                        HStack {\n                                            Text(\"File:\")\n                                            Text(path).foregroundStyle(.secondary)\n                                        }\n                                    default:\n                                        Text(attachment.kind.description)\n                                    }\n                                    Spacer()\n                                    Button {\n                                        store.attachments.removeAll { $0.kind == attachment.kind }\n                                    } label: {\n                                        Image(systemName: \"trash\")\n                                    }\n                                    .buttonStyle(.plain)\n                                }\n                            }\n                        }\n                    }\n                    .frame(minWidth: 240)\n                    .padding(.vertical, 8)\n                    .padding(.horizontal, 8)\n                    .background {\n                        RoundedRectangle(cornerRadius: 8)\n                            .strokeBorder(.separator, lineWidth: 1)\n                    }\n\n                    Form {\n                        Menu {\n                            ForEach(CustomCommand.Attachment.Kind.allCases.filter { kind in\n                                !store.attachments.contains { $0.kind == kind }\n                            }, id: \\.self) { kind in\n                                if kind == .file(path: \"\") {\n                                    Button {\n                                        isFileInputPresented = true\n                                    } label: {\n                                        Text(\"File...\")\n                                    }\n                                } else {\n                                    Button {\n                                        store.attachments.append(.init(kind: kind))\n                                    } label: {\n                                        Text(kind.description)\n                                    }\n                                }\n                            }\n                        } label: {\n                            Label(\"Add context\", systemImage: \"plus\")\n                        }\n\n                        Toggle(\n                            \"Ignore existing contexts\",\n                            isOn: $store.ignoreExistingAttachments\n                        )\n                    }\n                }\n            }\n            .sheet(isPresented: $isFileInputPresented) {\n                VStack(alignment: .leading, spacing: 16) {\n                    Text(\"Enter file path:\")\n                        .font(.headline)\n                    Text(\n                        \"You can enter either an absolute path or a path relative to the project root.\"\n                    )\n                    .font(.caption)\n                    .foregroundStyle(.secondary)\n                    TextField(\"File path\", text: $filePath)\n                        .textFieldStyle(.roundedBorder)\n                    HStack {\n                        Spacer()\n                        Button(\"Cancel\") {\n                            isFileInputPresented = false\n                            filePath = \"\"\n                        }\n                        Button(\"Add\") {\n                            store.attachments.append(.init(kind: .file(path: filePath)))\n                            isFileInputPresented = false\n                            filePath = \"\"\n                        }\n                        .disabled(filePath.isEmpty)\n                    }\n                }\n                .padding()\n                .frame(minWidth: 400)\n            }\n        }\n    }\n    #else\n    var body: some View { EmptyView() }\n    #endif\n}\n\nextension CustomCommand.Attachment.Kind {\n    public static var allCases: [CustomCommand.Attachment.Kind] {\n        [\n            .activeDocument,\n            .debugArea,\n            .clipboard,\n            .senseScope,\n            .projectScope,\n            .webScope,\n            .gitStatus,\n            .gitLog,\n            .file(path: \"\"),\n        ]\n    }\n\n    var description: String {\n        switch self {\n        case .activeDocument: return \"Active Document\"\n        case .debugArea: return \"Debug Area\"\n        case .clipboard: return \"Clipboard\"\n        case .senseScope: return \"Sense Scope\"\n        case .projectScope: return \"Project Scope\"\n        case .webScope: return \"Web Scope\"\n        case .gitStatus: return \"Git Status and Diff\"\n        case .gitLog: return \"Git Log\"\n        case .file: return \"File\"\n        }\n    }\n}\n\nstruct EditSendMessageCommandView: View {\n    @Perception.Bindable var store: StoreOf<EditSendMessageCommand>\n    var attachmentStore: StoreOf<EditCustomCommandAttachment>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading, spacing: 4) {\n                Toggle(\"Extra Context\", isOn: $store.useExtraSystemPrompt)\n                EditableText(text: $store.extraSystemPrompt)\n            }\n            .padding(.vertical, 4)\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Send immediately\")\n                EditableText(text: $store.prompt)\n            }\n            .padding(.vertical, 4)\n\n            CustomCommandAttachmentPickerView(store: attachmentStore)\n                .padding(.vertical, 4)\n        }\n    }\n}\n\nstruct EditPromptToCodeCommandView: View {\n    @Perception.Bindable var store: StoreOf<EditPromptToCodeCommand>\n\n    var body: some View {\n        WithPerceptionTracking {\n            Toggle(\"Continuous Mode\", isOn: $store.continuousMode)\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Extra Context\")\n                EditableText(text: $store.extraSystemPrompt)\n            }\n            .padding(.vertical, 4)\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Instruction\")\n                EditableText(text: $store.prompt)\n            }\n            .padding(.vertical, 4)\n        }\n    }\n}\n\nstruct EditCustomChatCommandView: View {\n    @Perception.Bindable var store: StoreOf<EditCustomChatCommand>\n    var attachmentStore: StoreOf<EditCustomCommandAttachment>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Topic\")\n                EditableText(text: $store.systemPrompt)\n            }\n            .padding(.vertical, 4)\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Send immediately\")\n                EditableText(text: $store.prompt)\n            }\n            .padding(.vertical, 4)\n\n            CustomCommandAttachmentPickerView(store: attachmentStore)\n                .padding(.vertical, 4)\n        }\n    }\n}\n\nstruct EditSingleRoundDialogCommandView: View {\n    @Perception.Bindable var store: StoreOf<EditSingleRoundDialogCommand>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"System Prompt\")\n                EditableText(text: $store.systemPrompt)\n            }\n            .padding(.vertical, 4)\n\n            Picker(selection: $store.overwriteSystemPrompt) {\n                Text(\"Append to default system prompt\").tag(false)\n                Text(\"Overwrite default system prompt\").tag(true)\n            } label: {\n                Text(\"Mode\")\n            }\n            .pickerStyle(.radioGroup)\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Prompt\")\n                EditableText(text: $store.prompt)\n            }\n            .padding(.vertical, 4)\n\n            Toggle(\"Receive response in notification\", isOn: $store.receiveReplyInNotification)\n            Text(\n                \"You will be prompted to grant the app permission to send notifications for the first time.\"\n            )\n            .font(.footnote)\n            .foregroundColor(.secondary)\n        }\n    }\n}\n\n// MARK: - Preview\n\nstruct EditCustomCommandView_Preview: PreviewProvider {\n    static var previews: some View {\n        EditCustomCommandView(\n            store: .init(\n                initialState: .init(.init(\n                    commandId: \"4\",\n                    name: \"Explain Code\",\n                    feature: .promptToCode(\n                        extraSystemPrompt: nil,\n                        prompt: \"Hello\",\n                        continuousMode: false,\n                        generateDescription: true\n                    ),\n                    ignoreExistingAttachments: false,\n                    attachments: [] as [CustomCommand.Attachment]\n                )),\n                reducer: {\n                    EditCustomCommand(\n                        settings: .init(customCommands: .init(\n                            wrappedValue: [],\n                            \"CustomCommandView_Preview\"\n                        ))\n                    )\n                }\n            )\n        )\n        .frame(width: 800)\n    }\n}\n\nstruct EditSingleRoundDialogCommandView_Preview: PreviewProvider {\n    static var previews: some View {\n        EditSingleRoundDialogCommandView(store: .init(\n            initialState: .init(),\n            reducer: { EditSingleRoundDialogCommand() }\n        ))\n        .frame(width: 800, height: 600)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/DebugView.swift",
    "content": "import Preferences\nimport SwiftUI\n\nfinal class DebugSettings: ObservableObject {\n    @AppStorage(\\.animationACrashSuggestion) var animationACrashSuggestion\n    @AppStorage(\\.animationBCrashSuggestion) var animationBCrashSuggestion\n    @AppStorage(\\.animationCCrashSuggestion) var animationCCrashSuggestion\n    @AppStorage(\\.preCacheOnFileOpen) var preCacheOnFileOpen\n    @AppStorage(\\.useCustomScrollViewWorkaround) var useCustomScrollViewWorkaround\n    @AppStorage(\\.triggerActionWithAccessibilityAPI) var triggerActionWithAccessibilityAPI\n    @AppStorage(\\.alwaysAcceptSuggestionWithAccessibilityAPI)\n    var alwaysAcceptSuggestionWithAccessibilityAPI\n    @AppStorage(\\.enableXcodeInspectorDebugMenu) var enableXcodeInspectorDebugMenu\n    @AppStorage(\\.disableFunctionCalling) var disableFunctionCalling\n    @AppStorage(\\.disableGitHubCopilotSettingsAutoRefreshOnAppear)\n    var disableGitHubCopilotSettingsAutoRefreshOnAppear\n    @AppStorage(\\.useUserDefaultsBaseAPIKeychain) var useUserDefaultsBaseAPIKeychain\n    @AppStorage(\\.disableEnhancedWorkspace) var disableEnhancedWorkspace\n    @AppStorage(\\.disableGitIgnoreCheck) var disableGitIgnoreCheck\n    @AppStorage(\\.disableFileContentManipulationByCheatsheet)\n    var disableFileContentManipulationByCheatsheet\n    @AppStorage(\\.restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning)\n    var restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning\n    @AppStorage(\\.restartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer)\n    var restartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer\n    @AppStorage(\\.toastForTheReasonWhyXcodeInspectorNeedsToBeRestarted)\n    var toastForTheReasonWhyXcodeInspectorNeedsToBeRestarted\n    @AppStorage(\\.observeToAXNotificationWithDefaultMode)\n    var observeToAXNotificationWithDefaultMode\n    @AppStorage(\\.useCloudflareDomainNameForLicenseCheck)\n    var useCloudflareDomainNameForLicenseCheck\n    @AppStorage(\\.doNotInstallLaunchAgentAutomatically)\n    var doNotInstallLaunchAgentAutomatically\n    init() {}\n}\n\nstruct DebugSettingsView: View {\n    @StateObject var settings = DebugSettings()\n    @Environment(\\.updateChecker) var updateChecker\n\n    var body: some View {\n        ScrollView {\n            Form {\n                Toggle(isOn: $settings.animationACrashSuggestion) {\n                    Text(\"Enable animation A\")\n                }\n                Toggle(isOn: $settings.animationBCrashSuggestion) {\n                    Text(\"Enable animation B\")\n                }\n                Toggle(isOn: $settings.animationCCrashSuggestion) {\n                    Text(\"Enable widget breathing animation\")\n                }\n                Toggle(isOn: $settings.preCacheOnFileOpen) {\n                    Text(\"Cache editor information on file open\")\n                }\n                Toggle(isOn: $settings.useCustomScrollViewWorkaround) {\n                    Text(\"Use custom scroll view workaround for smooth scrolling\")\n                }\n                Toggle(isOn: $settings.triggerActionWithAccessibilityAPI) {\n                    Text(\"Trigger command with Accessibility API\")\n                }\n                Group {\n                    Toggle(isOn: $settings.alwaysAcceptSuggestionWithAccessibilityAPI) {\n                        Text(\"Always accept suggestion with Accessibility API\")\n                    }\n                    Toggle(isOn: $settings.enableXcodeInspectorDebugMenu) {\n                        Text(\"Enable Xcode inspector debug menu\")\n                    }\n                    Toggle(isOn: $settings.disableFunctionCalling) {\n                        Text(\"Disable function calling for chat feature\")\n                    }\n                    Toggle(isOn: $settings.disableGitHubCopilotSettingsAutoRefreshOnAppear) {\n                        Text(\"Disable GitHub Copilot settings auto refresh status on appear\")\n                    }\n                    Toggle(isOn: $settings.useUserDefaultsBaseAPIKeychain) {\n                        Text(\"Store API keys in UserDefaults\")\n                    }\n\n                    Toggle(isOn: $settings.disableEnhancedWorkspace) {\n                        Text(\"Disable enhanced workspace\")\n                    }\n\n                    Toggle(isOn: $settings.disableGitIgnoreCheck) {\n                        Text(\"Disable git ignore check\")\n                    }\n\n                    Toggle(isOn: $settings.disableFileContentManipulationByCheatsheet) {\n                        Text(\"Disable file content manipulation by cheatsheet\")\n                    }\n\n                    Group {\n                        Toggle(\n                            isOn: $settings\n                                .restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning\n                        ) {\n                            Text(\n                                \"Re-activate Xcode Inspector when Accessibility API malfunctioning detected\"\n                            )\n                        }\n\n                        Toggle(\n                            isOn: $settings\n                                .restartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer\n                        ) {\n                            Text(\"Trigger malfunctioning detection only with events\")\n                        }\n\n                        Toggle(\n                            isOn: $settings\n                                .toastForTheReasonWhyXcodeInspectorNeedsToBeRestarted\n                        ) {\n                            Text(\"Toast for the reason of re-activation of Xcode Inspector\")\n                        }\n                    }\n\n                    Button(\"Reset migration version to 0\") {\n                        UserDefaults.shared.set(nil, forKey: \"OldMigrationVersion\")\n                    }\n\n                    Button(\"Reset 0.23.0 migration\") {\n                        UserDefaults.shared.set(\"239\", forKey: \"OldMigrationVersion\")\n                        UserDefaults.shared.set(nil, forKey: \"MigrateTo240Finished\")\n                        UserDefaults.shared.set(nil, forKey: \"ChatModels\")\n                        UserDefaults.shared.set(nil, forKey: \"EmbeddingModels\")\n                    }\n\n                    Group {\n                        Toggle(\n                            isOn: $settings.observeToAXNotificationWithDefaultMode\n                        ) {\n                            Text(\"Observe to AXNotification with default mode\")\n                        }\n                    }\n                    \n                    Toggle(\n                        isOn: $settings.useCloudflareDomainNameForLicenseCheck\n                    ) {\n                        Text(\"Use Cloudflare domain name for license check\")\n                    }\n                    \n                    Toggle(\n                        isOn: $settings.doNotInstallLaunchAgentAutomatically\n                    ) {\n                        Text(\"Don't install launch agent automatically\")\n                    }\n                    \n                    Button(\"Reset update cycle\") {\n                        updateChecker.resetUpdateCycle()\n                    }\n                }\n            }\n            .frame(maxWidth: .infinity)\n            .padding()\n        }\n    }\n}\n\nstruct DebugSettingsView_Preview: PreviewProvider {\n    static var previews: some View {\n        DebugSettingsView()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Chat/ChatSettingsGeneralSectionView.swift",
    "content": "import Client\nimport Preferences\nimport SharedUIComponents\nimport SwiftUI\nimport XPCShared\n\n#if canImport(ProHostApp)\nimport ProHostApp\n#endif\n\nstruct ChatSettingsGeneralSectionView: View {\n    class Settings: ObservableObject {\n        static let availableLocalizedLocales = Locale.availableLocalizedLocales\n        @AppStorage(\\.chatGPTLanguage) var chatGPTLanguage\n        @AppStorage(\\.chatGPTTemperature) var chatGPTTemperature\n        @AppStorage(\\.chatGPTMaxMessageCount) var chatGPTMaxMessageCount\n        @AppStorage(\\.chatFontSize) var chatFontSize\n        @AppStorage(\\.chatCodeFont) var chatCodeFont\n\n        @AppStorage(\\.defaultChatFeatureChatModelId) var defaultChatFeatureChatModelId\n        @AppStorage(\\.preferredChatModelIdForUtilities) var utilityChatModelId\n        @AppStorage(\\.defaultChatSystemPrompt) var defaultChatSystemPrompt\n        @AppStorage(\\.chatSearchPluginMaxIterations) var chatSearchPluginMaxIterations\n        @AppStorage(\\.defaultChatFeatureEmbeddingModelId) var defaultChatFeatureEmbeddingModelId\n        @AppStorage(\\.chatModels) var chatModels\n        @AppStorage(\\.embeddingModels) var embeddingModels\n        @AppStorage(\\.wrapCodeInChatCodeBlock) var wrapCodeInCodeBlock\n        @AppStorage(\\.chatPanelFloatOnTopOption) var chatPanelFloatOnTopOption\n        @AppStorage(\n            \\.keepFloatOnTopIfChatPanelAndXcodeOverlaps\n        ) var keepFloatOnTopIfChatPanelAndXcodeOverlaps\n        @AppStorage(\n            \\.disableFloatOnTopWhenTheChatPanelIsDetached\n        ) var disableFloatOnTopWhenTheChatPanelIsDetached\n        @AppStorage(\\.openChatMode) var openChatMode\n        @AppStorage(\\.openChatInBrowserURL) var openChatInBrowserURL\n        @AppStorage(\\.openChatInBrowserInInAppBrowser) var openChatInBrowserInInAppBrowser\n\n        var refreshExtensionExtensionOpenChatHandlerTask: Task<Void, Never>?\n\n        @MainActor\n        @Published\n        var openChatOptions = [OpenChatMode]()\n\n        init() {\n            Task { @MainActor in\n                refreshExtensionOpenChatHandlers()\n            }\n            refreshExtensionExtensionOpenChatHandlerTask = Task { [weak self] in\n                let sequence = NotificationCenter.default\n                    .notifications(named: NSApplication.didBecomeActiveNotification)\n                for await _ in sequence {\n                    guard let self else { return }\n                    await MainActor.run {\n                        self.refreshExtensionOpenChatHandlers()\n                    }\n                }\n            }\n        }\n\n        @MainActor\n        func refreshExtensionOpenChatHandlers() {\n            guard let service = try? getService() else { return }\n            Task { @MainActor in\n                let handlers = try await service\n                    .send(requestBody: ExtensionServiceRequests.GetExtensionOpenChatHandlers())\n                openChatOptions = handlers.map {\n                    if $0.isBuiltIn {\n                        return .builtinExtension(\n                            extensionIdentifier: $0.bundleIdentifier,\n                            id: $0.id,\n                            tabName: $0.tabName\n                        )\n                    } else {\n                        return .externalExtension(\n                            extensionIdentifier: $0.bundleIdentifier,\n                            id: $0.id,\n                            tabName: $0.tabName\n                        )\n                    }\n                }\n            }\n        }\n    }\n\n    @Environment(\\.openURL) var openURL\n    @Environment(\\.toast) var toast\n    @StateObject var settings = Settings()\n    @State var maxTokenOverLimit = false\n\n    var body: some View {\n        VStack {\n            openChatSettingsForm\n            SettingsDivider(\"Conversation\")\n            chatSettingsForm\n            SettingsDivider(\"UI\")\n            uiForm\n            SettingsDivider(\"Plugin\")\n            pluginForm\n        }\n    }\n\n    @ViewBuilder\n    var openChatSettingsForm: some View {\n        Form {\n            Picker(\n                \"Open Chat Mode\",\n                selection: .init(get: {\n                    settings.openChatMode.value\n                }, set: {\n                    settings.openChatMode = .init($0)\n                })\n            ) {\n                Text(\"Open chat panel\").tag(OpenChatMode.chatPanel)\n                Text(\"Open web page in browser\").tag(OpenChatMode.browser)\n                ForEach(settings.openChatOptions) { mode in\n                    switch mode {\n                    case let .builtinExtension(_, _, name):\n                        Text(\"Open \\(name) tab\").tag(mode)\n                    case let .externalExtension(_, _, name):\n                        Text(\"Open \\(name) tab\").tag(mode)\n                    default:\n                        EmptyView()\n                    }\n                }\n            }\n\n            if settings.openChatMode.value == .browser {\n                TextField(\n                    \"Chat web page URL\",\n                    text: $settings.openChatInBrowserURL,\n                    prompt: Text(\"https://\")\n                )\n                .textFieldStyle(.roundedBorder)\n                .disableAutocorrection(true)\n                .autocorrectionDisabled(true)\n\n                #if canImport(ProHostApp)\n                WithFeatureEnabled(\\.browserTab) {\n                    Toggle(\n                        \"Open web page in chat panel\",\n                        isOn: $settings.openChatInBrowserInInAppBrowser\n                    )\n                }\n                #endif\n            }\n        }\n    }\n\n    @ViewBuilder\n    var chatSettingsForm: some View {\n        Form {\n            Picker(\n                \"Chat model\",\n                selection: $settings.defaultChatFeatureChatModelId\n            ) {\n                let allModels = settings.chatModels + [.init(\n                    id: \"com.github.copilot\",\n                    name: \"GitHub Copilot Language Server\",\n                    format: .openAI,\n                    info: .init()\n                )]\n\n                if !allModels.contains(where: { $0.id == settings.defaultChatFeatureChatModelId }) {\n                    Text(\n                        (allModels.first?.name).map { \"\\($0) (Default)\" } ?? \"No model found\"\n                    )\n                    .tag(settings.defaultChatFeatureChatModelId)\n                }\n\n                ForEach(allModels, id: \\.id) { chatModel in\n                    Text(chatModel.name).tag(chatModel.id)\n                }\n            }\n\n            Picker(\n                \"Utility chat model\",\n                selection: $settings.utilityChatModelId\n            ) {\n                Text(\"Use the default model\").tag(\"\")\n\n                if !settings.chatModels.contains(where: { $0.id == settings.utilityChatModelId }),\n                   !settings.utilityChatModelId.isEmpty\n                {\n                    Text(\n                        (settings.chatModels.first?.name).map { \"\\($0) (Default)\" }\n                            ?? \"No Model Found\"\n                    )\n                    .tag(settings.utilityChatModelId)\n                }\n\n                ForEach(settings.chatModels, id: \\.id) { chatModel in\n                    Text(chatModel.name).tag(chatModel.id)\n                }\n            }\n\n            Picker(\n                \"Embedding model\",\n                selection: $settings.defaultChatFeatureEmbeddingModelId\n            ) {\n                if !settings.embeddingModels\n                    .contains(where: { $0.id == settings.defaultChatFeatureEmbeddingModelId })\n                {\n                    Text(\n                        (settings.embeddingModels.first?.name).map { \"\\($0) (Default)\" }\n                            ?? \"No model found\"\n                    )\n                    .tag(settings.defaultChatFeatureEmbeddingModelId)\n                }\n\n                ForEach(settings.embeddingModels, id: \\.id) { embeddingModel in\n                    Text(embeddingModel.name).tag(embeddingModel.id)\n                }\n            }\n\n            if #available(macOS 13.0, *) {\n                LabeledContent(\"Reply in language\") {\n                    languagePicker\n                }\n            } else {\n                HStack {\n                    Text(\"Reply in language\")\n                    languagePicker\n                }\n            }\n\n            HStack {\n                Slider(value: $settings.chatGPTTemperature, in: 0...2, step: 0.1) {\n                    Text(\"Temperature\")\n                }\n\n                Text(\n                    \"\\(settings.chatGPTTemperature.formatted(.number.precision(.fractionLength(1))))\"\n                )\n                .font(.body)\n                .foregroundColor(settings.chatGPTTemperature >= 1 ? .red : .secondary)\n                .monospacedDigit()\n                .padding(.vertical, 2)\n                .padding(.horizontal, 6)\n                .background(\n                    RoundedRectangle(cornerRadius: 4, style: .continuous)\n                        .fill(Color.primary.opacity(0.1))\n                )\n            }\n\n            Picker(\n                \"Memory\",\n                selection: $settings.chatGPTMaxMessageCount\n            ) {\n                Text(\"No Limit\").tag(0)\n                Text(\"3 Messages\").tag(3)\n                Text(\"5 Messages\").tag(5)\n                Text(\"7 Messages\").tag(7)\n                Text(\"9 Messages\").tag(9)\n                Text(\"11 Messages\").tag(11)\n                Text(\"21 Messages\").tag(21)\n                Text(\"31 Messages\").tag(31)\n                Text(\"41 Messages\").tag(41)\n                Text(\"51 Messages\").tag(51)\n                Text(\"71 Messages\").tag(71)\n                Text(\"91 Messages\").tag(91)\n                Text(\"111 Messages\").tag(111)\n                Text(\"151 Messages\").tag(151)\n                Text(\"201 Messages\").tag(201)\n            }\n\n            VStack(alignment: .leading, spacing: 4) {\n                Text(\"Additional system prompt\")\n                EditableText(text: $settings.defaultChatSystemPrompt)\n                    .lineLimit(6)\n            }\n            .padding(.vertical, 4)\n        }\n    }\n\n    @ViewBuilder\n    var uiForm: some View {\n        Form {\n            HStack {\n                TextField(text: .init(get: {\n                    \"\\(Int(settings.chatFontSize))\"\n                }, set: {\n                    settings.chatFontSize = Double(Int($0) ?? 0)\n                })) {\n                    Text(\"Font size of message\")\n                }\n                .textFieldStyle(.roundedBorder)\n\n                Text(\"pt\")\n            }\n\n            FontPicker(font: $settings.chatCodeFont) {\n                Text(\"Font of code\")\n            }\n\n            Toggle(isOn: $settings.wrapCodeInCodeBlock) {\n                Text(\"Wrap text in code block\")\n            }\n\n            CodeHighlightThemePicker(scenario: .chat)\n\n            Picker(\"Always-on-top behavior\", selection: $settings.chatPanelFloatOnTopOption) {\n                Text(\"Always\").tag(UserDefaultPreferenceKeys.ChatPanelFloatOnTopOption.alwaysOnTop)\n                Text(\"When Xcode is active\")\n                    .tag(UserDefaultPreferenceKeys.ChatPanelFloatOnTopOption.onTopWhenXcodeIsActive)\n                Text(\"Never\").tag(UserDefaultPreferenceKeys.ChatPanelFloatOnTopOption.never)\n            }\n\n            Toggle(isOn: $settings.disableFloatOnTopWhenTheChatPanelIsDetached) {\n                Text(\"Disable always-on-top when the chat panel is detached\")\n            }.disabled(settings.chatPanelFloatOnTopOption == .never)\n\n            Toggle(isOn: $settings.keepFloatOnTopIfChatPanelAndXcodeOverlaps) {\n                Text(\"Keep always-on-top if the chat panel and Xcode overlaps and Xcode is active\")\n            }\n            .disabled(\n                !settings.disableFloatOnTopWhenTheChatPanelIsDetached\n                    || settings.chatPanelFloatOnTopOption == .never\n            )\n        }\n    }\n\n    @ViewBuilder\n    var pluginForm: some View {\n        Form {\n            TextField(text: .init(get: {\n                \"\\(Int(settings.chatSearchPluginMaxIterations))\"\n            }, set: {\n                settings.chatSearchPluginMaxIterations = Int($0) ?? 0\n            })) {\n                Text(\"Search plugin max iterations\")\n            }\n            .textFieldStyle(.roundedBorder)\n        }\n    }\n\n    var languagePicker: some View {\n        Menu {\n            if !settings.chatGPTLanguage.isEmpty,\n               !Settings.availableLocalizedLocales\n               .contains(settings.chatGPTLanguage)\n            {\n                Button(\n                    settings.chatGPTLanguage,\n                    action: { self.settings.chatGPTLanguage = settings.chatGPTLanguage }\n                )\n            }\n            Button(\n                \"Auto-detected by LLM\",\n                action: { self.settings.chatGPTLanguage = \"\" }\n            )\n            ForEach(\n                Settings.availableLocalizedLocales,\n                id: \\.self\n            ) { localizedLocales in\n                Button(\n                    localizedLocales,\n                    action: { self.settings.chatGPTLanguage = localizedLocales }\n                )\n            }\n        } label: {\n            Text(\n                settings.chatGPTLanguage.isEmpty\n                    ? \"Auto-detected by LLM\"\n                    : settings.chatGPTLanguage\n            )\n        }\n    }\n}\n\n// MARK: - Preview\n\n//\n// #Preview {\n//    ScrollView {\n//        ChatSettingsView()\n//            .padding()\n//    }\n//    .frame(height: 800)\n//    .environment(\\.overrideFeatureFlag, \\.never)\n// }\n//\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Chat/ChatSettingsView.swift",
    "content": "import Preferences\nimport SharedUIComponents\nimport SwiftUI\n\nstruct ChatSettingsView: View {\n    enum Tab {\n        case general\n    }\n    \n    @State var tabSelection: Tab = .general\n    \n    var body: some View {\n        VStack(spacing: 0) {\n            Picker(\"\", selection: $tabSelection) {\n                Text(\"General\").tag(Tab.general)\n            }\n            .pickerStyle(.segmented)\n            .padding(8)\n            \n            Divider()\n                .shadow(radius: 10)\n            \n            ScrollView {\n                Group {\n                    switch tabSelection {\n                    case .general:\n                        ChatSettingsGeneralSectionView()\n                    }\n                }.padding()\n            }\n        }\n    }\n}\n\n#Preview {\n    ChatSettingsView()\n        .frame(width: 600, height: 500)\n}\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/PromptToCodeSettingsView.swift",
    "content": "import Preferences\nimport SharedUIComponents\nimport SwiftUI\n\nstruct PromptToCodeSettingsView: View {\n    final class Settings: ObservableObject {\n        @AppStorage(\\.hideCommonPrecedingSpacesInPromptToCode)\n        var hideCommonPrecedingSpaces\n        @AppStorage(\\.promptToCodeCodeFont)\n        var font\n        @AppStorage(\\.promptToCodeGenerateDescription)\n        var promptToCodeGenerateDescription\n        @AppStorage(\\.promptToCodeGenerateDescriptionInUserPreferredLanguage)\n        var promptToCodeGenerateDescriptionInUserPreferredLanguage\n        @AppStorage(\\.promptToCodeChatModelId)\n        var promptToCodeChatModelId\n        @AppStorage(\\.promptToCodeEmbeddingModelId)\n        var promptToCodeEmbeddingModelId\n        @AppStorage(\\.wrapCodeInPromptToCode) var wrapCode\n        @AppStorage(\\.chatModels) var chatModels\n        @AppStorage(\\.embeddingModels) var embeddingModels\n        init() {}\n    }\n\n    @StateObject var settings = Settings()\n\n    var body: some View {\n        VStack(alignment: .center) {\n            Form {\n                Picker(\n                    \"Chat model\",\n                    selection: $settings.promptToCodeChatModelId\n                ) {\n                    Text(\"Same as chat feature\").tag(\"\")\n\n                    if !settings.chatModels\n                        .contains(where: { $0.id == settings.promptToCodeChatModelId }),\n                        !settings.promptToCodeChatModelId.isEmpty\n                    {\n                        Text(\n                            (settings.chatModels.first?.name).map { \"\\($0) (Default)\" }\n                                ?? \"No model found\"\n                        )\n                        .tag(settings.promptToCodeChatModelId)\n                    }\n\n                    ForEach(settings.chatModels, id: \\.id) { chatModel in\n                        Text(chatModel.name).tag(chatModel.id)\n                    }\n                }\n            }\n\n            SettingsDivider(\"UI\")\n\n            Form {\n                Toggle(isOn: $settings.hideCommonPrecedingSpaces) {\n                    Text(\"Hide common preceding spaces\")\n                }\n\n                Toggle(isOn: $settings.wrapCode) {\n                    Text(\"Wrap code\")\n                }\n\n                CodeHighlightThemePicker(scenario: .promptToCode)\n\n                FontPicker(font: $settings.font) {\n                    Text(\"Font\")\n                }\n            }\n        }\n    }\n}\n\n#Preview {\n    PromptToCodeSettingsView()\n        .padding()\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Suggestion/SuggestionFeatureDisabledLanguageListView.swift",
    "content": "import SuggestionBasic\nimport SwiftUI\nimport SharedUIComponents\n\nstruct SuggestionFeatureDisabledLanguageListView: View {\n    final class Settings: ObservableObject {\n        @AppStorage(\\.suggestionFeatureDisabledLanguageList)\n        var suggestionFeatureDisabledLanguageList: [String]\n\n        init(suggestionFeatureDisabledLanguageList: AppStorage<[String]>? = nil) {\n            if let list = suggestionFeatureDisabledLanguageList {\n                _suggestionFeatureDisabledLanguageList = list\n            }\n        }\n    }\n\n    var isOpen: Binding<Bool>\n    @State var isAddingNewProject = false\n    @StateObject var settings = Settings()\n\n    var body: some View {\n        VStack(spacing: 0) {\n            HStack {\n                Button(action: {\n                    self.isOpen.wrappedValue = false\n                }) {\n                    Image(systemName: \"xmark.circle.fill\")\n                        .foregroundStyle(.secondary)\n                        .padding()\n                }\n                .buttonStyle(.plain)\n                Text(\"Disabled Languages\")\n                Spacer()\n            }\n            .background(Color(nsColor: .separatorColor))\n\n            List {\n                ForEach(\n                    settings.suggestionFeatureDisabledLanguageList,\n                    id: \\.self\n                ) { language in\n                    HStack {\n                        Text(language.capitalized)\n                            .contextMenu {\n                                Button(\"Remove\") {\n                                    settings.suggestionFeatureDisabledLanguageList.removeAll(\n                                        where: { $0 == language }\n                                    )\n                                }\n                            }\n                        Spacer()\n\n                        Button(action: {\n                            settings.suggestionFeatureDisabledLanguageList.removeAll(\n                                where: { $0 == language }\n                            )\n                        }) {\n                            Image(systemName: \"trash.fill\")\n                                .foregroundStyle(.secondary)\n                        }\n                        .buttonStyle(.plain)\n                    }\n                }\n                .modify { view in\n                    if #available(macOS 13.0, *) {\n                        view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                    } else {\n                        view\n                    }\n                }\n            }\n            .removeBackground()\n            .overlay {\n                if settings.suggestionFeatureDisabledLanguageList.isEmpty {\n                    Text(\"\"\"\n                    Empty\n                    Disable the language of a file by right clicking the indicator widget.\n                    \"\"\")\n                    .multilineTextAlignment(.center)\n                    .padding()\n                }\n            }\n        }\n        .focusable(false)\n        .frame(width: 300, height: 400)\n        .background(Color(nsColor: .windowBackgroundColor))\n    }\n}\n\nstruct SuggestionFeatureDisabledLanguageListView_Preview: PreviewProvider {\n    static var previews: some View {\n        SuggestionFeatureDisabledLanguageListView(\n            isOpen: .constant(true),\n            settings: .init(suggestionFeatureDisabledLanguageList: .init(wrappedValue: [\n                \"hello/2\",\n                \"hello/3\",\n                \"hello/4\",\n            ], \"SuggestionFeatureDisabledLanguageListView_Preview\"))\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Suggestion/SuggestionFeatureEnabledProjectListView.swift",
    "content": "import SharedUIComponents\nimport SwiftUI\n\nstruct SuggestionFeatureEnabledProjectListView: View {\n    final class Settings: ObservableObject {\n        @AppStorage(\\.suggestionFeatureEnabledProjectList)\n        var suggestionFeatureEnabledProjectList: [String]\n\n        init(suggestionFeatureEnabledProjectList: AppStorage<[String]>? = nil) {\n            if let list = suggestionFeatureEnabledProjectList {\n                _suggestionFeatureEnabledProjectList = list\n            }\n        }\n    }\n\n    var isOpen: Binding<Bool>\n    @State var isAddingNewProject = false\n    @StateObject var settings = Settings()\n\n    var body: some View {\n        VStack(spacing: 0) {\n            HStack {\n                Button(action: {\n                    self.isOpen.wrappedValue = false\n                }) {\n                    Image(systemName: \"xmark.circle.fill\")\n                        .foregroundStyle(.secondary)\n                        .padding()\n                }\n                .buttonStyle(.plain)\n                Text(\"Enabled Projects\")\n                Spacer()\n                Button(action: {\n                    isAddingNewProject = true\n                }) {\n                    Image(systemName: \"plus.circle.fill\")\n                        .foregroundStyle(.secondary)\n                        .padding()\n                }\n                .buttonStyle(.plain)\n            }\n            .background(Color(nsColor: .separatorColor))\n\n            List {\n                ForEach(\n                    settings.suggestionFeatureEnabledProjectList,\n                    id: \\.self\n                ) { project in\n                    HStack {\n                        Text(project)\n                            .contextMenu {\n                                Button(\"Remove\") {\n                                    settings.suggestionFeatureEnabledProjectList.removeAll(\n                                        where: { $0 == project }\n                                    )\n                                }\n                            }\n                        Spacer()\n\n                        Button(action: {\n                            settings.suggestionFeatureEnabledProjectList.removeAll(\n                                where: { $0 == project }\n                            )\n                        }) {\n                            Image(systemName: \"trash.fill\")\n                                .foregroundStyle(.secondary)\n                        }\n                        .buttonStyle(.plain)\n                    }\n                }\n                .modify { view in\n                    if #available(macOS 13.0, *) {\n                        view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                    } else {\n                        view\n                    }\n                }\n            }\n            .removeBackground()\n            .overlay {\n                if settings.suggestionFeatureEnabledProjectList.isEmpty {\n                    Text(\"\"\"\n                    Empty\n                    Add project with \"+\" button\n                    Or right clicking the indicator widget\n                    \"\"\")\n                    .multilineTextAlignment(.center)\n                }\n            }\n        }\n        .focusable(false)\n        .frame(width: 300, height: 400)\n        .background(Color(nsColor: .windowBackgroundColor))\n        .sheet(isPresented: $isAddingNewProject) {\n            SuggestionFeatureAddEnabledProjectView(isOpen: $isAddingNewProject, settings: settings)\n        }\n    }\n}\n\nstruct SuggestionFeatureAddEnabledProjectView: View {\n    var isOpen: Binding<Bool>\n    var settings: SuggestionFeatureEnabledProjectListView.Settings\n    @State var rootPath = \"\"\n\n    var body: some View {\n        VStack {\n            Text(\n                \"Enter the root path of the project. Do not use `~` to replace /Users/yourUserName.\"\n            )\n            TextField(\"Root path\", text: $rootPath)\n            HStack {\n                Spacer()\n                Button(\"Cancel\") {\n                    isOpen.wrappedValue = false\n                }\n                Button(\"Add\") {\n                    settings.suggestionFeatureEnabledProjectList.append(rootPath)\n                    isOpen.wrappedValue = false\n                }\n            }\n        }\n        .padding()\n        .frame(minWidth: 500)\n        .background(Color(nsColor: .windowBackgroundColor))\n    }\n}\n\nstruct SuggestionFeatureEnabledProjectListView_Preview: PreviewProvider {\n    static var previews: some View {\n        SuggestionFeatureEnabledProjectListView(\n            isOpen: .constant(true),\n            settings: .init(suggestionFeatureEnabledProjectList: .init(wrappedValue: [\n                \"hello/2\",\n                \"hello/3\",\n                \"hello/4\",\n            ], \"SuggestionFeatureEnabledProjectListView_Preview\"))\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Suggestion/SuggestionSettingsGeneralSectionView.swift",
    "content": "import Client\nimport Preferences\nimport SharedUIComponents\nimport SwiftUI\nimport XPCShared\n\n#if canImport(ProHostApp)\nimport ProHostApp\n#endif\n\nstruct SuggestionSettingsGeneralSectionView: View {\n    struct SuggestionFeatureProviderOption: Identifiable, Hashable {\n        var id: String {\n            (builtInProvider?.rawValue).map(String.init) ?? bundleIdentifier ?? \"n/A\"\n        }\n\n        var name: String\n        var builtInProvider: BuiltInSuggestionFeatureProvider?\n        var bundleIdentifier: String?\n\n        func hash(into hasher: inout Hasher) {\n            id.hash(into: &hasher)\n        }\n\n        init(\n            name: String,\n            builtInProvider: BuiltInSuggestionFeatureProvider? = nil,\n            bundleIdentifier: String? = nil\n        ) {\n            self.name = name\n            self.builtInProvider = builtInProvider\n            self.bundleIdentifier = bundleIdentifier\n        }\n    }\n\n    final class Settings: ObservableObject {\n        @AppStorage(\\.realtimeSuggestionToggle)\n        var realtimeSuggestionToggle\n        @AppStorage(\\.realtimeSuggestionDebounce)\n        var realtimeSuggestionDebounce\n        @AppStorage(\\.suggestionPresentationMode)\n        var suggestionPresentationMode\n        @AppStorage(\\.disableSuggestionFeatureGlobally)\n        var disableSuggestionFeatureGlobally\n        @AppStorage(\\.suggestionFeatureEnabledProjectList)\n        var suggestionFeatureEnabledProjectList\n        @AppStorage(\\.hideCommonPrecedingSpacesInSuggestion)\n        var hideCommonPrecedingSpacesInSuggestion\n        @AppStorage(\\.suggestionCodeFont)\n        var font\n        @AppStorage(\\.suggestionFeatureProvider)\n        var suggestionFeatureProvider\n        @AppStorage(\\.suggestionDisplayCompactMode)\n        var suggestionDisplayCompactMode\n        @AppStorage(\\.acceptSuggestionWithTab)\n        var acceptSuggestionWithTab\n        @AppStorage(\\.dismissSuggestionWithEsc)\n        var dismissSuggestionWithEsc\n\n        var refreshExtensionSuggestionFeatureProvidersTask: Task<Void, Never>?\n\n        @MainActor\n        @Published\n        var extensionSuggestionFeatureProviderOptions = [SuggestionFeatureProviderOption]()\n\n        init() {\n            Task { @MainActor in\n                refreshExtensionSuggestionFeatureProviders()\n            }\n            refreshExtensionSuggestionFeatureProvidersTask = Task { [weak self] in\n                let sequence = NotificationCenter.default\n                    .notifications(named: NSApplication.didBecomeActiveNotification)\n                for await _ in sequence {\n                    guard let self else { return }\n                    await MainActor.run {\n                        self.refreshExtensionSuggestionFeatureProviders()\n                    }\n                }\n            }\n        }\n\n        @MainActor\n        func refreshExtensionSuggestionFeatureProviders() {\n            guard let service = try? getService() else { return }\n            Task { @MainActor in\n                let services = try await service\n                    .send(requestBody: ExtensionServiceRequests.GetExtensionSuggestionServices())\n                extensionSuggestionFeatureProviderOptions = services.map {\n                    .init(name: $0.name, bundleIdentifier: $0.bundleIdentifier)\n                }\n            }\n        }\n    }\n\n    @StateObject var settings = Settings()\n    @State var isSuggestionFeatureEnabledListPickerOpen = false\n    @State var isSuggestionFeatureDisabledLanguageListViewOpen = false\n    @State var isTabToAcceptSuggestionModifierViewOpen = false\n\n    var body: some View {\n        Form {\n            Picker(selection: $settings.suggestionPresentationMode) {\n                ForEach(PresentationMode.allCases, id: \\.rawValue) {\n                    switch $0 {\n                    case .nearbyTextCursor:\n                        Text(\"Nearby text cursor\").tag($0)\n                    case .floatingWidget:\n                        Text(\"Floating widget\").tag($0)\n                    }\n                }\n            } label: {\n                Text(\"Presentation\")\n            }\n\n            Picker(selection: Binding(get: {\n                switch settings.suggestionFeatureProvider {\n                case let .builtIn(provider):\n                    return SuggestionFeatureProviderOption(\n                        name: \"\",\n                        builtInProvider: provider\n                    )\n                case let .extension(name, identifier):\n                    return SuggestionFeatureProviderOption(\n                        name: name,\n                        bundleIdentifier: identifier\n                    )\n                }\n            }, set: { (option: SuggestionFeatureProviderOption) in\n                if let provider = option.builtInProvider {\n                    settings.suggestionFeatureProvider = .builtIn(provider)\n                } else {\n                    settings.suggestionFeatureProvider = .extension(\n                        name: option.name,\n                        bundleIdentifier: option.bundleIdentifier ?? \"\"\n                    )\n                }\n            })) {\n                ForEach(BuiltInSuggestionFeatureProvider.allCases, id: \\.rawValue) {\n                    switch $0 {\n                    case .gitHubCopilot:\n                        Text(\"GitHub Copilot\")\n                            .tag(SuggestionFeatureProviderOption(name: \"\", builtInProvider: $0))\n                    case .codeium:\n                        Text(\"Codeium\")\n                            .tag(SuggestionFeatureProviderOption(name: \"\", builtInProvider: $0))\n                    }\n                }\n\n                ForEach(settings.extensionSuggestionFeatureProviderOptions, id: \\.self) { item in\n                    Text(item.name).tag(item)\n                }\n\n                if case let .extension(name, identifier) = settings.suggestionFeatureProvider {\n                    if !settings.extensionSuggestionFeatureProviderOptions.contains(where: {\n                        $0.bundleIdentifier == identifier\n                    }) {\n                        Text(\"\\(name) (Not found)\").tag(\n                            SuggestionFeatureProviderOption(\n                                name: name,\n                                bundleIdentifier: identifier\n                            )\n                        )\n                    }\n                }\n            } label: {\n                Text(\"Feature provider\")\n            }\n\n            Toggle(isOn: $settings.realtimeSuggestionToggle) {\n                Text(\"Real-time suggestion\")\n            }\n\n            Toggle(isOn: $settings.acceptSuggestionWithTab) {\n                HStack {\n                    Text(\"Accept suggestion with Tab\")\n\n                    Button(action: {\n                        isTabToAcceptSuggestionModifierViewOpen = true\n                    }) {\n                        Image(systemName: \"gearshape.fill\")\n                    }\n                    .buttonStyle(.plain)\n                }\n            }.sheet(isPresented: $isTabToAcceptSuggestionModifierViewOpen) {\n                TabToAcceptSuggestionModifierView()\n            }\n\n            Toggle(isOn: $settings.dismissSuggestionWithEsc) {\n                Text(\"Dismiss suggestion with ESC\")\n            }\n\n            HStack {\n                Toggle(isOn: $settings.disableSuggestionFeatureGlobally) {\n                    Text(\"Disable suggestion feature globally\")\n                }\n\n                Button(\"Exception list\") {\n                    isSuggestionFeatureEnabledListPickerOpen = true\n                }\n            }.sheet(isPresented: $isSuggestionFeatureEnabledListPickerOpen) {\n                SuggestionFeatureEnabledProjectListView(\n                    isOpen: $isSuggestionFeatureEnabledListPickerOpen\n                )\n            }\n\n            HStack {\n                Button(\"Disabled language list\") {\n                    isSuggestionFeatureDisabledLanguageListViewOpen = true\n                }\n            }.sheet(isPresented: $isSuggestionFeatureDisabledLanguageListViewOpen) {\n                SuggestionFeatureDisabledLanguageListView(\n                    isOpen: $isSuggestionFeatureDisabledLanguageListViewOpen\n                )\n            }\n\n            HStack {\n                Slider(value: $settings.realtimeSuggestionDebounce, in: 0.1...2, step: 0.1) {\n                    Text(\"Real-time suggestion debounce\")\n                }\n\n                Text(\n                    \"\\(settings.realtimeSuggestionDebounce.formatted(.number.precision(.fractionLength(2))))s\"\n                )\n                .font(.body)\n                .monospacedDigit()\n                .padding(.vertical, 2)\n                .padding(.horizontal, 6)\n                .background(\n                    RoundedRectangle(cornerRadius: 4, style: .continuous)\n                        .fill(Color.primary.opacity(0.1))\n                )\n            }\n        }\n\n        SettingsDivider(\"UI\")\n\n        Form {\n            Toggle(isOn: $settings.suggestionDisplayCompactMode) {\n                Text(\"Hide buttons\")\n            }\n\n            Toggle(isOn: $settings.hideCommonPrecedingSpacesInSuggestion) {\n                Text(\"Hide common preceding spaces\")\n            }\n\n            CodeHighlightThemePicker(scenario: .suggestion)\n\n            FontPicker(font: $settings.font) {\n                Text(\"Font\")\n            }\n        }\n    }\n\n    struct TabToAcceptSuggestionModifierView: View {\n        final class Settings: ObservableObject {\n            @AppStorage(\\.acceptSuggestionWithModifierCommand)\n            var needCommand\n            @AppStorage(\\.acceptSuggestionWithModifierOption)\n            var needOption\n            @AppStorage(\\.acceptSuggestionWithModifierShift)\n            var needShift\n            @AppStorage(\\.acceptSuggestionWithModifierControl)\n            var needControl\n            @AppStorage(\\.acceptSuggestionWithModifierOnlyForSwift)\n            var onlyForSwift\n            @AppStorage(\\.acceptSuggestionLineWithModifierControl)\n            var acceptLineWithControl\n        }\n\n        @StateObject var settings = Settings()\n        @Environment(\\.dismiss) var dismiss\n\n        var body: some View {\n            VStack(spacing: 0) {\n                Form {\n                    Text(\"Accept suggestion with modifier\")\n                        .font(.headline)\n                    HStack {\n                        Toggle(isOn: $settings.needCommand) {\n                            Text(\"Command\")\n                        }\n                        Toggle(isOn: $settings.needOption) {\n                            Text(\"Option\")\n                        }\n                        Toggle(isOn: $settings.needShift) {\n                            Text(\"Shift\")\n                        }\n                        Toggle(isOn: $settings.needControl) {\n                            Text(\"Control\")\n                        }\n                    }\n                    Toggle(isOn: $settings.onlyForSwift) {\n                        Text(\"Only require modifiers for Swift\")\n                    }\n                    \n                    Divider()\n                    \n                    Toggle(isOn: $settings.acceptLineWithControl) {\n                        Text(\"Accept suggestion first line with Control\")\n                    }\n                }\n                .padding()\n\n                Divider()\n\n                HStack {\n                    Spacer()\n                    Button(action: { dismiss() }) {\n                        Text(\"Done\")\n                    }\n                    .keyboardShortcut(.defaultAction)\n                }\n                .padding()\n            }\n        }\n    }\n}\n\n#Preview {\n    SuggestionSettingsGeneralSectionView()\n        .padding()\n}\n\n#Preview {\n    SuggestionSettingsGeneralSectionView.TabToAcceptSuggestionModifierView()\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/Suggestion/SuggestionSettingsView.swift",
    "content": "import Client\nimport Preferences\nimport SharedUIComponents\nimport SwiftUI\nimport XPCShared\n\nstruct SuggestionSettingsView: View {\n    var tabContainer: ExternalTabContainer {\n        ExternalTabContainer.tabContainer(for: \"SuggestionSettings\")\n    }\n    \n    enum Tab: Hashable {\n        case general\n        case other(String)\n    }\n    \n    @State var tabSelection: Tab = .general\n    \n    var body: some View {\n        VStack(spacing: 0) {\n            Picker(\"\", selection: $tabSelection) {\n                Text(\"General\").tag(Tab.general)\n                ForEach(tabContainer.tabs, id: \\.id) { tab in\n                    Text(tab.title).tag(Tab.other(tab.id))\n                }\n            }\n            .pickerStyle(.segmented)\n            .padding(8)\n            \n            Divider()\n                .shadow(radius: 10)\n            \n            ScrollView {\n                Group {\n                    switch tabSelection {\n                    case .general:\n                        SuggestionSettingsGeneralSectionView()\n                    case let .other(id):\n                        tabContainer.tabView(for: id)\n                    }\n                }.padding()\n            }\n        }\n    }\n}\n\nstruct SuggestionSettingsView_Previews: PreviewProvider {\n    static var previews: some View {\n        SuggestionSettingsView()\n            .frame(width: 600, height: 500)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/TerminalSettingsView.swift",
    "content": "import Preferences\nimport SharedUIComponents\nimport SwiftUI\n\n#if canImport(ProHostApp)\nimport ProHostApp\n#endif\n\nstruct TerminalSettingsView: View {\n    class Settings: ObservableObject {\n        @AppStorage(\\.terminalFont) var terminalFont\n        init() {}\n    }\n    \n    @StateObject var settings = Settings()\n    \n    var body: some View {\n        ScrollView {\n            Form {\n                FontPicker(font: $settings.terminalFont) {\n                    Text(\"Font of code\")\n                }\n            }\n        }\n                \n    }\n}\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettings/XcodeSettingsView.swift",
    "content": "import Foundation\nimport SharedUIComponents\nimport SwiftUI\n\n#if canImport(ProHostApp)\nimport ProHostApp\n#endif\n\nstruct XcodeSettingsView: View {\n    var body: some View {\n        VStack {\n            #if canImport(ProHostApp)\n            CloseXcodeIdleTabsSettingsView()\n            #endif\n\n            EmptyView()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/FeatureSettingsView.swift",
    "content": "import SwiftUI\nimport SharedUIComponents\n\nstruct FeatureSettingsView: View {\n    var tabContainer: ExternalTabContainer {\n        ExternalTabContainer.tabContainer(for: \"Features\")\n    }\n    \n    @State var tag = 0\n\n    var body: some View {\n        SidebarTabView(tag: $tag) {\n            SuggestionSettingsView()\n                .sidebarItem(\n                    tag: 0,\n                    title: \"Suggestion\",\n                    subtitle: \"Generate suggestions for your code\",\n                    image: \"lightbulb\"\n                )\n\n            ChatSettingsView()\n                .sidebarItem(\n                    tag: 1,\n                    title: \"Chat\",\n                    subtitle: \"Chat about your code\",\n                    image: \"character.bubble\"\n                )\n\n            ScrollView {\n                PromptToCodeSettingsView().padding()\n            }\n            .sidebarItem(\n                tag: 2,\n                title: \"Modification\",\n                subtitle: \"Write or modify code with natural language\",\n                image: \"paintbrush\"\n            )\n\n            ScrollView {\n                XcodeSettingsView().padding()\n            }\n            .sidebarItem(\n                tag: 3,\n                title: \"Xcode\",\n                subtitle: \"Xcode related features\",\n                image: \"hammer.circle\"\n            )\n            \n            ForEach(Array(tabContainer.tabs.enumerated()), id: \\.1.id) { index, tab in\n                ScrollView {\n                    tab.viewBuilder().padding()\n                }\n                .sidebarItem(\n                    tag: 4 + index,\n                    title: tab.title,\n                    subtitle: tab.description,\n                    image: tab.image\n                )\n            }\n        }\n    }\n}\n\nstruct FeatureSettingsView_Previews: PreviewProvider {\n    static var previews: some View {\n        FeatureSettingsView()\n            .frame(width: 800)\n    }\n}\n"
  },
  {
    "path": "Core/Sources/HostApp/General.swift",
    "content": "import Client\nimport ComposableArchitecture\nimport Foundation\nimport LaunchAgentManager\nimport SwiftUI\nimport XPCShared\n\n@Reducer\nstruct General {\n    @ObservableState\n    struct State: Equatable {\n        var xpcServiceVersion: String?\n        var isAccessibilityPermissionGranted: Bool?\n        var isReloading = false\n        @Presents var alert: AlertState<Action.Alert>?\n    }\n\n    enum Action {\n        case appear\n        case setupLaunchAgentIfNeeded\n        case setupLaunchAgentClicked\n        case removeLaunchAgentClicked\n        case reloadLaunchAgentClicked\n        case openExtensionManager\n        case reloadStatus\n        case finishReloading(xpcServiceVersion: String, permissionGranted: Bool)\n        case failedReloading\n        case alert(PresentationAction<Alert>)\n\n        case setupLaunchAgent\n        case finishSetupLaunchAgent\n        case finishRemoveLaunchAgent\n        case finishReloadLaunchAgent\n\n        @CasePathable\n        enum Alert: Equatable {\n            case moveToApplications\n            case moveTo(URL)\n            case install\n        }\n    }\n\n    @Dependency(\\.toast) var toast\n\n    struct ReloadStatusCancellableId: Hashable {}\n\n    static var didWarnInstallationPosition: Bool {\n        get { UserDefaults.standard.bool(forKey: \"didWarnInstallationPosition\") }\n        set { UserDefaults.standard.set(newValue, forKey: \"didWarnInstallationPosition\") }\n    }\n\n    static var bundleIsInApplicationsFolder: Bool {\n        Bundle.main.bundleURL.path.hasPrefix(\"/Applications\")\n    }\n\n    var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .appear:\n                if Self.bundleIsInApplicationsFolder {\n                    return .run { send in\n                        await send(.setupLaunchAgentIfNeeded)\n                    }\n                }\n\n                if !Self.didWarnInstallationPosition {\n                    Self.didWarnInstallationPosition = true\n                    state.alert = .init {\n                        TextState(\"Move to Applications Folder?\")\n                    } actions: {\n                        ButtonState(action: .moveToApplications) {\n                            TextState(\"Move\")\n                        }\n                        ButtonState(role: .cancel) {\n                            TextState(\"Not Now\")\n                        }\n                    } message: {\n                        TextState(\n                            \"To ensure the best experience, please move the app to the Applications folder. If the app is not inside the Applications folder, please set up the launch agent manually by clicking the button.\"\n                        )\n                    }\n                }\n\n                return .none\n\n            case .setupLaunchAgentIfNeeded:\n                return .run { send in\n                    #if DEBUG\n                    // do not auto install on debug build\n                    #else\n                    do {\n                        try await LaunchAgentManager()\n                            .setupLaunchAgentForTheFirstTimeIfNeeded()\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                    }\n                    #endif\n                    await send(.reloadStatus)\n                }\n\n            case .setupLaunchAgentClicked:\n                if Self.bundleIsInApplicationsFolder {\n                    return .run { send in\n                        await send(.setupLaunchAgent)\n                    }\n                }\n\n                state.alert = .init {\n                    TextState(\"Setup Launch Agent\")\n                } actions: {\n                    ButtonState(action: .install) {\n                        TextState(\"Setup\")\n                    }\n\n                    ButtonState(action: .moveToApplications) {\n                        TextState(\"Move to Applications Folder\")\n                    }\n\n                    ButtonState(role: .cancel) {\n                        TextState(\"Cancel\")\n                    }\n                } message: {\n                    TextState(\n                        \"It's recommended to move the app into the Applications folder. But you can still keep it in the current folder and install the launch agent to ~/Library/LaunchAgents.\"\n                    )\n                }\n\n                return .none\n\n            case .removeLaunchAgentClicked:\n                return .run { send in\n                    do {\n                        try await LaunchAgentManager().removeLaunchAgent()\n                        await send(.finishRemoveLaunchAgent)\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                    }\n                    await send(.reloadStatus)\n                }\n\n            case .reloadLaunchAgentClicked:\n                return .run { send in\n                    do {\n                        try await LaunchAgentManager().reloadLaunchAgent()\n                        await send(.finishReloadLaunchAgent)\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                    }\n                    await send(.reloadStatus)\n                }\n\n            case .setupLaunchAgent:\n                return .run { send in\n                    do {\n                        try await LaunchAgentManager().setupLaunchAgent()\n                        await send(.finishSetupLaunchAgent)\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                    }\n                    await send(.reloadStatus)\n                }\n\n            case .finishSetupLaunchAgent:\n                state.alert = .init {\n                    TextState(\"Launch Agent Installed\")\n                } actions: {\n                    ButtonState {\n                        TextState(\"OK\")\n                    }\n                } message: {\n                    TextState(\n                        \"The launch agent has been installed. Please restart the app.\"\n                    )\n                }\n                return .none\n\n            case .finishRemoveLaunchAgent:\n                state.alert = .init {\n                    TextState(\"Launch Agent Removed\")\n                } actions: {\n                    ButtonState {\n                        TextState(\"OK\")\n                    }\n                } message: {\n                    TextState(\n                        \"The launch agent has been removed.\"\n                    )\n                }\n                return .none\n\n            case .finishReloadLaunchAgent:\n                state.alert = .init {\n                    TextState(\"Launch Agent Reloaded\")\n                } actions: {\n                    ButtonState {\n                        TextState(\"OK\")\n                    }\n                } message: {\n                    TextState(\n                        \"The launch agent has been reloaded.\"\n                    )\n                }\n                return .none\n\n            case .openExtensionManager:\n                return .run { send in\n                    let service = try getService()\n                    do {\n                        _ = try await service\n                            .send(requestBody: ExtensionServiceRequests.OpenExtensionManager())\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                        await send(.failedReloading)\n                    }\n                }\n\n            case .reloadStatus:\n                state.isReloading = true\n                return .run { send in\n                    let service = try getService()\n                    do {\n                        let isCommunicationReady = try await service.launchIfNeeded()\n                        if isCommunicationReady {\n                            let xpcServiceVersion = try await service.getXPCServiceVersion().version\n                            let isAccessibilityPermissionGranted = try await service\n                                .getXPCServiceAccessibilityPermission()\n                            await send(.finishReloading(\n                                xpcServiceVersion: xpcServiceVersion,\n                                permissionGranted: isAccessibilityPermissionGranted\n                            ))\n                        } else {\n                            toast(\"Launching service app.\", .info)\n                            try await Task.sleep(nanoseconds: 5_000_000_000)\n                            await send(.reloadStatus)\n                        }\n                    } catch let error as XPCCommunicationBridgeError {\n                        toast(\n                            \"Failed to reach communication bridge. \\(error.localizedDescription)\",\n                            .error\n                        )\n                        await send(.failedReloading)\n                    } catch {\n                        toast(error.localizedDescription, .error)\n                        await send(.failedReloading)\n                    }\n                }.cancellable(id: ReloadStatusCancellableId(), cancelInFlight: true)\n\n            case let .finishReloading(version, granted):\n                state.xpcServiceVersion = version\n                state.isAccessibilityPermissionGranted = granted\n                state.isReloading = false\n                return .none\n\n            case .failedReloading:\n                state.isReloading = false\n                return .none\n\n            case let .alert(.presented(action)):\n                switch action {\n                case .moveToApplications:\n                    return .run { send in\n                        let appURL = URL(fileURLWithPath: \"/Applications\")\n                        await send(.alert(.presented(.moveTo(appURL))))\n                    }\n\n                case let .moveTo(url):\n                    return .run { _ in\n                        do {\n                            try FileManager.default.moveItem(\n                                at: Bundle.main.bundleURL,\n                                to: url.appendingPathComponent(\n                                    Bundle.main.bundleURL.lastPathComponent\n                                )\n                            )\n                            await NSApplication.shared.terminate(nil)\n                        } catch {\n                            toast(error.localizedDescription, .error)\n                        }\n                    }\n                case .install:\n                    return .run { send in\n                        await send(.setupLaunchAgent)\n                    }\n                }\n\n            case .alert(.dismiss):\n                state.alert = nil\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/GeneralView.swift",
    "content": "import Client\nimport ComposableArchitecture\nimport KeyboardShortcuts\nimport LaunchAgentManager\nimport Preferences\nimport SharedUIComponents\nimport SwiftUI\n\nstruct GeneralView: View {\n    let store: StoreOf<General>\n\n    var body: some View {\n        ScrollView {\n            VStack(alignment: .leading, spacing: 0) {\n                AppInfoView(store: store)\n                SettingsDivider()\n                ExtensionServiceView(store: store)\n                SettingsDivider()\n                LaunchAgentView(store: store)\n                SettingsDivider()\n                GeneralSettingsView()\n            }\n        }\n        .onAppear {\n            store.send(.appear)\n        }\n    }\n}\n\nstruct AppInfoView: View {\n    @State var appVersion = Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String\n    @Environment(\\.updateChecker) var updateChecker\n    @Perception.Bindable var store: StoreOf<General>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading) {\n                HStack(alignment: .top) {\n                    Text(\n                        Bundle.main\n                            .object(forInfoDictionaryKey: \"HOST_APP_NAME\") as? String\n                            ?? \"Copilot for Xcode\"\n                    )\n                    .font(.title)\n                    Text(appVersion ?? \"\")\n                        .font(.footnote)\n                        .foregroundColor(.secondary)\n\n                    Spacer()\n\n                    Button(action: {\n                        store.send(.openExtensionManager)\n                    }) {\n                        HStack(spacing: 2) {\n                            Image(systemName: \"puzzlepiece.extension.fill\")\n                            Text(\"Extensions\")\n                        }\n                    }\n\n                    Button(action: {\n                        updateChecker.checkForUpdates()\n                    }) {\n                        HStack(spacing: 2) {\n                            Image(systemName: \"arrow.up.right.circle.fill\")\n                            Text(\"Check for Updates\")\n                        }\n                    }\n                }\n\n                HStack(spacing: 16) {\n                    Link(\n                        destination: URL(string: \"https://github.com/intitni/CopilotForXcode\")!\n                    ) {\n                        HStack(spacing: 2) {\n                            Image(systemName: \"link\")\n                            Text(\"GitHub\")\n                        }\n                    }\n                    .focusable(false)\n                    .foregroundColor(.accentColor)\n\n                    Link(destination: URL(string: \"https://www.buymeacoffee.com/intitni\")!) {\n                        HStack(spacing: 2) {\n                            Image(systemName: \"cup.and.saucer.fill\")\n                            Text(\"Buy Me A Coffee\")\n                        }\n                    }\n                    .foregroundColor(.accentColor)\n                    .focusable(false)\n                }\n            }\n            .padding()\n            .alert($store.scope(state: \\.alert, action: \\.alert))\n        }\n    }\n}\n\nstruct ExtensionServiceView: View {\n    @Perception.Bindable var store: StoreOf<General>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading) {\n                Text(\"Extension Service Version: \\(store.xpcServiceVersion ?? \"Loading..\")\")\n\n                let grantedStatus: String = {\n                    guard let granted = store.isAccessibilityPermissionGranted\n                    else { return \"Loading..\" }\n                    return granted ? \"Granted\" : \"Not Granted\"\n                }()\n                Text(\"Accessibility Permission: \\(grantedStatus)\")\n\n                HStack {\n                    Button(action: { store.send(.reloadStatus) }) {\n                        Text(\"Refresh\")\n                    }.disabled(store.isReloading)\n\n                    Button(action: {\n                        Task {\n                            let workspace = NSWorkspace.shared\n                            let url = Bundle.main.bundleURL\n                                .appendingPathComponent(\"Contents\")\n                                .appendingPathComponent(\"Applications\")\n                                .appendingPathComponent(\"CopilotForXcodeExtensionService.app\")\n                            workspace.activateFileViewerSelecting([url])\n                        }\n                    }) {\n                        Text(\"Reveal Extension Service in Finder\")\n                    }\n\n                    Button(action: {\n                        let url = URL(\n                            string: \"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility\"\n                        )!\n                        NSWorkspace.shared.open(url)\n                    }) {\n                        Text(\"Accessibility Settings\")\n                    }\n\n                    Button(action: {\n                        let url = URL(\n                            string: \"x-apple.systempreferences:com.apple.ExtensionsPreferences\"\n                        )!\n                        NSWorkspace.shared.open(url)\n                    }) {\n                        Text(\"Extensions Settings\")\n                    }\n                }\n            }\n        }\n        .padding()\n    }\n}\n\nstruct LaunchAgentView: View {\n    @Perception.Bindable var store: StoreOf<General>\n    @Environment(\\.toast) var toast\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(alignment: .leading) {\n                HStack {\n                    Button(action: {\n                        store.send(.setupLaunchAgentClicked)\n                    }) {\n                        Text(\"Setup Launch Agent\")\n                    }\n\n                    Button(action: {\n                        store.send(.removeLaunchAgentClicked)\n                    }) {\n                        Text(\"Remove Launch Agent\")\n                    }\n\n                    Button(action: {\n                        store.send(.reloadLaunchAgentClicked)\n                    }) {\n                        Text(\"Reload Launch Agent\")\n                    }\n                }\n            }\n            .padding()\n        }\n    }\n}\n\nstruct GeneralSettingsView: View {\n    class Settings: ObservableObject {\n        @AppStorage(\\.quitXPCServiceOnXcodeAndAppQuit)\n        var quitXPCServiceOnXcodeAndAppQuit\n        @AppStorage(\\.suggestionWidgetPositionMode)\n        var suggestionWidgetPositionMode\n        @AppStorage(\\.widgetColorScheme)\n        var widgetColorScheme\n        @AppStorage(\\.preferWidgetToStayInsideEditorWhenWidthGreaterThan)\n        var preferWidgetToStayInsideEditorWhenWidthGreaterThan\n        @AppStorage(\\.hideCircularWidget)\n        var hideCircularWidget\n        @AppStorage(\\.showHideWidgetShortcutGlobally)\n        var showHideWidgetShortcutGlobally\n        @AppStorage(\\.installBetaBuilds)\n        var installBetaBuilds\n    }\n\n    @StateObject var settings = Settings()\n    @Environment(\\.updateChecker) var updateChecker\n    @State var automaticallyCheckForUpdate: Bool?\n\n    var body: some View {\n        Form {\n            Toggle(isOn: $settings.quitXPCServiceOnXcodeAndAppQuit) {\n                Text(\"Quit service when Xcode and host app are terminated\")\n            }\n\n            Toggle(isOn: .init(\n                get: { automaticallyCheckForUpdate ?? updateChecker.automaticallyChecksForUpdates },\n                set: {\n                    updateChecker.automaticallyChecksForUpdates = $0\n                    automaticallyCheckForUpdate = $0\n                }\n            )) {\n                Text(\"Automatically Check for Update\")\n            }\n\n            Toggle(isOn: $settings.installBetaBuilds) {\n                Text(\"Install beta builds\")\n            }\n\n            Picker(selection: $settings.suggestionWidgetPositionMode) {\n                ForEach(SuggestionWidgetPositionMode.allCases, id: \\.rawValue) {\n                    switch $0 {\n                    case .fixedToBottom:\n                        Text(\"Fixed to Bottom\").tag($0)\n                    case .alignToTextCursor:\n                        Text(\"Follow Text Cursor\").tag($0)\n                    }\n                }\n            } label: {\n                Text(\"Widget position\")\n            }\n\n            Picker(selection: $settings.widgetColorScheme) {\n                ForEach(WidgetColorScheme.allCases, id: \\.rawValue) {\n                    switch $0 {\n                    case .system:\n                        Text(\"System\").tag($0)\n                    case .light:\n                        Text(\"Light\").tag($0)\n                    case .dark:\n                        Text(\"Dark\").tag($0)\n                    }\n                }\n            } label: {\n                Text(\"Widget color scheme\")\n            }\n\n            HStack(alignment: .firstTextBaseline) {\n                TextField(text: .init(get: {\n                    \"\\(Int(settings.preferWidgetToStayInsideEditorWhenWidthGreaterThan))\"\n                }, set: {\n                    settings\n                        .preferWidgetToStayInsideEditorWhenWidthGreaterThan =\n                        Double(Int($0) ?? 0)\n                })) {\n                    Text(\"Prefer widget to be inside editor\\nwhen width greater than\")\n                        .multilineTextAlignment(.trailing)\n                }\n                .textFieldStyle(.roundedBorder)\n\n                Text(\"pt\")\n            }\n\n            KeyboardShortcuts.Recorder(\"Hotkey to Toggle Widgets\", name: .showHideWidget) { _ in\n                // It's not used in this app!\n                KeyboardShortcuts.disable(.showHideWidget)\n            }\n\n            Toggle(isOn: $settings.showHideWidgetShortcutGlobally) {\n                Text(\"Enable the Hotkey Globally\")\n            }\n\n            Toggle(isOn: $settings.hideCircularWidget) {\n                Text(\"Hide indicator widget\")\n            }\n        }.padding()\n    }\n}\n\nstruct WidgetPositionIcon: View {\n    var position: SuggestionWidgetPositionMode\n    var isSelected: Bool\n\n    var body: some View {\n        ZStack {\n            Rectangle()\n                .fill(Color(nsColor: .textBackgroundColor))\n            Rectangle()\n                .fill(Color.accentColor.opacity(0.2))\n                .frame(width: 120, height: 20)\n        }\n        .frame(width: 120, height: 80)\n    }\n}\n\nstruct LargeIconPicker<\n    Data: RandomAccessCollection,\n    ID: Hashable,\n    Content: View,\n    Label: View\n>: View {\n    @Binding var selection: Data.Element\n    var data: Data\n    var id: KeyPath<Data.Element, ID>\n    var builder: (Data.Element, _ isSelected: Bool) -> Content\n    var label: () -> Label\n\n    @ViewBuilder\n    var content: some View {\n        HStack {\n            ForEach(data, id: id) { item in\n                let isSelected = selection[keyPath: id] == item[keyPath: id]\n                Button(action: {\n                    selection = item\n                }) {\n                    builder(item, isSelected)\n                        .clipShape(RoundedRectangle(cornerRadius: 8))\n                        .overlay {\n                            RoundedRectangle(cornerRadius: 8)\n                                .stroke(\n                                    isSelected ? Color.accentColor : Color.primary.opacity(0.1),\n                                    style: .init(lineWidth: 2)\n                                )\n                        }\n                }.buttonStyle(.plain)\n            }\n        }\n    }\n\n    var body: some View {\n        if #available(macOS 13.0, *) {\n            LabeledContent {\n                content\n            } label: {\n                label()\n            }\n        } else {\n            VStack {\n                label()\n                content\n            }\n        }\n    }\n}\n\nstruct GeneralView_Previews: PreviewProvider {\n    static var previews: some View {\n        GeneralView(store: .init(initialState: .init(), reducer: { General() }))\n            .frame(height: 800)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/HandleToast.swift",
    "content": "import Dependencies\nimport SwiftUI\nimport Toast\n\nstruct ToastHandler: View {\n    @ObservedObject var toastController: ToastController\n    let namespace: String?\n\n    init(toastController: ToastController, namespace: String?) {\n        _toastController = .init(wrappedValue: toastController)\n        self.namespace = namespace\n    }\n\n    var body: some View {\n        VStack(spacing: 4) {\n            ForEach(toastController.messages) { message in\n                if let n = message.namespace, n != namespace {\n                    EmptyView()\n                } else {\n                    message.content\n                        .foregroundColor(.white)\n                        .padding(8)\n                        .background({\n                            switch message.type {\n                            case .info: return Color.accentColor\n                            case .error: return Color(nsColor: .systemRed)\n                            case .warning: return Color(nsColor: .systemOrange)\n                            }\n                        }() as Color, in: RoundedRectangle(cornerRadius: 8))\n                        .shadow(color: Color.black.opacity(0.2), radius: 4)\n                }\n            }\n        }\n        .padding()\n        .allowsHitTesting(false)\n    }\n}\n\nextension View {\n    func handleToast(namespace: String? = nil) -> some View {\n        @Dependency(\\.toastController) var toastController\n        return overlay(alignment: .bottom) {\n            ToastHandler(toastController: toastController, namespace: namespace)\n        }.environment(\\.toast) { [toastController] content, type in\n            toastController.toast(content: content, type: type, namespace: namespace)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/HostApp.swift",
    "content": "import Client\nimport ComposableArchitecture\nimport Foundation\nimport KeyboardShortcuts\n\n#if canImport(LicenseManagement)\nimport ProHostApp\n#endif\n\nextension KeyboardShortcuts.Name {\n    static let showHideWidget = Self(\"ShowHideWidget\")\n}\n\n@Reducer\nstruct HostApp {\n    @ObservableState\n    struct State: Equatable {\n        var general = General.State()\n        var chatModelManagement = ChatModelManagement.State()\n        var embeddingModelManagement = EmbeddingModelManagement.State()\n        var webSearchSettings = WebSearchSettings.State()\n    }\n\n    enum Action {\n        case appear\n        case general(General.Action)\n        case chatModelManagement(ChatModelManagement.Action)\n        case embeddingModelManagement(EmbeddingModelManagement.Action)\n        case webSearchSettings(WebSearchSettings.Action)\n    }\n\n    @Dependency(\\.toast) var toast\n    \n    init() {\n        KeyboardShortcuts.userDefaults = .shared\n    }\n\n    var body: some ReducerOf<Self> {\n        Scope(state: \\.general, action: \\.general) {\n            General()\n        }\n\n        Scope(state: \\.chatModelManagement, action: \\.chatModelManagement) {\n            ChatModelManagement()\n        }\n\n        Scope(state: \\.embeddingModelManagement, action: \\.embeddingModelManagement) {\n            EmbeddingModelManagement()\n        }\n        \n        Scope(state: \\.webSearchSettings, action: \\.webSearchSettings) {\n            WebSearchSettings()\n        }\n\n        Reduce { _, action in\n            switch action {\n            case .appear:\n                #if canImport(ProHostApp)\n                ProHostApp.start()\n                #endif\n                return .none\n\n            case .general:\n                return .none\n\n            case .chatModelManagement:\n                return .none\n\n            case .embeddingModelManagement:\n                return .none\n                \n            case .webSearchSettings:\n                return .none\n            }\n        }\n    }\n}\n\nimport Dependencies\nimport Keychain\nimport Preferences\n\nstruct UserDefaultsDependencyKey: DependencyKey {\n    static var liveValue: UserDefaultsType = UserDefaults.shared\n    static var previewValue: UserDefaultsType = {\n        let it = UserDefaults(suiteName: \"HostAppPreview\")!\n        it.removePersistentDomain(forName: \"HostAppPreview\")\n        return it\n    }()\n\n    static var testValue: UserDefaultsType = {\n        let it = UserDefaults(suiteName: \"HostAppTest\")!\n        it.removePersistentDomain(forName: \"HostAppTest\")\n        return it\n    }()\n}\n\nextension DependencyValues {\n    var userDefaults: UserDefaultsType {\n        get { self[UserDefaultsDependencyKey.self] }\n        set { self[UserDefaultsDependencyKey.self] = newValue }\n    }\n}\n\nstruct APIKeyKeychainDependencyKey: DependencyKey {\n    static var liveValue: KeychainType = Keychain.apiKey\n    static var previewValue: KeychainType = FakeKeyChain()\n    static var testValue: KeychainType = FakeKeyChain()\n}\n\nextension DependencyValues {\n    var apiKeyKeychain: KeychainType {\n        get { self[APIKeyKeychainDependencyKey.self] }\n        set { self[APIKeyKeychainDependencyKey.self] = newValue }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/IsPreview.swift",
    "content": "import Foundation\n\nvar isPreview: Bool { ProcessInfo.processInfo.environment[\"XCODE_RUNNING_FOR_PREVIEWS\"] == \"1\" }\n"
  },
  {
    "path": "Core/Sources/HostApp/LaunchAgentManager.swift",
    "content": "import Foundation\nimport LaunchAgentManager\n\nextension LaunchAgentManager {\n    init() {\n        self.init(\n            serviceIdentifier: Bundle.main\n                .object(forInfoDictionaryKey: \"BUNDLE_IDENTIFIER_BASE\") as! String +\n                \".CommunicationBridge\",\n            executableURL: Bundle.main.bundleURL\n                .appendingPathComponent(\"Contents\")\n                .appendingPathComponent(\"Applications\")\n                .appendingPathComponent(\"CommunicationBridge\"),\n            bundleIdentifier: Bundle.main\n                .object(forInfoDictionaryKey: \"BUNDLE_IDENTIFIER_BASE\") as! String\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/ServiceView.swift",
    "content": "import ComposableArchitecture\nimport SwiftUI\n\nstruct ServiceView: View {\n    let store: StoreOf<HostApp>\n    @State var tag = 0\n\n    var body: some View {\n        WithPerceptionTracking {\n            SidebarTabView(tag: $tag) {\n                WithPerceptionTracking {\n                    ScrollView {\n                        GitHubCopilotView().padding()\n                    }.sidebarItem(\n                        tag: 0,\n                        title: \"GitHub Copilot\",\n                        subtitle: \"Suggestion\",\n                        image: \"globe\"\n                    )\n\n                    ScrollView {\n                        CodeiumView().padding()\n                    }.sidebarItem(\n                        tag: 1,\n                        title: \"Codeium\",\n                        subtitle: \"Suggestion\",\n                        image: \"globe\"\n                    )\n\n                    ChatModelManagementView(store: store.scope(\n                        state: \\.chatModelManagement,\n                        action: \\.chatModelManagement\n                    )).sidebarItem(\n                        tag: 2,\n                        title: \"Chat Models\",\n                        subtitle: \"Chat, Modification\",\n                        image: \"globe\"\n                    )\n\n                    EmbeddingModelManagementView(store: store.scope(\n                        state: \\.embeddingModelManagement,\n                        action: \\.embeddingModelManagement\n                    )).sidebarItem(\n                        tag: 3,\n                        title: \"Embedding Models\",\n                        subtitle: \"Chat, Modification\",\n                        image: \"globe\"\n                    )\n\n                    WebSearchView(store: store.scope(\n                        state: \\.webSearchSettings,\n                        action: \\.webSearchSettings\n                    )).sidebarItem(\n                        tag: 4,\n                        title: \"Web Search\",\n                        subtitle: \"Chat, Modification\",\n                        image: \"globe\"\n                    )\n\n                    ScrollView {\n                        OtherSuggestionServicesView().padding()\n                    }.sidebarItem(\n                        tag: 5,\n                        title: \"Other Suggestion Services\",\n                        subtitle: \"Suggestion\",\n                        image: \"globe\"\n                    )\n                }\n            }\n        }\n    }\n}\n\nstruct AccountView_Previews: PreviewProvider {\n    static var previews: some View {\n        ServiceView(store: .init(initialState: .init(), reducer: { HostApp() }))\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/SharedComponents/CodeHighlightThemePicker.swift",
    "content": "import Foundation\nimport Preferences\nimport SwiftUI\n\npublic struct CodeHighlightThemePicker: View {\n    public enum Scenario {\n        case suggestion\n        case promptToCode\n        case chat\n    }\n\n    let scenario: Scenario\n\n    public init(scenario: Scenario) {\n        self.scenario = scenario\n    }\n\n    public var body: some View {\n        switch scenario {\n        case .suggestion:\n            SuggestionThemePicker()\n        case .promptToCode:\n            PromptToCodeThemePicker()\n        case .chat:\n            ChatThemePicker()\n        }\n    }\n\n    struct SuggestionThemePicker: View {\n        @AppStorage(\\.syncSuggestionHighlightTheme) var sync: Bool\n        var body: some View {\n            SyncToggle(sync: $sync)\n        }\n    }\n\n    struct PromptToCodeThemePicker: View {\n        @AppStorage(\\.syncPromptToCodeHighlightTheme) var sync: Bool\n        var body: some View {\n            SyncToggle(sync: $sync)\n        }\n    }\n\n    struct ChatThemePicker: View {\n        @AppStorage(\\.syncChatCodeHighlightTheme) var sync: Bool\n        var body: some View {\n            SyncToggle(sync: $sync)\n        }\n    }\n\n    struct SyncToggle: View {\n        @Binding var sync: Bool\n\n        var body: some View {\n            VStack(alignment: .leading) {\n                Toggle(isOn: $sync) {\n                    Text(\"Sync color scheme with Xcode\")\n                }\n\n                Text(\"To refresh the theme, you must activate the extension service app once.\")\n                    .font(.footnote)\n                    .foregroundColor(.secondary)\n            }\n        }\n    }\n}\n\n#Preview {\n    CodeHighlightThemePicker.SyncToggle(sync: .constant(true))\n    CodeHighlightThemePicker.SyncToggle(sync: .constant(false))\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/SharedComponents/EditableText.swift",
    "content": "import Foundation\nimport SwiftUI\n\n// Hack to disable smart quotes and dashes in TextEditor\nextension NSTextView {\n    open override var frame: CGRect {\n        didSet {\n            self.isAutomaticQuoteSubstitutionEnabled = false\n            self.isAutomaticDashSubstitutionEnabled = false\n        }\n    }\n}\n\nstruct EditableText: View {\n    var text: Binding<String>\n    @State var isEditing: Bool = false\n\n    var body: some View {\n        Button(action: {\n            isEditing = true\n        }) {\n            HStack(alignment: .top) {\n                Text(text.wrappedValue)\n                    .font(Font.system(.body, design: .monospaced))\n                    .padding(4)\n                    .multilineTextAlignment(.leading)\n                    .frame(maxWidth: .infinity, alignment: .leading)\n                    .background {\n                        RoundedRectangle(cornerRadius: 4)\n                            .fill(Color(nsColor: .textBackgroundColor))\n                    }\n                    .overlay {\n                        RoundedRectangle(cornerRadius: 4)\n                            .stroke(Color(nsColor: .separatorColor), style: .init(lineWidth: 1))\n                    }\n                Image(systemName: \"square.and.pencil\")\n                    .resizable()\n                    .scaledToFit()\n                    .frame(width: 14)\n                    .padding(4)\n                    .background(\n                        Color.primary.opacity(0.1),\n                        in: RoundedRectangle(cornerRadius: 4)\n                    )\n            }\n        }\n        .buttonStyle(.plain)\n        .sheet(isPresented: $isEditing) {\n            VStack {\n                TextEditor(text: text)\n                    .font(Font.system(.body, design: .monospaced))\n                    .padding(4)\n                    .frame(minHeight: 120)\n                    .multilineTextAlignment(.leading)\n                    .overlay(\n                        RoundedRectangle(cornerRadius: 4)\n                            .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                    )\n\n                Button(action: {\n                    isEditing = false\n                }) {\n                    Text(\"Done\")\n                }\n            }\n            .padding()\n            .frame(width: 600, height: 500)\n            .background(Color(nsColor: .windowBackgroundColor))\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/SidebarTabView.swift",
    "content": "import SwiftUI\n\nprivate struct SidebarItem: Identifiable, Equatable {\n    var id: Int { tag }\n    var tag: Int\n    var title: String\n    var subtitle: String? = nil\n    var image: String? = nil\n}\n\nprivate struct SidebarItemPreferenceKey: PreferenceKey {\n    static var defaultValue: [SidebarItem] = []\n    static func reduce(value: inout [SidebarItem], nextValue: () -> [SidebarItem]) {\n        value.append(contentsOf: nextValue())\n    }\n}\n\nprivate struct SidebarTabTagKey: EnvironmentKey {\n    static var defaultValue: Int = 0\n}\n\nprivate extension EnvironmentValues {\n    var sidebarTabTag: Int {\n        get { self[SidebarTabTagKey.self] }\n        set { self[SidebarTabTagKey.self] = newValue }\n    }\n}\n\nprivate struct SidebarTabViewWrapper<Content: View>: View {\n    @Environment(\\.sidebarTabTag) var sidebarTabTag\n    var tag: Int\n    var title: String\n    var subtitle: String? = nil\n    var image: String? = nil\n    var content: () -> Content\n\n    var body: some View {\n        Group {\n            if tag == sidebarTabTag {\n                content()\n            } else {\n                Color.clear\n            }\n        }\n        .preference(\n            key: SidebarItemPreferenceKey.self,\n            value: [.init(tag: tag, title: title, subtitle: subtitle, image: image)]\n        )\n    }\n}\n\nextension View {\n    func sidebarItem(\n        tag: Int,\n        title: String,\n        subtitle: String? = nil,\n        image: String? = nil\n    ) -> some View {\n        SidebarTabViewWrapper(\n            tag: tag,\n            title: title,\n            subtitle: subtitle,\n            image: image,\n            content: { self }\n        )\n    }\n}\n\nstruct SidebarTabView<Content: View>: View {\n    @State private var sidebarItems = [SidebarItem]()\n    @Binding var tag: Int\n    @ViewBuilder var views: () -> Content\n    var body: some View {\n        HStack(spacing: 0) {\n            ScrollView {\n                VStack(alignment: .leading) {\n                    ForEach(sidebarItems) { item in\n                        Button(action: {\n                            tag = item.tag\n                        }) {\n                            HStack {\n                                if let image = item.image {\n                                    Image(systemName: image)\n                                        .resizable()\n                                        .scaledToFit()\n                                        .frame(width: 20, height: 20)\n                                }\n                                VStack(alignment: .leading, spacing: 2) {\n                                    Text(item.title)\n                                        .foregroundStyle(.primary)\n                                    if let subtitle = item.subtitle {\n                                        Text(subtitle)\n                                            .lineSpacing(0)\n                                            .font(.caption)\n                                            .foregroundStyle(.secondary)\n                                            .opacity(0.5)\n                                            .multilineTextAlignment(.leading)\n                                    }\n                                }\n                            }\n                            .frame(maxWidth: .infinity, alignment: .leading)\n                            .padding(.horizontal, 8)\n                            .padding(.vertical, 4)\n                            .background(\n                                Color.primary.opacity(tag == item.tag ? 0.1 : 0),\n                                in: RoundedRectangle(cornerRadius: 4)\n                            )\n                            .padding(.horizontal, 8)\n                            .contentShape(Rectangle())\n                        }\n                        .buttonStyle(.plain)\n                    }\n                }\n                .frame(width: 200)\n                .padding(.vertical, 8)\n            }\n            .background(Color.primary.opacity(0.05))\n\n            Divider()\n\n            ZStack(alignment: .topLeading) {\n                views()\n            }\n        }\n        .environment(\\.sidebarTabTag, tag)\n        .onPreferenceChange(SidebarItemPreferenceKey.self) { items in\n            sidebarItems = items\n        }\n    }\n}\n\nstruct SidebarTabView_Previews: PreviewProvider {\n    static var previews: some View {\n        SidebarTabView(tag: .constant(0)) {\n            Color.red.sidebarItem(\n                tag: 0,\n                title: \"Hello\",\n                subtitle: \"Meow\\nMeow\",\n                image: \"person.circle.fill\"\n            )\n            Color.blue.sidebarItem(\n                tag: 1,\n                title: \"World\",\n                image: \"person.circle.fill\"\n            )\n            Color.blue.sidebarItem(\n                tag: 3,\n                title: \"Pikachu\",\n                image: \"person.circle.fill\"\n            )\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/HostApp/TabContainer.swift",
    "content": "import ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport LaunchAgentManager\nimport SharedUIComponents\nimport SwiftUI\nimport Toast\nimport UpdateChecker\n\n@MainActor\nlet hostAppStore: StoreOf<HostApp> = .init(initialState: .init(), reducer: { HostApp() })\n\npublic struct TabContainer: View {\n    let store: StoreOf<HostApp>\n    @ObservedObject var toastController: ToastController\n    @State private var tabBarItems = [TabBarItem]()\n    @State var tag: Int = 0\n\n    var externalTabContainer: ExternalTabContainer {\n        ExternalTabContainer.tabContainer(for: \"TabContainer\")\n    }\n\n    public init() {\n        toastController = ToastControllerDependencyKey.liveValue\n        store = hostAppStore\n    }\n\n    init(store: StoreOf<HostApp>, toastController: ToastController) {\n        self.store = store\n        self.toastController = toastController\n    }\n\n    public var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                TabBar(tag: $tag, tabBarItems: tabBarItems)\n                    .padding(.bottom, 8)\n\n                Divider()\n\n                ZStack(alignment: .center) {\n                    GeneralView(store: store.scope(state: \\.general, action: \\.general))\n                        .tabBarItem(\n                            tag: 0,\n                            title: \"General\",\n                            image: \"app.gift\"\n                        )\n                    ServiceView(store: store).tabBarItem(\n                        tag: 1,\n                        title: \"Service\",\n                        image: \"globe\"\n                    )\n                    FeatureSettingsView().tabBarItem(\n                        tag: 2,\n                        title: \"Feature\",\n                        image: \"star.square\"\n                    )\n                    CustomCommandView(store: customCommandStore).tabBarItem(\n                        tag: 3,\n                        title: \"Custom Command\",\n                        image: \"command.square\"\n                    )\n                    \n                    ForEach(0..<externalTabContainer.tabs.endIndex, id: \\.self) { index in\n                        let tab = externalTabContainer.tabs[index]\n                        tab.viewBuilder().tabBarItem(\n                            tag: 5 + index,\n                            title: tab.title,\n                            image: \"plus.diamond\"\n                        )\n                    }\n                    \n                    DebugSettingsView().tabBarItem(\n                        tag: 4,\n                        title: \"Advanced\",\n                        image: \"gearshape.2\"\n                    )\n                }\n                .environment(\\.tabBarTabTag, tag)\n                .frame(minHeight: 400)\n            }\n            .focusable(false)\n            .padding(.top, 8)\n            .background(.ultraThinMaterial.opacity(0.01))\n            .background(Color(nsColor: .controlBackgroundColor).opacity(0.4))\n            .handleToast()\n            .onPreferenceChange(TabBarItemPreferenceKey.self) { items in\n                tabBarItems = items\n            }\n            .onAppear {\n                store.send(.appear)\n            }\n        }\n    }\n}\n\nstruct TabBar: View {\n    @Binding var tag: Int\n    fileprivate var tabBarItems: [TabBarItem]\n\n    var body: some View {\n        HStack {\n            ForEach(tabBarItems) { tab in\n                TabBarButton(\n                    currentTag: $tag,\n                    tag: tab.tag,\n                    title: tab.title,\n                    image: tab.image\n                )\n            }\n        }\n    }\n}\n\nstruct TabBarButton: View {\n    @Binding var currentTag: Int\n    @State var isHovered = false\n    var tag: Int\n    var title: String\n    var image: String\n\n    var body: some View {\n        Button(action: {\n            self.currentTag = tag\n        }) {\n            VStack(spacing: 2) {\n                Image(systemName: image)\n                    .resizable()\n                    .scaledToFit()\n                    .frame(height: 18)\n                Text(title)\n            }\n            .font(.body)\n            .padding(.horizontal, 12)\n            .padding(.vertical, 4)\n            .padding(.top, 4)\n            .background(\n                tag == currentTag\n                    ? Color(nsColor: .textColor).opacity(0.1)\n                    : Color.clear,\n                in: RoundedRectangle(cornerRadius: 8)\n            )\n            .background(\n                isHovered\n                    ? Color(nsColor: .textColor).opacity(0.05)\n                    : Color.clear,\n                in: RoundedRectangle(cornerRadius: 8)\n            )\n        }\n        .onHover(perform: { yes in\n            isHovered = yes\n        })\n        .buttonStyle(.borderless)\n    }\n}\n\nprivate struct TabBarTabViewWrapper<Content: View>: View {\n    @Environment(\\.tabBarTabTag) var tabBarTabTag\n    var tag: Int\n    var title: String\n    var image: String\n    var content: () -> Content\n\n    var body: some View {\n        Group {\n            if tag == tabBarTabTag {\n                content()\n            } else {\n                Color.clear\n            }\n        }\n        .preference(\n            key: TabBarItemPreferenceKey.self,\n            value: [.init(tag: tag, title: title, image: image)]\n        )\n    }\n}\n\nprivate extension View {\n    func tabBarItem(\n        tag: Int,\n        title: String,\n        image: String\n    ) -> some View {\n        TabBarTabViewWrapper(\n            tag: tag,\n            title: title,\n            image: image,\n            content: { self }\n        )\n    }\n}\n\nprivate struct TabBarItem: Identifiable, Equatable {\n    var id: Int { tag }\n    var tag: Int\n    var title: String\n    var image: String\n}\n\nprivate struct TabBarItemPreferenceKey: PreferenceKey {\n    static var defaultValue: [TabBarItem] = []\n    static func reduce(value: inout [TabBarItem], nextValue: () -> [TabBarItem]) {\n        value.append(contentsOf: nextValue())\n    }\n}\n\nprivate struct TabBarTabTagKey: EnvironmentKey {\n    static var defaultValue: Int = 0\n}\n\nprivate extension EnvironmentValues {\n    var tabBarTabTag: Int {\n        get { self[TabBarTabTagKey.self] }\n        set { self[TabBarTabTagKey.self] = newValue }\n    }\n}\n\nstruct UpdateCheckerKey: EnvironmentKey {\n    static var defaultValue: UpdateChecker = .init(\n        hostBundle: nil,\n        shouldAutomaticallyCheckForUpdate: false\n    )\n}\n\npublic extension EnvironmentValues {\n    var updateChecker: UpdateChecker {\n        get { self[UpdateCheckerKey.self] }\n        set { self[UpdateCheckerKey.self] = newValue }\n    }\n}\n\n// MARK: - Previews\n\nstruct TabContainer_Previews: PreviewProvider {\n    static var previews: some View {\n        TabContainer()\n            .frame(width: 800)\n    }\n}\n\nstruct TabContainer_Toasts_Previews: PreviewProvider {\n    static var previews: some View {\n        TabContainer(\n            store: .init(initialState: .init(), reducer: { HostApp() }),\n            toastController: .init(messages: [\n                .init(id: UUID(), type: .info, content: Text(\"info\")),\n                .init(id: UUID(), type: .error, content: Text(\"error\")),\n                .init(id: UUID(), type: .warning, content: Text(\"warning\")),\n            ])\n        )\n        .frame(width: 800)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/KeyBindingManager/KeyBindingManager.swift",
    "content": "import Foundation\nimport Workspace\n\n\npublic final class KeyBindingManager {\n    let tabToAcceptSuggestion: TabToAcceptSuggestion\n\n    public init() {\n        tabToAcceptSuggestion = .init()\n    }\n    \n    public func start() {\n        tabToAcceptSuggestion.start()\n    }\n    \n    @MainActor\n    public func stopForExit() {\n        tabToAcceptSuggestion.stopForExit()\n    }\n}\n\n    \n"
  },
  {
    "path": "Core/Sources/KeyBindingManager/TabToAcceptSuggestion.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport CGEventOverride\nimport CommandHandler\nimport Dependencies\nimport Foundation\nimport Logger\nimport Preferences\nimport SuggestionBasic\nimport UserDefaultsObserver\nimport Workspace\nimport XcodeInspector\n\nfinal class TabToAcceptSuggestion {\n    let hook: CGEventHookType = CGEventHook(eventsOfInterest: [.keyDown]) { message in\n        Logger.service.debug(\"TabToAcceptSuggestion: \\(message)\")\n    }\n\n    @Dependency(\\.workspacePool) var workspacePool\n    @Dependency(\\.commandHandler) var commandHandler\n\n    private var CGEventObservationTask: Task<Void, Error>?\n    private var isObserving: Bool { CGEventObservationTask != nil }\n    private let userDefaultsObserver = UserDefaultsObserver(\n        object: UserDefaults.shared, forKeyPaths: [\n            UserDefaultPreferenceKeys().acceptSuggestionWithTab.key,\n            UserDefaultPreferenceKeys().dismissSuggestionWithEsc.key,\n        ], context: nil\n    )\n    private var stoppedForExit = false\n\n    struct ObservationKey: Hashable {}\n\n    var canTapToAcceptSuggestion: Bool {\n        UserDefaults.shared.value(for: \\.acceptSuggestionWithTab)\n    }\n\n    var canEscToDismissSuggestion: Bool {\n        UserDefaults.shared.value(for: \\.dismissSuggestionWithEsc)\n    }\n\n    @MainActor\n    func stopForExit() {\n        stoppedForExit = true\n        stopObservation()\n    }\n\n    init() {\n        _ = ThreadSafeAccessToXcodeInspector.shared\n\n        hook.add(\n            .init(\n                eventsOfInterest: [.keyDown],\n                convert: { [weak self] _, _, event in\n                    self?.handleEvent(event) ?? .unchanged\n                }\n            ),\n            forKey: ObservationKey()\n        )\n    }\n\n    func start() {\n        Task { [weak self] in\n            for await _ in ActiveApplicationMonitor.shared.createInfoStream() {\n                guard let self else { return }\n                try Task.checkCancellation()\n                Task { @MainActor in\n                    if ActiveApplicationMonitor.shared.activeXcode != nil {\n                        self.startObservation()\n                    } else {\n                        self.stopObservation()\n                    }\n                }\n            }\n        }\n\n        userDefaultsObserver.onChange = { [weak self] in\n            guard let self else { return }\n            Task { @MainActor in\n                if self.canTapToAcceptSuggestion || self.canEscToDismissSuggestion {\n                    self.startObservation()\n                } else {\n                    self.stopObservation()\n                }\n            }\n        }\n    }\n\n    @MainActor\n    func startObservation() {\n        guard !stoppedForExit else { return }\n        guard canTapToAcceptSuggestion || canEscToDismissSuggestion else { return }\n        hook.activateIfPossible()\n    }\n\n    @MainActor\n    func stopObservation() {\n        hook.deactivate()\n    }\n\n    func handleEvent(_ event: CGEvent) -> CGEventManipulation.Result {\n        let keycode = Int(event.getIntegerValueField(.keyboardEventKeycode))\n        let tab = 48\n        let esc = 53\n\n        switch keycode {\n        case tab:\n            return handleTab(event.flags)\n        case esc:\n            return handleEsc(event.flags)\n        default:\n            return .unchanged\n        }\n    }\n\n    func handleTab(_ flags: CGEventFlags) -> CGEventManipulation.Result {\n        Logger.service.info(\"TabToAcceptSuggestion: Tab\")\n\n        guard let fileURL = ThreadSafeAccessToXcodeInspector.shared.activeDocumentURL\n        else {\n            Logger.service.info(\"TabToAcceptSuggestion: No active document\")\n            return .unchanged\n        }\n\n        let language = languageIdentifierFromFileURL(fileURL)\n\n        if flags.contains(.maskHelp) { return .unchanged }\n\n        let requiredFlagsToTrigger: CGEventFlags = {\n            var all = CGEventFlags()\n            if UserDefaults.shared.value(for: \\.acceptSuggestionWithModifierShift) {\n                all.insert(.maskShift)\n            }\n            if UserDefaults.shared.value(for: \\.acceptSuggestionWithModifierControl) {\n                all.insert(.maskControl)\n            }\n            if UserDefaults.shared.value(for: \\.acceptSuggestionWithModifierOption) {\n                all.insert(.maskAlternate)\n            }\n            if UserDefaults.shared.value(for: \\.acceptSuggestionWithModifierCommand) {\n                all.insert(.maskCommand)\n            }\n            if UserDefaults.shared.value(for: \\.acceptSuggestionWithModifierOnlyForSwift) {\n                if language == .builtIn(.swift) {\n                    return all\n                } else {\n                    return []\n                }\n            } else {\n                return all\n            }\n        }()\n\n        let flagsToAvoidWhenNotRequired: [CGEventFlags] = [\n            .maskShift, .maskCommand, .maskHelp, .maskSecondaryFn,\n        ]\n\n        guard flags.contains(requiredFlagsToTrigger) else {\n            Logger.service.info(\"TabToAcceptSuggestion: Modifier not found\")\n            return .unchanged\n        }\n\n        for flag in flagsToAvoidWhenNotRequired {\n            if flags.contains(flag), !requiredFlagsToTrigger.contains(flag) {\n                return .unchanged\n            }\n        }\n\n        guard canTapToAcceptSuggestion else {\n            Logger.service.info(\"TabToAcceptSuggestion: Feature not available\")\n            return .unchanged\n        }\n\n        guard ThreadSafeAccessToXcodeInspector.shared.activeXcode != nil\n        else {\n            Logger.service.info(\"TabToAcceptSuggestion: Xcode not found\")\n            return .unchanged\n        }\n        guard let editor = ThreadSafeAccessToXcodeInspector.shared.focusedEditor\n        else {\n            Logger.service.info(\"TabToAcceptSuggestion: No editor found\")\n            return .unchanged\n        }\n        guard let filespace = workspacePool.fetchFilespaceIfExisted(fileURL: fileURL)\n        else {\n            Logger.service.info(\"TabToAcceptSuggestion: No file found\")\n            return .unchanged\n        }\n        guard let presentingSuggestion = filespace.presentingSuggestion\n        else {\n            Logger.service.info(\n                \"TabToAcceptSuggestion: No presenting found for \\(filespace.fileURL.lastPathComponent), found \\(filespace.suggestions.count) suggestion, index \\(filespace.suggestionIndex).\"\n            )\n            return .unchanged\n        }\n\n        let editorContent = editor.getContent()\n\n        let shouldAcceptSuggestion = Self.checkIfAcceptSuggestion(\n            lines: editorContent.lines,\n            cursorPosition: editorContent.cursorPosition,\n            codeMetadata: filespace.codeMetadata,\n            presentingSuggestionText: presentingSuggestion.text\n        )\n\n        if shouldAcceptSuggestion {\n            Logger.service.info(\"TabToAcceptSuggestion: Accept\")\n            if flags.contains(.maskControl),\n               !requiredFlagsToTrigger.contains(.maskControl)\n            {\n                Task { await commandHandler.acceptActiveSuggestionLineInGroup(atIndex: nil)\n                }\n            } else {\n                Task { await commandHandler.acceptSuggestion() }\n            }\n            return .discarded\n        } else {\n            Logger.service.info(\"TabToAcceptSuggestion: Should not accept\")\n            return .unchanged\n        }\n    }\n\n    func handleEsc(_ flags: CGEventFlags) -> CGEventManipulation.Result {\n        guard\n            !flags.contains(.maskShift),\n            !flags.contains(.maskControl),\n            !flags.contains(.maskAlternate),\n            !flags.contains(.maskCommand),\n            !flags.contains(.maskHelp),\n            canEscToDismissSuggestion\n        else { return .unchanged }\n\n        guard\n            let fileURL = ThreadSafeAccessToXcodeInspector.shared.activeDocumentURL,\n            ThreadSafeAccessToXcodeInspector.shared.activeXcode != nil,\n            let filespace = workspacePool.fetchFilespaceIfExisted(fileURL: fileURL),\n            filespace.presentingSuggestion != nil\n        else { return .unchanged }\n\n        Task { await commandHandler.dismissSuggestion() }\n        return .discarded\n    }\n}\n\nextension TabToAcceptSuggestion {\n    static func checkIfAcceptSuggestion(\n        lines: [String],\n        cursorPosition: CursorPosition,\n        codeMetadata: FilespaceCodeMetadata,\n        presentingSuggestionText: String\n    ) -> Bool {\n        let line = cursorPosition.line\n        guard line >= 0, line < lines.endIndex else {\n            return true\n        }\n        let col = cursorPosition.character\n        let prefixEndIndex = lines[line].utf16.index(\n            lines[line].utf16.startIndex,\n            offsetBy: col,\n            limitedBy: lines[line].utf16.endIndex\n        ) ?? lines[line].utf16.endIndex\n        let prefix = String(lines[line][..<prefixEndIndex])\n        let contentAfterTab = {\n            let indentSize = codeMetadata.indentSize ?? 4\n            if codeMetadata.usesTabsForIndentation ?? false {\n                return prefix + \"\\t\"\n            } else {\n                return prefix + String(repeating: \" \", count: indentSize)\n            }\n        }()\n\n        // If entering a tab doesn't invalidate the suggestion, just let the user type the tab.\n        // else, accept the suggestion and discard the tab.\n        guard !presentingSuggestionText.hasPrefix(contentAfterTab) else {\n            Logger.service.info(\"TabToAcceptSuggestion: Space for tab\")\n            return false\n        }\n        return true\n    }\n}\n\nprivate class ThreadSafeAccessToXcodeInspector {\n    static let shared = ThreadSafeAccessToXcodeInspector()\n\n    private(set) var activeDocumentURL: URL?\n    private(set) var activeXcode: AppInstanceInspector?\n    private(set) var focusedEditor: SourceEditor?\n\n    init() {\n        Task { [weak self] in\n            for await _ in NotificationCenter.default\n                .notifications(named: .activeDocumentURLDidChange)\n            {\n                guard let self else { return }\n                self.activeDocumentURL = await XcodeInspector.shared.activeDocumentURL\n            }\n        }\n\n        Task { [weak self] in\n            for await _ in NotificationCenter.default\n                .notifications(named: .activeXcodeDidChange)\n            {\n                guard let self else { return }\n                self.activeXcode = await XcodeInspector.shared.activeXcode\n            }\n        }\n\n        Task { [weak self] in\n            for await _ in NotificationCenter.default\n                .notifications(named: .focusedEditorDidChange)\n            {\n                guard let self else { return }\n                self.focusedEditor = await XcodeInspector.shared.focusedEditor\n            }\n        }\n\n        // Initialize current values\n        Task {\n            activeDocumentURL = await XcodeInspector.shared.activeDocumentURL\n            activeXcode = await XcodeInspector.shared.activeApplication\n            focusedEditor = await XcodeInspector.shared.focusedEditor\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/LaunchAgentManager/LaunchAgentManager.swift",
    "content": "import Foundation\nimport ServiceManagement\n\npublic struct LaunchAgentManager {\n    let lastLaunchAgentVersionKey = \"LastLaunchAgentVersion\"\n    let serviceIdentifier: String\n    let executableURL: URL\n    let bundleIdentifier: String\n\n    var launchAgentDirURL: URL {\n        FileManager.default.homeDirectoryForCurrentUser\n            .appendingPathComponent(\"Library/LaunchAgents\")\n    }\n\n    var launchAgentPath: String {\n        launchAgentDirURL.appendingPathComponent(\"\\(serviceIdentifier).plist\").path\n    }\n\n    public init(serviceIdentifier: String, executableURL: URL, bundleIdentifier: String) {\n        self.serviceIdentifier = serviceIdentifier\n        self.executableURL = executableURL\n        self.bundleIdentifier = bundleIdentifier\n    }\n\n    public func setupLaunchAgentForTheFirstTimeIfNeeded() async throws {\n        if #available(macOS 13, *) {\n            try await setupLaunchAgent()\n        } else {\n            if UserDefaults.standard.integer(forKey: lastLaunchAgentVersionKey) < 40 {\n                try await setupLaunchAgent()\n                return\n            }\n            guard !FileManager.default.fileExists(atPath: launchAgentPath) else { return }\n            try await setupLaunchAgent()\n        }\n    }\n\n    public func setupLaunchAgent() async throws {\n        if #available(macOS 13, *) {\n            if executableURL.path.hasPrefix(\"/Applications\") {\n                try setupLaunchAgentWithPredefinedPlist()\n            } else {\n                try await setupLaunchAgentWithDynamicPlist()\n            }\n        } else {\n            try await setupLaunchAgentWithDynamicPlist()\n        }\n\n        let buildNumber = (Bundle.main.infoDictionary?[\"CFBundleVersion\"] as? String)\n            .flatMap(Int.init)\n        UserDefaults.standard.set(buildNumber, forKey: lastLaunchAgentVersionKey)\n    }\n\n    public func removeLaunchAgent() async throws {\n        if #available(macOS 13, *) {\n            let bridgeLaunchAgent = SMAppService.agent(plistName: \"bridgeLaunchAgent.plist\")\n            try? await bridgeLaunchAgent.unregister()\n            if FileManager.default.fileExists(atPath: launchAgentPath) {\n                try? await launchctl(\"unload\", launchAgentPath)\n                try? FileManager.default.removeItem(atPath: launchAgentPath)\n            }\n        } else {\n            try await launchctl(\"unload\", launchAgentPath)\n            try FileManager.default.removeItem(atPath: launchAgentPath)\n        }\n    }\n\n    public func reloadLaunchAgent() async throws {\n        if #unavailable(macOS 13) {\n            try await helper(\"reload-launch-agent\", \"--service-identifier\", serviceIdentifier)\n        }\n    }\n}\n\nextension LaunchAgentManager {\n    @available(macOS 13, *)\n    func setupLaunchAgentWithPredefinedPlist() throws {\n        let bridgeLaunchAgent = SMAppService.agent(plistName: \"bridgeLaunchAgent.plist\")\n        try bridgeLaunchAgent.register()\n    }\n    \n    func setupLaunchAgentWithDynamicPlist() async throws {\n        if FileManager.default.fileExists(atPath: launchAgentPath) {\n            throw E(errorDescription: \"Launch agent already exists.\")\n        }\n        \n        let content = \"\"\"\n        <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n        <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n        <plist version=\"1.0\">\n        <dict>\n            <key>Label</key>\n            <string>\\(serviceIdentifier)</string>\n            <key>Program</key>\n            <string>\\(executableURL.path)</string>\n            <key>MachServices</key>\n            <dict>\n                <key>\\(serviceIdentifier)</key>\n                <true/>\n            </dict>\n            <key>AssociatedBundleIdentifiers</key>\n            <array>\n                <string>\\(bundleIdentifier)</string>\n                <string>\\(serviceIdentifier)</string>\n            </array>\n        </dict>\n        </plist>\n        \"\"\"\n        if !FileManager.default.fileExists(atPath: launchAgentDirURL.path) {\n            try FileManager.default.createDirectory(\n                at: launchAgentDirURL,\n                withIntermediateDirectories: false\n            )\n        }\n        FileManager.default.createFile(\n            atPath: launchAgentPath,\n            contents: content.data(using: .utf8)\n        )\n        #if DEBUG\n        #else\n        try await launchctl(\"load\", launchAgentPath)\n        #endif\n    }\n}\n\nprivate func process(_ launchPath: String, _ args: [String]) async throws {\n    let task = Process()\n    task.launchPath = launchPath\n    task.arguments = args\n    task.environment = [\n        \"PATH\": \"/usr/bin\",\n    ]\n    let outpipe = Pipe()\n    task.standardOutput = outpipe\n\n    return try await withUnsafeThrowingContinuation { continuation in\n        do {\n            task.terminationHandler = { process in\n                do {\n                    if process.terminationStatus == 0 {\n                        continuation.resume(returning: ())\n                    } else {\n                        if let data = try? outpipe.fileHandleForReading.readToEnd(),\n                           let content = String(data: data, encoding: .utf8)\n                        {\n                            continuation.resume(throwing: E(errorDescription: content))\n                        } else {\n                            continuation.resume(\n                                throwing: E(\n                                    errorDescription: \"Unknown error.\"\n                                )\n                            )\n                        }\n                    }\n                }\n            }\n            try task.run()\n        } catch {\n            continuation.resume(throwing: error)\n        }\n    }\n}\n\nprivate func helper(_ args: String...) async throws {\n    // TODO: A more robust way to locate the executable.\n    guard let url = Bundle.main.executableURL?\n        .deletingLastPathComponent()\n        .deletingLastPathComponent()\n        .appendingPathComponent(\"Applications\")\n        .appendingPathComponent(\"Helper\")\n    else { throw E(errorDescription: \"Unable to locate Helper.\") }\n    return try await process(url.path, args)\n}\n\nprivate func launchctl(_ args: String...) async throws {\n    return try await process(\"/bin/launchctl\", args)\n}\n\nprivate struct E: Error, LocalizedError {\n    var errorDescription: String?\n}\n\n"
  },
  {
    "path": "Core/Sources/LegacyChatPlugin/AskChatGPT.swift",
    "content": "import Foundation\nimport OpenAIService\n\n/// Quickly ask a question to ChatGPT.\npublic func askChatGPT(\n    systemPrompt: String,\n    question: String,\n    temperature: Double? = nil\n) async throws -> String? {\n    let configuration = UserPreferenceChatGPTConfiguration()\n        .overriding(.init(temperature: temperature))\n    let memory = AutoManagedChatGPTMemory(\n        systemPrompt: systemPrompt,\n        configuration: configuration,\n        functionProvider: NoChatGPTFunctionProvider(), \n        maxNumberOfMessages: .max\n    )\n    let service = LegacyChatGPTService(\n        memory: memory,\n        configuration: configuration\n    )\n    return try await service.sendAndWait(content: question)\n}\n\n"
  },
  {
    "path": "Core/Sources/LegacyChatPlugin/CallAIFunction.swift",
    "content": "import Foundation\nimport OpenAIService\n\n/// This is a magic function that can do anything with no-code. See\n/// https://github.com/Torantulino/AI-Functions for more info.\nfunc callAIFunction(\n    function: String,\n    args: [Any?],\n    description: String\n) async throws -> String? {\n    let args = args.map { arg -> String in\n        if let arg = arg {\n            return String(describing: arg)\n        } else {\n            return \"None\"\n        }\n    }\n    let argsString = args.joined(separator: \", \")\n    let configuration = UserPreferenceChatGPTConfiguration()\n        .overriding(.init(temperature: 0))\n    let service = LegacyChatGPTService(\n        memory: AutoManagedChatGPTMemory(\n            systemPrompt: \"You are now the following python function: ```# \\(description)\\n\\(function)```\\n\\nOnly respond with your `return` value.\",\n            configuration: configuration,\n            functionProvider: NoChatGPTFunctionProvider(),\n            maxNumberOfMessages: .max\n        ),\n        configuration: configuration\n    )\n    return try await service.sendAndWait(content: argsString)\n}\n\n"
  },
  {
    "path": "Core/Sources/LegacyChatPlugin/LegacyChatPlugin.swift",
    "content": "import Foundation\nimport OpenAIService\n\npublic protocol LegacyChatPlugin: AnyObject {\n    /// Should be [a-zA-Z0-9]+\n    static var command: String { get }\n    var name: String { get }\n\n    init(inside chatGPTService: any LegacyChatGPTServiceType, delegate: LegacyChatPluginDelegate)\n    func send(content: String, originalMessage: String) async\n    func cancel() async\n    func stopResponding() async\n}\n\npublic protocol LegacyChatPluginDelegate: AnyObject {\n    func pluginDidStart(_ plugin: LegacyChatPlugin)\n    func pluginDidEnd(_ plugin: LegacyChatPlugin)\n    func pluginDidStartResponding(_ plugin: LegacyChatPlugin)\n    func pluginDidEndResponding(_ plugin: LegacyChatPlugin)\n    func shouldStartAnotherPlugin(_ type: LegacyChatPlugin.Type, withContent: String)\n}\n"
  },
  {
    "path": "Core/Sources/LegacyChatPlugin/TerminalChatPlugin.swift",
    "content": "import Foundation\nimport OpenAIService\nimport Terminal\nimport XcodeInspector\n\npublic actor TerminalChatPlugin: LegacyChatPlugin {\n    public static var command: String { \"run\" }\n    public nonisolated var name: String { \"Terminal\" }\n\n    let chatGPTService: any LegacyChatGPTServiceType\n    var terminal: TerminalType = Terminal()\n    var isCancelled = false\n    weak var delegate: LegacyChatPluginDelegate?\n\n    public init(inside chatGPTService: any LegacyChatGPTServiceType, delegate: LegacyChatPluginDelegate) {\n        self.chatGPTService = chatGPTService\n        self.delegate = delegate\n    }\n\n    public func send(content: String, originalMessage: String) async {\n        delegate?.pluginDidStart(self)\n        delegate?.pluginDidStartResponding(self)\n\n        let id = \"\\(Self.command)-\\(UUID().uuidString)\"\n        var message = ChatMessage(id: id, role: .assistant, content: \"\")\n        var outputContent = \"\" {\n            didSet {\n                message.content = \"\"\"\n                ```\n                \\(outputContent)\n                ```\n                \"\"\"\n            }\n        }\n\n        do {\n            let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n            let projectURL = XcodeInspector.shared.realtimeActiveProjectURL\n            \n            var environment = [String: String]()\n            if let fileURL {\n                environment[\"FILE_PATH\"] = fileURL.path\n            }\n            if let projectURL {\n                environment[\"PROJECT_ROOT\"] = projectURL.path\n            }\n\n            await chatGPTService.memory.mutateHistory { history in\n                history.append(\n                    .init(\n                        role: .user,\n                        content: originalMessage\n                    )\n                )\n            }\n\n            if isCancelled { throw CancellationError() }\n\n            let env = ProcessInfo.processInfo.environment\n            let shell = env[\"SHELL\"] ?? \"/bin/bash\"\n\n            let output = terminal.streamCommand(\n                shell,\n                arguments: [\"-i\", \"-l\", \"-c\", content],\n                currentDirectoryURL: projectURL,\n                environment: environment\n            )\n\n            for try await content in output {\n                if isCancelled { throw CancellationError() }\n                await chatGPTService.memory.mutateHistory { history in\n                    if history.last?.id == id {\n                        history.removeLast()\n                    }\n                    outputContent += content\n                    history.append(message)\n                }\n            }\n            outputContent += \"\\n[finished]\"\n            await chatGPTService.memory.mutateHistory { history in\n                if history.last?.id == id {\n                    history.removeLast()\n                }\n                history.append(message)\n            }\n        } catch let error as Terminal.TerminationError {\n            outputContent += \"\\n[error: \\(error.status)]\"\n            await chatGPTService.memory.mutateHistory { history in\n                if history.last?.id == id {\n                    history.removeLast()\n                }\n                history.append(message)\n            }\n        } catch {\n            outputContent += \"\\n[error: \\(error.localizedDescription)]\"\n            await chatGPTService.memory.mutateHistory { history in\n                if history.last?.id == id {\n                    history.removeLast()\n                }\n                history.append(message)\n            }\n        }\n\n        delegate?.pluginDidEndResponding(self)\n        delegate?.pluginDidEnd(self)\n    }\n\n    public func cancel() async {\n        isCancelled = true\n        await terminal.terminate()\n    }\n\n    public func stopResponding() async {\n        isCancelled = true\n        await terminal.terminate()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/LegacyChatPlugin/Translate.swift",
    "content": "import Foundation\nimport Preferences\n\n@MainActor\nvar translationCache = [String: String]()\n\npublic func translate(text: String, cache: Bool = true) async -> String {\n    let language = UserDefaults.shared.value(for: \\.chatGPTLanguage)\n    if language.isEmpty { return text }\n\n    let key = \"\\(language)-\\(text)\"\n    if cache, let cached = await translationCache[key] {\n        return cached\n    }\n\n    if let translated = try? await askChatGPT(\n        systemPrompt: \"\"\"\n        You are a translator. Your job is to translate the message into \\(language). The reply should only contain the translated content.\n        User: ###${{some text}}###\n        Assistant: ${{translated text}}\n        \"\"\",\n        question: \"###\\(text)###\"\n    ) {\n        if cache {\n            let storeTask = Task { @MainActor in\n                translationCache[key] = translated\n            }\n            _ = await storeTask.result\n        }\n        return translated\n    }\n    return text\n}\n\n"
  },
  {
    "path": "Core/Sources/PlusFeatureFlag/PlusFeatureFlag.swift",
    "content": "import Foundation\nimport SwiftUI\n\n#if canImport(LicenseManagement)\n\nimport LicenseManagement\n\n#else\n\npublic typealias PlusFeatureFlag = Int\n\n@dynamicMemberLookup\npublic struct PlusFeatureFlags {\n    public subscript(dynamicMember dynamicMember: String) -> PlusFeatureFlag { return 0 }\n    init() {}\n}\n\n#endif\n\npublic func withFeatureEnabled(\n    _ flag: KeyPath<PlusFeatureFlags, PlusFeatureFlag>,\n    then: () throws -> Void\n) rethrows {\n    #if canImport(LicenseManagement)\n    try LicenseManagement.withFeatureEnabled(flag, then: then)\n    #endif\n}\n\npublic func withFeatureEnabled(\n    _ flag: KeyPath<PlusFeatureFlags, PlusFeatureFlag>,\n    then: () async throws -> Void\n) async rethrows {\n    #if canImport(LicenseManagement)\n    try await LicenseManagement.withFeatureEnabled(flag, then: then)\n    #endif\n}\n\npublic func isFeatureAvailable(_ flag: KeyPath<PlusFeatureFlags, PlusFeatureFlag>) -> Bool {\n    #if canImport(LicenseManagement)\n    return LicenseManagement.isFeatureAvailable(flag)\n    #else\n    return false\n    #endif\n}\n\n"
  },
  {
    "path": "Core/Sources/PromptToCodeService/OpenAIPromptToCodeService.swift",
    "content": "import Foundation\nimport ModificationBasic\nimport OpenAIService\nimport Preferences\nimport SuggestionBasic\nimport XcodeInspector\n\npublic final class SimpleModificationAgent: ModificationAgent {\n    public func send(_ request: Request) -> AsyncThrowingStream<Response, any Error> {\n        AsyncThrowingStream { continuation in\n            let task = Task {\n                do {\n                    let stream = try await modifyCode(\n                        code: request.code,\n                        requirement: request.requirement,\n                        source: .init(\n                            language: request.source.language,\n                            documentURL: request.source.documentURL,\n                            projectRootURL: request.source.projectRootURL,\n                            content: request.source.content,\n                            lines: request.source.lines,\n                            range: request.range\n                        ),\n                        isDetached: request.isDetached,\n                        extraSystemPrompt: request.extraSystemPrompt,\n                        generateDescriptionRequirement: false\n                    )\n\n                    for try await response in stream {\n                        continuation.yield(response)\n                    }\n\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    public init() {}\n\n    func modifyCode(\n        code: String,\n        requirement: String,\n        source: PromptToCodeSource,\n        isDetached: Bool,\n        extraSystemPrompt: String?,\n        generateDescriptionRequirement: Bool?\n    ) async throws -> AsyncThrowingStream<Response, Error> {\n        let userPreferredLanguage = UserDefaults.shared.value(for: \\.chatGPTLanguage)\n        let textLanguage = {\n            if !UserDefaults.shared\n                .value(for: \\.promptToCodeGenerateDescriptionInUserPreferredLanguage)\n            {\n                return \"\"\n            }\n            return userPreferredLanguage.isEmpty ? \"\" : \" in \\(userPreferredLanguage)\"\n        }()\n\n        let editor: EditorInformation = await XcodeInspector.shared.getFocusedEditorContent()\n            ?? .init(\n                editorContent: .init(\n                    content: source.content,\n                    lines: source.lines,\n                    selections: [source.range],\n                    cursorPosition: .outOfScope,\n                    cursorOffset: -1,\n                    lineAnnotations: []\n                ),\n                selectedContent: code,\n                selectedLines: [],\n                documentURL: source.documentURL,\n                workspaceURL: source.projectRootURL,\n                projectRootURL: source.projectRootURL,\n                relativePath: \"\",\n                language: source.language\n            )\n\n        let rule: String = {\n            func generateDescription(index: Int) -> String {\n                let generateDescription = generateDescriptionRequirement ?? UserDefaults.shared\n                    .value(for: \\.promptToCodeGenerateDescription)\n                return generateDescription\n                    ? \"\"\"\n                    \\(index). After the code block, write a clear and concise description \\\n                    in 1-3 sentences about what you did in step 1\\(textLanguage).\n                    \\(index + 1). Reply with the result.\n                    \"\"\"\n                    : \"\\(index). Reply with the result.\"\n            }\n            switch editor.language {\n            case .builtIn(.markdown), .plaintext:\n                if code.isEmpty {\n                    return \"\"\"\n                    1. Write the content that meets my requirements.\n                    2. Embed the new content in a markdown code block.\n                    \\(generateDescription(index: 3))\n                    \"\"\"\n                } else {\n                    return \"\"\"\n                    1. Do what I required.\n                    2. Format the updated content to use the original indentation. Especially the first line.\n                    3. Embed the updated content in a markdown code block.\n                    4. You MUST never translate the content in the code block if it's not requested in the requirements.\n                    \\(generateDescription(index: 5))\n                    \"\"\"\n                }\n            default:\n                if code.isEmpty {\n                    return \"\"\"\n                    1. Write the code that meets my requirements.\n                    2. Embed the code in a markdown code block.\n                    \\(generateDescription(index: 3))\n                    \"\"\"\n                } else {\n                    return \"\"\"\n                    1. Do what I required.\n                    2. Format the updated code to use the original indentation. Especially the first line.\n                    3. Embed the updated code in a markdown code block.\n                    \\(generateDescription(index: 4))\n                    \"\"\"\n                }\n            }\n        }()\n\n        let systemPrompt = {\n            switch editor.language {\n            case .builtIn(.markdown), .plaintext:\n                if code.isEmpty {\n                    return \"\"\"\n                    You are good at writing in \\(editor.language.rawValue).\n                    The active file is: \\(editor.documentURL.lastPathComponent).\n                    \\(extraSystemPrompt ?? \"\")\n\n                    \\(rule)\n                    \"\"\"\n                } else {\n                    return \"\"\"\n                    You are good at writing in \\(editor.language.rawValue).\n                    The active file is: \\(editor.documentURL.lastPathComponent).\n                    \\(extraSystemPrompt ?? \"\")\n\n                    \\(rule)\n                    \"\"\"\n                }\n            default:\n                if code.isEmpty {\n                    return \"\"\"\n                    You are a senior programer in writing in \\(editor.language.rawValue).\n                    The active file is: \\(editor.documentURL.lastPathComponent).\n                    \\(extraSystemPrompt ?? \"\")\n\n                    \\(rule)\n                    \"\"\"\n                } else {\n                    return \"\"\"\n                    You are a senior programer in writing in \\(editor.language.rawValue).\n                    The active file is: \\(editor.documentURL.lastPathComponent).\n                    \\(extraSystemPrompt ?? \"\")\n\n                    \\(rule)\n                    \"\"\"\n                }\n            }\n        }()\n\n        let annotations = isDetached\n            ? \"\"\n            : extractAnnotations(editorInformation: editor, source: source)\n\n        let firstMessage: String? = {\n            if code.isEmpty { return nil }\n            switch editor.language {\n            case .builtIn(.markdown), .plaintext:\n                return \"\"\"\n                ```\n                \\(code)\n                ```\n\n                \\(annotations)\n                \"\"\"\n            default:\n                return \"\"\"\n                ```\n                \\(code)\n                ```\n\n                \\(annotations)\n                \"\"\"\n            }\n        }()\n\n        let indentation = getCommonLeadingSpaceCount(code)\n\n        let secondMessage = \"\"\"\n        I will update the code you just provided.\n        Every line has an indentation of \\(indentation) spaces, I will keep that.\n\n        What is your requirement?\n        \"\"\"\n\n        let configuration =\n            UserPreferenceChatGPTConfiguration(chatModelKey: \\.promptToCodeChatModelId)\n                .overriding(.init(temperature: 0))\n\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: systemPrompt,\n            configuration: configuration,\n            functionProvider: NoChatGPTFunctionProvider(),\n            maxNumberOfMessages: .max\n        )\n        let chatGPTService = ChatGPTService(\n            configuration: configuration,\n            functionProvider: NoChatGPTFunctionProvider()\n        )\n\n        if let firstMessage {\n            await memory.mutateHistory { history in\n                history.append(.init(role: .user, content: firstMessage))\n                history.append(.init(role: .assistant, content: secondMessage))\n                history.append(.init(role: .user, content: requirement))\n            }\n        }\n        let stream = chatGPTService.send(memory)\n\n        return .init { continuation in\n            let task = Task {\n                let parser = ExplanationThenCodeStreamParser()\n                do {\n                    func yield(fragments: [ExplanationThenCodeStreamParser.Fragment]) {\n                        for fragment in fragments {\n                            switch fragment {\n                            case let .code(code):\n                                continuation.yield(.code(code))\n                            case let .explanation(explanation):\n                                continuation.yield(.explanation(explanation))\n                            }\n                        }\n                    }\n\n                    for try await response in stream {\n                        guard case let .partialText(fragment) = response else { continue }\n                        try Task.checkCancellation()\n                        await yield(fragments: parser.yield(fragment))\n                    }\n                    await yield(fragments: parser.finish())\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n}\n\n// MAKR: - Internal\n\nextension SimpleModificationAgent {\n    func extractCodeAndDescription(from content: String)\n        -> (code: String, description: String)\n    {\n        func extractCodeFromMarkdown(\n            _ markdown: String\n        ) -> (code: String, endIndex: String.Index)? {\n            let codeBlockRegex = try! NSRegularExpression(\n                pattern: #\"```(?:\\w+)?\\R([\\s\\S]+?)\\R```\"#,\n                options: .dotMatchesLineSeparators\n            )\n            let range = NSRange(markdown.startIndex..<markdown.endIndex, in: markdown)\n            if let match = codeBlockRegex.firstMatch(in: markdown, options: [], range: range) {\n                guard let codeBlockRange = Range(match.range(at: 1), in: markdown),\n                      let endIndex = Range(match.range(at: 0), in: markdown)?.upperBound\n                else { return nil }\n                return (String(markdown[codeBlockRange]), endIndex)\n            }\n\n            let incompleteCodeBlockRegex = try! NSRegularExpression(\n                pattern: #\"```(?:\\w+)?\\R([\\s\\S]+?)$\"#,\n                options: .dotMatchesLineSeparators\n            )\n            let range2 = NSRange(markdown.startIndex..<markdown.endIndex, in: markdown)\n            if let match = incompleteCodeBlockRegex.firstMatch(\n                in: markdown,\n                options: [],\n                range: range2\n            ) {\n                guard let codeBlockRange = Range(match.range(at: 1), in: markdown),\n                      let endIndex = Range(match.range(at: 0), in: markdown)?.upperBound\n                else { return nil }\n                return (String(markdown[codeBlockRange]), endIndex)\n            }\n            return nil\n        }\n\n        guard let (code, endIndex) = extractCodeFromMarkdown(content) else {\n            return (\"\", \"\")\n        }\n\n        func extractDescriptionFromMarkdown(\n            _ markdown: String,\n            startIndex: String.Index\n        ) -> String {\n            guard startIndex < markdown.endIndex else { return \"\" }\n            let range = startIndex..<markdown.endIndex\n            let description = String(markdown[range])\n                .trimmingCharacters(in: .whitespacesAndNewlines)\n            return description\n        }\n\n        let description = extractDescriptionFromMarkdown(content, startIndex: endIndex)\n\n        return (code, description)\n    }\n\n    func getCommonLeadingSpaceCount(_ code: String) -> Int {\n        let lines = code.split(whereSeparator: \\.isNewline)\n        guard !lines.isEmpty else { return 0 }\n        var commonCount = Int.max\n        for line in lines {\n            let count = line.prefix(while: { $0 == \" \" }).count\n            commonCount = min(commonCount, count)\n            if commonCount == 0 { break }\n        }\n        return commonCount\n    }\n\n    func extractAnnotations(\n        editorInformation: EditorInformation,\n        source: PromptToCodeSource\n    ) -> String {\n        guard let annotations = editorInformation.editorContent?.lineAnnotations\n        else { return \"\" }\n        let all = annotations\n            .lazy\n            .filter { annotation in\n                annotation.line >= source.range.start.line + 1\n                    && annotation.line <= source.range.end.line + 1\n            }.map { annotation in\n                let relativeLine = annotation.line - source.range.start.line\n                return \"line \\(relativeLine): \\(annotation.type) \\(annotation.message)\"\n            }\n        guard !all.isEmpty else { return \"\" }\n        return \"\"\"\n        line annotations found:\n        \\(annotations.map { \"- \\($0)\" }.joined(separator: \"\\n\"))\n        \"\"\"\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/PromptToCodeService/PreviewPromptToCodeService.swift",
    "content": "import Foundation\nimport ModificationBasic\nimport SuggestionBasic\n\npublic final class PreviewModificationAgent: ModificationAgent {\n    public func send(_ request: Request) -> AsyncThrowingStream<Response, any Error> {\n        AsyncThrowingStream { continuation in\n            let task = Task {\n                do {\n                    let stream = try await modifyCode(\n                        code: request.code,\n                        requirement: request.requirement,\n                        source: .init(\n                            language: request.source.language,\n                            documentURL: request.source.documentURL,\n                            projectRootURL: request.source.projectRootURL,\n                            content: request.source.content,\n                            lines: request.source.lines,\n                            range: request.range\n                        ),\n                        isDetached: request.isDetached,\n                        extraSystemPrompt: request.extraSystemPrompt,\n                        generateDescriptionRequirement: false\n                    )\n\n                    for try await (code, description) in stream {\n                        continuation.yield(.code(code))\n                    }\n\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    public init() {}\n\n    func modifyCode(\n        code: String,\n        requirement: String,\n        source: PromptToCodeSource,\n        isDetached: Bool,\n        extraSystemPrompt: String?,\n        generateDescriptionRequirement: Bool?\n    ) async throws -> AsyncThrowingStream<(code: String, description: String), Error> {\n        return AsyncThrowingStream { continuation in\n            Task {\n                let code = \"\"\"\n                struct Cat {\n                    var name: String\n                }\n\n                print(\"Hello world!\")\n                \"\"\"\n                let description = \"I have created a struct `Cat`.\"\n                var resultCode = \"\"\n                var resultDescription = \"\"\n                do {\n                    for character in code {\n                        try await Task.sleep(nanoseconds: 50_000_000)\n                        resultCode.append(character)\n                        continuation.yield((resultCode, resultDescription))\n                    }\n                    for character in description {\n                        try await Task.sleep(nanoseconds: 50_000_000)\n                        resultDescription.append(character)\n                        continuation.yield((resultCode, resultDescription))\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n    }\n\n    public func stopResponding() {}\n}\n\n"
  },
  {
    "path": "Core/Sources/PromptToCodeService/PromptToCodeServiceType.swift",
    "content": "import Dependencies\nimport Foundation\nimport SuggestionBasic\n\npublic struct PromptToCodeSource {\n    public var language: CodeLanguage\n    public var documentURL: URL\n    public var projectRootURL: URL\n    public var content: String\n    public var lines: [String]\n    public var range: CursorRange\n\n    public init(\n        language: CodeLanguage,\n        documentURL: URL,\n        projectRootURL: URL,\n        content: String,\n        lines: [String],\n        range: CursorRange\n    ) {\n        self.language = language\n        self.documentURL = documentURL\n        self.projectRootURL = projectRootURL\n        self.content = content\n        self.lines = lines\n        self.range = range\n    }\n}\n"
  },
  {
    "path": "Core/Sources/Service/DependencyUpdater.swift",
    "content": "import CodeiumService\nimport Foundation\nimport GitHubCopilotService\nimport Logger\n\nstruct DependencyUpdater {\n    init() {}\n\n    func update() {\n        Task {\n            await withTaskGroup(of: Void.self) { taskGroup in\n                let gitHubCopilot = GitHubCopilotInstallationManager()\n                switch gitHubCopilot.checkInstallation() {\n                case .notInstalled: break\n                case .installed: break\n                case .unsupported: break\n                case .outdated:\n                    taskGroup.addTask {\n                        do {\n                            for try await step in gitHubCopilot.installLatestVersion() {\n                                let state = {\n                                    switch step {\n                                    case .downloading:\n                                        return \"Downloading\"\n                                    case .uninstalling:\n                                        return \"Uninstalling old version\"\n                                    case .decompressing:\n                                        return \"Decompressing\"\n                                    case .done:\n                                        return \"Done\"\n                                    }\n                                }()\n                                Logger.service\n                                    .error(\"Update GitHub Copilot language server: \\(state)\")\n                            }\n                        } catch {\n                            Logger.service.error(\n                                \"Update GitHub Copilot language server: \\(error.localizedDescription)\"\n                            )\n                        }\n                    }\n                }\n\n                let codeium = CodeiumInstallationManager()\n\n                switch await codeium.checkInstallation() {\n                case .notInstalled: break\n                case .installed: break\n                case .unsupported: break\n                case .outdated:\n                    taskGroup.addTask {\n                        do {\n                            for try await step in codeium.installLatestVersion() {\n                                let state = {\n                                    switch step {\n                                    case .downloading:\n                                        return \"Downloading\"\n                                    case .uninstalling:\n                                        return \"Uninstalling old version\"\n                                    case .decompressing:\n                                        return \"Decompressing\"\n                                    case .done:\n                                        return \"Done\"\n                                    }\n                                }()\n                                Logger.service.error(\"Update Codeium language server: \\(state)\")\n                            }\n                        } catch {\n                            Logger.service.error(\n                                \"Update Codeium language server: \\(error.localizedDescription)\"\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/GUI/ChatTabFactory.swift",
    "content": "import BuiltinExtension\nimport ChatGPTChatTab\nimport ChatService\nimport ChatTab\nimport Foundation\nimport PromptToCodeService\nimport SuggestionBasic\nimport SuggestionWidget\nimport XcodeInspector\n\nenum ChatTabFactory {\n    static func chatTabBuilderCollection() -> [ChatTabBuilderCollection] {\n        let chatGPTChatTab = folderIfNeeded(\n            ChatGPTChatTab.chatBuilders(),\n            title: ChatGPTChatTab.name\n        )\n        \n        let (defaultChatTab, othersChatTabs) = chatTabsFromExtensions()\n        \n        if let defaultChatTab {\n            return [defaultChatTab] + othersChatTabs + [chatGPTChatTab].compactMap(\\.self)\n        } else {\n            return [chatGPTChatTab].compactMap(\\.self) + othersChatTabs\n        }\n    }\n\n    private static func folderIfNeeded(\n        _ builders: [any ChatTabBuilder],\n        title: String\n    ) -> ChatTabBuilderCollection? {\n        if builders.count > 1 {\n            return .folder(title: title, kinds: builders.map(ChatTabKind.init))\n        }\n        if let first = builders.first { return .kind(ChatTabKind(first)) }\n        return nil\n    }\n\n    static func chatTabsFromExtensions()\n        -> (default: ChatTabBuilderCollection?, others: [ChatTabBuilderCollection])\n    {\n        let extensions = BuiltinExtensionManager.shared.extensions\n        let chatTabTypes = extensions.flatMap(\\.chatTabTypes)\n        var defaultChatTab: ChatTabBuilderCollection?\n        var otherChatTabs = [ChatTabBuilderCollection]()\n        for chatTabType in chatTabTypes {\n            if chatTabType.isDefaultChatTabReplacement {\n                defaultChatTab = folderIfNeeded(chatTabType.chatBuilders(), title: chatTabType.name)\n            } else if let tab = folderIfNeeded(\n                chatTabType.chatBuilders(),\n                title: chatTabType.name\n            ) {\n                otherChatTabs.append(tab)\n            }\n        }\n        return (defaultChatTab, otherChatTabs)\n    }\n}\n"
  },
  {
    "path": "Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift",
    "content": "import ActiveApplicationMonitor\nimport AppActivator\nimport AppKit\nimport BuiltinExtension\nimport ChatGPTChatTab\nimport ChatTab\nimport ComposableArchitecture\nimport Dependencies\nimport Logger\nimport Preferences\nimport SuggestionBasic\nimport SuggestionWidget\n\n#if canImport(ChatTabPersistent)\nimport ChatTabPersistent\n#endif\n\n@Reducer\nstruct GUI {\n    @ObservableState\n    struct State {\n        var suggestionWidgetState = Widget.State()\n\n        var chatTabGroup: SuggestionWidget.ChatPanel.ChatTabGroup {\n            get { suggestionWidgetState.chatPanelState.chatTabGroup }\n            set { suggestionWidgetState.chatPanelState.chatTabGroup = newValue }\n        }\n\n        var promptToCodeGroup: PromptToCodeGroup.State {\n            get { suggestionWidgetState.panelState.content.promptToCodeGroup }\n            set { suggestionWidgetState.panelState.content.promptToCodeGroup = newValue }\n        }\n\n        #if canImport(ChatTabPersistent)\n        var isChatTabRestoreFinished: Bool = false\n        var persistentState: ChatTabPersistent.State {\n            get {\n                .init(\n                    chatTabInfo: chatTabGroup.tabInfo,\n                    isRestoreFinished: isChatTabRestoreFinished,\n                    selectedChatTapId: chatTabGroup.selectedTabId\n                )\n            }\n            set {\n                chatTabGroup.tabInfo = newValue.chatTabInfo\n                isChatTabRestoreFinished = newValue.isRestoreFinished\n                chatTabGroup.selectedTabId = newValue.selectedChatTapId\n            }\n        }\n        #endif\n    }\n\n    enum Action {\n        case start\n        case openChatPanel(forceDetach: Bool, activateThisApp: Bool)\n        case createAndSwitchToChatGPTChatTabIfNeeded\n        case createAndSwitchToChatTabIfNeededMatching(\n            check: (any ChatTab) -> Bool,\n            kind: ChatTabKind?\n        )\n        case sendCustomCommandToActiveChat(CustomCommand)\n        case toggleWidgetsHotkeyPressed\n\n        case suggestionWidget(Widget.Action)\n\n        static func promptToCodeGroup(_ action: PromptToCodeGroup.Action) -> Self {\n            .suggestionWidget(.panel(.sharedPanel(.promptToCodeGroup(action))))\n        }\n\n        #if canImport(ChatTabPersistent)\n        case persistent(ChatTabPersistent.Action)\n        #endif\n    }\n\n    @Dependency(\\.chatTabPool) var chatTabPool\n    @Dependency(\\.activateThisApp) var activateThisApp\n\n    public enum Debounce: Hashable {\n        case updateChatTabOrder\n    }\n\n    var body: some ReducerOf<Self> {\n        CombineReducers {\n            Scope(state: \\.suggestionWidgetState, action: \\.suggestionWidget) {\n                Widget()\n            }\n\n            Scope(\n                state: \\.chatTabGroup,\n                action: \\.suggestionWidget.chatPanel\n            ) {\n                Reduce { _, action in\n                    switch action {\n                    case let .createNewTapButtonClicked(kind):\n                        return .run { send in\n                            if let (_, chatTabInfo) = await chatTabPool.createTab(for: kind) {\n                                await send(.appendAndSelectTab(chatTabInfo))\n                            }\n                        }\n\n                    case let .closeTabButtonClicked(id):\n                        return .run { _ in\n                            chatTabPool.removeTab(of: id)\n                        }\n\n                    case let .chatTab(.element(_, .openNewTab(builder))):\n                        return .run { send in\n                            if let (_, chatTabInfo) = await chatTabPool\n                                .createTab(from: builder.chatTabBuilder)\n                            {\n                                await send(.appendAndSelectTab(chatTabInfo))\n                            }\n                        }\n\n                    default:\n                        return .none\n                    }\n                }\n            }\n\n            #if canImport(ChatTabPersistent)\n            Scope(state: \\.persistentState, action: \\.persistent) {\n                ChatTabPersistent()\n            }\n            #endif\n\n            Reduce { state, action in\n                switch action {\n                case .start:\n                    #if canImport(ChatTabPersistent)\n                    return .run { send in\n                        await send(.persistent(.restoreChatTabs))\n                    }\n                    #else\n                    return .none\n                    #endif\n\n                case let .openChatPanel(forceDetach, activate):\n                    return .run { send in\n                        await send(\n                            .suggestionWidget(\n                                .chatPanel(.presentChatPanel(forceDetach: forceDetach))\n                            )\n                        )\n                        await send(.suggestionWidget(.updateKeyWindow(.chatPanel)))\n\n                        if activate {\n                            activateThisApp()\n                        }\n                    }\n\n                case .createAndSwitchToChatGPTChatTabIfNeeded:\n                    return .run { send in\n                        await send(.createAndSwitchToChatTabIfNeededMatching(\n                            check: { $0 is ChatGPTChatTab },\n                            kind: nil\n                        ))\n                    }\n\n                case let .createAndSwitchToChatTabIfNeededMatching(check, kind):\n                    if let selectedTabInfo = state.chatTabGroup.selectedTabInfo,\n                       let tab = chatTabPool.getTab(of: selectedTabInfo.id),\n                       check(tab)\n                    {\n                        // Already in ChatGPT tab\n                        return .none\n                    }\n\n                    if let firstChatGPTTabInfo = state.chatTabGroup.tabInfo.first(where: {\n                        if let tab = chatTabPool.getTab(of: $0.id) {\n                            return check(tab)\n                        }\n                        return false\n                    }) {\n                        return .run { send in\n                            await send(.suggestionWidget(.chatPanel(.tabClicked(\n                                id: firstChatGPTTabInfo.id\n                            ))))\n                        }\n                    }\n                    return .run { send in\n                        if let (_, chatTabInfo) = await chatTabPool.createTab(for: kind) {\n                            await send(\n                                .suggestionWidget(.chatPanel(.appendAndSelectTab(chatTabInfo)))\n                            )\n                        }\n                    }\n\n                case let .sendCustomCommandToActiveChat(command):\n                    if let info = state.chatTabGroup.selectedTabInfo,\n                       let tab = chatTabPool.getTab(of: info.id),\n                       tab.handleCustomCommand(command)\n                    {\n                        return .run { send in\n                            await send(.openChatPanel(forceDetach: false, activateThisApp: false))\n                        }\n                    }\n\n                    for info in state.chatTabGroup.tabInfo {\n                        if let chatTab = chatTabPool.getTab(of: info.id),\n                           chatTab.handleCustomCommand(command)\n                        {\n                            state.chatTabGroup.selectedTabId = chatTab.id\n                            return .run { send in\n                                await send(.openChatPanel(\n                                    forceDetach: false,\n                                    activateThisApp: false\n                                ))\n                            }\n                        }\n                    }\n\n                    return .run { send in\n                        guard let (chatTab, chatTabInfo) = await chatTabPool.createTab(for: nil)\n                        else { return }\n                        await send(.suggestionWidget(.chatPanel(.appendAndSelectTab(chatTabInfo))))\n                        await send(.openChatPanel(forceDetach: false, activateThisApp: false))\n                        _ = chatTab.handleCustomCommand(command)\n                    }\n\n                case .toggleWidgetsHotkeyPressed:\n                    return .run { send in\n                        await send(.suggestionWidget(.circularWidget(.widgetClicked)))\n                    }\n\n                case let .suggestionWidget(.chatPanel(.chatTab(.element(id, .tabContentUpdated)))):\n                    #if canImport(ChatTabPersistent)\n                    // when a tab is updated, persist it.\n                    return .run { send in\n                        await send(.persistent(.chatTabUpdated(id: id)))\n                    }\n                    #else\n                    return .none\n                    #endif\n\n                case let .suggestionWidget(.chatPanel(.closeTabButtonClicked(id))):\n                    #if canImport(ChatTabPersistent)\n                    // when a tab is closed, remove it from persistence.\n                    return .run { send in\n                        await send(.persistent(.chatTabClosed(id: id)))\n                    }\n                    #else\n                    return .none\n                    #endif\n\n                case .suggestionWidget:\n                    return .none\n\n                #if canImport(ChatTabPersistent)\n                case .persistent:\n                    return .none\n                #endif\n                }\n            }\n        }.onChange(of: \\.chatTabGroup.tabInfo) { old, new in\n            Reduce { _, _ in\n                guard old.map(\\.id) != new.map(\\.id) else {\n                    return .none\n                }\n                #if canImport(ChatTabPersistent)\n                return .run { send in\n                    await send(.persistent(.chatOrderChanged))\n                }.debounce(id: Debounce.updateChatTabOrder, for: 1, scheduler: DispatchQueue.main)\n                #else\n                return .none\n                #endif\n            }\n        }\n    }\n}\n\n@MainActor\npublic final class GraphicalUserInterfaceController {\n    let store: StoreOf<GUI>\n    let widgetController: SuggestionWidgetController\n    let widgetDataSource: WidgetDataSource\n    let chatTabPool: ChatTabPool\n\n    class WeakStoreHolder {\n        weak var store: StoreOf<GUI>?\n    }\n\n    init() {\n        let chatTabPool = ChatTabPool()\n        let suggestionDependency = SuggestionWidgetControllerDependency()\n        let setupDependency: (inout DependencyValues) -> Void = { dependencies in\n            dependencies.suggestionWidgetControllerDependency = suggestionDependency\n            dependencies.suggestionWidgetUserDefaultsObservers = .init()\n            dependencies.chatTabPool = chatTabPool\n            dependencies.chatTabBuilderCollection = ChatTabFactory.chatTabBuilderCollection\n\n            #if canImport(ChatTabPersistent) && canImport(ProChatTabs)\n            dependencies.restoreChatTabInPool = {\n                await chatTabPool.restore($0)\n            }\n            #endif\n        }\n        let store = StoreOf<GUI>(\n            initialState: .init(),\n            reducer: { GUI() },\n            withDependencies: setupDependency\n        )\n        self.store = store\n        self.chatTabPool = chatTabPool\n        widgetDataSource = .init()\n\n        widgetController = SuggestionWidgetController(\n            store: store.scope(\n                state: \\.suggestionWidgetState,\n                action: \\.suggestionWidget\n            ),\n            chatTabPool: chatTabPool,\n            dependency: suggestionDependency\n        )\n\n        chatTabPool.createStore = { id in\n            store.scope(\n                state: { state in\n                    state.chatTabGroup.tabInfo[id: id] ?? .init(id: id, title: \"\")\n                },\n                action: { childAction in\n                    .suggestionWidget(.chatPanel(.chatTab(.element(\n                        id: id,\n                        action: childAction\n                    ))))\n                }\n            )\n        }\n\n        suggestionDependency.suggestionWidgetDataSource = widgetDataSource\n        suggestionDependency.onOpenChatClicked = {\n            Task {\n                PseudoCommandHandler().openChat(forceDetach: false, activateThisApp: true)\n            }\n        }\n        suggestionDependency.onOpenModificationButtonClicked = {\n            Task {\n                guard let content = await PseudoCommandHandler().getEditorContent(sourceEditor: nil)\n                else { return }\n                _ = try await WindowBaseCommandHandler().promptToCode(editor: content)\n            }\n        }\n        suggestionDependency.onCustomCommandClicked = { command in\n            Task {\n                let commandHandler = PseudoCommandHandler()\n                await commandHandler.handleCustomCommand(command)\n            }\n        }\n    }\n\n    func start() {\n        store.send(.start)\n    }\n\n    public func openGlobalChat() {\n        PseudoCommandHandler().openChat(forceDetach: true)\n    }\n}\n\nextension ChatTabPool {\n    @MainActor\n    func createTab(\n        id: String = UUID().uuidString,\n        from builder: ChatTabBuilder\n    ) async -> (any ChatTab, ChatTabInfo)? {\n        let id = id\n        let info = ChatTabInfo(id: id, title: \"\")\n        guard let chatTap = await builder.build(store: createStore(id)) else { return nil }\n        setTab(chatTap, forId: id)\n        return (chatTap, info)\n    }\n\n    @MainActor\n    func createTab(\n        for kind: ChatTabKind?\n    ) async -> (any ChatTab, ChatTabInfo)? {\n        let id = UUID().uuidString\n        let info = ChatTabInfo(id: id, title: \"\")\n        let builder = kind?.builder ?? {\n            for ext in BuiltinExtensionManager.shared.extensions {\n                guard let tab = ext.chatTabTypes.first(where: { $0.isDefaultChatTabReplacement })\n                else { continue }\n                return tab.defaultChatBuilder()\n            }\n            return ChatGPTChatTab.defaultBuilder()\n        }()\n        guard let chatTap = await builder.build(store: createStore(id)) else { return nil }\n        setTab(chatTap, forId: id)\n        return (chatTap, info)\n    }\n\n    #if canImport(ChatTabPersistent)\n    @MainActor\n    func restore(\n        _ data: ChatTabPersistent.RestorableTabData\n    ) async -> (any ChatTab, ChatTabInfo)? {\n        switch data.name {\n        case ChatGPTChatTab.name:\n            guard let builder = try? await ChatGPTChatTab.restore(from: data.data)\n            else { fallthrough }\n            return await createTab(id: data.id, from: builder)\n        default:\n            let chatTabTypes = BuiltinExtensionManager.shared.extensions.flatMap(\\.chatTabTypes)\n            for type in chatTabTypes {\n                if type.name == data.name {\n                    do {\n                        let builder = try await type.restore(from: data.data)\n                        return await createTab(id: data.id, from: builder)\n                    } catch {\n                        Logger.service.error(\"Failed to restore chat tab \\(data.name): \\(error)\")\n                        break\n                    }\n                }\n            }\n        }\n\n        guard let builder = try? await EmptyChatTab.restore(from: data.data) else { return nil }\n        return await createTab(id: data.id, from: builder)\n    }\n    #endif\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/GUI/WidgetDataSource.swift",
    "content": "import ActiveApplicationMonitor\nimport AppActivator\nimport AppKit\nimport ChatService\nimport ComposableArchitecture\nimport Foundation\nimport GitHubCopilotService\nimport OpenAIService\nimport PromptToCodeService\nimport SuggestionBasic\nimport SuggestionWidget\n\n@MainActor\nfinal class WidgetDataSource {}\n\nextension WidgetDataSource: SuggestionWidgetDataSource {\n    func suggestionForFile(at url: URL) async -> PresentingCodeSuggestion? {\n        for workspace in Service.shared.workspacePool.workspaces.values {\n            if let filespace = workspace.filespaces[url],\n               let suggestion = filespace.presentingSuggestion\n            {\n                return .init(\n                    code: suggestion.text,\n                    language: filespace.language.rawValue,\n                    startLineIndex: suggestion.position.line,\n                    suggestionCount: filespace.suggestions.count,\n                    currentSuggestionIndex: filespace.suggestionIndex,\n                    replacingRange: suggestion.range,\n                    replacingLines: suggestion.replacingLines,\n                    descriptions: suggestion.descriptions\n                )\n            }\n        }\n        return nil\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/GlobalShortcutManager.swift",
    "content": "import AppKit\nimport Combine\nimport Foundation\nimport KeyboardShortcuts\nimport XcodeInspector\n\nextension KeyboardShortcuts.Name {\n    static let showHideWidget = Self(\"ShowHideWidget\")\n}\n\n@MainActor\nfinal class GlobalShortcutManager {\n    let guiController: GraphicalUserInterfaceController\n    private var activeAppChangeTask: Task<Void, Error>?\n\n    nonisolated init(guiController: GraphicalUserInterfaceController) {\n        self.guiController = guiController\n    }\n\n    func start() {\n        KeyboardShortcuts.userDefaults = .shared\n        setupShortcutIfNeeded()\n\n        KeyboardShortcuts.onKeyUp(for: .showHideWidget) { [guiController] in\n            let isXCodeActive = XcodeInspector.shared.activeXcode != nil\n\n            if !isXCodeActive,\n               !guiController.store.state.suggestionWidgetState.chatPanelState.isPanelDisplayed,\n               UserDefaults.shared.value(for: \\.showHideWidgetShortcutGlobally)\n            {\n                guiController.store.send(.openChatPanel(forceDetach: true, activateThisApp: true))\n            } else {\n                guiController.store.send(.toggleWidgetsHotkeyPressed)\n            }\n        }\n\n        activeAppChangeTask?.cancel()\n        activeAppChangeTask = Task.detached { [weak self] in\n            let notifications = NotificationCenter.default\n                .notifications(named: .activeApplicationDidChange)\n            for await _ in notifications {\n                guard let self else { return }\n                try Task.checkCancellation()\n                if !UserDefaults.shared.value(for: \\.showHideWidgetShortcutGlobally) {\n                    let app = await XcodeInspector.shared.activeApplication\n                    let shouldBeEnabled = if let app, app.isXcode || app.isExtensionService {\n                        true\n                    } else {\n                        false\n                    }\n                    if shouldBeEnabled {\n                        await self.setupShortcutIfNeeded()\n                    } else {\n                        await self.removeShortcutIfNeeded()\n                    }\n                } else {\n                    await self.setupShortcutIfNeeded()\n                }\n            }\n        }\n    }\n\n    func setupShortcutIfNeeded() {\n        KeyboardShortcuts.enable(.showHideWidget)\n    }\n\n    func removeShortcutIfNeeded() {\n        KeyboardShortcuts.disable(.showHideWidget)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/Helpers.swift",
    "content": "import Foundation\nimport LanguageServerProtocol\n\nextension NSError {\n    static func from(_ error: Error) -> NSError {\n        if let error = error as? ServerError {\n            var message = \"Unknown\"\n            switch error {\n            case let .handlerUnavailable(handler):\n                message = \"Handler unavailable: \\(handler).\"\n            case let .unhandledMethod(method):\n                message = \"Methond unhandled: \\(method).\"\n            case let .notificationDispatchFailed(error):\n                message = \"Notification dispatch failed: \\(error.localizedDescription).\"\n            case let .requestDispatchFailed(error):\n                message = \"Request dispatch failed: \\(error.localizedDescription).\"\n            case let .clientDataUnavailable(error):\n                message = \"Client data unavailable: \\(error.localizedDescription).\"\n            case .serverUnavailable:\n                message = \"Server unavailable, please make sure you have installed Node.\"\n            case .missingExpectedParameter:\n                message = \"Missing expected parameter.\"\n            case .missingExpectedResult:\n                message = \"Missing expected result.\"\n            case let .unableToDecodeRequest(error):\n                message = \"Unable to decode request: \\(error.localizedDescription).\"\n            case let .unableToSendRequest(error):\n                message = \"Unable to send request: \\(error.localizedDescription).\"\n            case let .unableToSendNotification(error):\n                message = \"Unable to send notification: \\(error.localizedDescription).\"\n            case let .serverError(code, m, _):\n                message = \"Server error: (\\(code)) \\(m).\"\n            case let .invalidRequest(error):\n                message = \"Invalid request: \\(error?.localizedDescription ?? \"Unknown\").\"\n            case .timeout:\n                message = \"Timeout.\"\n            }\n            return NSError(domain: \"com.intii.CopilotForXcode\", code: -1, userInfo: [\n                NSLocalizedDescriptionKey: message,\n            ])\n        }\n        if let error = error as? CancellationError {\n            return NSError(domain: \"com.intii.CopilotForXcode\", code: -100, userInfo: [\n                NSLocalizedDescriptionKey: error.localizedDescription,\n            ])\n        }\n        return NSError(domain: \"com.intii.CopilotForXcode\", code: -1, userInfo: [\n            NSLocalizedDescriptionKey: error.localizedDescription,\n        ])\n    }\n}\n"
  },
  {
    "path": "Core/Sources/Service/RealtimeSuggestionController.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport AsyncAlgorithms\nimport AXExtension\nimport Foundation\nimport Logger\nimport Preferences\nimport QuartzCore\nimport Workspace\nimport XcodeInspector\n\npublic actor RealtimeSuggestionController {\n    private var xcodeChangeObservationTask: Task<Void, Error>?\n    private var inflightPrefetchTask: Task<Void, Error>?\n    private var editorObservationTask: Task<Void, Error>?\n    private var sourceEditor: SourceEditor?\n\n    init() {}\n\n    deinit {\n        inflightPrefetchTask?.cancel()\n        editorObservationTask?.cancel()\n    }\n\n    nonisolated\n    func start() {\n        Task { await observeXcodeChange() }\n    }\n\n    private func observeXcodeChange() {\n        xcodeChangeObservationTask?.cancel()\n\n        xcodeChangeObservationTask = Task { [weak self] in\n            for await _ in NotificationCenter.default\n                .notifications(named: .focusedEditorDidChange)\n            {\n                guard let self else { return }\n                try Task.checkCancellation()\n                guard let editor = await XcodeInspector.shared.focusedEditor else { continue }\n                await self.handleFocusElementChange(editor)\n            }\n        }\n    }\n\n    private func handleFocusElementChange(_ sourceEditor: SourceEditor) {\n        self.sourceEditor = sourceEditor\n\n        let notificationsFromEditor = sourceEditor.axNotifications\n\n        editorObservationTask?.cancel()\n        editorObservationTask = nil\n\n        editorObservationTask = Task { [weak self] in\n            if let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL {\n                await PseudoCommandHandler().invalidateRealtimeSuggestionsIfNeeded(\n                    fileURL: fileURL,\n                    sourceEditor: sourceEditor\n                )\n            }\n\n            let valueChange = await notificationsFromEditor.notifications()\n                .filter { $0.kind == .valueChanged }\n            let selectedTextChanged = await notificationsFromEditor.notifications()\n                .filter { $0.kind == .selectedTextChanged }\n\n            await withTaskGroup(of: Void.self) { [weak self] group in\n                group.addTask { [weak self] in\n                    let handler = { [weak self] in\n                        guard let self else { return }\n                        await cancelInFlightTasks()\n                        await self.triggerPrefetchDebounced()\n                        await self.notifyEditingFileChange(editor: sourceEditor.element)\n                    }\n\n                    if #available(macOS 13.0, *) {\n                        for await _ in valueChange._throttle(for: .milliseconds(200)) {\n                            if Task.isCancelled { return }\n                            await handler()\n                        }\n                    } else {\n                        for await _ in valueChange {\n                            if Task.isCancelled { return }\n                            await handler()\n                        }\n                    }\n                }\n                group.addTask {\n                    let handler = {\n                        guard let fileURL = await XcodeInspector.shared.activeDocumentURL\n                        else { return }\n                        await PseudoCommandHandler().invalidateRealtimeSuggestionsIfNeeded(\n                            fileURL: fileURL,\n                            sourceEditor: sourceEditor\n                        )\n                    }\n\n                    if #available(macOS 13.0, *) {\n                        for await _ in selectedTextChanged._throttle(for: .milliseconds(200)) {\n                            if Task.isCancelled { return }\n                            await handler()\n                        }\n                    } else {\n                        for await _ in selectedTextChanged {\n                            if Task.isCancelled { return }\n                            await handler()\n                        }\n                    }\n                }\n\n                await group.waitForAll()\n            }\n        }\n\n        Task { @WorkspaceActor in // Get cache ready for real-time suggestions.\n            guard UserDefaults.shared.value(for: \\.preCacheOnFileOpen) else { return }\n            guard await XcodeInspector.shared.activeApplication?.isXcode ?? false else { return }\n            guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n            else { return }\n            let (_, filespace) = try await Service.shared.workspacePool\n                .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n\n            if filespace.codeMetadata.uti == nil {\n                Logger.service.info(\"Generate cache for file.\")\n                // avoid the command get called twice\n                filespace.codeMetadata.uti = \"\"\n                do {\n                    try await XcodeInspector.shared.latestActiveXcode?\n                        .triggerCopilotCommand(name: \"Prepare for Real-time Suggestions\")\n                } catch {\n                    if filespace.codeMetadata.uti?.isEmpty ?? true {\n                        filespace.codeMetadata.uti = nil\n                    }\n                }\n            }\n        }\n    }\n\n    func triggerPrefetchDebounced(force: Bool = false) {\n        inflightPrefetchTask = Task(priority: .utility) { @WorkspaceActor in\n            try? await Task.sleep(nanoseconds: UInt64(\n                max(UserDefaults.shared.value(for: \\.realtimeSuggestionDebounce), 0.15)\n                    * 1_000_000_000\n            ))\n\n            if Task.isCancelled { return }\n\n            guard UserDefaults.shared.value(for: \\.realtimeSuggestionToggle)\n            else { return }\n\n            if UserDefaults.shared.value(for: \\.disableSuggestionFeatureGlobally),\n               let fileURL = await XcodeInspector.shared.activeDocumentURL,\n               let (workspace, _) = try? await Service.shared.workspacePool\n               .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n            {\n                let isEnabled = workspace.isSuggestionFeatureEnabled\n                if !isEnabled { return }\n            }\n            if Task.isCancelled { return }\n\n            // So the editor won't be blocked (after information are cached)!\n            await PseudoCommandHandler().generateRealtimeSuggestions(sourceEditor: sourceEditor)\n        }\n    }\n\n    func cancelInFlightTasks(excluding: Task<Void, Never>? = nil) async {\n        inflightPrefetchTask?.cancel()\n        let workspaces = await Service.shared.workspacePool.workspaces\n        // cancel in-flight tasks\n        await withTaskGroup(of: Void.self) { group in\n            for (_, workspace) in workspaces {\n                group.addTask {\n                    await workspace.cancelInFlightRealtimeSuggestionRequests()\n                }\n            }\n        }\n    }\n\n    /// This method will still return true if the completion panel is hidden by esc.\n    /// Looks like the Xcode will keep the panel around until content is changed,\n    /// not sure how to observe that it's hidden.\n    func isCompletionPanelPresenting() -> Bool {\n        guard let activeXcode = ActiveApplicationMonitor.shared.activeXcode else { return false }\n        let application = AXUIElementCreateApplication(activeXcode.processIdentifier)\n        return application.focusedWindow?.child(identifier: \"_XC_COMPLETION_TABLE_\") != nil\n    }\n\n    func notifyEditingFileChange(editor: AXUIElement) async {\n        guard let fileURL = await XcodeInspector.shared.activeDocumentURL,\n              let (workspace, _) = try? await Service.shared.workspacePool\n              .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        else { return }\n        await workspace.didUpdateFilespace(fileURL: fileURL, content: editor.value)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/ScheduledCleaner.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport AXExtension\nimport BuiltinExtension\nimport Foundation\nimport Logger\nimport Workspace\nimport XcodeInspector\n\npublic final class ScheduledCleaner {\n    weak var service: Service?\n\n    init() {}\n\n    func start() {\n        Task { @ServiceActor in\n            while !Task.isCancelled {\n                try await Task.sleep(nanoseconds: 10 * 60 * 1_000_000_000)\n                await cleanUp()\n            }\n        }\n\n        Task { @ServiceActor in\n            for await app in ActiveApplicationMonitor.shared.createInfoStream() {\n                try Task.checkCancellation()\n                if let app, !app.isXcode {\n                    await cleanUp()\n                }\n            }\n        }\n    }\n\n    @ServiceActor\n    func cleanUp() async {\n        guard let service else { return }\n\n        let workspaceInfos = await XcodeInspector.shared.xcodes.reduce(\n            into: [\n                XcodeAppInstanceInspector.WorkspaceIdentifier:\n                    XcodeAppInstanceInspector.WorkspaceInfo\n            ]()\n        ) { result, xcode in\n            let infos = xcode.realtimeWorkspaces\n            for (id, info) in infos {\n                if let existed = result[id] {\n                    result[id] = existed.combined(with: info)\n                } else {\n                    result[id] = info\n                }\n            }\n        }\n        for (url, workspace) in service.workspacePool.workspaces {\n            if workspace.isExpired, workspaceInfos[.url(url)] == nil {\n                Logger.service.info(\"Remove idle workspace\")\n                _ = await Task { @MainActor in\n                    service.guiController.store.send(\n                        .promptToCodeGroup(.discardExpiredPromptToCode(documentURLs: Array(\n                            workspace.filespaces.keys\n                        )))\n                    )\n                }.result\n                await workspace.cleanUp(availableTabs: [])\n                await service.workspacePool.removeWorkspace(url: url)\n            } else {\n                let tabs = (workspaceInfos[.url(url)]?.tabs ?? [])\n                    .union(workspaceInfos[.unknown]?.tabs ?? [])\n                // cleanup chats for unused files\n                let filespaces = workspace.filespaces\n                for (url, _) in filespaces {\n                    if workspace.isFilespaceExpired(\n                        fileURL: url,\n                        availableTabs: tabs\n                    ) {\n                        Logger.service.info(\"Remove idle filespace\")\n                        _ = await Task { @MainActor in\n                            service.guiController.store.send(\n                                .promptToCodeGroup(.discardExpiredPromptToCode(documentURLs: [url]))\n                            )\n                        }.result\n                    }\n                }\n                // cleanup workspace\n                await workspace.cleanUp(availableTabs: tabs)\n            }\n        }\n\n        #if canImport(ProService)\n        await service.proService.cleanUp(workspaceInfos: workspaceInfos)\n        #endif\n    }\n\n    @ServiceActor\n    public func closeAllChildProcesses() async {\n        BuiltinExtensionManager.shared.terminate()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/Service.swift",
    "content": "import BuiltinExtension\nimport CodeiumService\nimport Combine\nimport CommandHandler\nimport Dependencies\nimport Foundation\nimport GitHubCopilotService\nimport KeyBindingManager\nimport Logger\nimport OverlayWindow\nimport SuggestionService\nimport Toast\nimport Workspace\nimport WorkspaceSuggestionService\nimport XcodeInspector\nimport XcodeThemeController\nimport XPCShared\n#if canImport(ProService)\nimport ProService\n#endif\n\n@globalActor public enum ServiceActor {\n    public actor TheActor {}\n    public static let shared = TheActor()\n}\n\n/// The running extension service.\npublic final class Service {\n    @MainActor\n    public static let shared = Service()\n\n    @Dependency(\\.workspacePool) var workspacePool\n    @MainActor\n    public let guiController: GraphicalUserInterfaceController\n    public let commandHandler: CommandHandler\n    public let realtimeSuggestionController: RealtimeSuggestionController\n    public let scheduledCleaner: ScheduledCleaner\n    let globalShortcutManager: GlobalShortcutManager\n    let keyBindingManager: KeyBindingManager\n    let xcodeThemeController: XcodeThemeController = .init()\n    let overlayWindowController: OverlayWindowController\n\n    #if canImport(ProService)\n    let proService: ProService\n    #endif\n\n    @Dependency(\\.toast) var toast\n    var cancellable = Set<AnyCancellable>()\n\n    @MainActor\n    private init() {\n        @Dependency(\\.workspacePool) var workspacePool\n        let commandHandler = PseudoCommandHandler()\n        UniversalCommandHandler.shared.commandHandler = commandHandler\n        self.commandHandler = commandHandler\n\n        realtimeSuggestionController = .init()\n        scheduledCleaner = .init()\n        overlayWindowController = .init()\n\n        #if canImport(ProService)\n        proService = ProService()\n        #endif\n\n        BuiltinExtensionManager.shared.addExtensions([\n            GitHubCopilotExtension(workspacePool: workspacePool),\n            CodeiumExtension(workspacePool: workspacePool),\n        ])\n\n        let guiController = GraphicalUserInterfaceController()\n        self.guiController = guiController\n        globalShortcutManager = .init(guiController: guiController)\n        keyBindingManager = .init()\n\n        workspacePool.registerPlugin {\n            SuggestionServiceWorkspacePlugin(workspace: $0) { SuggestionService.service() }\n        }\n        workspacePool.registerPlugin {\n            GitHubCopilotWorkspacePlugin(workspace: $0)\n        }\n        workspacePool.registerPlugin {\n            CodeiumWorkspacePlugin(workspace: $0)\n        }\n        workspacePool.registerPlugin {\n            BuiltinExtensionWorkspacePlugin(workspace: $0)\n        }\n\n        scheduledCleaner.service = self\n    }\n\n    @MainActor\n    public func start() {\n        scheduledCleaner.start()\n        realtimeSuggestionController.start()\n        guiController.start()\n        xcodeThemeController.start()\n        #if canImport(ProService)\n        proService.start()\n        #endif\n        overlayWindowController.start()\n        DependencyUpdater().update()\n        globalShortcutManager.start()\n        keyBindingManager.start()\n\n        Task.detached { [weak self] in\n            let notifications = NotificationCenter.default\n                .notifications(named: .activeDocumentURLDidChange)\n            var previousURL: URL?\n            for await _ in notifications {\n                guard self != nil else { return }\n                let url = await XcodeInspector.shared.activeDocumentURL\n                if let url, url != previousURL, url != .init(fileURLWithPath: \"/\") {\n                    previousURL = url\n                    @Dependency(\\.workspacePool) var workspacePool\n                    _ = try await workspacePool\n                        .fetchOrCreateWorkspaceAndFilespace(fileURL: url)\n                }\n            }\n        }\n    }\n\n    @MainActor\n    public func prepareForExit() async {\n        Logger.service.info(\"Prepare for exit.\")\n        keyBindingManager.stopForExit()\n        #if canImport(ProService)\n        proService.prepareForExit()\n        #endif\n        await scheduledCleaner.closeAllChildProcesses()\n    }\n}\n\npublic extension Service {\n    func handleXPCServiceRequests(\n        endpoint: String,\n        requestBody: Data,\n        reply: @escaping (Data?, Error?) -> Void\n    ) {\n        do {\n            #if canImport(ProService)\n            try proService.handleXPCServiceRequests(\n                endpoint: endpoint,\n                requestBody: requestBody,\n                reply: reply\n            )\n            #endif\n\n            try ExtensionServiceRequests.GetExtensionOpenChatHandlers.handle(\n                endpoint: endpoint,\n                requestBody: requestBody,\n                reply: reply\n            ) { _ in\n                BuiltinExtensionManager.shared.extensions.reduce(into: []) { result, ext in\n                    let tabs = ext.chatTabTypes\n                    for tab in tabs {\n                        if tab.canHandleOpenChatCommand {\n                            result.append(.init(\n                                bundleIdentifier: ext.extensionIdentifier,\n                                id: tab.name,\n                                tabName: tab.name,\n                                isBuiltIn: true\n                            ))\n                        }\n                    }\n                }\n            }\n\n            try ExtensionServiceRequests.GetSuggestionLineAcceptedCode.handle(\n                endpoint: endpoint,\n                requestBody: requestBody,\n                reply: reply\n            ) { request in\n                let editor = request.editorContent\n                let handler = WindowBaseCommandHandler()\n                let updatedContent = try? await handler\n                    .acceptSuggestionLine(editor: editor)\n                return updatedContent\n            }\n        } catch is XPCRequestHandlerHitError {\n            return\n        } catch {\n            reply(nil, error)\n            return\n        }\n\n        reply(nil, XPCRequestNotHandledError())\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport BuiltinExtension\nimport CodeiumService\nimport CommandHandler\nimport ComposableArchitecture\nimport enum CopilotForXcodeKit.SuggestionServiceError\nimport Dependencies\nimport Logger\nimport ModificationBasic\nimport PlusFeatureFlag\nimport Preferences\nimport PromptToCodeCustomization\nimport SuggestionBasic\nimport SuggestionInjector\nimport Terminal\nimport Toast\nimport Workspace\nimport WorkspaceSuggestionService\nimport XcodeInspector\nimport XPCShared\n\n#if canImport(BrowserChatTab)\nimport BrowserChatTab\n#endif\n\n/// It's used to run some commands without really triggering the menu bar item.\n///\n/// For example, we can use it to generate real-time suggestions without Apple Scripts.\nstruct PseudoCommandHandler: CommandHandler {\n    static var lastTimeCommandFailedToTriggerWithAccessibilityAPI = Date(timeIntervalSince1970: 0)\n    private var toast: ToastController { ToastControllerDependencyKey.liveValue }\n\n    func presentPreviousSuggestion() async {\n        let handler = WindowBaseCommandHandler()\n        _ = try? await handler.presentPreviousSuggestion(editor: .init(\n            content: \"\",\n            lines: [],\n            uti: \"\",\n            cursorPosition: .outOfScope,\n            cursorOffset: -1,\n            selections: [],\n            tabSize: 0,\n            indentSize: 0,\n            usesTabsForIndentation: false\n        ))\n    }\n\n    func presentNextSuggestion() async {\n        let handler = WindowBaseCommandHandler()\n        _ = try? await handler.presentNextSuggestion(editor: .init(\n            content: \"\",\n            lines: [],\n            uti: \"\",\n            cursorPosition: .outOfScope,\n            cursorOffset: -1,\n            selections: [],\n            tabSize: 0,\n            indentSize: 0,\n            usesTabsForIndentation: false\n        ))\n    }\n\n    @WorkspaceActor\n    func generateRealtimeSuggestions(sourceEditor: SourceEditor?) async {\n        guard let filespace = await getFilespace(),\n              let (workspace, _) = try? await Service.shared.workspacePool\n              .fetchOrCreateWorkspaceAndFilespace(fileURL: filespace.fileURL) else { return }\n\n        if Task.isCancelled { return }\n\n        // Can't use handler if content is not available.\n        guard let editor = await getEditorContent(sourceEditor: sourceEditor)\n        else { return }\n\n        let fileURL = filespace.fileURL\n        let presenter = PresentInWindowSuggestionPresenter()\n\n        presenter.markAsProcessing(true)\n        defer { presenter.markAsProcessing(false) }\n\n        if filespace.presentingSuggestion != nil {\n            // Check if the current suggestion is still valid.\n            if filespace.validateSuggestions(\n                lines: editor.lines,\n                cursorPosition: editor.cursorPosition\n            ) {\n                return\n            } else {\n                presenter.discardSuggestion(fileURL: filespace.fileURL)\n            }\n        }\n\n        let snapshot = FilespaceSuggestionSnapshot(\n            lines: editor.lines,\n            cursorPosition: editor.cursorPosition\n        )\n\n        guard filespace.suggestionSourceSnapshot != snapshot else { return }\n\n        do {\n            try await workspace.generateSuggestions(\n                forFileAt: fileURL,\n                editor: editor\n            )\n            if let sourceEditor {\n                let editorContent = sourceEditor.getContent()\n                _ = filespace.validateSuggestions(\n                    lines: editorContent.lines,\n                    cursorPosition: editorContent.cursorPosition\n                )\n            }\n            if filespace.presentingSuggestion != nil {\n                presenter.presentSuggestion(fileURL: fileURL)\n            } else {\n                presenter.discardSuggestion(fileURL: fileURL)\n            }\n        } catch let error as SuggestionServiceError {\n            switch error {\n            case let .notice(error):\n                presenter.presentErrorMessage(error.localizedDescription)\n            case .silent:\n                Logger.service.error(error.localizedDescription)\n                return\n            }\n        } catch {\n            Logger.service.error(error.localizedDescription)\n            return\n        }\n    }\n\n    @WorkspaceActor\n    func invalidateRealtimeSuggestionsIfNeeded(fileURL: URL, sourceEditor: SourceEditor) async {\n        guard let (_, filespace) = try? await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL) else { return }\n\n        if filespace.presentingSuggestion == nil {\n            return // skip if there's no suggestion presented.\n        }\n\n        let content = sourceEditor.getContent()\n        if !filespace.validateSuggestions(\n            lines: content.lines,\n            cursorPosition: content.cursorPosition\n        ) {\n            PresentInWindowSuggestionPresenter().discardSuggestion(fileURL: fileURL)\n        }\n    }\n\n    func rejectSuggestions() async {\n        let handler = WindowBaseCommandHandler()\n        _ = try? await handler.rejectSuggestion(editor: .init(\n            content: \"\",\n            lines: [],\n            uti: \"\",\n            cursorPosition: .outOfScope,\n            cursorOffset: -1,\n            selections: [],\n            tabSize: 0,\n            indentSize: 0,\n            usesTabsForIndentation: false\n        ))\n    }\n\n    func handleCustomCommand(_ command: CustomCommand) async {\n        guard let editor = await {\n            if let it = await getEditorContent(sourceEditor: nil) {\n                return it\n            }\n            switch command.feature {\n            // editor content is not required.\n            case .customChat, .chatWithSelection, .singleRoundDialog:\n                return .init(\n                    content: \"\",\n                    lines: [],\n                    uti: \"\",\n                    cursorPosition: .outOfScope,\n                    cursorOffset: -1,\n                    selections: [],\n                    tabSize: 0,\n                    indentSize: 0,\n                    usesTabsForIndentation: false\n                )\n            // editor content is required.\n            case .promptToCode:\n                return nil\n            }\n        }() else {\n            do {\n                try await XcodeInspector.shared.latestActiveXcode?\n                    .triggerCopilotCommand(name: command.name)\n            } catch {\n                let presenter = PresentInWindowSuggestionPresenter()\n                presenter.presentError(error)\n            }\n            return\n        }\n\n        let handler = WindowBaseCommandHandler()\n        do {\n            try await handler.handleCustomCommand(id: command.id, editor: editor)\n        } catch {\n            let presenter = PresentInWindowSuggestionPresenter()\n            presenter.presentError(error)\n        }\n    }\n\n    func acceptModification() async {\n        do {\n            if UserDefaults.shared.value(for: \\.alwaysAcceptSuggestionWithAccessibilityAPI) {\n                throw CancellationError()\n            }\n            do {\n                try await XcodeInspector.shared.latestActiveXcode?\n                    .triggerCopilotCommand(name: \"Accept Modification\")\n            } catch {\n                do {\n                    try await XcodeInspector.shared.latestActiveXcode?\n                        .triggerCopilotCommand(name: \"Accept Prompt to Code\")\n                } catch {\n                    let last = Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI\n                    let now = Date()\n                    if now.timeIntervalSince(last) > 60 * 60 {\n                        Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI = now\n                        toast.toast(content: \"\"\"\n                        The app is using a fallback solution to accept suggestions. \\\n                        For better experience, please restart Xcode to re-activate the Copilot \\\n                        menu item.\n                        \"\"\", type: .warning, duration: 10)\n                    }\n\n                    throw error\n                }\n            }\n        } catch {\n            guard let xcode = ActiveApplicationMonitor.shared.activeXcode\n                ?? ActiveApplicationMonitor.shared.latestXcode else { return }\n            let application = AXUIElementCreateApplication(xcode.processIdentifier)\n            guard let focusElement = application.focusedElement,\n                  focusElement.description == \"Source Editor\"\n            else { return }\n            guard let (\n                content,\n                lines,\n                _,\n                cursorPosition,\n                cursorOffset\n            ) = await getFileContent(sourceEditor: nil)\n            else {\n                PresentInWindowSuggestionPresenter()\n                    .presentErrorMessage(\"Unable to get file content.\")\n                return\n            }\n            let handler = WindowBaseCommandHandler()\n            do {\n                guard let result = try await handler.acceptPromptToCode(editor: .init(\n                    content: content,\n                    lines: lines,\n                    uti: \"\",\n                    cursorPosition: cursorPosition,\n                    cursorOffset: cursorOffset,\n                    selections: [],\n                    tabSize: 0,\n                    indentSize: 0,\n                    usesTabsForIndentation: false\n                )) else { return }\n\n                try injectUpdatedCodeWithAccessibilityAPI(result, focusElement: focusElement)\n            } catch {\n                PresentInWindowSuggestionPresenter().presentError(error)\n            }\n        }\n    }\n\n    func presentModification(state: Shared<ModificationState>) async {\n        let store = await Service.shared.guiController.store\n        await store.send(.promptToCodeGroup(.createPromptToCode(.init(\n            promptToCodeState: state,\n            instruction: nil,\n            commandName: nil,\n            isContinuous: false\n        ), sendImmediately: false)))\n    }\n\n    func acceptActiveSuggestionLineInGroup(atIndex index: Int?) async {\n        do {\n            if UserDefaults.shared.value(for: \\.alwaysAcceptSuggestionWithAccessibilityAPI) {\n                throw CancellationError()\n            }\n            do {\n                try await XcodeInspector.shared.latestActiveXcode?\n                    .triggerCopilotCommand(name: \"Accept Suggestion Line\")\n            } catch {\n                let last = Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI\n                let now = Date()\n                if now.timeIntervalSince(last) > 60 * 60 {\n                    Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI = now\n                    toast.toast(content: \"\"\"\n                    The app is using a fallback solution to accept suggestions. \\\n                    For better experience, please restart Xcode to re-activate the Copilot \\\n                    menu item.\n                    \"\"\", type: .warning, duration: 10)\n                }\n\n                throw error\n            }\n        } catch {\n            guard let xcode = ActiveApplicationMonitor.shared.activeXcode\n                ?? ActiveApplicationMonitor.shared.latestXcode else { return }\n            let application = AXUIElementCreateApplication(xcode.processIdentifier)\n            guard let focusElement = application.focusedElement,\n                  focusElement.description == \"Source Editor\"\n            else { return }\n            guard let (\n                content,\n                lines,\n                _,\n                cursorPosition,\n                cursorOffset\n            ) = await getFileContent(sourceEditor: nil)\n            else {\n                PresentInWindowSuggestionPresenter()\n                    .presentErrorMessage(\"Unable to get file content.\")\n                return\n            }\n            let handler = WindowBaseCommandHandler()\n            do {\n                guard let result = try await handler.acceptSuggestion(editor: .init(\n                    content: content,\n                    lines: lines,\n                    uti: \"\",\n                    cursorPosition: cursorPosition,\n                    cursorOffset: cursorOffset,\n                    selections: [],\n                    tabSize: 0,\n                    indentSize: 0,\n                    usesTabsForIndentation: false\n                )) else { return }\n\n                try injectUpdatedCodeWithAccessibilityAPI(result, focusElement: focusElement)\n            } catch {\n                PresentInWindowSuggestionPresenter().presentError(error)\n            }\n        }\n    }\n\n    func acceptSuggestion() async {\n        do {\n            if UserDefaults.shared.value(for: \\.alwaysAcceptSuggestionWithAccessibilityAPI) {\n                throw CancellationError()\n            }\n            do {\n                try await XcodeInspector.shared.latestActiveXcode?\n                    .triggerCopilotCommand(name: \"Accept Suggestion\")\n            } catch {\n                let last = Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI\n                let now = Date()\n                if now.timeIntervalSince(last) > 60 * 60 {\n                    Self.lastTimeCommandFailedToTriggerWithAccessibilityAPI = now\n                    toast.toast(content: \"\"\"\n                    The app is using a fallback solution to accept suggestions. \\\n                    For better experience, please restart Xcode to re-activate the Copilot \\\n                    menu item.\n                    \"\"\", type: .warning, duration: 10)\n                }\n\n                throw error\n            }\n        } catch {\n            guard let xcode = ActiveApplicationMonitor.shared.activeXcode\n                ?? ActiveApplicationMonitor.shared.latestXcode else { return }\n            let application = AXUIElementCreateApplication(xcode.processIdentifier)\n            guard let focusElement = application.focusedElement,\n                  focusElement.description == \"Source Editor\"\n            else { return }\n            guard let (\n                content,\n                lines,\n                _,\n                cursorPosition,\n                cursorOffset\n            ) = await getFileContent(sourceEditor: nil)\n            else {\n                PresentInWindowSuggestionPresenter()\n                    .presentErrorMessage(\"Unable to get file content.\")\n                return\n            }\n            let handler = WindowBaseCommandHandler()\n            do {\n                guard let result = try await handler.acceptSuggestion(editor: .init(\n                    content: content,\n                    lines: lines,\n                    uti: \"\",\n                    cursorPosition: cursorPosition,\n                    cursorOffset: cursorOffset,\n                    selections: [],\n                    tabSize: 0,\n                    indentSize: 0,\n                    usesTabsForIndentation: false\n                )) else { return }\n\n                try injectUpdatedCodeWithAccessibilityAPI(result, focusElement: focusElement)\n            } catch {\n                PresentInWindowSuggestionPresenter().presentError(error)\n            }\n        }\n    }\n\n    func dismissSuggestion() async {\n        guard let documentURL = await XcodeInspector.shared.activeDocumentURL else { return }\n        PresentInWindowSuggestionPresenter().discardSuggestion(fileURL: documentURL)\n        guard let (_, filespace) = try? await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: documentURL) else { return }\n        await filespace.reset()\n    }\n\n    func openChat(forceDetach: Bool, activateThisApp: Bool = true) {\n        switch UserDefaults.shared.value(for: \\.openChatMode) {\n        case .chatPanel:\n            for ext in BuiltinExtensionManager.shared.extensions {\n                guard let tab = ext.chatTabTypes.first(where: { $0.isDefaultChatTabReplacement })\n                else { continue }\n                Task { @MainActor in\n                    let store = Service.shared.guiController.store\n                    await store.send(\n                        .createAndSwitchToChatTabIfNeededMatching(\n                            check: { $0.name == tab.name },\n                            kind: .init(tab.defaultChatBuilder())\n                        )\n                    ).finish()\n                    store.send(.openChatPanel(\n                        forceDetach: forceDetach,\n                        activateThisApp: activateThisApp\n                    ))\n                }\n                return\n            }\n            Task { @MainActor in\n                let store = Service.shared.guiController.store\n                await store.send(.createAndSwitchToChatGPTChatTabIfNeeded).finish()\n                store.send(.openChatPanel(\n                    forceDetach: forceDetach,\n                    activateThisApp: activateThisApp\n                ))\n            }\n        case .browser:\n            let urlString = UserDefaults.shared.value(for: \\.openChatInBrowserURL)\n            let openInApp = {\n                if !UserDefaults.shared.value(for: \\.openChatInBrowserInInAppBrowser) {\n                    return false\n                }\n                return isFeatureAvailable(\\.browserTab)\n            }()\n            guard let url = URL(string: urlString) else {\n                let alert = NSAlert()\n                alert.messageText = \"Invalid URL\"\n                alert.informativeText = \"The URL provided is not valid.\"\n                alert.alertStyle = .warning\n                alert.runModal()\n                return\n            }\n\n            if openInApp {\n                #if canImport(BrowserChatTab)\n                Task { @MainActor in\n                    let store = Service.shared.guiController.store\n                    await store.send(.createAndSwitchToChatTabIfNeededMatching(\n                        check: {\n                            func match(_ tabURL: URL?) -> Bool {\n                                guard let tabURL else { return false }\n                                return tabURL == url\n                                    || tabURL.absoluteString.hasPrefix(url.absoluteString)\n                            }\n\n                            guard let tab = $0 as? BrowserChatTab,\n                                  match(tab.url) else { return false }\n                            return true\n                        },\n                        kind: .init(BrowserChatTab.urlChatBuilder(url: url))\n                    )).finish()\n                    store.send(.openChatPanel(\n                        forceDetach: forceDetach,\n                        activateThisApp: activateThisApp\n                    ))\n                }\n                #endif\n            } else {\n                Task {\n                    NSWorkspace.shared.open(url)\n                }\n            }\n        case let .builtinExtension(extensionIdentifier, id, _):\n            guard let ext = BuiltinExtensionManager.shared.extensions\n                .first(where: { $0.extensionIdentifier == extensionIdentifier }),\n                let tab = ext.chatTabTypes.first(where: { $0.name == id })\n            else { return }\n            Task { @MainActor in\n                let store = Service.shared.guiController.store\n                await store.send(\n                    .createAndSwitchToChatTabIfNeededMatching(\n                        check: { $0.name == id },\n                        kind: .init(tab.defaultChatBuilder())\n                    )\n                ).finish()\n                store.send(.openChatPanel(\n                    forceDetach: forceDetach,\n                    activateThisApp: activateThisApp\n                ))\n            }\n        case let .externalExtension(extensionIdentifier, id, _):\n            guard let ext = BuiltinExtensionManager.shared.extensions\n                .first(where: { $0.extensionIdentifier == \"plus\" }),\n                let tab = ext.chatTabTypes\n                .first(where: { $0.name == \"\\(extensionIdentifier).\\(id)\" })\n            else { return }\n            Task { @MainActor in\n                let store = Service.shared.guiController.store\n                await store.send(\n                    .createAndSwitchToChatTabIfNeededMatching(\n                        check: { $0.name == \"\\(extensionIdentifier).\\(id)\" },\n                        kind: .init(tab.defaultChatBuilder())\n                    )\n                ).finish()\n                store.send(.openChatPanel(\n                    forceDetach: forceDetach,\n                    activateThisApp: activateThisApp\n                ))\n            }\n        }\n    }\n\n    @MainActor\n    func sendChatMessage(_ message: String) async {\n        let store = Service.shared.guiController.store\n        await store.send(.sendCustomCommandToActiveChat(CustomCommand(\n            commandId: \"\",\n            name: \"\",\n            feature: .chatWithSelection(\n                extraSystemPrompt: nil,\n                prompt: message,\n                useExtraSystemPrompt: nil\n            ),\n            ignoreExistingAttachments: false,\n            attachments: []\n        ))).finish()\n    }\n\n    @WorkspaceActor\n    func presentSuggestions(_ suggestions: [SuggestionBasic.CodeSuggestion]) async {\n        guard let filespace = await getFilespace() else { return }\n        filespace.setSuggestions(suggestions)\n        PresentInWindowSuggestionPresenter().presentSuggestion(fileURL: filespace.fileURL)\n    }\n\n    func toast(_ message: String, as type: ToastType) {\n        Task { @MainActor in\n            let store = Service.shared.guiController.store\n            store.send(.suggestionWidget(.toastPanel(.toast(.toast(message, type, nil)))))\n        }\n    }\n\n    func presentFile(at fileURL: URL, line: Int?) async {\n        let terminal = Terminal()\n        do {\n            if let line {\n                _ = try await terminal.runCommand(\n                    \"/bin/bash\",\n                    arguments: [\n                        \"-c\",\n                        \"xed -l \\(line) ${TARGET_FILE}\",\n                    ],\n                    environment: [\"TARGET_FILE\": fileURL.path],\n                )\n            } else {\n                _ = try await terminal.runCommand(\n                    \"/bin/bash\",\n                    arguments: [\n                        \"-c\",\n                        \"xed ${TARGET_FILE}\",\n                    ],\n                    environment: [\"TARGET_FILE\": fileURL.path],\n                )\n            }\n        } catch {\n            print(error)\n        }\n    }\n}\n\nextension PseudoCommandHandler {\n    /// When Xcode commands are not available, we can fallback to directly\n    /// set the value of the editor with Accessibility API.\n    func injectUpdatedCodeWithAccessibilityAPI(\n        _ result: UpdatedContent,\n        focusElement: AXUIElement\n    ) throws {\n        let oldPosition = focusElement.selectedTextRange\n        let oldScrollPosition = focusElement.parent?.verticalScrollBar?.doubleValue\n\n        let error = AXUIElementSetAttributeValue(\n            focusElement,\n            kAXValueAttribute as CFString,\n            result.content as CFTypeRef\n        )\n\n        if error != AXError.success {\n            PresentInWindowSuggestionPresenter()\n                .presentErrorMessage(\"Fail to set editor content.\")\n        }\n\n        // recover selection range\n\n        if let selection = result.newSelections.first {\n            var range = SourceEditor.convertCursorRangeToRange(selection, in: result.content)\n            if let value = AXValueCreate(.cfRange, &range) {\n                AXUIElementSetAttributeValue(\n                    focusElement,\n                    kAXSelectedTextRangeAttribute as CFString,\n                    value\n                )\n            }\n        } else if let oldPosition {\n            var range = CFRange(\n                location: oldPosition.lowerBound,\n                length: 0\n            )\n            if let value = AXValueCreate(.cfRange, &range) {\n                AXUIElementSetAttributeValue(\n                    focusElement,\n                    kAXSelectedTextRangeAttribute as CFString,\n                    value\n                )\n            }\n        }\n\n        // recover scroll position\n\n        if let oldScrollPosition,\n           let scrollBar = focusElement.parent?.verticalScrollBar\n        {\n            AXUIElementSetAttributeValue(\n                scrollBar,\n                kAXValueAttribute as CFString,\n                oldScrollPosition as CFTypeRef\n            )\n        }\n    }\n\n    func getFileContent(sourceEditor: AXUIElement?) async\n        -> (\n            content: String,\n            lines: [String],\n            selections: [CursorRange],\n            cursorPosition: CursorPosition,\n            cursorOffset: Int\n        )?\n    {\n        guard let xcode = ActiveApplicationMonitor.shared.activeXcode\n            ?? ActiveApplicationMonitor.shared.latestXcode else { return nil }\n        let application = AXUIElementCreateApplication(xcode.processIdentifier)\n        guard let focusElement = sourceEditor ?? application.focusedElement,\n              focusElement.description == \"Source Editor\"\n        else { return nil }\n        guard let selectionRange = focusElement.selectedTextRange else { return nil }\n        let content = focusElement.value\n        let split = content.breakLines(appendLineBreakToLastLine: false)\n        let range = SourceEditor.convertRangeToCursorRange(selectionRange, in: content)\n        return (content, split, [range], range.start, selectionRange.lowerBound)\n    }\n\n    func getFileURL() async -> URL? {\n        XcodeInspector.shared.realtimeActiveDocumentURL\n    }\n\n    @WorkspaceActor\n    func getFilespace() async -> Filespace? {\n        guard\n            let fileURL = await getFileURL(),\n            let (_, filespace) = try? await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        else { return nil }\n        return filespace\n    }\n\n    @WorkspaceActor\n    func getEditorContent(sourceEditor: SourceEditor?) async -> EditorContent? {\n        guard let filespace = await getFilespace(),\n              let sourceEditor = await {\n                  if let sourceEditor { sourceEditor }\n                  else { await XcodeInspector.shared.latestFocusedEditor }\n              }()\n        else { return nil }\n        if Task.isCancelled { return nil }\n        let content = sourceEditor.getContent()\n        let uti = filespace.codeMetadata.uti ?? \"\"\n        let tabSize = filespace.codeMetadata.tabSize ?? 4\n        let indentSize = filespace.codeMetadata.indentSize ?? 4\n        let usesTabsForIndentation = filespace.codeMetadata.usesTabsForIndentation ?? false\n        return .init(\n            content: content.content,\n            lines: content.lines,\n            uti: uti,\n            cursorPosition: content.cursorPosition,\n            cursorOffset: content.cursorOffset,\n            selections: content.selections.map {\n                .init(start: $0.start, end: $0.end)\n            },\n            tabSize: tabSize,\n            indentSize: indentSize,\n            usesTabsForIndentation: usesTabsForIndentation\n        )\n    }\n\n    func handleAcceptSuggestionLineCommand(editor: EditorContent) async throws -> CodeSuggestion? {\n        guard let _ = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return nil }\n\n        return try await acceptSuggestionLineInGroup(\n            atIndex: 0,\n            editor: editor\n        )\n    }\n\n    func acceptSuggestionLineInGroup(\n        atIndex index: Int?,\n        editor: EditorContent\n    ) async throws -> CodeSuggestion? {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return nil }\n        let (workspace, _) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n\n        guard var acceptedSuggestion = await workspace.acceptSuggestion(\n            forFileAt: fileURL,\n            editor: editor\n        ) else { return nil }\n\n        let text = acceptedSuggestion.text\n        acceptedSuggestion.text = String(text.splitByNewLine().first ?? \"\")\n        return acceptedSuggestion\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/SuggestionCommandHandler/SuggestionCommandHandler.swift",
    "content": "import SuggestionBasic\nimport XPCShared\n\nprotocol SuggestionCommandHandler {\n    @ServiceActor\n    func presentSuggestions(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func presentNextSuggestion(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func presentPreviousSuggestion(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func rejectSuggestion(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func acceptSuggestionLine(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func acceptSuggestion(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func acceptPromptToCode(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func presentRealtimeSuggestions(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func generateRealtimeSuggestions(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func promptToCode(editor: EditorContent) async throws -> UpdatedContent?\n    @ServiceActor\n    func customCommand(id: String, editor: EditorContent) async throws -> UpdatedContent?\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift",
    "content": "import AppKit\nimport ChatService\nimport ComposableArchitecture\nimport CustomCommandTemplateProcessor\nimport Foundation\nimport GitHubCopilotService\nimport LanguageServerProtocol\nimport Logger\nimport ModificationBasic\nimport OpenAIService\nimport SuggestionBasic\nimport SuggestionInjector\nimport SuggestionWidget\nimport UserNotifications\nimport Workspace\nimport WorkspaceSuggestionService\nimport XcodeInspector\nimport XPCShared\n\nstruct WindowBaseCommandHandler: SuggestionCommandHandler {\n    nonisolated init() {}\n\n    let presenter = PresentInWindowSuggestionPresenter()\n\n    func presentSuggestions(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await _presentSuggestions(editor: editor)\n            } catch let error as ServerError {\n                Logger.service.error(error)\n            } catch {\n                presenter.presentError(error)\n                Logger.service.error(error)\n            }\n        }\n        return nil\n    }\n\n    @WorkspaceActor\n    private func _presentSuggestions(editor: EditorContent) async throws {\n        presenter.markAsProcessing(true)\n        defer {\n            presenter.markAsProcessing(false)\n        }\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return }\n        let (workspace, filespace) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n\n        try Task.checkCancellation()\n\n        try await workspace.generateSuggestions(\n            forFileAt: fileURL,\n            editor: editor\n        )\n\n        try Task.checkCancellation()\n\n        if filespace.presentingSuggestion != nil {\n            presenter.presentSuggestion(fileURL: fileURL)\n        } else {\n            presenter.discardSuggestion(fileURL: fileURL)\n        }\n    }\n\n    func presentNextSuggestion(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await _presentNextSuggestion(editor: editor)\n            } catch {\n                presenter.presentError(error)\n            }\n        }\n        return nil\n    }\n\n    @WorkspaceActor\n    private func _presentNextSuggestion(editor: EditorContent) async throws {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return }\n        let (workspace, filespace) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        workspace.selectNextSuggestion(forFileAt: fileURL)\n\n        if filespace.presentingSuggestion != nil {\n            presenter.presentSuggestion(fileURL: fileURL)\n        } else {\n            presenter.discardSuggestion(fileURL: fileURL)\n        }\n    }\n\n    func presentPreviousSuggestion(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await _presentPreviousSuggestion(editor: editor)\n            } catch {\n                presenter.presentError(error)\n            }\n        }\n        return nil\n    }\n\n    @WorkspaceActor\n    private func _presentPreviousSuggestion(editor: EditorContent) async throws {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return }\n        let (workspace, filespace) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        workspace.selectPreviousSuggestion(forFileAt: fileURL)\n\n        if filespace.presentingSuggestion != nil {\n            presenter.presentSuggestion(fileURL: fileURL)\n        } else {\n            presenter.discardSuggestion(fileURL: fileURL)\n        }\n    }\n\n    func rejectSuggestion(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await _rejectSuggestion(editor: editor)\n            } catch {\n                presenter.presentError(error)\n            }\n        }\n        return nil\n    }\n\n    @WorkspaceActor\n    private func _rejectSuggestion(editor: EditorContent) async throws {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return }\n\n        let (workspace, _) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        workspace.rejectSuggestion(forFileAt: fileURL, editor: editor)\n        presenter.discardSuggestion(fileURL: fileURL)\n    }\n\n    @WorkspaceActor\n    func acceptSuggestion(editor: EditorContent) async throws -> UpdatedContent? {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return nil }\n        let (workspace, _) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n\n        let injector = SuggestionInjector()\n        var lines = editor.lines\n        var cursorPosition = editor.cursorPosition\n        var extraInfo = SuggestionInjector.ExtraInfo()\n\n        if let acceptedSuggestion = workspace.acceptSuggestion(\n            forFileAt: fileURL,\n            editor: editor\n        ) {\n            injector.acceptSuggestion(\n                intoContentWithoutSuggestion: &lines,\n                cursorPosition: &cursorPosition,\n                completion: acceptedSuggestion,\n                extraInfo: &extraInfo\n            )\n\n            presenter.discardSuggestion(fileURL: fileURL)\n\n            return .init(\n                content: String(lines.joined(separator: \"\")),\n                newSelection: .cursor(cursorPosition),\n                modifications: extraInfo.modifications\n            )\n        }\n\n        return nil\n    }\n\n    func acceptSuggestionLine(editor: EditorContent) async throws -> UpdatedContent? {\n        if let acceptedSuggestion = try await PseudoCommandHandler()\n            .handleAcceptSuggestionLineCommand(editor: editor)\n        {\n            let injector = SuggestionInjector()\n            var lines = editor.lines\n            var cursorPosition = editor.cursorPosition\n            var extraInfo = SuggestionInjector.ExtraInfo()\n\n            injector.acceptSuggestion(\n                intoContentWithoutSuggestion: &lines,\n                cursorPosition: &cursorPosition,\n                completion: acceptedSuggestion,\n                extraInfo: &extraInfo\n            )\n\n            return .init(\n                content: String(lines.joined(separator: \"\")),\n                newSelection: .cursor(cursorPosition),\n                modifications: extraInfo.modifications\n            )\n        }\n\n        return nil\n    }\n\n    func acceptPromptToCode(editor: EditorContent) async throws -> UpdatedContent? {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return nil }\n\n        let injector = SuggestionInjector()\n        var lines = editor.lines\n        var cursorPosition = editor.cursorPosition\n        var extraInfo = SuggestionInjector.ExtraInfo()\n\n        let store = await Service.shared.guiController.store\n\n        if let promptToCode = await MainActor\n            .run(body: { store.state.promptToCodeGroup.activePromptToCode })\n        {\n            if promptToCode.promptToCodeState.isAttachedToTarget,\n               promptToCode.promptToCodeState.source.documentURL != fileURL\n            {\n                return nil\n            }\n\n            let suggestions = promptToCode.promptToCodeState.snippets\n                .map { snippet in\n                    let range = {\n                        if promptToCode.promptToCodeState.isAttachedToTarget {\n                            return snippet.attachedRange\n                        }\n                        return editor.selections.first.map {\n                            CursorRange(start: $0.start, end: $0.end)\n                        } ?? CursorRange(\n                            start: editor.cursorPosition,\n                            end: editor.cursorPosition\n                        )\n                    }()\n                    return CodeSuggestion(\n                        id: snippet.id.uuidString,\n                        text: snippet.modifiedCode,\n                        position: range.start,\n                        range: range\n                    )\n                }\n\n            injector.acceptSuggestions(\n                intoContentWithoutSuggestion: &lines,\n                cursorPosition: &cursorPosition,\n                completions: suggestions,\n                extraInfo: &extraInfo\n            )\n\n            for (id, range) in extraInfo.modificationRanges {\n                _ = await MainActor.run {\n                    store.send(\n                        .promptToCodeGroup(.updatePromptToCodeRange(\n                            id: promptToCode.id,\n                            snippetId: .init(uuidString: id) ?? .init(),\n                            range: range\n                        ))\n                    )\n                }\n            }\n\n            _ = await MainActor.run {\n                store.send(\n                    .promptToCodeGroup(.discardAcceptedPromptToCodeIfNotContinuous(\n                        id: promptToCode.id\n                    ))\n                )\n            }\n\n            return .init(\n                content: String(lines.joined(separator: \"\")),\n                newSelections: extraInfo.modificationRanges.values\n                    .sorted(by: { $0.start.line <= $1.start.line }),\n                modifications: extraInfo.modifications\n            )\n        }\n\n        return nil\n    }\n\n    func presentRealtimeSuggestions(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            try? await prepareCache(editor: editor)\n        }\n        return nil\n    }\n\n    @WorkspaceActor\n    func prepareCache(editor: EditorContent) async throws -> UpdatedContent? {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return nil }\n        let (_, filespace) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        filespace.codeMetadata.uti = editor.uti\n        filespace.codeMetadata.tabSize = editor.tabSize\n        filespace.codeMetadata.indentSize = editor.indentSize\n        filespace.codeMetadata.usesTabsForIndentation = editor.usesTabsForIndentation\n        filespace.codeMetadata.guessLineEnding(from: editor.lines.first)\n        return nil\n    }\n\n    func generateRealtimeSuggestions(editor: EditorContent) async throws -> UpdatedContent? {\n        return try await presentSuggestions(editor: editor)\n    }\n\n    func promptToCode(editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await presentPromptToCode(\n                    editor: editor,\n                    extraSystemPrompt: nil,\n                    prompt: nil,\n                    isContinuous: false,\n                    generateDescription: nil,\n                    name: nil\n                )\n            } catch {\n                presenter.presentError(error)\n            }\n        }\n        return nil\n    }\n\n    func customCommand(id: String, editor: EditorContent) async throws -> UpdatedContent? {\n        Task {\n            do {\n                try await handleCustomCommand(id: id, editor: editor)\n            } catch {\n                presenter.presentError(error)\n            }\n        }\n        return nil\n    }\n}\n\nextension WindowBaseCommandHandler {\n    func handleCustomCommand(id: String, editor: EditorContent) async throws {\n        struct CommandNotFoundError: Error, LocalizedError {\n            var errorDescription: String? { \"Command not found\" }\n        }\n\n        let availableCommands = UserDefaults.shared.value(for: \\.customCommands)\n        guard let command = availableCommands.first(where: { $0.id == id })\n        else { throw CommandNotFoundError() }\n\n        switch command.feature {\n        case .chatWithSelection, .customChat:\n            Task { @MainActor in\n                Service.shared.guiController.store\n                    .send(.sendCustomCommandToActiveChat(command))\n            }\n        case let .promptToCode(extraSystemPrompt, prompt, continuousMode, generateDescription):\n            try await presentPromptToCode(\n                editor: editor,\n                extraSystemPrompt: extraSystemPrompt,\n                prompt: prompt,\n                isContinuous: continuousMode ?? false,\n                generateDescription: generateDescription,\n                name: command.name\n            )\n        case let .singleRoundDialog(\n            systemPrompt,\n            overwriteSystemPrompt,\n            prompt,\n            receiveReplyInNotification\n        ):\n            try await executeSingleRoundDialog(\n                systemPrompt: systemPrompt,\n                overwriteSystemPrompt: overwriteSystemPrompt ?? false,\n                prompt: prompt ?? \"\",\n                receiveReplyInNotification: receiveReplyInNotification ?? false\n            )\n        }\n    }\n\n    @WorkspaceActor\n    func presentPromptToCode(\n        editor: EditorContent,\n        extraSystemPrompt: String?,\n        prompt: String?,\n        isContinuous: Bool,\n        generateDescription: Bool?,\n        name: String?\n    ) async throws {\n        guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL\n        else { return }\n        let (workspace, _) = try await Service.shared.workspacePool\n            .fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)\n        guard workspace.suggestionPlugin?.isSuggestionFeatureEnabled ?? false else {\n            presenter.presentErrorMessage(\"Prompt to code is disabled for this project\")\n            return\n        }\n\n        let codeLanguage = languageIdentifierFromFileURL(fileURL)\n\n        let selections: [CursorRange] = {\n            if let firstSelection = editor.selections.first,\n               let lastSelection = editor.selections.last\n            {\n                let range = CursorRange(\n                    start: firstSelection.start,\n                    end: lastSelection.end\n                )\n                return [range]\n            }\n            return []\n        }()\n\n        let snippets = selections.map { selection in\n            guard selection.start != selection.end else {\n                return ModificationSnippet(\n                    startLineIndex: selection.start.line,\n                    originalCode: \"\",\n                    modifiedCode: \"\",\n                    description: \"\",\n                    error: \"\",\n                    attachedRange: selection\n                )\n            }\n            var selection = selection\n            let isMultipleLine = selection.start.line != selection.end.line\n            let isSpaceOnlyBeforeStartPositionOnTheSameLine = {\n                guard selection.start.line >= 0, selection.start.line < editor.lines.count else {\n                    return false\n                }\n                let line = editor.lines[selection.start.line]\n                guard selection.start.character > 0,\n                      selection.start.character < line.utf16.count\n                else { return false }\n                let substring = line[line.utf16.startIndex..<(line.index(\n                    line.utf16.startIndex,\n                    offsetBy: selection.start.character,\n                    limitedBy: line.utf16.endIndex\n                ) ?? line.utf16.endIndex)]\n                return substring.allSatisfy { $0.isWhitespace }\n            }()\n\n            if isMultipleLine || isSpaceOnlyBeforeStartPositionOnTheSameLine {\n                // when there are multiple lines start from char 0 so that it can keep the\n                // indentation.\n                selection.start = .init(line: selection.start.line, character: 0)\n            }\n            let selectedCode = editor.selectedCode(in: .init(\n                start: selection.start,\n                end: selection.end\n            ))\n            return ModificationSnippet(\n                startLineIndex: selection.start.line,\n                originalCode: selectedCode,\n                modifiedCode: selectedCode,\n                description: \"\",\n                error: \"\",\n                attachedRange: .init(start: selection.start, end: selection.end)\n            )\n        }\n\n        let store = await Service.shared.guiController.store\n\n        let customCommandTemplateProcessor = CustomCommandTemplateProcessor()\n\n        let newExtraSystemPrompt: String? = if let extraSystemPrompt {\n            await customCommandTemplateProcessor.process(extraSystemPrompt)\n        } else {\n            nil\n        }\n\n        let newPrompt: String? = if let prompt {\n            await customCommandTemplateProcessor.process(prompt)\n        } else {\n            nil\n        }\n\n        _ = await MainActor.run {\n            store.send(.promptToCodeGroup(.activateOrCreatePromptToCode(.init(\n                promptToCodeState: Shared(.init(\n                    source: .init(\n                        language: codeLanguage,\n                        documentURL: fileURL,\n                        projectRootURL: workspace.projectRootURL,\n                        content: editor.content,\n                        lines: editor.lines\n                    ),\n                    snippets: IdentifiedArray(uniqueElements: snippets),\n                    extraSystemPrompt: newExtraSystemPrompt ?? \"\",\n                    isAttachedToTarget: true\n                )),\n                instruction: newPrompt,\n                commandName: name,\n                isContinuous: isContinuous\n            ))))\n        }\n    }\n\n    func executeSingleRoundDialog(\n        systemPrompt: String?,\n        overwriteSystemPrompt: Bool,\n        prompt: String,\n        receiveReplyInNotification: Bool\n    ) async throws {\n        guard !prompt.isEmpty else { return }\n\n        let service = ChatService()\n\n        let result = try await service.handleSingleRoundDialogCommand(\n            systemPrompt: systemPrompt,\n            overwriteSystemPrompt: overwriteSystemPrompt,\n            prompt: prompt\n        )\n\n        guard receiveReplyInNotification else { return }\n\n        let granted = try await UNUserNotificationCenter.current()\n            .requestAuthorization(options: [.alert])\n\n        if granted {\n            let content = UNMutableNotificationContent()\n            content.title = \"Reply\"\n            content.body = result\n            let request = UNNotificationRequest(\n                identifier: \"reply\",\n                content: content,\n                trigger: nil\n            )\n            do {\n                try await UNUserNotificationCenter.current().add(request)\n            } catch {\n                presenter.presentError(error)\n            }\n        } else {\n            presenter.presentErrorMessage(\"Notification permission is not granted.\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/SuggestionPresenter/PresentInWindowSuggestionPresenter.swift",
    "content": "import ChatService\nimport Foundation\nimport OpenAIService\nimport SuggestionBasic\nimport SuggestionWidget\n\nstruct PresentInWindowSuggestionPresenter {\n    func presentSuggestion(fileURL: URL) {\n        Task { @MainActor in\n            let controller = Service.shared.guiController.widgetController\n            controller.suggestCode()\n        }\n    }\n\n    func discardSuggestion(fileURL: URL) {\n        Task { @MainActor in\n            let controller = Service.shared.guiController.widgetController\n            controller.discardSuggestion()\n        }\n    }\n\n    func markAsProcessing(_ isProcessing: Bool) {\n        Task { @MainActor in\n            let controller = Service.shared.guiController.widgetController\n            controller.markAsProcessing(isProcessing)\n        }\n    }\n\n    func presentError(_ error: Error) {\n        if error is CancellationError { return }\n        if let urlError = error as? URLError, urlError.code == URLError.cancelled { return }\n        Task { @MainActor in\n            let controller = Service.shared.guiController.widgetController\n            controller.presentError(error.localizedDescription)\n        }\n    }\n\n    func presentErrorMessage(_ message: String) {\n        Task { @MainActor in\n            let controller = Service.shared.guiController.widgetController\n            controller.presentError(message)\n        }\n    }\n\n    func presentChatRoom(fileURL: URL) {\n        Task { @MainActor in\n            let controller = Service.shared.guiController\n            controller.store.send(.openChatPanel(forceDetach: false, activateThisApp: true))\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/WorkspaceExtension/Workspace+Cleanup.swift",
    "content": "import Foundation\nimport SuggestionProvider\nimport Workspace\nimport WorkspaceSuggestionService\n\nextension Workspace {\n    @WorkspaceActor\n    func cleanUp(availableTabs: Set<String>) {\n        for (fileURL, _) in filespaces {\n            if isFilespaceExpired(fileURL: fileURL, availableTabs: availableTabs) {\n                openedFileRecoverableStorage.closeFile(fileURL: fileURL)\n                closeFilespace(fileURL: fileURL)\n            }\n        }\n    }\n\n    func isFilespaceExpired(fileURL: URL, availableTabs: Set<String>) -> Bool {\n        let filename = fileURL.lastPathComponent\n        if availableTabs.contains(filename) { return false }\n        guard let filespace = filespaces[fileURL] else { return true }\n        return filespace.isExpired\n    }\n\n    func cancelInFlightRealtimeSuggestionRequests() async {\n        guard let suggestionService else { return }\n        await suggestionService.cancelRequest(workspaceInfo: .init(\n            workspaceURL: workspaceURL,\n            projectURL: projectRootURL\n        ))\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/Service/XPCService.swift",
    "content": "import AppKit\nimport Foundation\nimport GitHubCopilotService\nimport LanguageServerProtocol\nimport Logger\nimport Preferences\nimport XPCShared\n\npublic class XPCService: NSObject, XPCServiceProtocol {\n    // MARK: - Service\n\n    public func getXPCServiceVersion(withReply reply: @escaping (String, String) -> Void) {\n        reply(\n            Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"N/A\",\n            Bundle.main.infoDictionary?[\"CFBundleVersion\"] as? String ?? \"N/A\"\n        )\n    }\n\n    public func getXPCServiceAccessibilityPermission(withReply reply: @escaping (Bool) -> Void) {\n        reply(AXIsProcessTrusted())\n    }\n\n    // MARK: - Suggestion\n\n    @discardableResult\n    private func replyWithUpdatedContent(\n        editorContent: Data,\n        file: StaticString = #file,\n        line: UInt = #line,\n        isRealtimeSuggestionRelatedCommand: Bool = false,\n        withReply reply: @escaping (Data?, Error?) -> Void,\n        getUpdatedContent: @escaping @ServiceActor (\n            SuggestionCommandHandler,\n            EditorContent\n        ) async throws -> UpdatedContent?\n    ) -> Task<Void, Never> {\n        let task = Task {\n            do {\n                let editor = try JSONDecoder().decode(EditorContent.self, from: editorContent)\n                let handler: SuggestionCommandHandler = WindowBaseCommandHandler()\n                try Task.checkCancellation()\n                guard let updatedContent = try await getUpdatedContent(handler, editor) else {\n                    reply(nil, nil)\n                    return\n                }\n                try Task.checkCancellation()\n                try reply(JSONEncoder().encode(updatedContent), nil)\n            } catch {\n                Logger.service.error(\"\\(file):\\(line) \\(error.localizedDescription)\")\n                reply(nil, NSError.from(error))\n            }\n        }\n\n        Task {\n            await Service.shared.realtimeSuggestionController.cancelInFlightTasks(excluding: task)\n        }\n        return task\n    }\n\n    public func getSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.presentSuggestions(editor: editor)\n        }\n    }\n\n    public func getNextSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.presentNextSuggestion(editor: editor)\n        }\n    }\n\n    public func getPreviousSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.presentPreviousSuggestion(editor: editor)\n        }\n    }\n\n    public func getSuggestionRejectedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.rejectSuggestion(editor: editor)\n        }\n    }\n\n    public func getSuggestionAcceptedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.acceptSuggestion(editor: editor)\n        }\n    }\n\n    public func getPromptToCodeAcceptedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.acceptPromptToCode(editor: editor)\n        }\n    }\n\n    public func getRealtimeSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(\n            editorContent: editorContent,\n            isRealtimeSuggestionRelatedCommand: true,\n            withReply: reply\n        ) { handler, editor in\n            try await handler.presentRealtimeSuggestions(editor: editor)\n        }\n    }\n\n    public func prefetchRealtimeSuggestions(\n        editorContent: Data,\n        withReply reply: @escaping () -> Void\n    ) {\n        // We don't need to wait for this.\n        reply()\n\n        replyWithUpdatedContent(\n            editorContent: editorContent,\n            isRealtimeSuggestionRelatedCommand: true,\n            withReply: { _, _ in }\n        ) { handler, editor in\n            try await handler.generateRealtimeSuggestions(editor: editor)\n        }\n    }\n\n    public func openChat(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        let handler = PseudoCommandHandler()\n        handler.openChat(forceDetach: false)\n        reply(nil, nil)\n    }\n\n    public func promptToCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.promptToCode(editor: editor)\n        }\n    }\n\n    public func customCommand(\n        id: String,\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    ) {\n        replyWithUpdatedContent(editorContent: editorContent, withReply: reply) { handler, editor in\n            try await handler.customCommand(id: id, editor: editor)\n        }\n    }\n\n    // MARK: - Settings\n\n    public func toggleRealtimeSuggestion(withReply reply: @escaping (Error?) -> Void) {\n        guard AXIsProcessTrusted() else {\n            reply(NoAccessToAccessibilityAPIError())\n            return\n        }\n        Task { @ServiceActor in\n            await Service.shared.realtimeSuggestionController.cancelInFlightTasks()\n            let on = !UserDefaults.shared.value(for: \\.realtimeSuggestionToggle)\n            UserDefaults.shared.set(on, for: \\.realtimeSuggestionToggle)\n            Task { @MainActor in\n                Service.shared.guiController.store\n                    .send(.suggestionWidget(.toastPanel(.toast(.toast(\n                        \"Real-time suggestion is turned \\(on ? \"on\" : \"off\")\",\n                        .info,\n                        nil\n                    )))))\n            }\n            reply(nil)\n        }\n    }\n\n    public func postNotification(name: String, withReply reply: @escaping () -> Void) {\n        reply()\n        NotificationCenter.default.post(name: .init(name), object: nil)\n    }\n    \n    public func quit(reply: @escaping () -> Void) {\n        Task {\n            await Service.shared.prepareForExit()\n            reply()\n        }\n    }\n\n    // MARK: - Requests\n\n    public func send(\n        endpoint: String,\n        requestBody: Data,\n        reply: @escaping (Data?, Error?) -> Void\n    ) {\n        Task {\n            await Service.shared.handleXPCServiceRequests(\n                endpoint: endpoint,\n                requestBody: requestBody,\n                reply: reply\n            )\n        }\n    }\n}\n\nstruct NoAccessToAccessibilityAPIError: Error, LocalizedError {\n    var errorDescription: String? {\n        \"Accessibility API permission is not granted. Please enable in System Settings.app.\"\n    }\n\n    init() {}\n}\n\n"
  },
  {
    "path": "Core/Sources/ServiceUpdateMigration/MigrateTo135.swift",
    "content": "import Foundation\nimport GitHubCopilotService\n\nfunc migrateFromLowerThanOrEqualToVersion135() throws {\n    // 0. Create the application support folder if it doesn't exist\n\n    let urls = try GitHubCopilotBaseService.createFoldersIfNeeded()\n\n    // 1. Move the undefined folder in application support into a sub folder called `GitHub\n    // Copilot/support`\n\n    let undefinedFolderURL = urls.applicationSupportURL.appendingPathComponent(\"undefined\")\n    var isUndefinedADirectory: ObjCBool = false\n    let isUndefinedExisted = FileManager.default.fileExists(\n        atPath: undefinedFolderURL.path,\n        isDirectory: &isUndefinedADirectory\n    )\n    if isUndefinedExisted, isUndefinedADirectory.boolValue {\n        try FileManager.default.moveItem(\n            at: undefinedFolderURL,\n            to: urls.supportURL.appendingPathComponent(\"undefined\")\n        )\n    }\n\n    // 2. Copy the GitHub copilot language service to `GitHub Copilot/executable`\n\n    let copilotFolderURL = urls.executableURL.appendingPathComponent(\"copilot\")\n    var copilotIsFolder: ObjCBool = false\n    let executable = Bundle.main.resourceURL?.appendingPathComponent(\"copilot\")\n    if let executable,\n       FileManager.default.fileExists(atPath: executable.path, isDirectory: &copilotIsFolder),\n       !FileManager.default.fileExists(atPath: copilotFolderURL.path)\n    {\n        try FileManager.default.copyItem(\n            at: executable,\n            to: urls.executableURL.appendingPathComponent(\"copilot\")\n        )\n    }\n\n    // 3. Use chmod to change the permission of the executable to 755\n\n    try FileManager.default.setAttributes(\n        [.posixPermissions: 0o755],\n        ofItemAtPath: copilotFolderURL.path\n    )\n}\n\n"
  },
  {
    "path": "Core/Sources/ServiceUpdateMigration/MigrateTo240.swift",
    "content": "import AIModel\nimport Foundation\nimport Keychain\nimport Preferences\n\nfunc migrateTo240(\n    defaults: UserDefaults = .shared,\n    keychain: KeychainType = Keychain.apiKey\n) throws {\n    let finishedMigrationKey = \"MigrateTo240Finished\"\n    if defaults.bool(forKey: finishedMigrationKey) { return }\n\n    do {\n        let chatModelOpenAIId = UUID().uuidString\n        let chatModelAzureOpenAIId = UUID().uuidString\n        let embeddingModelOpenAIId = UUID().uuidString\n        let embeddingModelAzureOpenAIId = UUID().uuidString\n        \n        let openAIAPIKeyName = \"OpenAI\"\n        let openAIAPIKey = defaults.deprecatedValue(for: \\.openAIAPIKey)\n        if !openAIAPIKey.isEmpty {\n            try keychain.update(openAIAPIKey, key: openAIAPIKeyName)\n        }\n        \n        let azureOpenAIAPIKeyName = \"Azure OpenAI\"\n        let azureOpenAIAPIKey = defaults.deprecatedValue(for: \\.azureOpenAIAPIKey)\n        if !azureOpenAIAPIKey.isEmpty {\n            try keychain.update(azureOpenAIAPIKey, key: azureOpenAIAPIKeyName)\n        }\n        \n        defaults.set({\n            let openAIModel = ChatGPTModel(rawValue: defaults.deprecatedValue(for: \\.chatGPTModel))\n            \n            let openAI = ChatModel(\n                id: chatModelOpenAIId,\n                name: \"OpenAI\",\n                format: .openAI,\n                info: .init(\n                    apiKeyName: openAIAPIKeyName,\n                    baseURL: defaults.deprecatedValue(for: \\.openAIBaseURL),\n                    maxTokens: openAIModel?.maxToken ?? defaults\n                        .deprecatedValue(for: \\.chatGPTMaxToken),\n                    modelName: openAIModel?.rawValue ?? defaults\n                        .deprecatedValue(for: \\.chatGPTModel)\n                )\n            )\n            let azureOpenAI = ChatModel(\n                id: chatModelAzureOpenAIId,\n                name: \"Azure OpenAI\",\n                format: .azureOpenAI,\n                info: .init(\n                    apiKeyName: azureOpenAIAPIKeyName,\n                    baseURL: defaults.deprecatedValue(for: \\.azureOpenAIBaseURL),\n                    maxTokens: defaults.deprecatedValue(for: \\.chatGPTMaxToken),\n                    modelName: defaults\n                        .deprecatedValue(for: \\.azureChatGPTDeployment)\n                )\n            )\n            \n            return [openAI, azureOpenAI]\n        }(), for: \\.chatModels)\n        \n        defaults.set({\n            if defaults.deprecatedValue(for: \\.chatFeatureProvider) == .azureOpenAI {\n                return chatModelAzureOpenAIId\n            }\n            return chatModelOpenAIId\n        }(), for: \\.defaultChatFeatureChatModelId)\n        \n        defaults.set({\n            let openAIModel = OpenAIEmbeddingModel(\n                rawValue: defaults.deprecatedValue(for: \\.embeddingModel)\n            )\n            \n            let openAI = EmbeddingModel(\n                id: embeddingModelOpenAIId,\n                name: \"OpenAI\",\n                format: .openAI,\n                info: .init(\n                    apiKeyName: openAIAPIKeyName,\n                    baseURL: defaults.deprecatedValue(for: \\.openAIBaseURL),\n                    maxTokens: openAIModel?.maxToken ?? 8191,\n                    modelName: openAIModel?.rawValue ?? defaults.deprecatedValue(for: \\.embeddingModel)\n                )\n            )\n            \n            let azureOpenAI = EmbeddingModel(\n                id: embeddingModelAzureOpenAIId,\n                name: \"Azure OpenAI\",\n                format: .azureOpenAI,\n                info: .init(\n                    apiKeyName: azureOpenAIAPIKeyName,\n                    baseURL: defaults.deprecatedValue(for: \\.azureOpenAIBaseURL),\n                    maxTokens: 8191,\n                    modelName: defaults\n                        .deprecatedValue(for: \\.azureEmbeddingDeployment)\n                )\n            )\n            \n            return [openAI, azureOpenAI]\n        }(), for: \\.embeddingModels)\n        \n        defaults.set({\n            if defaults.deprecatedValue(for: \\.embeddingFeatureProvider) == .azureOpenAI {\n                return embeddingModelAzureOpenAIId\n            }\n            return embeddingModelOpenAIId\n        }(), for: \\.defaultChatFeatureEmbeddingModelId)\n        \n        defaults.set(true, forKey: finishedMigrationKey)\n    } catch {\n        print(error.localizedDescription)\n        throw error\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/ServiceUpdateMigration/ServiceUpdateMigrator.swift",
    "content": "import Configs\nimport Foundation\nimport Preferences\n\nextension UserDefaultPreferenceKeys {\n    struct OldMigrationVersion: UserDefaultPreferenceKey {\n        var defaultValue: String = \"0\"\n        let key = \"OldMigrationVersion\"\n    }\n\n    var oldMigrationVersion: OldMigrationVersion { .init() }\n}\n\npublic struct ServiceUpdateMigrator {\n    public init() {}\n\n    public func migrate() async throws {\n        let version = Bundle.main.object(forInfoDictionaryKey: \"CFBundleVersion\") as? String ?? \"0\"\n\n        try await migrate(from: UserDefaults.shared.value(for: \\.oldMigrationVersion), to: version)\n        UserDefaults.shared.set(version, for: \\.oldMigrationVersion)\n    }\n\n    func migrate(from oldVersion: String, to currentVersion: String) async throws {\n        guard let old = Int(oldVersion), old != 0 else { return }\n        if old <= 135 {\n            try migrateFromLowerThanOrEqualToVersion135()\n        }\n        if old < 240 {\n            try migrateTo240()\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Sources/SuggestionService/SuggestionService.swift",
    "content": "import BuiltinExtension\nimport CodeiumService\nimport enum CopilotForXcodeKit.SuggestionServiceError\nimport struct CopilotForXcodeKit.WorkspaceInfo\nimport Foundation\nimport GitHubCopilotService\nimport Preferences\nimport SuggestionBasic\nimport SuggestionProvider\nimport UserDefaultsObserver\nimport Workspace\n\n#if canImport(ProExtension)\nimport ProExtension\n#endif\n\npublic protocol SuggestionServiceType: SuggestionServiceProvider {}\n\npublic actor SuggestionService: SuggestionServiceType {\n    public typealias Middleware = SuggestionServiceMiddleware\n    public typealias EventHandler = SuggestionServiceEventHandler\n    public var configuration: SuggestionProvider.SuggestionServiceConfiguration {\n        get async { await suggestionProvider.configuration }\n    }\n\n    let middlewares: [Middleware]\n    let eventHandlers: [EventHandler]\n\n    let suggestionProvider: SuggestionServiceProvider\n\n    public init(\n        provider: any SuggestionServiceProvider,\n        middlewares: [Middleware] = SuggestionServiceMiddlewareContainer.middlewares,\n        eventHandlers: [EventHandler] = SuggestionServiceEventHandlerContainer.handlers\n    ) {\n        suggestionProvider = provider\n        self.middlewares = middlewares\n        self.eventHandlers = eventHandlers\n    }\n\n    public static func service(\n        for serviceType: SuggestionFeatureProvider = UserDefaults.shared\n            .value(for: \\.suggestionFeatureProvider)\n    ) -> SuggestionService {\n        #if canImport(ProExtension)\n        if let provider = ProExtension.suggestionProviderFactory(serviceType) {\n            return SuggestionService(provider: provider)\n        }\n        #endif\n\n        switch serviceType {\n        case .builtIn(.codeium):\n            let provider = BuiltinExtensionSuggestionServiceProvider(\n                extension: CodeiumExtension.self\n            )\n            return SuggestionService(provider: provider)\n        case .builtIn(.gitHubCopilot), .extension:\n            let provider = BuiltinExtensionSuggestionServiceProvider(\n                extension: GitHubCopilotExtension.self\n            )\n            return SuggestionService(provider: provider)\n        }\n    }\n}\n\npublic extension SuggestionService {\n    func getSuggestions(\n        _ request: SuggestionRequest,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async throws -> [SuggestionBasic.CodeSuggestion] {\n        do {\n            var getSuggestion = suggestionProvider.getSuggestions(_:workspaceInfo:)\n            let configuration = await configuration\n\n            for middleware in middlewares.reversed() {\n                getSuggestion = { [getSuggestion] request, workspaceInfo in\n                    try await middleware.getSuggestion(\n                        request,\n                        configuration: configuration,\n                        next: { [getSuggestion] request in\n                            try await getSuggestion(request, workspaceInfo)\n                        }\n                    )\n                }\n            }\n\n            return try await getSuggestion(request, workspaceInfo)\n        } catch let error as SuggestionServiceError {\n            throw error\n        } catch {\n            throw SuggestionServiceError.silent(error)\n        }\n    }\n\n    func notifyAccepted(\n        _ suggestion: SuggestionBasic.CodeSuggestion,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async {\n        eventHandlers.forEach { $0.didAccept(suggestion, workspaceInfo: workspaceInfo) }\n        await suggestionProvider.notifyAccepted(suggestion, workspaceInfo: workspaceInfo)\n    }\n\n    func notifyRejected(\n        _ suggestions: [SuggestionBasic.CodeSuggestion],\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async {\n        eventHandlers.forEach { $0.didReject(suggestions, workspaceInfo: workspaceInfo) }\n        await suggestionProvider.notifyRejected(suggestions, workspaceInfo: workspaceInfo)\n    }\n\n    func cancelRequest(workspaceInfo: CopilotForXcodeKit.WorkspaceInfo) async {\n        await suggestionProvider.cancelRequest(workspaceInfo: workspaceInfo)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/ChatPanelWindow.swift",
    "content": "import AppKit\nimport ChatTab\nimport ComposableArchitecture\nimport Foundation\nimport SwiftUI\n\nfinal class ChatPanelWindow: WidgetWindow {\n    override var canBecomeKey: Bool { true }\n    override var canBecomeMain: Bool { true }\n\n    private let storeObserver = NSObject()\n    private let store: StoreOf<ChatPanel>\n\n    var minimizeWindow: () -> Void = {}\n\n    var isDetached: Bool {\n        store.withState { $0.isDetached }\n    }\n\n    override var defaultCollectionBehavior: NSWindow.CollectionBehavior {\n        [\n            .fullScreenAuxiliary,\n            .transient,\n            .fullScreenPrimary,\n            .fullScreenAllowsTiling,\n        ]\n    }\n\n    init(\n        store: StoreOf<ChatPanel>,\n        chatTabPool: ChatTabPool,\n        minimizeWindow: @escaping () -> Void\n    ) {\n        self.store = store\n        self.minimizeWindow = minimizeWindow\n        super.init(\n            contentRect: .init(x: 0, y: 0, width: 300, height: 400),\n            styleMask: [.resizable, .titled, .miniaturizable, .fullSizeContentView, .closable],\n            backing: .buffered,\n            defer: false\n        )\n\n        titleVisibility = .hidden\n        addTitlebarAccessoryViewController({\n            let controller = NSTitlebarAccessoryViewController()\n            let view = NSHostingView(rootView: ChatTitleBar(store: store))\n            controller.view = view\n            view.frame = .init(x: 0, y: 0, width: 100, height: 40)\n            controller.layoutAttribute = .right\n            return controller\n        }())\n        titlebarAppearsTransparent = true\n        isReleasedWhenClosed = false\n        level = widgetLevel(1)\n        hasShadow = true\n        contentView = NSHostingView(\n            rootView: ChatWindowView(\n                store: store,\n                toggleVisibility: { [weak self] isDisplayed in\n                    guard let self else { return }\n                    self.isPanelDisplayed = isDisplayed\n                }\n            )\n            .environment(\\.chatTabPool, chatTabPool)\n        )\n        setIsVisible(true)\n        isPanelDisplayed = false\n\n        var wasDetached = false\n        storeObserver.observe { [weak self] in\n            guard let self else { return }\n            let isDetached = store.isDetached\n            guard isDetached != wasDetached else { return }\n            wasDetached = isDetached\n            Task { @MainActor in\n                if UserDefaults.shared.value(for: \\.disableFloatOnTopWhenTheChatPanelIsDetached) {\n                    self.setFloatOnTop(!isDetached)\n                } else {\n                    self.setFloatOnTop(true)\n                }\n            }\n        }\n    }\n\n    func centerInActiveSpaceIfNeeded() {\n        guard !isOnActiveSpace else { return }\n        center()\n    }\n\n    var isWindowHidden: Bool = false {\n        didSet {\n            alphaValue = isPanelDisplayed && !isWindowHidden ? 1 : 0\n        }\n    }\n\n    var isPanelDisplayed: Bool = false {\n        didSet {\n            alphaValue = isPanelDisplayed && !isWindowHidden ? 1 : 0\n        }\n    }\n\n    override var alphaValue: CGFloat {\n        didSet {\n            ignoresMouseEvents = alphaValue <= 0\n        }\n    }\n\n    override func miniaturize(_: Any?) {\n        minimizeWindow()\n    }\n\n    override func close() {\n        store.send(.closeActiveTabClicked)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/ChatWindowView.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport ChatGPTChatTab\nimport ChatTab\nimport ComposableArchitecture\nimport SwiftUI\nimport SharedUIComponents\n\nprivate let r: Double = 8\n\nstruct ChatWindowView: View {\n    let store: StoreOf<ChatPanel>\n    let toggleVisibility: (Bool) -> Void\n\n    var body: some View {\n        WithPerceptionTracking {\n            let _ = store.chatTabGroup.selectedTabId // force re-evaluation\n            VStack(spacing: 0) {\n                Rectangle().fill(.regularMaterial).frame(height: 28)\n\n                Divider()\n\n                ChatTabBar(store: store)\n                    .frame(height: 26)\n                    .clipped()\n\n                Divider()\n\n                ChatTabContainer(store: store)\n                    .frame(maxWidth: .infinity, maxHeight: .infinity)\n            }\n            .xcodeStyleFrame()\n            .ignoresSafeArea(edges: .top)\n            .onChange(of: store.isPanelDisplayed) { isDisplayed in\n                toggleVisibility(isDisplayed)\n            }\n            .preferredColorScheme(store.colorScheme)\n        }\n    }\n}\n\nstruct ChatTitleBar: View {\n    let store: StoreOf<ChatPanel>\n    @State var isHovering = false\n\n    var body: some View {\n        WithPerceptionTracking {\n            HStack(spacing: 6) {\n                Button(action: {\n                    store.send(.closeActiveTabClicked)\n                }) {\n                    EmptyView()\n                }\n                .opacity(0)\n                .keyboardShortcut(\"w\", modifiers: [.command])\n\n                Button(\n                    action: {\n                        store.send(.hideButtonClicked)\n                    }\n                ) {\n                    Image(systemName: \"minus\")\n                        .foregroundStyle(.black.opacity(0.5))\n                        .font(Font.system(size: 8).weight(.heavy))\n                }\n                .opacity(0)\n                .keyboardShortcut(\"m\", modifiers: [.command])\n\n                Spacer()\n\n                TrafficLightButton(\n                    isHovering: isHovering,\n                    isActive: store.isDetached,\n                    color: Color(nsColor: .systemCyan),\n                    action: {\n                        store.send(.toggleChatPanelDetachedButtonClicked)\n                    }\n                ) {\n                    Image(systemName: \"pin.fill\")\n                        .foregroundStyle(.black.opacity(0.5))\n                        .font(Font.system(size: 6).weight(.black))\n                        .transformEffect(.init(translationX: 0, y: 0.5))\n                }\n            }\n            .buttonStyle(.plain)\n            .padding(.trailing, 8)\n            .onHover(perform: { hovering in\n                isHovering = hovering\n            })\n        }\n    }\n\n    struct TrafficLightButton<Icon: View>: View {\n        let isHovering: Bool\n        let isActive: Bool\n        let color: Color\n        let action: () -> Void\n        let icon: () -> Icon\n\n        @Environment(\\.controlActiveState) var controlActiveState\n\n        var body: some View {\n            Button(action: {\n                action()\n            }) {\n                Circle()\n                    .fill(\n                        controlActiveState == .key && isActive\n                            ? color\n                            : Color(nsColor: .separatorColor)\n                    )\n                    .frame(\n                        width: Style.trafficLightButtonSize,\n                        height: Style.trafficLightButtonSize\n                    )\n                    .overlay {\n                        Circle().stroke(lineWidth: 0.5).foregroundColor(.black.opacity(0.2))\n                    }\n                    .overlay {\n                        if isHovering {\n                            icon()\n                        }\n                    }\n            }\n            .focusable(false)\n        }\n    }\n}\n\nextension View {\n    func hideScrollIndicator() -> some View {\n        if #available(macOS 13.0, *) {\n            return scrollIndicators(.hidden)\n        } else {\n            return self\n        }\n    }\n}\n\nstruct ChatTabBar: View {\n    let store: StoreOf<ChatPanel>\n\n    struct TabBarState: Equatable {\n        var tabInfo: IdentifiedArray<String, ChatTabInfo>\n        var selectedTabId: String\n    }\n\n    var body: some View {\n        HStack(spacing: 0) {\n            Divider()\n            Tabs(store: store)\n            CreateButton(store: store)\n        }\n        .background {\n            Button(action: { store.send(.switchToNextTab) }) { EmptyView() }\n                .opacity(0)\n                .keyboardShortcut(\"]\", modifiers: [.command, .shift])\n            Button(action: { store.send(.switchToPreviousTab) }) { EmptyView() }\n                .opacity(0)\n                .keyboardShortcut(\"[\", modifiers: [.command, .shift])\n        }\n    }\n\n    struct Tabs: View {\n        let store: StoreOf<ChatPanel>\n        @State var draggingTabId: String?\n        @Environment(\\.chatTabPool) var chatTabPool\n\n        var body: some View {\n            WithPerceptionTracking {\n                let tabInfo = store.chatTabGroup.tabInfo\n                let selectedTabId = store.chatTabGroup.selectedTabId\n                    ?? store.chatTabGroup.tabInfo.first?.id\n                    ?? \"\"\n                ScrollViewReader { proxy in\n                    ScrollView(.horizontal) {\n                        HStack(spacing: 0) {\n                            ForEach(tabInfo, id: \\.id) { info in\n                                WithPerceptionTracking {\n                                    if let tab = chatTabPool.getTab(of: info.id) {\n                                        ChatTabBarButton(\n                                            store: store,\n                                            info: info,\n                                            content: { tab.tabItem },\n                                            icon: { tab.icon },\n                                            isSelected: info.id == selectedTabId\n                                        )\n                                        .contextMenu {\n                                            tab.menu\n                                        }\n                                        .id(info.id)\n                                        .onDrag {\n                                            draggingTabId = info.id\n                                            return NSItemProvider(object: info.id as NSString)\n                                        }\n                                        .onDrop(\n                                            of: [.text],\n                                            delegate: ChatTabBarDropDelegate(\n                                                store: store,\n                                                tabs: tabInfo,\n                                                itemId: info.id,\n                                                draggingTabId: $draggingTabId\n                                            )\n                                        )\n\n                                    } else {\n                                        ChatTabBarButton(\n                                            store: store,\n                                            info: info,\n                                            content: { Text(\"Not Found\") },\n                                            icon: { Image(systemName: \"questionmark.diamond\") },\n                                            isSelected: info.id == selectedTabId\n                                        )\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    .hideScrollIndicator()\n                    .onChange(of: selectedTabId) { id in\n                        withAnimation(.easeInOut(duration: 0.2)) {\n                            proxy.scrollTo(id)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    struct CreateButton: View {\n        let store: StoreOf<ChatPanel>\n\n        var body: some View {\n            WithPerceptionTracking {\n                let collection = store.chatTabGroup.tabCollection\n                Menu {\n                    ForEach(0..<collection.endIndex, id: \\.self) { index in\n                        WithPerceptionTracking {\n                            switch collection[index] {\n                            case let .kind(kind):\n                                Button(action: {\n                                    store.send(.createNewTapButtonClicked(kind: kind))\n                                }) {\n                                    Text(kind.title)\n                                }.disabled(kind.builder is DisabledChatTabBuilder)\n                            case let .folder(title, list):\n                                Menu {\n                                    ForEach(0..<list.endIndex, id: \\.self) { index in\n                                        Button(action: {\n                                            store.send(\n                                                .createNewTapButtonClicked(kind: list[index])\n                                            )\n                                        }) {\n                                            Text(list[index].title)\n                                        }\n                                    }\n                                } label: {\n                                    Text(title)\n                                }\n                            }\n                        }\n                    }\n                } label: {\n                    Image(systemName: \"plus\")\n                } primaryAction: {\n                    store.send(.createNewTapButtonClicked(kind: nil))\n                }\n                .foregroundColor(.secondary)\n                .menuStyle(.borderedButton)\n                .padding(.horizontal, 4)\n                .fixedSize(horizontal: true, vertical: false)\n                .onHover { isHovering in\n                    if isHovering {\n                        store.send(.createNewTapButtonHovered)\n                    }\n                }\n            }\n        }\n    }\n}\n\nstruct ChatTabBarDropDelegate: DropDelegate {\n    let store: StoreOf<ChatPanel>\n    let tabs: IdentifiedArray<String, ChatTabInfo>\n    let itemId: String\n    @Binding var draggingTabId: String?\n\n    func dropUpdated(info: DropInfo) -> DropProposal? {\n        return DropProposal(operation: .move)\n    }\n\n    func performDrop(info: DropInfo) -> Bool {\n        draggingTabId = nil\n        return true\n    }\n\n    func dropEntered(info: DropInfo) {\n        guard itemId != draggingTabId else { return }\n        let from = tabs.firstIndex { $0.id == draggingTabId }\n        let to = tabs.firstIndex { $0.id == itemId }\n        guard let from, let to, from != to else { return }\n        store.send(.moveChatTab(from: from, to: to))\n    }\n}\n\nstruct ChatTabBarButton<Content: View, Icon: View>: View {\n    let store: StoreOf<ChatPanel>\n    let info: ChatTabInfo\n    let content: () -> Content\n    let icon: () -> Icon\n    let isSelected: Bool\n    @State var isHovered: Bool = false\n\n    var body: some View {\n        HStack(spacing: 0) {\n            HStack(spacing: 4) {\n                icon().foregroundColor(.secondary)\n                content()\n            }\n            .font(.callout)\n            .lineLimit(1)\n            .frame(maxWidth: 120)\n            .padding(.horizontal, 28)\n            .contentShape(Rectangle())\n            .onTapGesture {\n                store.send(.tabClicked(id: info.id))\n            }\n            .overlay(alignment: .leading) {\n                Button(action: {\n                    store.send(.closeTabButtonClicked(id: info.id))\n                }) {\n                    Image(systemName: \"xmark\")\n                        .foregroundColor(.secondary)\n                }\n                .buttonStyle(.plain)\n                .padding(2)\n                .padding(.leading, 8)\n                .opacity(isHovered ? 1 : 0)\n            }\n            .onHover { isHovered = $0 }\n            .animation(.linear(duration: 0.1), value: isHovered)\n            .animation(.linear(duration: 0.1), value: isSelected)\n\n            Divider().padding(.vertical, 6)\n        }\n        .background(isSelected ? Color(nsColor: .selectedControlColor) : Color.clear)\n        .frame(maxHeight: .infinity)\n    }\n}\n\nstruct ChatTabContainer: View {\n    let store: StoreOf<ChatPanel>\n    @Environment(\\.chatTabPool) var chatTabPool\n\n    var body: some View {\n        WithPerceptionTracking {\n            let tabInfo = store.chatTabGroup.tabInfo\n            let selectedTabId = store.chatTabGroup.selectedTabId\n                ?? store.chatTabGroup.tabInfo.first?.id\n                ?? \"\"\n\n            ZStack {\n                if tabInfo.isEmpty {\n                    Text(\"Empty\")\n                } else {\n                    ForEach(tabInfo) { tabInfo in\n                        if let tab = chatTabPool.getTab(of: tabInfo.id) {\n                            let isActive = tab.id == selectedTabId\n                            tab.body\n                                .opacity(isActive ? 1 : 0)\n                                .disabled(!isActive)\n                                .allowsHitTesting(isActive)\n                                .frame(maxWidth: .infinity, maxHeight: .infinity)\n                                // move it out of window\n                                .rotationEffect(\n                                    isActive ? .zero : .degrees(90),\n                                    anchor: .topLeading\n                                )\n                        } else {\n                            Text(\"404 Not Found\")\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nstruct CreateOtherChatTabMenuStyle: MenuStyle {\n    func makeBody(configuration: Configuration) -> some View {\n        Image(systemName: \"chevron.down\")\n            .resizable()\n            .frame(width: 7, height: 4)\n            .frame(maxHeight: .infinity)\n            .padding(.leading, 4)\n            .padding(.trailing, 8)\n            .foregroundColor(.secondary)\n    }\n}\n\nstruct ChatWindowView_Previews: PreviewProvider {\n    static let pool = ChatTabPool([\n        \"2\": EmptyChatTab(id: \"2\"),\n        \"3\": EmptyChatTab(id: \"3\"),\n        \"4\": EmptyChatTab(id: \"4\"),\n        \"5\": EmptyChatTab(id: \"5\"),\n        \"6\": EmptyChatTab(id: \"6\"),\n        \"7\": EmptyChatTab(id: \"7\"),\n    ])\n\n    static func createStore() -> StoreOf<ChatPanel> {\n        StoreOf<ChatPanel>(\n            initialState: .init(\n                chatTabGroup: .init(\n                    tabInfo: [\n                        .init(id: \"2\", title: \"Empty-2\"),\n                        .init(id: \"3\", title: \"Empty-3\"),\n                        .init(id: \"4\", title: \"Empty-4\"),\n                        .init(id: \"5\", title: \"Empty-5\"),\n                        .init(id: \"6\", title: \"Empty-6\"),\n                        .init(id: \"7\", title: \"Empty-7\"),\n                    ] as IdentifiedArray<String, ChatTabInfo>,\n                    selectedTabId: \"2\"\n                ),\n                isPanelDisplayed: true\n            ),\n            reducer: { ChatPanel() }\n        )\n    }\n\n    static var previews: some View {\n        ChatWindowView(store: createStore(), toggleVisibility: { _ in })\n            .xcodeStyleFrame()\n            .padding()\n            .environment(\\.chatTabPool, pool)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/ChatPanel.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport ChatTab\nimport ComposableArchitecture\nimport SwiftUI\n\npublic enum ChatTabBuilderCollection: Equatable {\n    case folder(title: String, kinds: [ChatTabKind])\n    case kind(ChatTabKind)\n}\n\npublic struct ChatTabKind: Equatable {\n    public var builder: any ChatTabBuilder\n    var title: String { builder.title }\n\n    public init(_ builder: any ChatTabBuilder) {\n        self.builder = builder\n    }\n\n    public static func == (lhs: Self, rhs: Self) -> Bool {\n        lhs.title == rhs.title\n    }\n}\n\n@Reducer\npublic struct ChatPanel {\n    public struct ChatTabGroup: Equatable {\n        public var tabInfo: IdentifiedArray<String, ChatTabInfo>\n        public var tabCollection: [ChatTabBuilderCollection]\n        public var selectedTabId: String?\n\n        public var selectedTabInfo: ChatTabInfo? {\n            guard let id = selectedTabId else { return tabInfo.first }\n            return tabInfo[id: id]\n        }\n\n        init(\n            tabInfo: IdentifiedArray<String, ChatTabInfo> = [],\n            tabCollection: [ChatTabBuilderCollection] = [],\n            selectedTabId: String? = nil\n        ) {\n            self.tabInfo = tabInfo\n            self.tabCollection = tabCollection\n            self.selectedTabId = selectedTabId\n        }\n    }\n\n    @ObservableState\n    public struct State: Equatable {\n        public var chatTabGroup = ChatTabGroup()\n        var colorScheme: ColorScheme = .light\n        public internal(set) var isPanelDisplayed = false\n        var isDetached = false\n        var isFullScreen = false\n    }\n\n    public enum Action: Equatable {\n        // Window\n        case hideButtonClicked\n        case closeActiveTabClicked\n        case toggleChatPanelDetachedButtonClicked\n        case detachChatPanel\n        case attachChatPanel\n        case enterFullScreen\n        case exitFullScreen\n        case presentChatPanel(forceDetach: Bool)\n\n        // Tabs\n        case updateChatTabInfo(IdentifiedArray<String, ChatTabInfo>)\n        case createNewTapButtonHovered\n        case closeTabButtonClicked(id: String)\n        case createNewTapButtonClicked(kind: ChatTabKind?)\n        case tabClicked(id: String)\n        case appendAndSelectTab(ChatTabInfo)\n        case switchToNextTab\n        case switchToPreviousTab\n        case moveChatTab(from: Int, to: Int)\n        case focusActiveChatTab\n\n        case chatTab(IdentifiedActionOf<ChatTabItem>)\n    }\n\n    @Dependency(\\.chatTabPool) var chatTabPool\n    @Dependency(\\.suggestionWidgetControllerDependency) var suggestionWidgetControllerDependency\n    @Dependency(\\.xcodeInspector) var xcodeInspector\n    @Dependency(\\.activatePreviousActiveXcode) var activatePreviouslyActiveXcode\n    @Dependency(\\.activateThisApp) var activateExtensionService\n    @Dependency(\\.chatTabBuilderCollection) var chatTabBuilderCollection\n\n    @MainActor func toggleFullScreen() {\n        let window = suggestionWidgetControllerDependency.windowsController?.windows\n            .chatPanelWindow\n        window?.toggleFullScreen(nil)\n    }\n\n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .hideButtonClicked:\n                state.isPanelDisplayed = false\n\n                if state.isFullScreen {\n                    return .run { _ in\n                        await MainActor.run { toggleFullScreen() }\n                        activatePreviouslyActiveXcode()\n                    }\n                }\n\n                return .run { _ in\n                    activatePreviouslyActiveXcode()\n                }\n\n            case .closeActiveTabClicked:\n                if let id = state.chatTabGroup.selectedTabId {\n                    return .run { send in\n                        await send(.closeTabButtonClicked(id: id))\n                    }\n                }\n\n                state.isPanelDisplayed = false\n                return .none\n\n            case .toggleChatPanelDetachedButtonClicked:\n                if state.isFullScreen, state.isDetached {\n                    return .run { send in\n                        await send(.attachChatPanel)\n                    }\n                }\n\n                state.isDetached.toggle()\n                return .none\n\n            case .detachChatPanel:\n                state.isDetached = true\n                return .none\n\n            case .attachChatPanel:\n                if state.isFullScreen {\n                    return .run { send in\n                        await MainActor.run { toggleFullScreen() }\n                        try await Task.sleep(nanoseconds: 1_000_000_000)\n                        await send(.attachChatPanel)\n                    }\n                }\n\n                state.isDetached = false\n                return .none\n\n            case .enterFullScreen:\n                state.isFullScreen = true\n                return .run { send in\n                    await send(.detachChatPanel)\n                }\n\n            case .exitFullScreen:\n                state.isFullScreen = false\n                return .none\n\n            case let .presentChatPanel(forceDetach):\n                if forceDetach {\n                    state.isDetached = true\n                }\n                state.isPanelDisplayed = true\n                return .run { send in\n                    if forceDetach {\n                        await suggestionWidgetControllerDependency.windowsController?.windows\n                            .chatPanelWindow\n                            .centerInActiveSpaceIfNeeded()\n                    }\n                    await send(.focusActiveChatTab)\n                }\n\n            case let .updateChatTabInfo(chatTabInfo):\n                let previousSelectedIndex = state.chatTabGroup.tabInfo\n                    .firstIndex(where: { $0.id == state.chatTabGroup.selectedTabId })\n                state.chatTabGroup.tabInfo = chatTabInfo\n                if !chatTabInfo.contains(where: { $0.id == state.chatTabGroup.selectedTabId }) {\n                    if let previousSelectedIndex {\n                        let proposedSelectedIndex = previousSelectedIndex - 1\n                        if proposedSelectedIndex >= 0,\n                           proposedSelectedIndex < chatTabInfo.endIndex\n                        {\n                            state.chatTabGroup.selectedTabId = chatTabInfo[proposedSelectedIndex].id\n                        } else {\n                            state.chatTabGroup.selectedTabId = chatTabInfo.first?.id\n                        }\n                    } else {\n                        state.chatTabGroup.selectedTabId = nil\n                    }\n                }\n                return .none\n\n            case let .closeTabButtonClicked(id):\n                let firstIndex = state.chatTabGroup.tabInfo.firstIndex { $0.id == id }\n                let nextIndex = {\n                    guard let firstIndex else { return 0 }\n                    let nextIndex = firstIndex - 1\n                    return max(nextIndex, 0)\n                }()\n                state.chatTabGroup.tabInfo.removeAll { $0.id == id }\n                chatTabPool.getTab(of: id)?.close()\n                if state.chatTabGroup.tabInfo.isEmpty {\n                    state.isPanelDisplayed = false\n                }\n                if nextIndex < state.chatTabGroup.tabInfo.count {\n                    state.chatTabGroup.selectedTabId = state.chatTabGroup.tabInfo[nextIndex].id\n                } else {\n                    state.chatTabGroup.selectedTabId = nil\n                }\n                return .none\n\n            case .createNewTapButtonHovered:\n                state.chatTabGroup.tabCollection = chatTabBuilderCollection()\n                return .none\n\n            case .createNewTapButtonClicked:\n                return .none // handled elsewhere\n\n            case let .tabClicked(id):\n                guard state.chatTabGroup.tabInfo.contains(where: { $0.id == id }) else {\n                    state.chatTabGroup.selectedTabId = nil\n                    return .none\n                }\n                state.chatTabGroup.selectedTabId = id\n                return .run { send in\n                    await send(.focusActiveChatTab)\n                }\n\n            case let .appendAndSelectTab(tab):\n                guard !state.chatTabGroup.tabInfo.contains(where: { $0.id == tab.id })\n                else { return .none }\n                state.chatTabGroup.tabInfo.append(tab)\n                state.chatTabGroup.selectedTabId = tab.id\n                return .run { send in\n                    await send(.focusActiveChatTab)\n                }\n\n            case .switchToNextTab:\n                let selectedId = state.chatTabGroup.selectedTabId\n                guard let index = state.chatTabGroup.tabInfo\n                    .firstIndex(where: { $0.id == selectedId })\n                else { return .none }\n                let nextIndex = index + 1\n                if nextIndex >= state.chatTabGroup.tabInfo.endIndex {\n                    return .none\n                }\n                let targetId = state.chatTabGroup.tabInfo[nextIndex].id\n                state.chatTabGroup.selectedTabId = targetId\n                return .run { send in\n                    await send(.focusActiveChatTab)\n                }\n\n            case .switchToPreviousTab:\n                let selectedId = state.chatTabGroup.selectedTabId\n                guard let index = state.chatTabGroup.tabInfo\n                    .firstIndex(where: { $0.id == selectedId })\n                else { return .none }\n                let previousIndex = index - 1\n                if previousIndex < 0 || previousIndex >= state.chatTabGroup.tabInfo.endIndex {\n                    return .none\n                }\n                let targetId = state.chatTabGroup.tabInfo[previousIndex].id\n                state.chatTabGroup.selectedTabId = targetId\n                return .run { send in\n                    await send(.focusActiveChatTab)\n                }\n\n            case let .moveChatTab(from, to):\n                guard from >= 0, from < state.chatTabGroup.tabInfo.endIndex, to >= 0,\n                      to <= state.chatTabGroup.tabInfo.endIndex\n                else {\n                    return .none\n                }\n                let tab = state.chatTabGroup.tabInfo[from]\n                state.chatTabGroup.tabInfo.remove(at: from)\n                state.chatTabGroup.tabInfo.insert(tab, at: to)\n                return .none\n\n            case .focusActiveChatTab:\n                let id = state.chatTabGroup.selectedTabInfo?.id\n                guard let id else { return .none }\n                return .run { send in\n                    await send(.chatTab(.element(id: id, action: .focus)))\n                }\n\n            case let .chatTab(.element(id, .close)):\n                return .run { send in\n                    await send(.closeTabButtonClicked(id: id))\n                }\n\n            case .chatTab:\n                return .none\n            }\n        }.forEach(\\.chatTabGroup.tabInfo, action: \\.chatTab) {\n            ChatTabItem()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/CircularWidget.swift",
    "content": "import ActiveApplicationMonitor\nimport ComposableArchitecture\nimport Preferences\nimport SuggestionBasic\nimport SwiftUI\n\n@Reducer\npublic struct CircularWidget {\n    public struct IsProcessingCounter: Equatable {\n        var expirationDate: TimeInterval\n    }\n\n    @ObservableState\n    public struct State: Equatable {\n        var isProcessingCounters = [IsProcessingCounter]()\n        var isProcessing: Bool\n        var isDisplayingContent: Bool\n        var isContentEmpty: Bool\n        var isChatPanelDetached: Bool\n        var isChatOpen: Bool\n    }\n\n    public enum Action: Equatable {\n        case widgetClicked\n        case detachChatPanelToggleClicked\n        case openChatButtonClicked\n        case openModificationButtonClicked\n        case runCustomCommandButtonClicked(CustomCommand)\n        case markIsProcessing\n        case endIsProcessing\n        case _forceEndIsProcessing\n    }\n\n    struct CancelAutoEndIsProcessKey: Hashable {}\n\n    @Dependency(\\.suggestionWidgetControllerDependency) var suggestionWidgetControllerDependency\n    \n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .detachChatPanelToggleClicked:\n                return .none // handled elsewhere\n                \n            case .openChatButtonClicked:\n                return .run { _ in\n                    suggestionWidgetControllerDependency.onOpenChatClicked()\n                }\n                \n            case .openModificationButtonClicked:\n                return .run { _ in\n                    suggestionWidgetControllerDependency.onOpenModificationButtonClicked()\n                }\n                \n            case let .runCustomCommandButtonClicked(command):\n                return .run { _ in\n                    suggestionWidgetControllerDependency.onCustomCommandClicked(command)\n                }\n                \n            case .widgetClicked:\n                return .none // handled elsewhere\n                \n            case .markIsProcessing:\n                let deadline = Date().timeIntervalSince1970 + 20\n                state.isProcessingCounters.append(IsProcessingCounter(expirationDate: deadline))\n                state.isProcessing = true\n                return .run { send in\n                    try await Task.sleep(nanoseconds: 20 * 1_000_000_000)\n                    try Task.checkCancellation()\n                    await send(._forceEndIsProcessing)\n                }.cancellable(id: CancelAutoEndIsProcessKey(), cancelInFlight: true)\n                \n            case .endIsProcessing:\n                if !state.isProcessingCounters.isEmpty {\n                    state.isProcessingCounters.removeFirst()\n                }\n                state.isProcessingCounters\n                    .removeAll(where: { $0.expirationDate < Date().timeIntervalSince1970 })\n                state.isProcessing = !state.isProcessingCounters.isEmpty\n                return .none\n                \n            case ._forceEndIsProcessing:\n                state.isProcessingCounters.removeAll()\n                state.isProcessing = false\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodeGroup.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport PromptToCodeService\nimport SuggestionBasic\nimport XcodeInspector\n\n@Reducer\npublic struct PromptToCodeGroup {\n    @ObservableState\n    public struct State {\n        public var promptToCodes: IdentifiedArrayOf<PromptToCodePanel.State> = []\n        public var activeDocumentURL: PromptToCodePanel.State.ID? = XcodeInspector.shared\n            .realtimeActiveDocumentURL\n        public var selectedTabId: URL?\n        public var activePromptToCode: PromptToCodePanel.State? {\n            get {\n                guard let selectedTabId else { return promptToCodes.first }\n                return promptToCodes[id: selectedTabId] ?? promptToCodes.first\n            }\n            set {\n                selectedTabId = newValue?.id\n                if let id = selectedTabId {\n                    promptToCodes[id: id] = newValue\n                }\n            }\n        }\n    }\n\n    public enum Action {\n        /// Activate the prompt to code if it exists or create it if it doesn't\n        case activateOrCreatePromptToCode(PromptToCodePanel.State)\n        case createPromptToCode(PromptToCodePanel.State, sendImmediately: Bool)\n        case updatePromptToCodeRange(\n            id: PromptToCodePanel.State.ID,\n            snippetId: UUID,\n            range: CursorRange\n        )\n        case discardAcceptedPromptToCodeIfNotContinuous(id: PromptToCodePanel.State.ID)\n        case updateActivePromptToCode(documentURL: URL)\n        case discardExpiredPromptToCode(documentURLs: [URL])\n        case tabClicked(id: URL)\n        case closeTabButtonClicked(id: URL)\n        case switchToNextTab\n        case switchToPreviousTab\n        case promptToCode(IdentifiedActionOf<PromptToCodePanel>)\n        case activePromptToCode(PromptToCodePanel.Action)\n    }\n\n    @Dependency(\\.activatePreviousActiveXcode) var activatePreviousActiveXcode\n\n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case let .activateOrCreatePromptToCode(s):\n                if let promptToCode = state.activePromptToCode, s.id == promptToCode.id {\n                    state.selectedTabId = promptToCode.id\n                    return .run { send in\n                        await send(.promptToCode(.element(\n                            id: promptToCode.id,\n                            action: .focusOnTextField\n                        )))\n                    }\n                }\n                return .run { send in\n                    await send(.createPromptToCode(s, sendImmediately: false))\n                }\n            case let .createPromptToCode(newPromptToCode, sendImmediately):\n                var newPromptToCode = newPromptToCode\n                newPromptToCode.isActiveDocument = newPromptToCode.id == state.activeDocumentURL\n                state.promptToCodes.append(newPromptToCode)\n                state.selectedTabId = newPromptToCode.id\n                return .run { [newPromptToCode] send in\n                    if sendImmediately,\n                       !newPromptToCode.contextInputController.instruction.string.isEmpty\n                    {\n                        await send(.promptToCode(.element(\n                            id: newPromptToCode.id,\n                            action: .modifyCodeButtonTapped\n                        )))\n                    }\n                }.cancellable(\n                    id: PromptToCodePanel.CancellationKey.modifyCode(newPromptToCode.id),\n                    cancelInFlight: true\n                )\n\n            case let .updatePromptToCodeRange(id, snippetId, range):\n                if let p = state.promptToCodes[id: id], p.promptToCodeState.isAttachedToTarget {\n                    state.promptToCodes[id: id]?.promptToCodeState.snippets[id: snippetId]?\n                        .attachedRange = range\n                }\n                return .none\n\n            case let .discardAcceptedPromptToCodeIfNotContinuous(id):\n                for itemId in state.promptToCodes.ids {\n                    if itemId == id, state.promptToCodes[id: itemId]?.clickedButton == .accept {\n                        state.promptToCodes.remove(id: itemId)\n                    } else {\n                        state.promptToCodes[id: itemId]?.clickedButton = nil\n                    }\n                }\n                return .none\n\n            case let .updateActivePromptToCode(documentURL):\n                state.activeDocumentURL = documentURL\n                for index in state.promptToCodes.indices {\n                    state.promptToCodes[index].isActiveDocument =\n                        state.promptToCodes[index].id == documentURL\n                }\n                return .none\n\n            case let .discardExpiredPromptToCode(documentURLs):\n                for url in documentURLs {\n                    state.promptToCodes.remove(id: url)\n                }\n                return .none\n\n            case let .tabClicked(id):\n                state.selectedTabId = id\n                return .none\n\n            case let .closeTabButtonClicked(id):\n                return .run { send in\n                    await send(.promptToCode(.element(\n                        id: id,\n                        action: .cancelButtonTapped\n                    )))\n                }\n\n            case .switchToNextTab:\n                if let selectedTabId = state.selectedTabId,\n                   let index = state.promptToCodes.index(id: selectedTabId)\n                {\n                    let nextIndex = (index + 1) % state.promptToCodes.count\n                    state.selectedTabId = state.promptToCodes[nextIndex].id\n                }\n                return .none\n\n            case .switchToPreviousTab:\n                if let selectedTabId = state.selectedTabId,\n                   let index = state.promptToCodes.index(id: selectedTabId)\n                {\n                    let previousIndex = (index - 1 + state.promptToCodes.count) % state\n                        .promptToCodes.count\n                    state.selectedTabId = state.promptToCodes[previousIndex].id\n                }\n                return .none\n\n            case .promptToCode:\n                return .none\n\n            case .activePromptToCode:\n                return .none\n            }\n        }\n        .ifLet(\\.activePromptToCode, action: \\.activePromptToCode) {\n            PromptToCodePanel()\n        }\n        .forEach(\\.promptToCodes, action: \\.promptToCode, element: {\n            PromptToCodePanel()\n        })\n\n        Reduce { state, action in\n            switch action {\n            case let .promptToCode(.element(id, .cancelButtonTapped)):\n                state.promptToCodes.remove(id: id)\n                let isEmpty = state.promptToCodes.isEmpty\n                return .run { _ in\n                    if isEmpty {\n                        activatePreviousActiveXcode()\n                    }\n                }\n            case .activePromptToCode(.cancelButtonTapped):\n                guard let id = state.selectedTabId else { return .none }\n                state.promptToCodes.remove(id: id)\n                let isEmpty = state.promptToCodes.isEmpty\n                return .run { _ in\n                    if isEmpty {\n                        activatePreviousActiveXcode()\n                    }\n                }\n            default: return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodePanel.swift",
    "content": "import AppKit\nimport ChatBasic\nimport ComposableArchitecture\nimport CustomAsyncAlgorithms\nimport Dependencies\nimport Foundation\nimport ModificationBasic\nimport Preferences\nimport PromptToCodeCustomization\nimport PromptToCodeService\nimport SuggestionBasic\nimport XcodeInspector\n\n@Reducer\npublic struct PromptToCodePanel {\n    @ObservableState\n    public struct State: Identifiable {\n        public enum FocusField: Equatable {\n            case textField\n        }\n\n        public enum ClickedButton: Equatable {\n            case accept\n            case acceptAndContinue\n        }\n\n        @Shared public var promptToCodeState: ModificationState\n        @ObservationStateIgnored\n        public var contextInputController: PromptToCodeContextInputController\n\n        public var id: URL { promptToCodeState.source.documentURL }\n\n        public var commandName: String?\n        public var isContinuous: Bool\n        public var focusedField: FocusField? = .textField\n\n        public var filename: String {\n            promptToCodeState.source.documentURL.lastPathComponent\n        }\n\n        public var canRevert: Bool { !promptToCodeState.history.isEmpty }\n\n        public var generateDescriptionRequirement: Bool\n\n        public var clickedButton: ClickedButton?\n\n        public var isActiveDocument: Bool = false\n\n        public var snippetPanels: IdentifiedArrayOf<PromptToCodeSnippetPanel.State> {\n            get {\n                IdentifiedArrayOf(\n                    uniqueElements: promptToCodeState.snippets.map {\n                        PromptToCodeSnippetPanel.State(snippet: $0)\n                    }\n                )\n            }\n            set {\n                promptToCodeState.snippets = IdentifiedArrayOf(\n                    uniqueElements: newValue.map(\\.snippet)\n                )\n            }\n        }\n\n        public init(\n            promptToCodeState: Shared<ModificationState>,\n            instruction: String?,\n            commandName: String? = nil,\n            isContinuous: Bool = false,\n            generateDescriptionRequirement: Bool = UserDefaults.shared\n                .value(for: \\.promptToCodeGenerateDescription)\n        ) {\n            _promptToCodeState = promptToCodeState\n            self.isContinuous = isContinuous\n            self.generateDescriptionRequirement = generateDescriptionRequirement\n            self.commandName = commandName\n            contextInputController = PromptToCodeCustomization\n                .contextInputControllerFactory(promptToCodeState)\n            focusedField = .textField\n            contextInputController.instruction = instruction\n                .map(NSAttributedString.init(string:)) ?? .init()\n        }\n    }\n\n    public enum Action: BindableAction {\n        case binding(BindingAction<State>)\n        case focusOnTextField\n        case selectionRangeToggleTapped\n        case modifyCodeButtonTapped\n        case revertButtonTapped\n        case stopRespondingButtonTapped\n        case modifyCodeFinished\n        case modifyCodeCancelled\n        case cancelButtonTapped\n        case acceptButtonTapped\n        case acceptAndContinueButtonTapped\n        case revealFileButtonClicked\n        case statusUpdated([String])\n        case referencesUpdated([ChatMessage.Reference])\n        case snippetPanel(IdentifiedActionOf<PromptToCodeSnippetPanel>)\n    }\n\n    @Dependency(\\.commandHandler) var commandHandler\n    @Dependency(\\.activateThisApp) var activateThisApp\n    @Dependency(\\.activatePreviousActiveXcode) var activatePreviousActiveXcode\n\n    enum CancellationKey: Hashable {\n        case modifyCode(State.ID)\n    }\n\n    public var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { state, action in\n            switch action {\n            case .binding:\n                return .none\n\n            case .snippetPanel:\n                return .none\n\n            case .focusOnTextField:\n                state.focusedField = .textField\n                return .none\n\n            case .selectionRangeToggleTapped:\n                state.promptToCodeState.isAttachedToTarget.toggle()\n                return .none\n\n            case .modifyCodeButtonTapped:\n                guard !state.promptToCodeState.isGenerating else { return .none }\n                let copiedState = state\n                let contextInputController = state.contextInputController\n                state.promptToCodeState.isGenerating = true\n                state.promptToCodeState.pushHistory(instruction: .init(\n                    attributedString: contextInputController.instruction\n                ))\n                state.promptToCodeState.references = []\n                let snippets = state.promptToCodeState.snippets\n\n                return .run { send in\n                    do {\n                        let context = await contextInputController.resolveContext(\n                            forDocumentURL: copiedState.promptToCodeState.source.documentURL,\n                            onStatusChange: { await send(.statusUpdated($0)) }\n                        )\n                        await send(.referencesUpdated(context.references))\n                        let agentFactory = context.agent ?? { SimpleModificationAgent() }\n                        _ = try await withThrowingTaskGroup(of: Void.self) { group in\n                            for (index, snippet) in snippets.enumerated() {\n                                if index > 3 { // at most 3 at a time\n                                    _ = try await group.next()\n                                }\n                                group.addTask {\n                                    try await Task\n                                        .sleep(nanoseconds: UInt64.random(in: 0...1_000_000_000))\n                                    let agent = agentFactory()\n                                    let stream = agent.send(.init(\n                                        code: snippet.originalCode,\n                                        requirement: context.instruction,\n                                        source: .init(\n                                            language: copiedState.promptToCodeState.source.language,\n                                            documentURL: copiedState.promptToCodeState.source\n                                                .documentURL,\n                                            projectRootURL: copiedState.promptToCodeState.source\n                                                .projectRootURL,\n                                            content: copiedState.promptToCodeState.source.content,\n                                            lines: copiedState.promptToCodeState.source.lines\n                                        ),\n                                        isDetached: !copiedState.promptToCodeState\n                                            .isAttachedToTarget,\n                                        extraSystemPrompt: copiedState.promptToCodeState\n                                            .extraSystemPrompt,\n                                        range: snippet.attachedRange,\n                                        references: context.references,\n                                        topics: context.topics\n                                    )).map {\n                                        switch $0 {\n                                        case let .code(code):\n                                            return (code: code, description: \"\")\n                                        case let .explanation(explanation):\n                                            return (code: \"\", description: explanation)\n                                        }\n                                    }.timedDebounce(for: 0.4) { lhs, rhs in\n                                        (\n                                            code: lhs.code + rhs.code,\n                                            description: lhs.description + rhs.description\n                                        )\n                                    }\n\n                                    do {\n                                        for try await response in stream {\n                                            try Task.checkCancellation()\n                                            await send(.snippetPanel(.element(\n                                                id: snippet.id,\n                                                action: .modifyCodeChunkReceived(\n                                                    code: response.code,\n                                                    description: response.description\n                                                )\n                                            )))\n                                        }\n                                        await send(.snippetPanel(.element(\n                                            id: snippet.id,\n                                            action: .modifyCodeFinished\n                                        )))\n                                    } catch is CancellationError {\n                                        await send(.snippetPanel(.element(\n                                            id: snippet.id,\n                                            action: .modifyCodeFinished\n                                        )))\n                                        throw CancellationError()\n                                    } catch {\n                                        if (error as NSError).code == NSURLErrorCancelled {\n                                            await send(.snippetPanel(.element(\n                                                id: snippet.id,\n                                                action: .modifyCodeFinished\n                                            )))\n                                            throw CancellationError()\n                                        }\n                                        await send(.snippetPanel(.element(\n                                            id: snippet.id,\n                                            action: .modifyCodeFailed(\n                                                error: error.localizedDescription\n                                            )\n                                        )))\n                                    }\n                                }\n                            }\n\n                            try await group.waitForAll()\n                        }\n\n                        await send(.modifyCodeFinished)\n                    } catch is CancellationError {\n                        try Task.checkCancellation()\n                        await send(.modifyCodeCancelled)\n                    } catch {\n                        await send(.modifyCodeFinished)\n                    }\n                }.cancellable(id: CancellationKey.modifyCode(state.id), cancelInFlight: true)\n\n            case .revertButtonTapped:\n                if let instruction = state.promptToCodeState.popHistory() {\n                    state.contextInputController.instruction = instruction\n                }\n                return .none\n\n            case .stopRespondingButtonTapped:\n                state.promptToCodeState.isGenerating = false\n                state.promptToCodeState.status = []\n                return .cancel(id: CancellationKey.modifyCode(state.id))\n\n            case .modifyCodeFinished:\n                state.contextInputController.instruction = .init(\"\")\n                state.promptToCodeState.isGenerating = false\n                state.promptToCodeState.status = []\n\n                if state.promptToCodeState.snippets.allSatisfy({ snippet in\n                    snippet.modifiedCode.isEmpty && snippet.description.isEmpty && snippet\n                        .error == nil\n                }) {\n                    // if both code and description are empty, we treat it as failed\n                    return .run { send in\n                        await send(.revertButtonTapped)\n                    }\n                }\n                return .none\n\n            case .modifyCodeCancelled:\n                state.promptToCodeState.isGenerating = false\n                return .none\n\n            case .cancelButtonTapped:\n                return .cancel(id: CancellationKey.modifyCode(state.id))\n\n            case .acceptButtonTapped:\n                state.clickedButton = .accept\n                return .run { _ in\n                    await commandHandler.acceptModification()\n                    activatePreviousActiveXcode()\n                }\n\n            case .acceptAndContinueButtonTapped:\n                state.clickedButton = .acceptAndContinue\n                return .run { _ in\n                    await commandHandler.acceptModification()\n                    activateThisApp()\n                }\n\n            case .revealFileButtonClicked:\n                let url = state.promptToCodeState.source.documentURL\n                let startLine = state.snippetPanels.first?.snippet.attachedRange.start.line ?? 0\n                return .run { _ in\n                    await commandHandler.presentFile(at: url, line: startLine)\n                }\n\n            case let .statusUpdated(status):\n                state.promptToCodeState.status = status\n                return .none\n\n            case let .referencesUpdated(references):\n                state.promptToCodeState.references = references\n                return .none\n            }\n        }\n\n        Reduce { _, _ in .none }.forEach(\\.snippetPanels, action: \\.snippetPanel) {\n            PromptToCodeSnippetPanel()\n        }\n    }\n}\n\n@Reducer\npublic struct PromptToCodeSnippetPanel {\n    @ObservableState\n    public struct State: Identifiable {\n        public var id: UUID { snippet.id }\n        var snippet: ModificationSnippet\n    }\n\n    public enum Action {\n        case modifyCodeFinished\n        case modifyCodeChunkReceived(code: String, description: String)\n        case modifyCodeFailed(error: String)\n        case copyCodeButtonTapped\n    }\n\n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .modifyCodeFinished:\n                return .none\n\n            case let .modifyCodeChunkReceived(code, description):\n                state.snippet.modifiedCode += code\n                state.snippet.description += description\n                return .none\n\n            case let .modifyCodeFailed(error):\n                state.snippet.error = error\n                return .none\n\n            case .copyCodeButtonTapped:\n                NSPasteboard.general.clearContents()\n                NSPasteboard.general.setString(state.snippet.modifiedCode, forType: .string)\n                return .none\n            }\n        }\n    }\n}\n\nfinal class DefaultPromptToCodeContextInputControllerDelegate: PromptToCodeContextInputControllerDelegate {\n    let store: StoreOf<PromptToCodePanel>\n\n    init(store: StoreOf<PromptToCodePanel>) {\n        self.store = store\n    }\n\n    func modifyCodeButtonClicked() {\n        Task {\n            await store.send(.modifyCodeButtonTapped)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/SharedPanel.swift",
    "content": "import ComposableArchitecture\nimport Preferences\nimport SwiftUI\n\n@Reducer\npublic struct SharedPanel {\n    public struct Content {\n        public var promptToCodeGroup = PromptToCodeGroup.State()\n        var suggestion: PresentingCodeSuggestion?\n        var error: String?\n    }\n\n    @ObservableState\n    public struct State {\n        var content: Content = .init()\n        var colorScheme: ColorScheme = .light\n        var alignTopToAnchor = false\n        var isPanelDisplayed: Bool = false\n        var isEmpty: Bool {\n            if content.error != nil { return false }\n            if !content.promptToCodeGroup.promptToCodes.isEmpty { return false }\n            if content.suggestion != nil,\n               UserDefaults.shared\n               .value(for: \\.suggestionPresentationMode) == .floatingWidget { return false }\n            return true\n        }\n\n        var opacity: Double {\n            guard isPanelDisplayed else { return 0 }\n            guard !isEmpty else { return 0 }\n            return 1\n        }\n    }\n\n    public enum Action {\n        case errorMessageCloseButtonTapped\n        case promptToCodeGroup(PromptToCodeGroup.Action)\n    }\n\n    public var body: some ReducerOf<Self> {\n        Scope(state: \\.content.promptToCodeGroup, action: \\.promptToCodeGroup) {\n            PromptToCodeGroup()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .errorMessageCloseButtonTapped:\n                state.content.error = nil\n                return .none\n            case .promptToCodeGroup:\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/SuggestionPanel.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport SwiftUI\n\n@Reducer\npublic struct SuggestionPanel {\n    @ObservableState\n    public struct State: Equatable {\n        var content: PresentingCodeSuggestion?\n        var colorScheme: ColorScheme = .light\n        var alignTopToAnchor = false\n        var isPanelDisplayed: Bool = false\n        var isPanelOutOfFrame: Bool = false\n        var opacity: Double {\n            guard isPanelDisplayed else { return 0 }\n            if isPanelOutOfFrame { return 0 }\n            guard content != nil else { return 0 }\n            return 1\n        }\n    }\n\n    public enum Action: Equatable {\n        case noAction\n    }\n\n    public var body: some ReducerOf<Self> {\n        Reduce { _, _ in .none }\n    }\n}\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/ToastPanel.swift",
    "content": "import ComposableArchitecture\nimport Preferences\nimport SwiftUI\nimport Toast\n\n@Reducer\npublic struct ToastPanel {\n    @ObservableState\n    public struct State: Equatable {\n        var toast: Toast.State = .init()\n        var colorScheme: ColorScheme = .light\n        var alignTopToAnchor = false\n    }\n    \n    public enum Action: Equatable {\n        case start\n        case toast(Toast.Action)\n    }\n    \n    public var body: some ReducerOf<Self> {\n        Scope(state: \\.toast, action: \\.toast) {\n            Toast()\n        }\n        \n        Reduce { state, action in\n            switch action {\n            case .start:\n                return .run { send in\n                    await send(.toast(.start))\n                }\n            case .toast:\n                return .none\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/Widget.swift",
    "content": "import ActiveApplicationMonitor\nimport AppActivator\nimport AsyncAlgorithms\nimport ComposableArchitecture\nimport Foundation\nimport Logger\nimport Preferences\nimport SwiftUI\nimport Toast\nimport XcodeInspector\n\n@Reducer\npublic struct Widget {\n    public struct WindowState: Equatable {\n        var alphaValue: Double = 0\n        var frame: CGRect = .zero\n    }\n\n    public enum WindowCanBecomeKey: Equatable {\n        case sharedPanel\n        case chatPanel\n    }\n\n    @ObservableState\n    public struct State {\n        var focusingDocumentURL: URL?\n        public var colorScheme: ColorScheme = .light\n\n        var toastPanel = ToastPanel.State()\n\n        // MARK: Panels\n\n        public var panelState = WidgetPanel.State()\n\n        // MARK: ChatPanel\n\n        public var chatPanelState = ChatPanel.State()\n\n        // MARK: CircularWidget\n\n        public struct CircularWidgetState: Equatable {\n            var isProcessingCounters = [CircularWidget.IsProcessingCounter]()\n            var isProcessing: Bool = false\n        }\n\n        public var circularWidgetState = CircularWidgetState()\n        var _internalCircularWidgetState: CircularWidget.State {\n            get {\n                .init(\n                    isProcessingCounters: circularWidgetState.isProcessingCounters,\n                    isProcessing: circularWidgetState.isProcessing,\n                    isDisplayingContent: {\n                        if chatPanelState.isPanelDisplayed {\n                            return true\n                        }\n                        if panelState.sharedPanelState.isPanelDisplayed,\n                           !panelState.sharedPanelState.isEmpty\n                        {\n                            return true\n                        }\n                        if panelState.suggestionPanelState.isPanelDisplayed,\n                           panelState.suggestionPanelState.content != nil\n                        {\n                            return true\n                        }\n                        return false\n                    }(),\n                    isContentEmpty: chatPanelState.chatTabGroup.tabInfo.isEmpty\n                        && panelState.sharedPanelState.isEmpty,\n                    isChatPanelDetached: chatPanelState.isDetached,\n                    isChatOpen: chatPanelState.isPanelDisplayed\n                )\n            }\n            set {\n                circularWidgetState = .init(\n                    isProcessingCounters: newValue.isProcessingCounters,\n                    isProcessing: newValue.isProcessing\n                )\n            }\n        }\n\n        public init() {}\n    }\n\n    private enum CancelID {\n        case observeActiveApplicationChange\n        case observeCompletionPanelChange\n        case observeWindowChange\n        case observeEditorChange\n        case observeUserDefaults\n    }\n\n    public enum Action {\n        case startup\n        case observeActiveApplicationChange\n        case observeColorSchemeChange\n\n        case updateActiveApplication\n        case updateColorScheme\n\n        case updatePanelStateToMatch(WidgetLocation)\n        case updateFocusingDocumentURL\n        case setFocusingDocumentURL(to: URL?)\n        case updateKeyWindow(WindowCanBecomeKey)\n\n        case toastPanel(ToastPanel.Action)\n        case panel(WidgetPanel.Action)\n        case chatPanel(ChatPanel.Action)\n        case circularWidget(CircularWidget.Action)\n    }\n\n    var windowsController: WidgetWindowsController? {\n        suggestionWidgetControllerDependency.windowsController\n    }\n\n    @Dependency(\\.suggestionWidgetUserDefaultsObservers) var userDefaultsObservers\n    @Dependency(\\.suggestionWidgetControllerDependency) var suggestionWidgetControllerDependency\n    @Dependency(\\.xcodeInspector) var xcodeInspector\n    @Dependency(\\.mainQueue) var mainQueue\n    @Dependency(\\.activateThisApp) var activateThisApp\n    @Dependency(\\.activatePreviousActiveApp) var activatePreviousActiveApp\n\n    public enum DebounceKey: Hashable {\n        case updateWindowOpacity\n    }\n\n    public init() {}\n\n    public var body: some ReducerOf<Self> {\n        Scope(state: \\.toastPanel, action: \\.toastPanel) {\n            ToastPanel()\n        }\n\n        Scope(state: \\._internalCircularWidgetState, action: \\.circularWidget) {\n            CircularWidget()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .circularWidget(.detachChatPanelToggleClicked):\n                return .run { send in\n                    await send(.chatPanel(.toggleChatPanelDetachedButtonClicked))\n                }\n\n            case .circularWidget(.widgetClicked):\n                let wasDisplayingContent = state._internalCircularWidgetState.isDisplayingContent\n                if wasDisplayingContent {\n                    state.panelState.sharedPanelState.isPanelDisplayed = false\n                    state.panelState.suggestionPanelState.isPanelDisplayed = false\n                    state.chatPanelState.isPanelDisplayed = false\n                } else {\n                    state.panelState.sharedPanelState.isPanelDisplayed = true\n                    state.panelState.suggestionPanelState.isPanelDisplayed = true\n                    state.chatPanelState.isPanelDisplayed = true\n                }\n\n                let isDisplayingContent = state._internalCircularWidgetState.isDisplayingContent\n                let hasChat = state.chatPanelState.chatTabGroup.selectedTabInfo != nil\n                let hasPromptToCode = state.panelState.sharedPanelState.content\n                    .promptToCodeGroup.activePromptToCode != nil\n\n                return .run { send in\n                    if isDisplayingContent {\n                        if hasPromptToCode {\n                            await send(.updateKeyWindow(.sharedPanel))\n                        } else if hasChat {\n                            await send(.updateKeyWindow(.chatPanel))\n                        }\n                        await send(.chatPanel(.focusActiveChatTab))\n                    }\n\n                    if isDisplayingContent, !(await NSApplication.shared.isActive) {\n                        activateThisApp()\n                    } else if !isDisplayingContent {\n                        activatePreviousActiveApp()\n                    }\n                }\n\n            default: return .none\n            }\n        }\n\n        Scope(state: \\.panelState, action: \\.panel) {\n            WidgetPanel()\n        }\n\n        Scope(state: \\.chatPanelState, action: \\.chatPanel) {\n            ChatPanel()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .chatPanel(.presentChatPanel):\n                let isDetached = state.chatPanelState.isDetached\n                return .run { _ in\n                    await windowsController?.updateWindowLocation(\n                        animated: false,\n                        immediately: false\n                    )\n                    await windowsController?.updateWindowOpacity(immediately: false)\n                    if isDetached {\n                        Task { @MainActor in\n                            windowsController?.windows.chatPanelWindow.isWindowHidden = false\n                        }\n                    }\n                }\n\n            case .chatPanel(.toggleChatPanelDetachedButtonClicked):\n                let isDetached = state.chatPanelState.isDetached\n                return .run { _ in\n                    await windowsController?.updateWindowLocation(\n                        animated: !isDetached,\n                        immediately: false\n                    )\n                    await windowsController?.updateWindowOpacity(immediately: false)\n                }\n            default: return .none\n            }\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .startup:\n                return .merge(\n                    .run { send in\n                        await send(.toastPanel(.start))\n                        await send(.observeActiveApplicationChange)\n                        await send(.observeColorSchemeChange)\n                    }\n                )\n\n            case .observeActiveApplicationChange:\n                return .run { send in\n                    let stream = AsyncStream<AppInstanceInspector> { continuation in\n                        let task = Task {\n                            let notifications = NotificationCenter.default\n                                .notifications(named: .activeApplicationDidChange)\n                            for await _ in notifications {\n                                try Task.checkCancellation()\n                                if let app = await XcodeInspector.shared.activeApplication {\n                                    continuation.yield(app)\n                                }\n                            }\n                        }\n                        continuation.onTermination = { _ in\n                            task.cancel()\n                        }\n                    }\n\n                    var previousAppIdentifier: pid_t?\n                    for await app in stream {\n                        try Task.checkCancellation()\n                        if app.processIdentifier != previousAppIdentifier {\n                            await send(.updateActiveApplication)\n                        }\n                        previousAppIdentifier = app.processIdentifier\n                    }\n                }.cancellable(id: CancelID.observeActiveApplicationChange, cancelInFlight: true)\n\n            case .observeColorSchemeChange:\n                return .run { send in\n                    await send(.updateColorScheme)\n                    let stream = AsyncStream<Void> { continuation in\n                        userDefaultsObservers.colorSchemeChangeObserver.onChange = {\n                            continuation.yield()\n                        }\n\n                        userDefaultsObservers.systemColorSchemeChangeObserver.onChange = {\n                            continuation.yield()\n                        }\n\n                        continuation.onTermination = { _ in\n                            userDefaultsObservers.colorSchemeChangeObserver.onChange = {}\n                            userDefaultsObservers.systemColorSchemeChangeObserver.onChange = {}\n                        }\n                    }\n\n                    for await _ in stream {\n                        try Task.checkCancellation()\n                        await send(.updateColorScheme)\n                    }\n                }.cancellable(id: CancelID.observeUserDefaults, cancelInFlight: true)\n\n            case .updateActiveApplication:\n                return .none\n\n            case .updateColorScheme:\n                let widgetColorScheme = UserDefaults.shared.value(for: \\.widgetColorScheme)\n                let systemColorScheme: ColorScheme = NSApp.effectiveAppearance.name == .darkAqua\n                    ? .dark\n                    : .light\n\n                let scheme: ColorScheme = {\n                    switch (widgetColorScheme, systemColorScheme) {\n                    case (.system, .dark), (.dark, _):\n                        return .dark\n                    case (.system, .light), (.light, _):\n                        return .light\n                    case (.system, _):\n                        return .light\n                    }\n                }()\n\n                state.colorScheme = scheme\n                state.toastPanel.colorScheme = scheme\n                state.panelState.sharedPanelState.colorScheme = scheme\n                state.panelState.suggestionPanelState.colorScheme = scheme\n                state.chatPanelState.colorScheme = scheme\n                return .none\n\n            case .updateFocusingDocumentURL:\n                return .run { send in\n                    await send(.setFocusingDocumentURL(\n                        to: xcodeInspector.realtimeActiveDocumentURL\n                    ))\n                }\n\n            case let .setFocusingDocumentURL(url):\n                state.focusingDocumentURL = url\n                return .none\n\n            case let .updatePanelStateToMatch(widgetLocation):\n                state.panelState.sharedPanelState.alignTopToAnchor = widgetLocation\n                    .defaultPanelLocation\n                    .alignPanelTop\n\n                if let suggestionPanelLocation = widgetLocation.suggestionPanelLocation {\n                    state.panelState.suggestionPanelState.isPanelOutOfFrame = false\n                    state.panelState.suggestionPanelState\n                        .alignTopToAnchor = suggestionPanelLocation\n                        .alignPanelTop\n                } else {\n                    state.panelState.suggestionPanelState.isPanelOutOfFrame = true\n                }\n\n                state.toastPanel.alignTopToAnchor = widgetLocation\n                    .defaultPanelLocation\n                    .alignPanelTop\n\n                return .none\n\n            case let .updateKeyWindow(window):\n                return .run { _ in\n                    await MainActor.run {\n                        switch window {\n                        case .chatPanel:\n                            windowsController?.windows.chatPanelWindow\n                                .makeKeyAndOrderFront(nil)\n                        case .sharedPanel:\n                            windowsController?.windows.sharedPanelWindow\n                                .makeKeyAndOrderFront(nil)\n                        }\n                    }\n                }\n\n            case .toastPanel:\n                return .none\n\n            case .circularWidget:\n                return .none\n\n            case .panel:\n                return .none\n\n            case .chatPanel:\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/FeatureReducers/WidgetPanel.swift",
    "content": "import AppKit\nimport ComposableArchitecture\nimport Foundation\n\n@Reducer\npublic struct WidgetPanel {\n    @ObservableState\n    public struct State {\n        public var content: SharedPanel.Content {\n            get { sharedPanelState.content }\n            set {\n                sharedPanelState.content = newValue\n                suggestionPanelState.content = newValue.suggestion\n            }\n        }\n\n        // MARK: SharedPanel\n\n        var sharedPanelState = SharedPanel.State()\n\n        // MARK: SuggestionPanel\n\n        var suggestionPanelState = SuggestionPanel.State()\n    }\n\n    public enum Action {\n        case presentSuggestion\n        case presentSuggestionProvider(PresentingCodeSuggestion, displayContent: Bool)\n        case presentError(String)\n        case presentPromptToCode(PromptToCodePanel.State)\n        case displayPanelContent\n        case discardSuggestion\n        case removeDisplayedContent\n        case switchToAnotherEditorAndUpdateContent\n\n        case sharedPanel(SharedPanel.Action)\n        case suggestionPanel(SuggestionPanel.Action)\n    }\n\n    @Dependency(\\.suggestionWidgetControllerDependency) var suggestionWidgetControllerDependency\n    @Dependency(\\.xcodeInspector) var xcodeInspector\n    @Dependency(\\.activateThisApp) var activateThisApp\n    var windows: WidgetWindows? { suggestionWidgetControllerDependency.windowsController?.windows }\n\n    public var body: some ReducerOf<Self> {\n        Scope(state: \\.suggestionPanelState, action: \\.suggestionPanel) {\n            SuggestionPanel()\n        }\n\n        Scope(state: \\.sharedPanelState, action: \\.sharedPanel) {\n            SharedPanel()\n        }\n\n        Reduce { state, action in\n            switch action {\n            case .presentSuggestion:\n                return .run { send in\n                    guard let fileURL = await xcodeInspector.activeDocumentURL,\n                          let provider = await fetchSuggestionProvider(fileURL: fileURL)\n                    else { return }\n                    await send(.presentSuggestionProvider(provider, displayContent: true))\n                }\n\n            case let .presentSuggestionProvider(provider, displayContent):\n                state.content.suggestion = provider\n                if displayContent {\n                    return .run { send in\n                        await send(.displayPanelContent)\n                    }.animation(.easeInOut(duration: 0.2))\n                }\n                return .none\n\n            case let .presentError(errorDescription):\n                state.content.error = errorDescription\n                return .run { send in\n                    await send(.displayPanelContent)\n                }.animation(.easeInOut(duration: 0.2))\n\n            case let .presentPromptToCode(initialState):\n                return .run { send in\n                    await send(.sharedPanel(.promptToCodeGroup(.createPromptToCode(\n                        initialState,\n                        sendImmediately: true\n                    ))))\n                }\n\n            case .displayPanelContent:\n                if !state.sharedPanelState.isEmpty {\n                    state.sharedPanelState.isPanelDisplayed = true\n                }\n\n                if state.suggestionPanelState.content != nil {\n                    state.suggestionPanelState.isPanelDisplayed = true\n                }\n\n                return .none\n\n            case .discardSuggestion:\n                state.content.suggestion = nil\n                return .none\n\n            case .switchToAnotherEditorAndUpdateContent:\n                return .run { send in\n                    guard let fileURL = xcodeInspector.realtimeActiveDocumentURL\n                    else { return }\n\n                    await send(.sharedPanel(\n                        .promptToCodeGroup(\n                            .updateActivePromptToCode(documentURL: fileURL)\n                        )\n                    ))\n                }\n\n            case .removeDisplayedContent:\n                state.content.error = nil\n                state.content.suggestion = nil\n                return .none\n\n            case .sharedPanel(.promptToCodeGroup(.activateOrCreatePromptToCode)),\n                 .sharedPanel(.promptToCodeGroup(.createPromptToCode)):\n                let hasPromptToCode = !state.content.promptToCodeGroup.promptToCodes.isEmpty\n                return .run { send in\n                    await send(.displayPanelContent)\n\n                    if hasPromptToCode {\n                        activateThisApp()\n                        await MainActor.run {\n                            windows?.sharedPanelWindow.makeKey()\n                        }\n                    }\n                }.animation(.easeInOut(duration: 0.2))\n\n            case .sharedPanel:\n                return .none\n\n            case .suggestionPanel:\n                return .none\n            }\n        }\n    }\n\n    func fetchSuggestionProvider(fileURL: URL) async -> PresentingCodeSuggestion? {\n        guard let provider = await suggestionWidgetControllerDependency\n            .suggestionWidgetDataSource?\n            .suggestionForFile(at: fileURL) else { return nil }\n        return provider\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/ModuleDependency.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport ChatTab\nimport ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport Preferences\nimport SwiftUI\nimport UserDefaultsObserver\nimport XcodeInspector\n\npublic final class SuggestionWidgetControllerDependency {\n    public var suggestionWidgetDataSource: SuggestionWidgetDataSource?\n    public var onOpenChatClicked: () -> Void = {}\n    public var onOpenModificationButtonClicked: () -> Void = {}\n    public var onCustomCommandClicked: (CustomCommand) -> Void = { _ in }\n    var windowsController: WidgetWindowsController?\n\n    public init() {}\n}\n\npublic final class WidgetUserDefaultsObservers {\n    let presentationModeChangeObserver = UserDefaultsObserver(\n        object: UserDefaults.shared,\n        forKeyPaths: [\n            UserDefaultPreferenceKeys().suggestionPresentationMode.key,\n        ], context: nil\n    )\n    let colorSchemeChangeObserver = UserDefaultsObserver(\n        object: UserDefaults.shared, forKeyPaths: [\n            UserDefaultPreferenceKeys().widgetColorScheme.key,\n        ], context: nil\n    )\n    let systemColorSchemeChangeObserver = UserDefaultsObserver(\n        object: UserDefaults.standard, forKeyPaths: [\"AppleInterfaceStyle\"], context: nil\n    )\n\n    public init() {}\n}\n\nstruct SuggestionWidgetControllerDependencyKey: DependencyKey {\n    static let liveValue = SuggestionWidgetControllerDependency()\n}\n\nstruct UserDefaultsDependencyKey: DependencyKey {\n    static let liveValue = WidgetUserDefaultsObservers()\n}\n\nstruct XcodeInspectorKey: DependencyKey {\n    static let liveValue = XcodeInspector.shared\n}\n\nstruct ActiveApplicationMonitorKey: DependencyKey {\n    static let liveValue = ActiveApplicationMonitor.shared\n}\n\nstruct ChatTabBuilderCollectionKey: DependencyKey {\n    static let liveValue: () -> [ChatTabBuilderCollection] = { [] }\n}\n\npublic extension DependencyValues {\n    var suggestionWidgetControllerDependency: SuggestionWidgetControllerDependency {\n        get { self[SuggestionWidgetControllerDependencyKey.self] }\n        set { self[SuggestionWidgetControllerDependencyKey.self] = newValue }\n    }\n\n    var suggestionWidgetUserDefaultsObservers: WidgetUserDefaultsObservers {\n        get { self[UserDefaultsDependencyKey.self] }\n        set { self[UserDefaultsDependencyKey.self] = newValue }\n    }\n\n    var chatTabBuilderCollection: () -> [ChatTabBuilderCollection] {\n        get { self[ChatTabBuilderCollectionKey.self] }\n        set { self[ChatTabBuilderCollectionKey.self] = newValue }\n    }\n}\n\nextension DependencyValues {\n    var xcodeInspector: XcodeInspector {\n        get { self[XcodeInspectorKey.self] }\n        set { self[XcodeInspectorKey.self] = newValue }\n    }\n\n    var activeApplicationMonitor: ActiveApplicationMonitor {\n        get { self[ActiveApplicationMonitorKey.self] }\n        set { self[ActiveApplicationMonitorKey.self] = newValue }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/PromptToCodePanelGroupView.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport SwiftUI\n\nstruct PromptToCodePanelGroupView: View {\n    let store: StoreOf<PromptToCodeGroup>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                PromptToCodeTabBar(store: store)\n                    .frame(height: 26)\n\n                Divider()\n\n                if let store = self.store.scope(\n                    state: \\.activePromptToCode,\n                    action: \\.activePromptToCode\n                ) {\n                    PromptToCodePanelView(store: store)\n                }\n            }\n            .background(.ultraThickMaterial)\n            .xcodeStyleFrame()\n        }\n    }\n}\n\nstruct PromptToCodeTabBar: View {\n    let store: StoreOf<PromptToCodeGroup>\n\n    struct TabInfo: Equatable, Identifiable {\n        var id: URL\n        var tabTitle: String\n        var isProcessing: Bool\n    }\n\n    var body: some View {\n        HStack(spacing: 0) {\n            Tabs(store: store)\n        }\n        .background {\n            Button(action: { store.send(.switchToNextTab) }) { EmptyView() }\n                .opacity(0)\n                .keyboardShortcut(\"]\", modifiers: [.command, .shift])\n            Button(action: { store.send(.switchToPreviousTab) }) { EmptyView() }\n                .opacity(0)\n                .keyboardShortcut(\"[\", modifiers: [.command, .shift])\n        }\n    }\n\n    struct Tabs: View {\n        let store: StoreOf<PromptToCodeGroup>\n\n        var body: some View {\n            WithPerceptionTracking {\n                let tabInfo = store.promptToCodes.map {\n                    TabInfo(\n                        id: $0.id,\n                        tabTitle: $0.filename,\n                        isProcessing: $0.promptToCodeState.isGenerating\n                    )\n                }\n                let selectedTabId = store.selectedTabId\n                    ?? store.promptToCodes.first?.id\n\n                ScrollViewReader { proxy in\n                    ScrollView(.horizontal) {\n                        HStack(spacing: 0) {\n                            ForEach(tabInfo) { info in\n                                WithPerceptionTracking {\n                                    PromptToCodeTabBarButton(\n                                        store: store,\n                                        info: info,\n                                        isSelected: info.id == store.selectedTabId\n                                    )\n                                    .id(info.id)\n                                }\n                            }\n                        }\n                    }\n                    .hideScrollIndicator()\n                    .onChange(of: selectedTabId) { id in\n                        withAnimation(.easeInOut(duration: 0.2)) {\n                            proxy.scrollTo(id)\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nstruct PromptToCodeTabBarButton: View {\n    let store: StoreOf<PromptToCodeGroup>\n    let info: PromptToCodeTabBar.TabInfo\n    let isSelected: Bool\n    @State var isHovered: Bool = false\n\n    var body: some View {\n        HStack(spacing: 0) {\n            HStack(spacing: 4) {\n                if info.isProcessing {\n                    ProgressView()\n                        .controlSize(.small)\n                }\n                Text(info.tabTitle)\n                    .truncationMode(.middle)\n                    .allowsTightening(true)\n            }\n            .font(.callout)\n            .lineLimit(1)\n            .frame(maxWidth: 120)\n            .padding(.horizontal, 28)\n            .contentShape(Rectangle())\n            .onTapGesture {\n                store.send(.tabClicked(id: info.id))\n            }\n            .overlay(alignment: .leading) {\n                Button(action: {\n                    store.send(.closeTabButtonClicked(id: info.id))\n                }) {\n                    Image(systemName: \"xmark\")\n                        .foregroundColor(.secondary)\n                }\n                .buttonStyle(.plain)\n                .padding(2)\n                .padding(.leading, 8)\n                .opacity(isHovered ? 1 : 0)\n            }\n            .onHover { isHovered = $0 }\n            .animation(.linear(duration: 0.1), value: isHovered)\n            .animation(.linear(duration: 0.1), value: isSelected)\n\n            Divider().padding(.vertical, 6)\n        }\n        .background(isSelected ? Color(nsColor: .selectedControlColor) : Color.clear)\n        .frame(maxHeight: .infinity)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SharedPanelView.swift",
    "content": "import ComposableArchitecture\nimport Preferences\nimport SwiftUI\n\nextension View {\n    @ViewBuilder\n    func animation<V: Equatable>(\n        featureFlag: KeyPath<UserDefaultPreferenceKeys, FeatureFlag>,\n        _ animation: Animation?,\n        value: V\n    ) -> some View {\n        let isOn = UserDefaults.shared.value(for: featureFlag)\n        if isOn {\n            self.animation(animation, value: value)\n        } else {\n            self\n        }\n    }\n}\n\nstruct SharedPanelView: View {\n    var store: StoreOf<SharedPanel>\n\n    struct OverallState: Equatable {\n        var isPanelDisplayed: Bool\n        var opacity: Double\n        var colorScheme: ColorScheme\n        var alignTopToAnchor: Bool\n    }\n\n    var body: some View {\n        GeometryReader { geometry in\n            WithPerceptionTracking {\n                VStack(spacing: 0) {\n                    if !store.alignTopToAnchor {\n                        Spacer()\n                            .frame(minHeight: 0, maxHeight: .infinity)\n                            .allowsHitTesting(false)\n                    }\n\n                    DynamicContent(store: store)\n                        .frame(maxWidth: .infinity, maxHeight: geometry.size.height)\n                        .fixedSize(horizontal: false, vertical: true)\n                        .allowsHitTesting(store.isPanelDisplayed)\n                        .layoutPriority(1)\n\n                    if store.alignTopToAnchor {\n                        Spacer()\n                            .frame(minHeight: 0, maxHeight: .infinity)\n                            .allowsHitTesting(false)\n                    }\n                }\n                .preferredColorScheme(store.colorScheme)\n                .opacity(store.opacity)\n                .animation(\n                    featureFlag: \\.animationBCrashSuggestion,\n                    .easeInOut(duration: 0.2),\n                    value: store.isPanelDisplayed\n                )\n                .frame(maxWidth: Style.panelWidth, maxHeight: .infinity)\n            }\n        }\n    }\n\n    struct DynamicContent: View {\n        let store: StoreOf<SharedPanel>\n\n        @AppStorage(\\.suggestionPresentationMode) var suggestionPresentationMode\n\n        var body: some View {\n            WithPerceptionTracking {\n                ZStack(alignment: .topLeading) {\n                    if let errorMessage = store.content.error {\n                        error(errorMessage)\n                    } else if !store.content.promptToCodeGroup.promptToCodes.isEmpty {\n                        promptToCode()\n                    } else if let suggestionProvider = store.content.suggestion {\n                        suggestion(suggestionProvider)\n                    }\n                }\n            }\n        }\n\n        @ViewBuilder\n        func error(_ error: String) -> some View {\n            ErrorPanelView(description: error) {\n                store.send(\n                    .errorMessageCloseButtonTapped,\n                    animation: .easeInOut(duration: 0.2)\n                )\n            }\n        }\n\n        @ViewBuilder\n        func promptToCode() -> some View {\n            PromptToCodePanelGroupView(store: store.scope(\n                state: \\.content.promptToCodeGroup,\n                action: \\.promptToCodeGroup\n            ))\n        }\n\n        @ViewBuilder\n        func suggestion(_ suggestion: PresentingCodeSuggestion) -> some View {\n            switch suggestionPresentationMode {\n            case .nearbyTextCursor:\n                EmptyView()\n            case .floatingWidget:\n                CodeBlockSuggestionPanelView(suggestion: suggestion)\n            }\n        }\n    }\n}\n\nstruct CommandButtonStyle: ButtonStyle {\n    var color: Color\n    var cornerRadius: Double = 4\n\n    func makeBody(configuration: Configuration) -> some View {\n        configuration.label\n            .padding(.vertical, 4)\n            .padding(.horizontal, 8)\n            .foregroundColor(.white)\n            .background(\n                RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                    .fill(color.opacity(configuration.isPressed ? 0.8 : 1))\n                    .animation(.easeOut(duration: 0.1), value: configuration.isPressed)\n            )\n            .overlay {\n                RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                    .stroke(Color.white.opacity(0.2), style: .init(lineWidth: 1))\n            }\n    }\n}\n\n// MARK: - Previews\n\nstruct SharedPanelView_Error_Preview: PreviewProvider {\n    static var previews: some View {\n        SharedPanelView(store: .init(\n            initialState: .init(\n                content: .init(error: \"This is an error\\nerror\"),\n                colorScheme: .light,\n                isPanelDisplayed: true\n            ),\n            reducer: { SharedPanel() }\n        ))\n        .frame(width: 450, height: 200)\n    }\n}\n\nstruct SharedPanelView_Both_DisplayingSuggestion_Preview: PreviewProvider {\n    static var previews: some View {\n        SharedPanelView(store: .init(\n            initialState: .init(\n                content: .init(\n                    suggestion: .init(\n                        code: \"\"\"\n                        - (void)addSubview:(UIView *)view {\n                            [self addSubview:view];\n                        }\n                        \"\"\",\n                        language: \"objective-c\",\n                        startLineIndex: 8,\n                        suggestionCount: 2,\n                        currentSuggestionIndex: 0,\n                        replacingRange: .zero,\n                        replacingLines: [\"\"]\n                    )\n                ),\n                colorScheme: .dark,\n                isPanelDisplayed: true\n            ),\n            reducer: { SharedPanel() }\n        ))\n        .frame(width: 450, height: 200)\n        .background {\n            HStack {\n                Color.red\n                Color.green\n                Color.blue\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/Styles.swift",
    "content": "import AppKit\nimport MarkdownUI\nimport SharedUIComponents\nimport SwiftUI\n\nenum Style {\n    static let panelHeight: Double = 560\n    static let panelWidth: Double = 454\n    static let inlineSuggestionMinWidth: Double = 540\n    static let inlineSuggestionMaxHeight: Double = 400\n    static let widgetHeight: Double = 30\n    static var widgetWidth: Double = 8\n    static let widgetPadding: Double = 4\n    static let indicatorBottomPadding: Double = 40\n    static let chatWindowTitleBarHeight: Double = 24\n    static let trafficLightButtonSize: Double = 12\n}\n\nextension Color {\n    static var contentBackground: Color {\n        Color(nsColor: NSColor(name: nil, dynamicProvider: { appearance in\n            if appearance.isDarkMode {\n                return #colorLiteral(red: 0.1580096483, green: 0.1730263829, blue: 0.2026666105, alpha: 1)\n            }\n            return .white\n        }))\n    }\n\n    static var userChatContentBackground: Color {\n        Color(nsColor: NSColor(name: nil, dynamicProvider: { appearance in\n            if appearance.isDarkMode {\n                return #colorLiteral(red: 0.2284317913, green: 0.2145925438, blue: 0.3214019983, alpha: 1)\n            }\n            return #colorLiteral(red: 0.9458052187, green: 0.9311983998, blue: 0.9906365955, alpha: 1)\n        }))\n    }\n}\n\nextension NSAppearance {\n    var isDarkMode: Bool {\n        if bestMatch(from: [.darkAqua, .aqua]) == .darkAqua {\n            return true\n        } else {\n            return false\n        }\n    }\n}\n\nextension MarkdownUI.Theme {\n    static func custom(fontSize: Double) -> MarkdownUI.Theme {\n        .gitHub.text {\n            ForegroundColor(.primary)\n            BackgroundColor(Color.clear)\n            FontSize(fontSize)\n        }\n        .codeBlock { configuration in\n            configuration.label\n                .relativeLineSpacing(.em(0.225))\n                .markdownTextStyle {\n                    FontFamilyVariant(.monospaced)\n                    FontSize(.em(0.85))\n                }\n                .padding(16)\n                .padding(.top, 14)\n                .background(Color(nsColor: .textBackgroundColor).opacity(0.7))\n                .clipShape(RoundedRectangle(cornerRadius: 6))\n                .overlay(alignment: .top) {\n                    HStack(alignment: .center) {\n                        Text(configuration.language ?? \"code\")\n                            .foregroundStyle(.tertiary)\n                            .font(.callout)\n                            .padding(.leading, 8)\n                            .lineLimit(1)\n                        Spacer()\n                        CopyButton {\n                            NSPasteboard.general.clearContents()\n                            NSPasteboard.general.setString(configuration.content, forType: .string)\n                        }\n                    }\n                }\n                .markdownMargin(top: 4, bottom: 16)\n        }\n    }\n\n    static func functionCall(fontSize: Double) -> MarkdownUI.Theme {\n        .gitHub.text {\n            ForegroundColor(.secondary)\n            BackgroundColor(Color.clear)\n            FontSize(fontSize - 1)\n        }\n        .list { configuration in\n            configuration.label\n                .markdownMargin(top: 4, bottom: 4)\n        }\n        .paragraph { configuration in\n            configuration.label\n                .markdownMargin(top: 0, bottom: 4)\n        }\n        .codeBlock { configuration in\n            configuration.label\n                .relativeLineSpacing(.em(0.225))\n                .markdownTextStyle {\n                    FontFamilyVariant(.monospaced)\n                    FontSize(.em(0.85))\n                }\n                .padding(16)\n                .background(Color(nsColor: .textBackgroundColor).opacity(0.7))\n                .clipShape(RoundedRectangle(cornerRadius: 6))\n                .markdownMargin(top: 4, bottom: 4)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionPanelContent/CodeBlockSuggestionPanelView.swift",
    "content": "import Combine\nimport CommandHandler\nimport Dependencies\nimport Perception\nimport SharedUIComponents\nimport SuggestionBasic\nimport SwiftUI\nimport XcodeInspector\n\npublic struct PresentingCodeSuggestion: Equatable {\n    public var code: String\n    public var language: String\n    public var startLineIndex: Int\n    public var suggestionCount: Int\n    public var currentSuggestionIndex: Int\n    public var replacingRange: CursorRange\n    public var replacingLines: [String]\n    public var descriptions: [CodeSuggestion.Description]\n\n    public init(\n        code: String,\n        language: String,\n        startLineIndex: Int,\n        suggestionCount: Int,\n        currentSuggestionIndex: Int,\n        replacingRange: CursorRange,\n        replacingLines: [String],\n        descriptions: [CodeSuggestion.Description] = []\n    ) {\n        self.code = code\n        self.language = language\n        self.startLineIndex = startLineIndex\n        self.suggestionCount = suggestionCount\n        self.currentSuggestionIndex = currentSuggestionIndex\n        self.replacingRange = replacingRange\n        self.replacingLines = replacingLines\n        self.descriptions = descriptions\n    }\n}\n\nstruct CodeBlockSuggestionPanelView: View {\n    let suggestion: PresentingCodeSuggestion\n    @Environment(\\.textCursorTracker) var textCursorTracker\n    @Environment(\\.colorScheme) var colorScheme\n    @AppStorage(\\.suggestionCodeFont) var codeFont\n    @AppStorage(\\.suggestionDisplayCompactMode) var suggestionDisplayCompactMode\n    @AppStorage(\\.suggestionPresentationMode) var suggestionPresentationMode\n    @AppStorage(\\.hideCommonPrecedingSpacesInSuggestion) var hideCommonPrecedingSpaces\n    @AppStorage(\\.syncSuggestionHighlightTheme) var syncHighlightTheme\n    @AppStorage(\\.codeForegroundColorLight) var codeForegroundColorLight\n    @AppStorage(\\.codeForegroundColorDark) var codeForegroundColorDark\n    @AppStorage(\\.codeBackgroundColorLight) var codeBackgroundColorLight\n    @AppStorage(\\.codeBackgroundColorDark) var codeBackgroundColorDark\n\n    struct ToolBar: View {\n        @Dependency(\\.commandHandler) var commandHandler\n        @Environment(\\.modifierFlags) var modifierFlags\n        @AppStorage(\\.acceptSuggestionLineWithModifierControl) var acceptLineWithControl\n        let suggestion: PresentingCodeSuggestion\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack {\n                    Button(action: {\n                        Task {\n                            await commandHandler.presentPreviousSuggestion()\n                        }\n                    }) {\n                        Image(systemName: \"chevron.left\")\n                    }.buttonStyle(.plain)\n\n                    Text(\n                        \"\\(suggestion.currentSuggestionIndex + 1) / \\(suggestion.suggestionCount)\"\n                    )\n                    .monospacedDigit()\n\n                    Button(action: {\n                        Task { await commandHandler.presentNextSuggestion() }\n                    }) {\n                        Image(systemName: \"chevron.right\")\n                    }.buttonStyle(.plain)\n\n                    Spacer()\n\n                    Button(action: {\n                        Task {\n                            await commandHandler.dismissSuggestion()\n                            NSWorkspace.activatePreviousActiveXcode()\n                        }\n                    }) {\n                        Text(\"Dismiss\").foregroundStyle(.tertiary).padding(.trailing, 4)\n                    }.buttonStyle(.plain)\n\n                    Button(action: {\n                        Task {\n                            await commandHandler.rejectSuggestions()\n                            NSWorkspace.activatePreviousActiveXcode()\n                        }\n                    }) {\n                        Text(\"Reject\")\n                    }.buttonStyle(CommandButtonStyle(color: .gray))\n\n                    if modifierFlags.contains(.control) && acceptLineWithControl {\n                        Button(action: {\n                            Task {\n                                await commandHandler.acceptActiveSuggestionLineInGroup(atIndex: nil)\n                                NSWorkspace.activatePreviousActiveXcode()\n                            }\n                        }) {\n                            Text(\"Accept Line\")\n                        }.buttonStyle(CommandButtonStyle(color: .gray))\n                    } else {\n                        Button(action: {\n                            Task {\n                                await commandHandler.acceptSuggestion()\n                                NSWorkspace.activatePreviousActiveXcode()\n                            }\n                        }) {\n                            Text(\"Accept\")\n                        }.buttonStyle(CommandButtonStyle(color: .accentColor))\n                    }\n                }\n                .padding(6)\n                .foregroundColor(.secondary)\n                .background(.regularMaterial)\n            }\n        }\n    }\n\n    struct CompactToolBar: View {\n        @Dependency(\\.commandHandler) var commandHandler\n        @Environment(\\.modifierFlags) var modifierFlags\n        @AppStorage(\\.acceptSuggestionLineWithModifierControl) var acceptLineWithControl\n        let suggestion: PresentingCodeSuggestion\n\n        var body: some View {\n            WithPerceptionTracking {\n                HStack {\n                    Button(action: {\n                        Task { await commandHandler.presentPreviousSuggestion() }\n                    }) {\n                        Image(systemName: \"chevron.left\")\n                    }.buttonStyle(.plain)\n\n                    Text(\n                        \"\\(suggestion.currentSuggestionIndex + 1) / \\(suggestion.suggestionCount)\"\n                    )\n                    .monospacedDigit()\n\n                    Button(action: {\n                        Task { await commandHandler.presentNextSuggestion() }\n                    }) {\n                        Image(systemName: \"chevron.right\")\n                    }.buttonStyle(.plain)\n\n                    Spacer()\n                    \n                    if modifierFlags.contains(.control) && acceptLineWithControl {\n                        Text(\"Accept Line\")\n                            .foregroundColor(.secondary)\n                            .padding(.trailing, 4)\n                    }\n\n                    Button(action: {\n                        Task {\n                            await commandHandler.dismissSuggestion()\n                            NSWorkspace.activatePreviousActiveXcode()\n                        }\n                    }) {\n                        Image(systemName: \"xmark\")\n                    }.buttonStyle(.plain)\n                }\n                .padding(4)\n                .font(.caption)\n                .foregroundColor(.secondary)\n                .background(.regularMaterial)\n            }\n        }\n    }\n\n    struct Description: View {\n        var descriptions: [CodeSuggestion.Description]\n\n        var body: some View {\n            VStack(spacing: 0) {\n                ForEach(0..<descriptions.count, id: \\.self) { index in\n                    Group {\n                        switch descriptions[index].kind {\n                        case .warning:\n                            HStack(alignment: .firstTextBaseline, spacing: 4) {\n                                Text(Image(systemName: \"exclamationmark.circle.fill\"))\n                                Text(descriptions[index].content)\n                            }\n                            .multilineTextAlignment(.leading)\n                            .frame(maxWidth: .infinity, alignment: .leading)\n                            .padding(.vertical, 4)\n                            .padding(.horizontal, 4)\n                            .background(.orange.opacity(0.9))\n                            \n                            Divider().background(Color.red)\n                        case .action:\n                            HStack(alignment: .firstTextBaseline, spacing: 4) {\n                                Text(Image(systemName: \"arrowshape.right.circle.fill\"))\n                                Text(descriptions[index].content)\n                            }\n                            .multilineTextAlignment(.leading)\n                            .frame(maxWidth: .infinity, alignment: .leading)\n                            .padding(.vertical, 4)\n                            .padding(.horizontal, 4)\n                            .background(.cyan.opacity(0.9))\n                            \n                            Divider().background(Color.blue)\n                        }\n                    }\n                    .foregroundColor(.white)\n                }\n            }\n        }\n    }\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                CustomScrollView {\n                    WithPerceptionTracking {\n                        let (code, originalCode, dimmedCharacterCount) = extractCode()\n                        AsyncCodeBlock(\n                            code: code,\n                            originalCode: originalCode,\n                            language: suggestion.language,\n                            startLineIndex: suggestion.startLineIndex,\n                            scenario: \"suggestion\",\n                            font: codeFont.value.nsFont,\n                            droppingLeadingSpaces: hideCommonPrecedingSpaces,\n                            proposedForegroundColor: {\n                                if syncHighlightTheme {\n                                    if colorScheme == .light,\n                                       let color = codeForegroundColorLight.value?.swiftUIColor\n                                    {\n                                        return color\n                                    } else if let color = codeForegroundColorDark.value?\n                                        .swiftUIColor\n                                    {\n                                        return color\n                                    }\n                                }\n                                return nil\n                            }(),\n                            dimmedCharacterCount: dimmedCharacterCount\n                        )\n                        .frame(maxWidth: .infinity)\n                        .padding(.vertical, 4)\n                        .background({ () -> Color in\n                            if syncHighlightTheme {\n                                if colorScheme == .light,\n                                   let color = codeBackgroundColorLight.value?.swiftUIColor\n                                {\n                                    return color\n                                } else if let color = codeBackgroundColorDark.value?.swiftUIColor {\n                                    return color\n                                }\n                            }\n                            return Color.contentBackground\n                        }())\n                    }\n                }\n\n                Description(descriptions: suggestion.descriptions)\n\n                Divider()\n                \n                if suggestionDisplayCompactMode {\n                    CompactToolBar(suggestion: suggestion)\n                } else {\n                    ToolBar(suggestion: suggestion)\n                }\n            }\n            .xcodeStyleFrame(cornerRadius: {\n                switch suggestionPresentationMode {\n                case .nearbyTextCursor:\n                    if #available(macOS 26.0, *) {\n                        return 8\n                    } else {\n                        return 6\n                    }\n                case .floatingWidget: return nil\n                }\n            }())\n        }\n    }\n\n    @MainActor\n    func extractCode() -> (\n        code: String,\n        originalCode: String,\n        dimmedCharacterCount: AsyncCodeBlock.DimmedCharacterCount\n    ) {\n        var range = suggestion.replacingRange\n        range.end = .init(line: range.end.line - range.start.line, character: range.end.character)\n        range.start = .init(line: 0, character: range.start.character)\n        let codeInRange = EditorInformation.code(in: suggestion.replacingLines, inside: range)\n        let leftover = {\n            if range.end.line >= 0, range.end.line < suggestion.replacingLines.endIndex {\n                let lastLine = suggestion.replacingLines[range.end.line]\n                if range.end.character < lastLine.utf16.count {\n                    let startIndex = lastLine.utf16.index(\n                        lastLine.utf16.startIndex,\n                        offsetBy: range.end.character\n                    )\n                    var leftover = String(lastLine.utf16.suffix(from: startIndex))\n                    if leftover?.last?.isNewline ?? false {\n                        leftover?.removeLast(1)\n                    }\n                    return leftover ?? \"\"\n                }\n            }\n            return \"\"\n        }()\n\n        let prefix = {\n            if range.start.line >= 0, range.start.line < suggestion.replacingLines.endIndex {\n                let firstLine = suggestion.replacingLines[range.start.line]\n                if range.start.character < firstLine.utf16.count {\n                    let endIndex = firstLine.utf16.index(\n                        firstLine.utf16.startIndex,\n                        offsetBy: range.start.character\n                    )\n                    let prefix = String(firstLine.utf16.prefix(upTo: endIndex))\n                    return prefix ?? \"\"\n                }\n            }\n            return \"\"\n        }()\n\n        let code = prefix + suggestion.code + leftover\n\n        let typedCount = suggestion.startLineIndex == textCursorTracker.cursorPosition.line\n            ? textCursorTracker.cursorPosition.character\n            : 0\n\n        return (\n            code,\n            codeInRange.code,\n            .init(prefix: typedCount, suffix: leftover.utf16.count)\n        )\n    }\n}\n\n// MARK: - Previews\n\n#Preview(\"Code Block Suggestion Panel\") {\n    CodeBlockSuggestionPanelView(suggestion: PresentingCodeSuggestion(\n        code: \"\"\"\n        LazyVGrid(columns: [GridItem(.fixed(30)), GridItem(.flexible())]) {\n        ForEach(0..<viewModel.suggestion.count, id: \\\\.self) { index in // lkjaskldjalksjdlkasjdlkajslkdjas\n            Text(viewModel.suggestion[index])\n                .frame(maxWidth: .infinity, alignment: .leading)\n                .multilineTextAlignment(.leading)\n        }\n        \"\"\",\n        language: \"swift\",\n        startLineIndex: 8,\n        suggestionCount: 2,\n        currentSuggestionIndex: 0,\n        replacingRange: .outOfScope,\n        replacingLines: []\n    ), suggestionDisplayCompactMode: .init(\n        wrappedValue: false,\n        \"suggestionDisplayCompactMode\",\n        store: {\n            let userDefault =\n                UserDefaults(suiteName: \"CodeBlockSuggestionPanel_CompactToolBar_Preview\")\n            userDefault?.set(false, for: \\.suggestionDisplayCompactMode)\n            return userDefault!\n        }()\n    ))\n    .frame(width: 450, height: 400)\n    .padding()\n}\n\n#Preview(\"Code Block Suggestion Panel With Descriptions\") {\n    CodeBlockSuggestionPanelView(suggestion: PresentingCodeSuggestion(\n        code: \"\"\"\n        LazyVGrid(columns: [GridItem(.fixed(30)), GridItem(.flexible())]) {\n        ForEach(0..<viewModel.suggestion.count, id: \\\\.self) { index in // lkjaskldjalksjdlkasjdlkajslkdjas\n            Text(viewModel.suggestion[index])\n                .frame(maxWidth: .infinity, alignment: .leading)\n                .multilineTextAlignment(.leading)\n        }\n        \"\"\",\n        language: \"swift\",\n        startLineIndex: 8,\n        suggestionCount: 2,\n        currentSuggestionIndex: 0,\n        replacingRange: .outOfScope,\n        replacingLines: [],\n        descriptions: [\n            .init(kind: .warning, content: \"This is a warning message.\\nwarning\"),\n            .init(kind: .action, content: \"This is an action message.\"),\n        ]\n    ), suggestionDisplayCompactMode: .init(\n        wrappedValue: false,\n        \"suggestionDisplayCompactMode\",\n        store: {\n            let userDefault =\n                UserDefaults(suiteName: \"CodeBlockSuggestionPanel_CompactToolBar_Preview\")\n            userDefault?.set(false, for: \\.suggestionDisplayCompactMode)\n            return userDefault!\n        }()\n    ))\n    .frame(width: 450, height: 400)\n    .padding()\n}\n\n#Preview(\"Code Block Suggestion Panel Compact Mode\") {\n    CodeBlockSuggestionPanelView(suggestion: PresentingCodeSuggestion(\n        code: \"\"\"\n        LazyVGrid(columns: [GridItem(.fixed(30)), GridItem(.flexible())]) {\n        ForEach(0..<viewModel.suggestion.count, id: \\\\.self) { index in // lkjaskldjalksjdlkasjdlkajslkdjas\n            Text(viewModel.suggestion[index])\n                .frame(maxWidth: .infinity, alignment: .leading)\n                .multilineTextAlignment(.leading)\n        }\n        \"\"\",\n        language: \"swift\",\n        startLineIndex: 8,\n        suggestionCount: 2,\n        currentSuggestionIndex: 0,\n        replacingRange: .outOfScope,\n        replacingLines: [],\n        descriptions: [\n            .init(kind: .warning, content: \"This is a warning message.\"),\n            .init(kind: .action, content: \"This is an action message.\"),\n        ]\n    ), suggestionDisplayCompactMode: .init(\n        wrappedValue: true,\n        \"suggestionDisplayCompactMode\",\n        store: {\n            let userDefault =\n                UserDefaults(suiteName: \"CodeBlockSuggestionPanel_CompactToolBar_Preview\")\n            userDefault?.set(true, for: \\.suggestionDisplayCompactMode)\n            return userDefault!\n        }()\n    ))\n    .preferredColorScheme(.light)\n    .frame(width: 450, height: 400)\n    .padding()\n}\n\n#Preview(\"Code Block Suggestion Panel Highlight ObjC\") {\n    CodeBlockSuggestionPanelView(suggestion: PresentingCodeSuggestion(\n        code: \"\"\"\n        - (void)addSubview:(UIView *)view {\n            [self addSubview:view];\n        }\n        \"\"\",\n        language: \"objective-c\",\n        startLineIndex: 8,\n        suggestionCount: 2,\n        currentSuggestionIndex: 0,\n        replacingRange: .outOfScope,\n        replacingLines: []\n    ))\n    .preferredColorScheme(.light)\n    .frame(width: 450, height: 400)\n    .padding()\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionPanelContent/ErrorPanelView.swift",
    "content": "import SwiftUI\n\nstruct ErrorPanelView: View {\n    var description: String\n    var onCloseButtonTap: () -> Void\n\n    var body: some View {\n        ZStack(alignment: .topTrailing) {\n            Text(description)\n                .multilineTextAlignment(.leading)\n                .frame(maxWidth: .infinity, alignment: .leading)\n                .foregroundColor(.white)\n                .padding()\n                .background(Color.red)\n            \n            // close button\n            Button(action: onCloseButtonTap) {\n                Image(systemName: \"xmark\")\n                    .padding([.leading, .bottom], 16)\n                    .padding([.top, .trailing], 8)\n                    .foregroundColor(.white)\n            }\n            .buttonStyle(.plain)\n        }\n        .xcodeStyleFrame()\n    }\n}\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionPanelContent/PromptToCodePanelView.swift",
    "content": "import ChatBasic\nimport Cocoa\nimport ComposableArchitecture\nimport MarkdownUI\nimport ModificationBasic\nimport PromptToCodeCustomization\nimport SharedUIComponents\nimport SuggestionBasic\nimport SwiftUI\n\nstruct PromptToCodePanelView: View {\n    let store: StoreOf<PromptToCodePanel>\n    @FocusState var isTextFieldFocused: Bool\n\n    var body: some View {\n        WithPerceptionTracking {\n            PromptToCodeCustomization.CustomizedUI(\n                state: store.$promptToCodeState,\n                delegate: DefaultPromptToCodeContextInputControllerDelegate(store: store),\n                contextInputController: store.contextInputController,\n                isInputFieldFocused: _isTextFieldFocused\n            ) { customizedViews in\n                VStack(spacing: 0) {\n                    TopBar(store: store)\n\n                    Content(store: store)\n                        .safeAreaInset(edge: .bottom) {\n                            VStack {\n                                StatusBar(store: store)\n\n                                ActionBar(store: store)\n\n                                if let inputField = customizedViews.contextInputField {\n                                    inputField\n                                } else {\n                                    Toolbar(store: store)\n                                }\n                            }\n                        }\n                }\n            }\n        }\n        .task {\n            await MainActor.run {\n                isTextFieldFocused = true\n            }\n        }\n    }\n}\n\nextension PromptToCodePanelView {\n    struct TopBar: View {\n        let store: StoreOf<PromptToCodePanel>\n\n        var body: some View {\n            WithPerceptionTracking {\n                VStack(spacing: 0) {\n                    if let previousStep = store.promptToCodeState.history.last {\n                        Button(action: {\n                            store.send(.revertButtonTapped)\n                        }, label: {\n                            HStack(spacing: 4) {\n                                Text(Image(systemName: \"arrow.uturn.backward.circle.fill\"))\n                                    .foregroundStyle(.secondary)\n                                Text(previousStep.instruction.string)\n                                    .lineLimit(1)\n                                    .truncationMode(.tail)\n                                    .foregroundStyle(.secondary)\n                                Spacer()\n                            }\n                            .contentShape(Rectangle())\n                        })\n                        .buttonStyle(.plain)\n                        .disabled(store.promptToCodeState.isGenerating)\n                        .padding(6)\n\n                        Divider()\n                    }\n                }\n                .animation(.linear(duration: 0.1), value: store.promptToCodeState.history.count)\n            }\n        }\n\n        struct SelectionRangeButton: View {\n            let store: StoreOf<PromptToCodePanel>\n            var body: some View {\n                WithPerceptionTracking {\n                    Button(action: {\n                        store.send(.selectionRangeToggleTapped, animation: .linear(duration: 0.1))\n                    }) {\n                        let attachedToFilename = store.filename\n                        let isAttached = store.promptToCodeState.isAttachedToTarget\n                        let color: Color = isAttached ? .accentColor : .secondary.opacity(0.6)\n                        HStack(spacing: 4) {\n                            Image(\n                                systemName: isAttached ? \"link\" : \"character.cursor.ibeam\"\n                            )\n                            .resizable()\n                            .aspectRatio(contentMode: .fit)\n                            .frame(width: 14, height: 14)\n                            .frame(width: 20, height: 20, alignment: .center)\n                            .foregroundColor(.white)\n                            .background(\n                                color,\n                                in: RoundedRectangle(\n                                    cornerRadius: 4,\n                                    style: .continuous\n                                )\n                            )\n\n                            if isAttached {\n                                HStack(spacing: 4) {\n                                    Text(attachedToFilename)\n                                        .lineLimit(1)\n                                        .truncationMode(.middle)\n                                }.foregroundColor(.primary)\n                            } else {\n                                Text(\"current selection\").foregroundColor(.secondary)\n                            }\n                        }\n                        .padding(2)\n                        .padding(.trailing, 4)\n                        .overlay {\n                            RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                .stroke(color, lineWidth: 1)\n                        }\n                        .background {\n                            RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                .fill(color.opacity(0.2))\n                        }\n                        .padding(2)\n                    }\n                    .keyboardShortcut(\"j\", modifiers: [.command])\n                    .buttonStyle(.plain)\n                }\n            }\n        }\n    }\n\n    struct StatusBar: View {\n        let store: StoreOf<PromptToCodePanel>\n        @State var isAllStatusesPresented = false\n        var body: some View {\n            WithPerceptionTracking {\n                if store.promptToCodeState.isGenerating, !store.promptToCodeState.status.isEmpty {\n                    if let firstStatus = store.promptToCodeState.status.first {\n                        let count = store.promptToCodeState.status.count\n                        Button(action: {\n                            isAllStatusesPresented = true\n                        }) {\n                            HStack {\n                                Text(firstStatus)\n                                    .lineLimit(1)\n                                    .font(.caption)\n\n                                Text(\"\\(count)\")\n                                    .lineLimit(1)\n                                    .font(.caption)\n                                    .background(\n                                        Circle()\n                                            .fill(Color.secondary.opacity(0.3))\n                                            .frame(width: 12, height: 12)\n                                    )\n                            }\n                            .padding(8)\n                            .background(\n                                .regularMaterial,\n                                in: RoundedRectangle(cornerRadius: 6, style: .continuous)\n                            )\n                            .overlay {\n                                RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                    .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                            }\n                            .contentShape(Rectangle())\n                        }\n                        .buttonStyle(.plain)\n                        .frame(maxWidth: 400)\n                        .popover(isPresented: $isAllStatusesPresented, arrowEdge: .top) {\n                            WithPerceptionTracking {\n                                VStack(alignment: .leading, spacing: 16) {\n                                    ForEach(store.promptToCodeState.status, id: \\.self) { status in\n                                        HStack {\n                                            ProgressView()\n                                                .progressViewStyle(CircularProgressViewStyle())\n                                                .controlSize(.small)\n                                            Text(status)\n                                        }\n                                    }\n                                }\n                                .padding()\n                            }\n                        }\n                        .onChange(of: store.promptToCodeState.isGenerating) { isGenerating in\n                            if !isGenerating {\n                                isAllStatusesPresented = false\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    struct ActionBar: View {\n        let store: StoreOf<PromptToCodePanel>\n\n        var body: some View {\n            HStack {\n                ReferencesButton(store: store)\n                StopRespondingButton(store: store)\n                ActionButtons(store: store)\n            }\n        }\n\n        struct StopRespondingButton: View {\n            let store: StoreOf<PromptToCodePanel>\n\n            var body: some View {\n                WithPerceptionTracking {\n                    if store.promptToCodeState.isGenerating {\n                        Button(action: {\n                            store.send(.stopRespondingButtonTapped)\n                        }) {\n                            HStack(spacing: 4) {\n                                Image(systemName: \"stop.fill\")\n                                Text(\"Stop\")\n                            }\n                            .padding(8)\n                            .background(\n                                .regularMaterial,\n                                in: RoundedRectangle(cornerRadius: 6, style: .continuous)\n                            )\n                            .overlay {\n                                RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                    .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                            }\n                        }\n                        .buttonStyle(.plain)\n                    }\n                }\n            }\n        }\n\n        struct ReferencesButton: View {\n            let store: StoreOf<PromptToCodePanel>\n            @State var isReferencesPresented = false\n            @State var isReferencesHovered = false\n\n            var body: some View {\n                if !store.promptToCodeState.references.isEmpty {\n                    Button(action: {\n                        isReferencesPresented.toggle()\n                    }, label: {\n                        HStack(spacing: 4) {\n                            Image(systemName: \"doc.text.magnifyingglass\")\n                            Text(\"\\(store.promptToCodeState.references.count)\")\n                        }\n                        .padding(8)\n                        .background(\n                            .regularMaterial,\n                            in: RoundedRectangle(cornerRadius: 6, style: .continuous)\n                        )\n                        .overlay {\n                            RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                        }\n                    })\n                    .buttonStyle(.plain)\n                    .popover(isPresented: $isReferencesPresented, arrowEdge: .trailing) {\n                        ReferenceList(store: store)\n                    }\n                    .onHover { hovering in\n                        withAnimation {\n                            isReferencesHovered = hovering\n                        }\n                    }\n                }\n            }\n        }\n\n        struct ActionButtons: View {\n            @Perception.Bindable var store: StoreOf<PromptToCodePanel>\n            @AppStorage(\\.chatModels) var chatModels\n            @AppStorage(\\.promptToCodeChatModelId) var defaultChatModelId\n\n            var body: some View {\n                WithPerceptionTracking {\n                    let isResponding = store.promptToCodeState.isGenerating\n                    let isCodeEmpty = store.promptToCodeState.snippets\n                        .allSatisfy(\\.modifiedCode.isEmpty)\n                    var isRespondingButCodeIsReady: Bool {\n                        isResponding && !isCodeEmpty\n                    }\n                    if !isResponding || isRespondingButCodeIsReady {\n                        HStack {\n                            Menu {\n                                WithPerceptionTracking {\n                                    Toggle(\n                                        \"Always accept and continue\",\n                                        isOn: $store.isContinuous\n                                            .animation(.easeInOut(duration: 0.1))\n                                    )\n                                    .toggleStyle(.checkbox)\n                                }\n\n                                chatModelMenu\n                            } label: {\n                                Image(systemName: \"gearshape.fill\")\n                                    .resizable()\n                                    .scaledToFit()\n                                    .foregroundStyle(.secondary)\n                                    .frame(width: 16)\n                                    .frame(maxHeight: .infinity)\n                                    .contentShape(Rectangle())\n                            }\n                            .buttonStyle(.plain)\n\n                            Button(action: {\n                                store.send(.cancelButtonTapped)\n                            }) {\n                                Text(\"Cancel\")\n                            }\n                            .buttonStyle(CommandButtonStyle(color: .gray))\n                            .keyboardShortcut(\"w\", modifiers: [.command])\n\n                            if store.isActiveDocument {\n                                if !isCodeEmpty {\n                                    AcceptButton(store: store)\n                                }\n                            } else {\n                                RevealButton(store: store)\n                            }\n                        }\n                        .fixedSize()\n                        .padding(8)\n                        .background(\n                            .regularMaterial,\n                            in: RoundedRectangle(cornerRadius: 6, style: .continuous)\n                        )\n                        .overlay {\n                            RoundedRectangle(cornerRadius: 6, style: .continuous)\n                                .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                        }\n                        .animation(\n                            .easeInOut(duration: 0.1),\n                            value: store.promptToCodeState.snippets\n                        )\n                    }\n                }\n            }\n\n            @ViewBuilder\n            var chatModelMenu: some View {\n                let allModels = chatModels\n\n                Menu(\"Chat Model\") {\n                    Button(action: {\n                        defaultChatModelId = \"\"\n                    }) {\n                        HStack {\n                            Text(\"Same as chat feature\")\n                            if defaultChatModelId.isEmpty {\n                                Image(systemName: \"checkmark\")\n                            }\n                        }\n                    }\n\n                    if !allModels.contains(where: { $0.id == defaultChatModelId }),\n                       !defaultChatModelId.isEmpty\n                    {\n                        Button(action: {\n                            defaultChatModelId = allModels.first?.id ?? \"\"\n                        }) {\n                            HStack {\n                                Text(\n                                    (allModels.first?.name).map { \"\\($0) (Default)\" }\n                                        ?? \"No model found\"\n                                )\n                                Image(systemName: \"checkmark\")\n                            }\n                        }\n                    }\n\n                    ForEach(allModels, id: \\.id) { model in\n                        Button(action: {\n                            defaultChatModelId = model.id\n                        }) {\n                            HStack {\n                                Text(model.name)\n                                if model.id == defaultChatModelId {\n                                    Image(systemName: \"checkmark\")\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        struct RevealButton: View {\n            let store: StoreOf<PromptToCodePanel>\n\n            var body: some View {\n                WithPerceptionTracking {\n                    Button(action: {\n                        store.send(.revealFileButtonClicked)\n                    }) {\n                        Text(\"Jump to File(⌘ + ⏎)\")\n                    }\n                    .buttonStyle(CommandButtonStyle(color: .accentColor))\n                    .keyboardShortcut(KeyEquivalent.return, modifiers: [.command])\n                }\n            }\n        }\n\n        struct AcceptButton: View {\n            let store: StoreOf<PromptToCodePanel>\n            @Environment(\\.modifierFlags) var modifierFlags\n\n            struct TheButtonStyle: ButtonStyle {\n                func makeBody(configuration: Configuration) -> some View {\n                    configuration.label\n                        .background(\n                            Rectangle()\n                                .fill(Color.accentColor.opacity(configuration.isPressed ? 0.8 : 1))\n                        )\n                }\n            }\n\n            var body: some View {\n                WithPerceptionTracking {\n                    let defaultModeIsContinuous = store.isContinuous\n                    let isAttached = store.promptToCodeState.isAttachedToTarget\n\n                    HStack(spacing: 0) {\n                        Button(action: {\n                            switch (\n                                modifierFlags.contains(.option),\n                                defaultModeIsContinuous\n                            ) {\n                            case (true, true):\n                                store.send(.acceptButtonTapped)\n                            case (false, true):\n                                store.send(.acceptAndContinueButtonTapped)\n                            case (true, false):\n                                store.send(.acceptAndContinueButtonTapped)\n                            case (false, false):\n                                store.send(.acceptButtonTapped)\n                            }\n                        }) {\n                            Group {\n                                switch (\n                                    isAttached,\n                                    modifierFlags.contains(.option),\n                                    defaultModeIsContinuous\n                                ) {\n                                case (true, true, true):\n                                    Text(\"Accept(⌥ + ⌘ + ⏎)\")\n                                case (true, false, true):\n                                    Text(\"Accept and Continue(⌘ + ⏎)\")\n                                case (true, true, false):\n                                    Text(\"Accept and Continue(⌥ + ⌘ + ⏎)\")\n                                case (true, false, false):\n                                    Text(\"Accept(⌘ + ⏎)\")\n                                case (false, true, true):\n                                    Text(\"Replace(⌥ + ⌘ + ⏎)\")\n                                case (false, false, true):\n                                    Text(\"Replace and Continue(⌘ + ⏎)\")\n                                case (false, true, false):\n                                    Text(\"Replace and Continue(⌥ + ⌘ + ⏎)\")\n                                case (false, false, false):\n                                    Text(\"Replace(⌘ + ⏎)\")\n                                }\n                            }\n                            .padding(.vertical, 4)\n                            .padding(.leading, 8)\n                            .padding(.trailing, 4)\n                        }\n                        .buttonStyle(TheButtonStyle())\n                        .keyboardShortcut(\n                            KeyEquivalent.return,\n                            modifiers: modifierFlags\n                                .contains(.option) ? [.command, .option] : [.command]\n                        )\n\n                        Divider()\n\n                        Menu {\n                            WithPerceptionTracking {\n                                if defaultModeIsContinuous {\n                                    Button(action: {\n                                        store.send(.acceptButtonTapped)\n                                    }) {\n                                        Text(\"Accept(⌥ + ⌘ + ⏎)\")\n                                    }\n                                } else {\n                                    Button(action: {\n                                        store.send(.acceptAndContinueButtonTapped)\n                                    }) {\n                                        Text(\"Accept and Continue(⌥ + ⌘ + ⏎)\")\n                                    }\n                                }\n                            }\n                        } label: {\n                            Text(Image(systemName: \"chevron.down\"))\n                                .font(.footnote.weight(.bold))\n                                .scaleEffect(0.8)\n                                .foregroundStyle(.white.opacity(0.8))\n                                .frame(maxHeight: .infinity)\n                                .padding(.leading, 1)\n                                .padding(.trailing, 2)\n                                .contentShape(Rectangle())\n                        }\n                        .buttonStyle(.plain)\n                    }\n                    .fixedSize()\n\n                    .foregroundColor(.white)\n                    .clipShape(RoundedRectangle(cornerRadius: 4, style: .continuous))\n                    .background(\n                        RoundedRectangle(cornerRadius: 4, style: .continuous)\n                            .fill(Color.accentColor)\n                    )\n                    .overlay {\n                        RoundedRectangle(cornerRadius: 4, style: .continuous)\n                            .stroke(Color.white.opacity(0.2), style: .init(lineWidth: 1))\n                    }\n                }\n            }\n        }\n    }\n\n    struct Content: View {\n        let store: StoreOf<PromptToCodePanel>\n\n        @Environment(\\.colorScheme) var colorScheme\n        @AppStorage(\\.syncPromptToCodeHighlightTheme) var syncHighlightTheme\n        @AppStorage(\\.codeForegroundColorLight) var codeForegroundColorLight\n        @AppStorage(\\.codeForegroundColorDark) var codeForegroundColorDark\n        @AppStorage(\\.codeBackgroundColorLight) var codeBackgroundColorLight\n        @AppStorage(\\.codeBackgroundColorDark) var codeBackgroundColorDark\n\n        var codeForegroundColor: Color? {\n            if syncHighlightTheme {\n                if colorScheme == .light,\n                   let color = codeForegroundColorLight.value?.swiftUIColor\n                {\n                    return color\n                } else if let color = codeForegroundColorDark.value?.swiftUIColor {\n                    return color\n                }\n            }\n            return nil\n        }\n\n        var codeBackgroundColor: Color {\n            if syncHighlightTheme {\n                if colorScheme == .light,\n                   let color = codeBackgroundColorLight.value?.swiftUIColor\n                {\n                    return color\n                } else if let color = codeBackgroundColorDark.value?.swiftUIColor {\n                    return color\n                }\n            }\n            return Color.contentBackground\n        }\n\n        var body: some View {\n            WithPerceptionTracking {\n                ScrollView {\n                    WithPerceptionTracking {\n                        VStack(spacing: 0) {\n                            VStack(spacing: 0) {\n                                let language = store.promptToCodeState.source.language\n                                let isAttached = store.promptToCodeState.isAttachedToTarget\n                                let lastId = store.promptToCodeState.snippets.last?.id\n                                let isGenerating = store.promptToCodeState.isGenerating\n                                ForEach(store.scope(\n                                    state: \\.snippetPanels,\n                                    action: \\.snippetPanel\n                                )) { snippetStore in\n                                    WithPerceptionTracking {\n                                        SnippetPanelView(\n                                            store: snippetStore,\n                                            language: language,\n                                            codeForegroundColor: codeForegroundColor ?? .primary,\n                                            codeBackgroundColor: codeBackgroundColor,\n                                            isAttached: isAttached,\n                                            isGenerating: isGenerating\n                                        )\n\n                                        if snippetStore.id != lastId {\n                                            Divider()\n                                        }\n                                    }\n                                }\n                            }\n\n                            Spacer(minLength: 56)\n                        }\n                    }\n                }\n                .background(codeBackgroundColor)\n            }\n        }\n\n        struct SnippetPanelView: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n            let language: CodeLanguage\n            let codeForegroundColor: Color\n            let codeBackgroundColor: Color\n            let isAttached: Bool\n            let isGenerating: Bool\n\n            var body: some View {\n                WithPerceptionTracking {\n                    VStack(alignment: .leading, spacing: 0) {\n                        SnippetTitleBar(\n                            store: store,\n                            language: language,\n                            codeForegroundColor: codeForegroundColor,\n                            isAttached: isAttached\n                        )\n\n                        DescriptionContent(store: store, codeForegroundColor: codeForegroundColor)\n\n                        CodeContent(\n                            store: store,\n                            language: language,\n                            isGenerating: isGenerating,\n                            codeForegroundColor: codeForegroundColor\n                        )\n\n                        ErrorMessage(store: store)\n                    }\n                }\n            }\n        }\n\n        struct SnippetTitleBar: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n            let language: CodeLanguage\n            let codeForegroundColor: Color\n            let isAttached: Bool\n            var body: some View {\n                WithPerceptionTracking {\n                    HStack {\n                        Text(language.rawValue)\n                            .foregroundStyle(codeForegroundColor)\n                            .font(.callout.bold())\n                            .lineLimit(1)\n                        if isAttached {\n                            Text(String(describing: store.snippet.attachedRange))\n                                .foregroundStyle(codeForegroundColor.opacity(0.5))\n                                .font(.callout)\n                        }\n                        Spacer()\n                        CopyCodeButton(store: store)\n                    }\n                    .padding(.leading, 8)\n                }\n            }\n        }\n\n        struct CopyCodeButton: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n            var body: some View {\n                WithPerceptionTracking {\n                    if !store.snippet.modifiedCode.isEmpty {\n                        DraggableCopyButton {\n                            store.withState {\n                                $0.snippet.modifiedCode\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        struct ErrorMessage: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n\n            var body: some View {\n                WithPerceptionTracking {\n                    if let errorMessage = store.snippet.error, !errorMessage.isEmpty {\n                        (\n                            Text(Image(systemName: \"exclamationmark.triangle.fill\")) +\n                                Text(\" \") +\n                                Text(errorMessage)\n                        )\n                        .multilineTextAlignment(.leading)\n                        .foregroundColor(.red)\n                        .padding(.horizontal, 8)\n                        .padding(.vertical, 4)\n                    }\n                }\n            }\n        }\n\n        struct DescriptionContent: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n            let codeForegroundColor: Color?\n\n            var body: some View {\n                WithPerceptionTracking {\n                    if !store.snippet.description.isEmpty {\n                        Markdown(store.snippet.description)\n                            .textSelection(.enabled)\n                            .markdownTheme(.gitHub.text {\n                                BackgroundColor(Color.clear)\n                                ForegroundColor(codeForegroundColor)\n                            })\n                            .padding(.horizontal)\n                            .padding(.vertical, 4)\n                            .frame(maxWidth: .infinity)\n                    }\n                }\n            }\n        }\n\n        struct CodeContent: View {\n            let store: StoreOf<PromptToCodeSnippetPanel>\n            let language: CodeLanguage\n            let isGenerating: Bool\n            let codeForegroundColor: Color?\n\n            @AppStorage(\\.wrapCodeInPromptToCode) var wrapCode\n\n            var body: some View {\n                WithPerceptionTracking {\n                    if !store.snippet.modifiedCode.isEmpty {\n                        let wrapCode = wrapCode ||\n                            [CodeLanguage.plaintext, .builtIn(.markdown), .builtIn(.shellscript),\n                             .builtIn(.tex)].contains(language)\n                        if wrapCode {\n                            CodeBlockInContent(\n                                store: store,\n                                language: language,\n                                codeForegroundColor: codeForegroundColor,\n                                presentAllContent: !isGenerating\n                            )\n                        } else {\n                            MinScrollView {\n                                CodeBlockInContent(\n                                    store: store,\n                                    language: language,\n                                    codeForegroundColor: codeForegroundColor,\n                                    presentAllContent: !isGenerating\n                                )\n                            }\n                            .modify {\n                                if #available(macOS 13.0, *) {\n                                    $0.scrollIndicators(.hidden)\n                                } else {\n                                    $0\n                                }\n                            }\n                        }\n                    } else {\n                        if isGenerating {\n                            Text(\"Thinking...\")\n                                .foregroundStyle(.secondary)\n                                .padding(.horizontal, 8)\n                                .padding(.vertical, 4)\n                        } else {\n                            Text(\"Enter your requirements to generate code.\")\n                                .foregroundStyle(.secondary)\n                                .padding(.horizontal, 8)\n                                .padding(.vertical, 4)\n                        }\n                    }\n                }\n            }\n\n            struct MinWidthPreferenceKey: PreferenceKey {\n                static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {\n                    value = nextValue()\n                }\n\n                static var defaultValue: CGFloat = 0\n            }\n\n            struct MinScrollView<Content: View>: View {\n                @ViewBuilder let content: Content\n                @State var minWidth: CGFloat = 0\n\n                var body: some View {\n                    ScrollView(.horizontal) {\n                        content\n                            .frame(minWidth: minWidth)\n                    }\n                    .overlay {\n                        GeometryReader { proxy in\n                            Color.clear.preference(\n                                key: MinWidthPreferenceKey.self,\n                                value: proxy.size.width\n                            )\n                        }\n                    }\n                    .onPreferenceChange(MinWidthPreferenceKey.self) {\n                        minWidth = $0\n                    }\n                }\n            }\n\n            struct CodeBlockInContent: View {\n                let store: StoreOf<PromptToCodeSnippetPanel>\n                let language: CodeLanguage\n                let codeForegroundColor: Color?\n                let presentAllContent: Bool\n\n                @Environment(\\.colorScheme) var colorScheme\n                @AppStorage(\\.promptToCodeCodeFont) var codeFont\n                @AppStorage(\\.hideCommonPrecedingSpacesInPromptToCode) var hideCommonPrecedingSpaces\n\n                var body: some View {\n                    WithPerceptionTracking {\n                        let startLineIndex = store.snippet.attachedRange.start.line\n                        AsyncDiffCodeBlock(\n                            code: store.snippet.modifiedCode,\n                            originalCode: store.snippet.originalCode,\n                            language: language.rawValue,\n                            startLineIndex: startLineIndex,\n                            scenario: \"promptToCode\",\n                            font: codeFont.value.nsFont,\n                            droppingLeadingSpaces: hideCommonPrecedingSpaces,\n                            proposedForegroundColor: codeForegroundColor,\n                            skipLastOnlyRemovalSection: !presentAllContent\n                        )\n                        .frame(maxWidth: CGFloat.infinity)\n                    }\n                }\n            }\n        }\n    }\n\n    struct Toolbar: View {\n        let store: StoreOf<PromptToCodePanel>\n        @FocusState var focusField: PromptToCodePanel.State.FocusField?\n\n        var body: some View {\n            HStack {\n                HStack(spacing: 0) {\n                    if let contextInputController = store.contextInputController\n                        as? DefaultPromptToCodeContextInputController\n                    {\n                        InputField(\n                            store: store,\n                            contextInputField: contextInputController,\n                            focusField: $focusField\n                        )\n                        SendButton(store: store)\n                    }\n                }\n                .frame(maxWidth: .infinity)\n                .background {\n                    RoundedRectangle(cornerRadius: 6)\n                        .fill(Color(nsColor: .controlBackgroundColor))\n                }\n                .overlay {\n                    RoundedRectangle(cornerRadius: 6)\n                        .stroke(Color(nsColor: .controlColor), lineWidth: 1)\n                }\n                .background {\n                    Button(action: {\n                        (\n                            store.contextInputController\n                                as? DefaultPromptToCodeContextInputController\n                        )?.appendNewLineToPromptButtonTapped()\n                    }) {\n                        EmptyView()\n                    }\n                    .keyboardShortcut(KeyEquivalent.return, modifiers: [.shift])\n                }\n                .background {\n                    Button(action: { focusField = .textField }) {\n                        EmptyView()\n                    }\n                    .keyboardShortcut(\"l\", modifiers: [.command])\n                }\n            }\n            .padding(8)\n            .background(.ultraThickMaterial)\n        }\n\n        struct InputField: View {\n            @Perception.Bindable var store: StoreOf<PromptToCodePanel>\n            @Perception.Bindable var contextInputField: DefaultPromptToCodeContextInputController\n            var focusField: FocusState<PromptToCodePanel.State.FocusField?>.Binding\n\n            var body: some View {\n                WithPerceptionTracking {\n                    AutoresizingCustomTextEditor(\n                        text: $contextInputField.instructionString,\n                        font: .systemFont(ofSize: 14),\n                        isEditable: !store.promptToCodeState.isGenerating,\n                        maxHeight: 400,\n                        onSubmit: { store.send(.modifyCodeButtonTapped) }\n                    )\n                    .opacity(store.promptToCodeState.isGenerating ? 0.5 : 1)\n                    .disabled(store.promptToCodeState.isGenerating)\n                    .focused(focusField, equals: PromptToCodePanel.State.FocusField.textField)\n                    .bind($store.focusedField, to: focusField)\n                }\n                .padding(8)\n                .fixedSize(horizontal: false, vertical: true)\n            }\n        }\n\n        struct SendButton: View {\n            let store: StoreOf<PromptToCodePanel>\n            var body: some View {\n                WithPerceptionTracking {\n                    Button(action: {\n                        store.send(.modifyCodeButtonTapped)\n                    }) {\n                        Image(systemName: \"paperplane.fill\")\n                            .padding(8)\n                    }\n                    .buttonStyle(.plain)\n                    .disabled(store.promptToCodeState.isGenerating)\n                    .keyboardShortcut(KeyEquivalent.return, modifiers: [])\n                }\n            }\n        }\n    }\n\n    struct ReferenceList: View {\n        @Perception.Bindable var store: StoreOf<PromptToCodePanel>\n\n        var body: some View {\n            WithPerceptionTracking {\n                ScrollView {\n                    VStack(alignment: .leading, spacing: 8) {\n                        ForEach(\n                            0..<store.promptToCodeState.references.endIndex,\n                            id: \\.self\n                        ) { index in\n                            WithPerceptionTracking {\n                                let reference = store.promptToCodeState.references[index]\n                                ReferenceButton(reference: reference, isUsed: true, onClick: {})\n                            }\n                        }\n                    }\n                    .padding()\n                }\n                .frame(minWidth: 200, maxWidth: 500, maxHeight: 500)\n            }\n        }\n\n        struct ReferenceButton: View {\n            let reference: ChatMessage.Reference\n            let isUsed: Bool\n            let onClick: () -> Void\n\n            var body: some View {\n                Button(action: onClick) {\n                    VStack(alignment: .leading, spacing: 4) {\n                        HStack(spacing: 4) {\n                            ReferenceIcon(kind: reference.kind)\n                                .layoutPriority(2)\n                            Text(reference.title)\n                                .truncationMode(.middle)\n                                .lineLimit(1)\n                                .layoutPriority(1)\n                                .foregroundStyle(isUsed ? .primary : .secondary)\n                        }\n                        Text(reference.content)\n                            .lineLimit(3)\n                            .truncationMode(.tail)\n                            .foregroundStyle(.tertiary)\n                            .foregroundStyle(isUsed ? .secondary : .tertiary)\n                    }\n                    .padding(.vertical, 4)\n                    .padding(.leading, 4)\n                    .padding(.trailing)\n                    .frame(maxWidth: .infinity, alignment: .leading)\n                    .overlay {\n                        RoundedRectangle(cornerRadius: 4)\n                            .stroke(Color(nsColor: .separatorColor), lineWidth: 1)\n                    }\n                }\n                .buttonStyle(.plain)\n            }\n        }\n    }\n\n    struct ReferenceIcon: View {\n        let kind: ChatMessage.Reference.Kind\n\n        var body: some View {\n            RoundedRectangle(cornerRadius: 4)\n                .fill({\n                    switch kind {\n                    case let .symbol(symbol, _, _, _):\n                        switch symbol {\n                        case .class:\n                            Color.purple\n                        case .struct:\n                            Color.purple\n                        case .enum:\n                            Color.purple\n                        case .actor:\n                            Color.purple\n                        case .protocol:\n                            Color.purple\n                        case .extension:\n                            Color.indigo\n                        case .case:\n                            Color.green\n                        case .property:\n                            Color.teal\n                        case .typealias:\n                            Color.orange\n                        case .function:\n                            Color.teal\n                        case .method:\n                            Color.blue\n                        }\n                    case .text:\n                        Color.gray\n                    case .webpage:\n                        Color.blue\n                    case .textFile:\n                        Color.gray\n                    case .other:\n                        Color.gray\n                    case .error:\n                        Color.red\n                    }\n                }())\n                .frame(width: 26, height: 14)\n                .overlay(alignment: .center) {\n                    Group {\n                        switch kind {\n                        case let .symbol(symbol, _, _, _):\n                            switch symbol {\n                            case .class:\n                                Text(\"C\")\n                            case .struct:\n                                Text(\"S\")\n                            case .enum:\n                                Text(\"E\")\n                            case .actor:\n                                Text(\"A\")\n                            case .protocol:\n                                Text(\"Pr\")\n                            case .extension:\n                                Text(\"Ex\")\n                            case .case:\n                                Text(\"K\")\n                            case .property:\n                                Text(\"P\")\n                            case .typealias:\n                                Text(\"T\")\n                            case .function:\n                                Text(\"𝑓\")\n                            case .method:\n                                Text(\"M\")\n                            }\n                        case .text:\n                            Text(\"Txt\")\n                        case .webpage:\n                            Text(\"Web\")\n                        case .other:\n                            Text(\"*\")\n                        case .textFile:\n                            Text(\"Txt\")\n                        case .error:\n                            Text(\"Err\")\n                        }\n                    }\n                    .font(.system(size: 10).monospaced())\n                    .foregroundColor(.white)\n                }\n        }\n    }\n}\n\n// MARK: - Previews\n\n#Preview(\"Multiple Snippets\") {\n    PromptToCodePanelView(store: .init(initialState: .init(\n        promptToCodeState: Shared(ModificationState(\n            source: .init(\n                language: CodeLanguage.builtIn(.swift),\n                documentURL: URL(\n                    fileURLWithPath: \"path/to/file-name-is-super-long-what-should-we-do-with-it-hah-longer-longer.txt\"\n                ),\n                projectRootURL: URL(fileURLWithPath: \"path/to/file.txt\"),\n                content: \"\",\n                lines: []\n            ),\n            history: [\n                .init(snippets: [\n                    .init(\n                        startLineIndex: 8,\n                        originalCode: \"print(foo)\",\n                        modifiedCode: \"print(bar)\",\n                        description: \"\",\n                        error: \"Error\",\n                        attachedRange: CursorRange(\n                            start: .init(line: 8, character: 0),\n                            end: .init(line: 12, character: 2)\n                        )\n                    ),\n                ], instruction: .init(\"Previous instruction\"), references: []),\n            ],\n            snippets: [\n                .init(\n                    startLineIndex: 8,\n                    originalCode: \"print(foo)\",\n                    modifiedCode: \"print(bar)\\nprint(baz)\",\n                    description: \"\",\n                    error: \"Error\",\n                    attachedRange: CursorRange(\n                        start: .init(line: 8, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n                .init(\n                    startLineIndex: 13,\n                    originalCode: \"\"\"\n                        struct Foo {\n                          var foo: Int\n                        }\n                    \"\"\",\n                    modifiedCode: \"\"\"\n                        struct Bar {\n                          var bar: String\n                        }\n                    \"\"\",\n                    description: \"Cool\",\n                    error: nil,\n                    attachedRange: CursorRange(\n                        start: .init(line: 13, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n            ],\n            extraSystemPrompt: \"\",\n            isAttachedToTarget: true,\n            references: [\n                ChatMessage.Reference(\n                    title: \"Foo\",\n                    content: \"struct Foo { var foo: Int }\",\n                    kind: .symbol(\n                        .struct,\n                        uri: \"file:///path/to/file.txt\",\n                        startLine: 13,\n                        endLine: 13\n                    )\n                ),\n            ],\n        )),\n        instruction: nil,\n        commandName: \"Generate Code\"\n    ), reducer: { PromptToCodePanel() }))\n        .frame(maxWidth: 450, maxHeight: Style.panelHeight)\n        .fixedSize(horizontal: false, vertical: true)\n        .frame(width: 500, height: 500, alignment: .center)\n}\n\n#Preview(\"Detached With Long File Name\") {\n    PromptToCodePanelView(store: .init(initialState: .init(\n        promptToCodeState: Shared(ModificationState(\n            source: .init(\n                language: CodeLanguage.builtIn(.swift),\n                documentURL: URL(\n                    fileURLWithPath: \"path/to/file-name-is-super-long-what-should-we-do-with-it-hah.txt\"\n                ),\n                projectRootURL: URL(fileURLWithPath: \"path/to/file.txt\"),\n                content: \"\",\n                lines: []\n            ),\n            snippets: [\n                .init(\n                    startLineIndex: 8,\n                    originalCode: \"print(foo)\",\n                    modifiedCode: \"print(bar)\",\n                    description: \"\",\n                    error: \"Error\",\n                    attachedRange: CursorRange(\n                        start: .init(line: 8, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n                .init(\n                    startLineIndex: 13,\n                    originalCode: \"\"\"\n                      struct Bar {\n                        var foo: Int\n                      }\n                    \"\"\",\n                    modifiedCode: \"\"\"\n                        struct Bar {\n                          var foo: String\n                        }\n                    \"\"\",\n                    description: \"Cool\",\n                    error: nil,\n                    attachedRange: CursorRange(\n                        start: .init(line: 13, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n            ],\n            extraSystemPrompt: \"\",\n            isAttachedToTarget: false\n        )),\n        instruction: nil,\n        commandName: \"Generate Code\"\n    ), reducer: { PromptToCodePanel() }))\n        .frame(maxWidth: 450, maxHeight: Style.panelHeight)\n        .fixedSize(horizontal: false, vertical: true)\n        .frame(width: 500, height: 500, alignment: .center)\n}\n\n#Preview(\"Generating\") {\n    PromptToCodePanelView(store: .init(initialState: .init(\n        promptToCodeState: Shared(ModificationState(\n            source: .init(\n                language: CodeLanguage.builtIn(.swift),\n                documentURL: URL(\n                    fileURLWithPath: \"path/to/file-name-is-super-long-what-should-we-do-with-it-hah.txt\"\n                ),\n                projectRootURL: URL(fileURLWithPath: \"path/to/file.txt\"),\n                content: \"\",\n                lines: []\n            ),\n            snippets: [\n                .init(\n                    startLineIndex: 8,\n                    originalCode: \"print(foo)\",\n                    modifiedCode: \"print(bar)\",\n                    description: \"\",\n                    error: \"Error\",\n                    attachedRange: CursorRange(\n                        start: .init(line: 8, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n                .init(\n                    startLineIndex: 13,\n                    originalCode: \"\"\"\n                      struct Bar {\n                        var foo: Int\n                      }\n                    \"\"\",\n                    modifiedCode: \"\"\"\n                        struct Bar {\n                          var foo: String\n                        }\n                    \"\"\",\n                    description: \"Cool\",\n                    error: nil,\n                    attachedRange: CursorRange(\n                        start: .init(line: 13, character: 0),\n                        end: .init(line: 12, character: 2)\n                    )\n                ),\n            ],\n            extraSystemPrompt: \"\",\n            isAttachedToTarget: true,\n            isGenerating: true,\n            status: [\"Status 1\", \"Status 2\"]\n        )),\n        instruction: nil,\n        commandName: \"Generate Code\"\n    ), reducer: { PromptToCodePanel() }))\n        .frame(maxWidth: 450, maxHeight: Style.panelHeight)\n        .fixedSize(horizontal: false, vertical: true)\n        .frame(width: 500, height: 500, alignment: .center)\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionPanelContent/ToastPanelView.swift",
    "content": "import ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport SwiftUI\nimport Toast\n\nstruct ToastPanelView: View {\n    let store: StoreOf<ToastPanel>\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 4) {\n                if !store.alignTopToAnchor {\n                    Spacer()\n                        .allowsHitTesting(false)\n                }\n\n                ForEach(store.toast.messages) { message in\n                    HStack {\n                        message.content\n                            .foregroundColor(.white)\n                            .textSelection(.enabled)\n                        \n\n                        if !message.buttons.isEmpty {\n                            HStack {\n                                ForEach(\n                                    Array(message.buttons.enumerated()),\n                                    id: \\.offset\n                                ) { _, button in\n                                    Button(action: button.action) {\n                                        button.label\n                                            .foregroundColor(.white)\n                                            .padding(.horizontal, 6)\n                                            .padding(.vertical, 2)\n                                            .background {\n                                                RoundedRectangle(cornerRadius: 4)\n                                                    .stroke(Color.white, lineWidth: 1)\n                                            }\n                                            .contentShape(Rectangle())\n                                    }\n                                    .buttonStyle(.plain)\n                                    .allowsHitTesting(true)\n                                }\n                            }\n                        }\n                    }\n                    .padding(8)\n                    .frame(maxWidth: .infinity)\n                    .background({\n                        switch message.type {\n                        case .info: return Color.accentColor\n                        case .error: return Color(nsColor: .systemRed)\n                        case .warning: return Color(nsColor: .systemOrange)\n                        }\n                    }() as Color, in: RoundedRectangle(cornerRadius: 8))\n                    .overlay {\n                        RoundedRectangle(cornerRadius: 8)\n                            .stroke(Color.black.opacity(0.1), lineWidth: 1)\n                    }\n                }\n\n                if store.alignTopToAnchor {\n                    Spacer()\n                        .allowsHitTesting(false)\n                }\n            }\n            .colorScheme(store.colorScheme)\n            .frame(maxWidth: .infinity, maxHeight: .infinity)\n        }\n    }\n}\n\n#Preview {\n    ToastPanelView(store: .init(initialState: .init(\n        toast: .init(messages: [\n            ToastController.Message(\n                id: UUID(),\n                type: .info,\n                content: Text(\"Info message\"),\n                buttons: [\n                    .init(label: Text(\"Dismiss\"), action: {}),\n                    .init(label: Text(\"More info\"), action: {}),\n                ]\n            ),\n            ToastController.Message(\n                id: UUID(),\n                type: .error,\n                content: Text(\"Error message\"),\n                buttons: [.init(label: Text(\"Dismiss\"), action: {})]\n            ),\n            ToastController.Message(\n                id: UUID(),\n                type: .warning,\n                content: Text(\"Warning message\"),\n                buttons: [.init(label: Text(\"Dismiss\"), action: {})]\n            ),\n        ])\n    ), reducer: {\n        ToastPanel()\n    }))\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionPanelView.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport SwiftUI\n\nstruct SuggestionPanelView: View {\n    let store: StoreOf<SuggestionPanel>\n\n    struct OverallState: Equatable {\n        var isPanelDisplayed: Bool\n        var opacity: Double\n        var colorScheme: ColorScheme\n        var isPanelOutOfFrame: Bool\n        var alignTopToAnchor: Bool\n    }\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                if !store.alignTopToAnchor {\n                    Spacer()\n                        .frame(minHeight: 0, maxHeight: .infinity)\n                        .allowsHitTesting(false)\n                }\n\n                Content(store: store)\n                    .allowsHitTesting(\n                        store.isPanelDisplayed && !store.isPanelOutOfFrame\n                    )\n                    .frame(maxWidth: .infinity)\n\n                if store.alignTopToAnchor {\n                    Spacer()\n                        .frame(minHeight: 0, maxHeight: .infinity)\n                        .allowsHitTesting(false)\n                }\n            }\n            .preferredColorScheme(store.colorScheme)\n            .opacity(store.opacity)\n            .animation(\n                featureFlag: \\.animationBCrashSuggestion,\n                .easeInOut(duration: 0.2),\n                value: store.isPanelDisplayed\n            )\n            .animation(\n                featureFlag: \\.animationBCrashSuggestion,\n                .easeInOut(duration: 0.2),\n                value: store.isPanelOutOfFrame\n            )\n            .frame(\n                maxWidth: Style.inlineSuggestionMinWidth,\n                maxHeight: Style.inlineSuggestionMaxHeight\n            )\n        }\n    }\n\n    struct Content: View {\n        let store: StoreOf<SuggestionPanel>\n        @AppStorage(\\.suggestionPresentationMode) var suggestionPresentationMode\n\n        var body: some View {\n            WithPerceptionTracking {\n                if let content = store.content {\n                    ZStack(alignment: .topLeading) {\n                        switch suggestionPresentationMode {\n                        case .nearbyTextCursor:\n                            CodeBlockSuggestionPanelView(suggestion: content)\n                        case .floatingWidget:\n                            EmptyView()\n                        }\n                    }\n                    .frame(maxWidth: .infinity, maxHeight: Style.inlineSuggestionMaxHeight)\n                    .fixedSize(horizontal: false, vertical: true)\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionWidgetController.swift",
    "content": "import ActiveApplicationMonitor\nimport AppKit\nimport AsyncAlgorithms\nimport ChatTab\nimport Combine\nimport ComposableArchitecture\nimport Preferences\nimport SwiftUI\nimport UserDefaultsObserver\nimport XcodeInspector\n\n@MainActor\npublic final class SuggestionWidgetController: NSObject {\n    let store: StoreOf<Widget>\n    let chatTabPool: ChatTabPool\n    let windowsController: WidgetWindowsController\n    private var cancellable = Set<AnyCancellable>()\n\n    public let dependency: SuggestionWidgetControllerDependency\n\n    public init(\n        store: StoreOf<Widget>,\n        chatTabPool: ChatTabPool,\n        dependency: SuggestionWidgetControllerDependency\n    ) {\n        self.dependency = dependency\n        self.store = store\n        self.chatTabPool = chatTabPool\n        windowsController = .init(store: store, chatTabPool: chatTabPool)\n\n        super.init()\n\n        if ProcessInfo.processInfo.environment[\"IS_UNIT_TEST\"] == \"YES\" { return }\n\n        dependency.windowsController = windowsController\n\n        store.send(.startup)\n        Task {\n            await windowsController.start()\n        }\n    }\n}\n\n// MARK: - Handle Events\n\npublic extension SuggestionWidgetController {\n    func suggestCode() {\n        store.send(.panel(.presentSuggestion))\n    }\n\n    func discardSuggestion() {\n        store.withState { state in\n            if state.panelState.content.suggestion != nil {\n                store.send(.panel(.discardSuggestion))\n            }\n        }\n    }\n\n    #warning(\"TODO: Make a progress controller that doesn't use TCA.\")\n    func markAsProcessing(_ isProcessing: Bool) {\n        store.withState { state in\n            if isProcessing, !state.circularWidgetState.isProcessing {\n                store.send(.circularWidget(.markIsProcessing))\n            } else if !isProcessing, state.circularWidgetState.isProcessing {\n                store.send(.circularWidget(.endIsProcessing))\n            }\n        }\n    }\n\n    func presentError(_ errorDescription: String) {\n        store.send(.toastPanel(.toast(.toast(errorDescription, .error, nil))))\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/SuggestionWidgetDataSource.swift",
    "content": "import Foundation\n\npublic protocol SuggestionWidgetDataSource {\n    func suggestionForFile(at url: URL) async -> PresentingCodeSuggestion?\n}\n\nstruct MockWidgetDataSource: SuggestionWidgetDataSource {\n    func suggestionForFile(at url: URL) async -> PresentingCodeSuggestion? {\n        return PresentingCodeSuggestion(\n            code: \"\"\"\n            func test() {\n                let x = 1\n                let y = 2\n                let z = x + y\n            }\n            \"\"\",\n            language: \"swift\",\n            startLineIndex: 1,\n            suggestionCount: 3,\n            currentSuggestionIndex: 0,\n            replacingRange: .zero, \n            replacingLines: []\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/TextCursorTracker.swift",
    "content": "import Foundation\nimport Perception\nimport SuggestionBasic\nimport SwiftUI\nimport XcodeInspector\n\n/// A passive tracker that observe the changes of the source editor content.\n@Perceptible\nfinal class TextCursorTracker {\n    @MainActor\n    var cursorPosition: CursorPosition { content.cursorPosition }\n    @MainActor\n    var currentLine: String {\n        if content.cursorPosition.line >= 0, content.cursorPosition.line < content.lines.count {\n            content.lines[content.cursorPosition.line]\n        } else {\n            \"\"\n        }\n    }\n\n    @MainActor\n    var content: SourceEditor.Content = .init(\n        content: \"\",\n        lines: [],\n        selections: [],\n        cursorPosition: .zero,\n        cursorOffset: 0,\n        lineAnnotations: []\n    )\n\n    @PerceptionIgnored var eventObservationTask: Task<Void, Error>?\n\n    init() {\n        observeAppChange()\n    }\n\n    deinit {\n        eventObservationTask?.cancel()\n    }\n\n    var isPreview: Bool {\n        ProcessInfo.processInfo.environment[\"XCODE_RUNNING_FOR_PREVIEWS\"] == \"1\"\n    }\n\n    private func observeAppChange() {\n        if isPreview { return }\n        Task { [weak self] in\n            let notifications = NotificationCenter.default\n                .notifications(named: .focusedEditorDidChange)\n            for await _ in notifications {\n                guard let self else { return }\n                guard let editor = await XcodeInspector.shared.focusedEditor else { continue }\n                await self.observeAXNotifications(editor)\n            }\n        }\n    }\n\n    private func observeAXNotifications(_ editor: SourceEditor) async {\n        if isPreview { return }\n        eventObservationTask?.cancel()\n        let content = editor.getLatestEvaluatedContent()\n        await MainActor.run {\n            self.content = content\n        }\n        eventObservationTask = Task { [weak self] in\n            for await event in await editor.axNotifications.notifications() {\n                try Task.checkCancellation()\n                guard let self else { return }\n                guard event.kind == .evaluatedContentChanged else { continue }\n                let content = editor.getLatestEvaluatedContent()\n                await MainActor.run {\n                    self.content = content\n                }\n            }\n        }\n    }\n}\n\nstruct TextCursorTrackerEnvironmentKey: EnvironmentKey {\n    static var defaultValue: TextCursorTracker = .init()\n}\n\nextension EnvironmentValues {\n    var textCursorTracker: TextCursorTracker {\n        get { self[TextCursorTrackerEnvironmentKey.self] }\n        set { self[TextCursorTrackerEnvironmentKey.self] = newValue }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/WidgetPositionStrategy.swift",
    "content": "import AppKit\nimport Foundation\n\npublic struct WidgetLocation: Equatable {\n    struct PanelLocation: Equatable {\n        var frame: CGRect\n        var alignPanelTop: Bool\n    }\n\n    var widgetFrame: CGRect\n    var tabFrame: CGRect\n    var sharedPanelLocation: PanelLocation\n    var defaultPanelLocation: PanelLocation\n    var suggestionPanelLocation: PanelLocation?\n}\n\nenum UpdateLocationStrategy {\n    struct AlignToTextCursor {\n        func framesForWindows(\n            windowFrame: CGRect,\n            editorFrame: CGRect,\n            mainScreen: NSScreen,\n            activeScreen: NSScreen,\n            editor: AXUIElement,\n            hideCircularWidget: Bool = UserDefaults.shared.value(for: \\.hideCircularWidget),\n            preferredInsideEditorMinWidth: Double = UserDefaults.shared\n                .value(for: \\.preferWidgetToStayInsideEditorWhenWidthGreaterThan)\n        ) -> WidgetLocation {\n            guard let selectedRange: AXValue = try? editor\n                .copyValue(key: kAXSelectedTextRangeAttribute),\n                let rect: AXValue = try? editor.copyParameterizedValue(\n                    key: kAXBoundsForRangeParameterizedAttribute,\n                    parameters: selectedRange\n                )\n            else {\n                return FixedToBottom().framesForWindows(\n                    windowFrame: windowFrame,\n                    editorFrame: editorFrame,\n                    mainScreen: mainScreen,\n                    activeScreen: activeScreen,\n                    hideCircularWidget: hideCircularWidget\n                )\n            }\n            var frame: CGRect = .zero\n            let found = AXValueGetValue(rect, .cgRect, &frame)\n            guard found else {\n                return FixedToBottom().framesForWindows(\n                    windowFrame: windowFrame,\n                    editorFrame: editorFrame,\n                    mainScreen: mainScreen,\n                    activeScreen: activeScreen,\n                    hideCircularWidget: hideCircularWidget\n                )\n            }\n            return HorizontalMovable().framesForWindows(\n                y: mainScreen.frame.height - frame.maxY,\n                windowFrame: windowFrame,\n                alignPanelTopToAnchor: nil,\n                editorFrame: editorFrame,\n                mainScreen: mainScreen,\n                activeScreen: activeScreen,\n                preferredInsideEditorMinWidth: preferredInsideEditorMinWidth,\n                hideCircularWidget: hideCircularWidget\n            )\n        }\n    }\n\n    struct FixedToBottom {\n        func framesForWindows(\n            windowFrame: CGRect,\n            editorFrame: CGRect,\n            mainScreen: NSScreen,\n            activeScreen: NSScreen,\n            hideCircularWidget: Bool = UserDefaults.shared.value(for: \\.hideCircularWidget),\n            preferredInsideEditorMinWidth: Double = UserDefaults.shared\n                .value(for: \\.preferWidgetToStayInsideEditorWhenWidthGreaterThan),\n            editorFrameExpendedSize: CGSize = .zero\n        ) -> WidgetLocation {\n            var frames = HorizontalMovable().framesForWindows(\n                y: mainScreen.frame.height - editorFrame.maxY + Style.widgetPadding,\n                windowFrame: windowFrame,\n                alignPanelTopToAnchor: false,\n                editorFrame: editorFrame,\n                mainScreen: mainScreen,\n                activeScreen: activeScreen,\n                preferredInsideEditorMinWidth: preferredInsideEditorMinWidth,\n                hideCircularWidget: hideCircularWidget,\n                editorFrameExpendedSize: editorFrameExpendedSize\n            )\n\n            frames.sharedPanelLocation.frame.size.height = max(\n                frames.defaultPanelLocation.frame.height,\n                editorFrame.height - Style.widgetHeight\n            )\n            frames.defaultPanelLocation.frame.size.height = max(\n                frames.defaultPanelLocation.frame.height,\n                (editorFrame.height - Style.widgetHeight) / 2\n            )\n            return frames\n        }\n    }\n\n    struct HorizontalMovable {\n        func framesForWindows(\n            y: CGFloat,\n            windowFrame: CGRect,\n            alignPanelTopToAnchor fixedAlignment: Bool?,\n            editorFrame: CGRect,\n            mainScreen: NSScreen,\n            activeScreen: NSScreen,\n            preferredInsideEditorMinWidth: Double,\n            hideCircularWidget: Bool = UserDefaults.shared.value(for: \\.hideCircularWidget),\n            editorFrameExpendedSize: CGSize = .zero\n        ) -> WidgetLocation {\n            let maxY = max(\n                y,\n                mainScreen.frame.height - editorFrame.maxY + Style.widgetPadding,\n                4 + activeScreen.frame.minY\n            )\n            let y = min(\n                maxY,\n                activeScreen.frame.maxY - 4,\n                mainScreen.frame.height - editorFrame.minY - Style.widgetHeight - Style\n                    .widgetPadding\n            )\n\n            var proposedAnchorFrameOnTheRightSide = CGRect(\n                x: editorFrame.maxX - Style.widgetPadding,\n                y: y,\n                width: 0,\n                height: 0\n            )\n\n            let widgetFrameOnTheRightSide = CGRect(\n                x: editorFrame.maxX - Style.widgetPadding - Style.widgetWidth,\n                y: y,\n                width: Style.widgetWidth,\n                height: Style.widgetHeight\n            )\n            \n            let widgetFrame = CGRect(\n                x: windowFrame.minX,\n                y: mainScreen.frame.height - windowFrame.maxY + Style.indicatorBottomPadding,\n                width: Style.widgetWidth,\n                height: Style.widgetHeight\n            )\n\n            if !hideCircularWidget {\n                proposedAnchorFrameOnTheRightSide = widgetFrameOnTheRightSide\n            }\n\n            let proposedPanelX = proposedAnchorFrameOnTheRightSide.maxX\n                + Style.widgetPadding * 2\n                - editorFrameExpendedSize.width\n            let putPanelToTheRight = {\n                if editorFrame.size.width >= preferredInsideEditorMinWidth { return false }\n                return activeScreen.frame.maxX > proposedPanelX + Style.panelWidth\n            }()\n            let alignPanelTopToAnchor = fixedAlignment ?? (y > activeScreen.frame.midY)\n\n            if putPanelToTheRight {\n                let anchorFrame = proposedAnchorFrameOnTheRightSide\n                let panelFrame = CGRect(\n                    x: proposedPanelX,\n                    y: alignPanelTopToAnchor\n                        ? anchorFrame.maxY - Style.panelHeight\n                        : anchorFrame.minY,\n                    width: Style.panelWidth,\n                    height: Style.panelHeight\n                )\n                let tabFrame = CGRect(\n                    x: anchorFrame.origin.x,\n                    y: alignPanelTopToAnchor\n                        ? anchorFrame.minY - Style.widgetHeight - Style.widgetPadding\n                        : anchorFrame.maxY + Style.widgetPadding,\n                    width: Style.widgetWidth,\n                    height: Style.widgetHeight\n                )\n\n                return .init(\n                    widgetFrame: widgetFrame,\n                    tabFrame: tabFrame,\n                    sharedPanelLocation: .init(\n                        frame: panelFrame,\n                        alignPanelTop: alignPanelTopToAnchor\n                    ),\n                    defaultPanelLocation: .init(\n                        frame: panelFrame,\n                        alignPanelTop: alignPanelTopToAnchor\n                    ),\n                    suggestionPanelLocation: nil\n                )\n            } else {\n                var proposedAnchorFrameOnTheLeftSide = CGRect(\n                    x: editorFrame.minX + Style.widgetPadding,\n                    y: proposedAnchorFrameOnTheRightSide.origin.y,\n                    width: 0,\n                    height: 0\n                )\n\n                let widgetFrameOnTheLeftSide = CGRect(\n                    x: editorFrame.minX + Style.widgetPadding,\n                    y: proposedAnchorFrameOnTheRightSide.origin.y,\n                    width: Style.widgetWidth,\n                    height: Style.widgetHeight\n                )\n\n                if !hideCircularWidget {\n                    proposedAnchorFrameOnTheLeftSide = widgetFrameOnTheLeftSide\n                }\n\n                let proposedPanelX = proposedAnchorFrameOnTheLeftSide.minX\n                    - Style.widgetPadding * 2\n                    - Style.panelWidth\n                    + editorFrameExpendedSize.width\n                let putAnchorToTheLeft = {\n                    if editorFrame.size.width >= preferredInsideEditorMinWidth {\n                        if editorFrame.maxX <= activeScreen.frame.maxX {\n                            return false\n                        }\n                    }\n                    return proposedPanelX > activeScreen.frame.minX\n                }()\n\n                if putAnchorToTheLeft {\n                    let anchorFrame = proposedAnchorFrameOnTheLeftSide\n                    let panelFrame = CGRect(\n                        x: proposedPanelX,\n                        y: alignPanelTopToAnchor\n                            ? anchorFrame.maxY - Style.panelHeight\n                            : anchorFrame.minY - editorFrameExpendedSize.height,\n                        width: Style.panelWidth,\n                        height: Style.panelHeight\n                    )\n                    let tabFrame = CGRect(\n                        x: anchorFrame.origin.x,\n                        y: alignPanelTopToAnchor\n                            ? anchorFrame.minY - Style.widgetHeight - Style.widgetPadding\n                            : anchorFrame.maxY + Style.widgetPadding,\n                        width: Style.widgetWidth,\n                        height: Style.widgetHeight\n                    )\n                    return .init(\n                        widgetFrame: widgetFrame,\n                        tabFrame: tabFrame,\n                        sharedPanelLocation: .init(\n                            frame: panelFrame,\n                            alignPanelTop: alignPanelTopToAnchor\n                        ),\n                        defaultPanelLocation: .init(\n                            frame: panelFrame,\n                            alignPanelTop: alignPanelTopToAnchor\n                        ),\n                        suggestionPanelLocation: nil\n                    )\n                } else {\n                    let anchorFrame = proposedAnchorFrameOnTheRightSide\n                    let panelFrame = CGRect(\n                        x: anchorFrame.maxX - Style.panelWidth,\n                        y: alignPanelTopToAnchor\n                            ? anchorFrame.maxY - Style.panelHeight\n                            : anchorFrame.maxY - editorFrameExpendedSize.height,\n                        width: Style.panelWidth,\n                        height: Style.panelHeight\n                    )\n                    let tabFrame = CGRect(\n                        x: anchorFrame.minX - Style.widgetPadding - Style.widgetWidth,\n                        y: anchorFrame.origin.y,\n                        width: Style.widgetWidth,\n                        height: Style.widgetHeight\n                    )\n                    return .init(\n                        widgetFrame: widgetFrame,\n                        tabFrame: tabFrame,\n                        sharedPanelLocation: .init(\n                            frame: panelFrame,\n                            alignPanelTop: alignPanelTopToAnchor\n                        ),\n                        defaultPanelLocation: .init(\n                            frame: panelFrame,\n                            alignPanelTop: alignPanelTopToAnchor\n                        ),\n                        suggestionPanelLocation: nil\n                    )\n                }\n            }\n        }\n    }\n\n    struct NearbyTextCursor {\n        func framesForSuggestionWindow(\n            editorFrame: CGRect,\n            mainScreen: NSScreen,\n            activeScreen: NSScreen,\n            editor: AXUIElement,\n            completionPanel: AXUIElement?\n        ) -> WidgetLocation.PanelLocation? {\n            guard let selectionFrame = UpdateLocationStrategy\n                .getSelectionFirstLineFrame(editor: editor) else { return nil }\n\n            // hide it when the line of code is outside of the editor visible rect\n            if selectionFrame.maxY < editorFrame.minY || selectionFrame.minY > editorFrame.maxY {\n                return nil\n            }\n\n            let proposedY = mainScreen.frame.height - selectionFrame.maxY\n            let proposedX = selectionFrame.maxX - 40\n            let maxY = max(\n                proposedY,\n                4 + activeScreen.frame.minY\n            )\n            let y = min(\n                maxY,\n                activeScreen.frame.maxY - 4\n            )\n\n            // align panel to top == place under the selection frame.\n            // we initially try to place it at the bottom side, but if there is no enough space\n            // we move it to the top of the selection frame.\n            let alignPanelTopToAnchor = y - Style.inlineSuggestionMaxHeight\n                >= activeScreen.frame.minY\n\n            let caseIgnoreCompletionPanel = {\n                (alignPanelTopToAnchor: Bool) -> WidgetLocation.PanelLocation? in\n                let x: Double = {\n                    if proposedX + Style.inlineSuggestionMinWidth <= activeScreen.frame.maxX {\n                        return proposedX\n                    }\n                    return activeScreen.frame.maxX - Style.inlineSuggestionMinWidth\n                }()\n                if alignPanelTopToAnchor {\n                    // case: present under selection\n                    return .init(\n                        frame: .init(\n                            x: x,\n                            y: y - Style.inlineSuggestionMaxHeight,\n                            width: Style.inlineSuggestionMinWidth,\n                            height: Style.inlineSuggestionMaxHeight\n                        ),\n                        alignPanelTop: alignPanelTopToAnchor\n                    )\n                } else {\n                    // case: present above selection\n                    return .init(\n                        frame: .init(\n                            x: x,\n                            y: y + selectionFrame.height + Style.widgetPadding,\n                            width: Style.inlineSuggestionMinWidth,\n                            height: Style.inlineSuggestionMaxHeight\n                        ),\n                        alignPanelTop: alignPanelTopToAnchor\n                    )\n                }\n            }\n\n            let caseConsiderCompletionPanel = {\n                (completionPanelRect: CGRect) -> WidgetLocation.PanelLocation? in\n                let completionPanelBelowCursor = completionPanelRect.minY >= selectionFrame.midY\n                switch (completionPanelBelowCursor, alignPanelTopToAnchor) {\n                case (true, false), (false, true):\n                    // case: different position, place the suggestion as it should be\n                    return caseIgnoreCompletionPanel(alignPanelTopToAnchor)\n                case (true, true), (false, false):\n                    // case: same position, place the suggestion next to the completion panel\n                    let y = completionPanelBelowCursor\n                        ? y - Style.inlineSuggestionMaxHeight\n                        : y + selectionFrame.height - Style.widgetPadding\n                    if let x = {\n                        let proposedX = completionPanelRect.maxX + Style.widgetPadding\n                        if proposedX + Style.inlineSuggestionMinWidth <= activeScreen.frame.maxX {\n                            return proposedX\n                        }\n                        let leftSideX = completionPanelRect.minX\n                            - Style.widgetPadding\n                            - Style.inlineSuggestionMinWidth\n                        if leftSideX >= activeScreen.frame.minX {\n                            return leftSideX\n                        }\n                        return nil\n                    }() {\n                        return .init(\n                            frame: .init(\n                                x: x,\n                                y: y,\n                                width: Style.inlineSuggestionMinWidth,\n                                height: Style.inlineSuggestionMaxHeight\n                            ),\n                            alignPanelTop: alignPanelTopToAnchor\n                        )\n                    }\n                    // case: no enough horizontal space, place the suggestion on the other side\n                    return caseIgnoreCompletionPanel(!alignPanelTopToAnchor)\n                }\n            }\n\n            if let completionPanel, let completionPanelRect = completionPanel.rect {\n                return caseConsiderCompletionPanel(completionPanelRect)\n            } else {\n                return caseIgnoreCompletionPanel(alignPanelTopToAnchor)\n            }\n        }\n    }\n\n    /// Get the frame of the selection.\n    static func getSelectionFrame(editor: AXUIElement) -> CGRect? {\n        guard let selectedRange: AXValue = try? editor\n            .copyValue(key: kAXSelectedTextRangeAttribute),\n            let rect: AXValue = try? editor.copyParameterizedValue(\n                key: kAXBoundsForRangeParameterizedAttribute,\n                parameters: selectedRange\n            )\n        else {\n            return nil\n        }\n        var selectionFrame: CGRect = .zero\n        let found = AXValueGetValue(rect, .cgRect, &selectionFrame)\n        guard found else { return nil }\n        return selectionFrame\n    }\n\n    /// Get the frame of the first line of the selection.\n    static func getSelectionFirstLineFrame(editor: AXUIElement) -> CGRect? {\n        // Find selection range rect\n        guard let selectedRange: AXValue = try? editor\n            .copyValue(key: kAXSelectedTextRangeAttribute),\n            let rect: AXValue = try? editor.copyParameterizedValue(\n                key: kAXBoundsForRangeParameterizedAttribute,\n                parameters: selectedRange\n            )\n        else {\n            return nil\n        }\n        var selectionFrame: CGRect = .zero\n        let found = AXValueGetValue(rect, .cgRect, &selectionFrame)\n        guard found else { return nil }\n\n        var firstLineRange: CFRange = .init()\n        let foundFirstLine = AXValueGetValue(selectedRange, .cfRange, &firstLineRange)\n        firstLineRange.length = 0\n\n        if foundFirstLine,\n           let firstLineSelectionRange = AXValueCreate(.cfRange, &firstLineRange),\n           let firstLineRect: AXValue = try? editor.copyParameterizedValue(\n               key: kAXBoundsForRangeParameterizedAttribute,\n               parameters: firstLineSelectionRange\n           )\n        {\n            var firstLineFrame: CGRect = .zero\n            let foundFirstLineFrame = AXValueGetValue(firstLineRect, .cgRect, &firstLineFrame)\n            if foundFirstLineFrame {\n                selectionFrame = firstLineFrame\n            }\n        }\n\n        return selectionFrame\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/WidgetView.swift",
    "content": "import ActiveApplicationMonitor\nimport ComposableArchitecture\nimport Preferences\nimport SharedUIComponents\nimport SuggestionBasic\nimport SwiftUI\n\nstruct WidgetView: View {\n    let store: StoreOf<CircularWidget>\n    @State var isHovering: Bool = false\n    var onOpenChatClicked: () -> Void = {}\n    var onCustomCommandClicked: (CustomCommand) -> Void = { _ in }\n\n    @AppStorage(\\.hideCircularWidget) var hideCircularWidget\n\n    var body: some View {\n        GeometryReader { _ in\n            WithPerceptionTracking {\n                ZStack {\n                    WidgetAnimatedCapsule(\n                        store: store,\n                        isHovering: isHovering\n                    )\n                }\n                .onTapGesture {\n                    store.send(.widgetClicked, animation: .easeInOut(duration: 0.2))\n                }\n                .onHover { yes in\n                    withAnimation(.easeInOut(duration: 0.14)) {\n                        isHovering = yes\n                    }\n                }\n                .contextMenu {\n                    WidgetContextMenu(store: store)\n                }\n                .opacity({\n                    if !hideCircularWidget { return 1 }\n                    return store.isProcessing ? 1 : 0\n                }())\n                .animation(\n                    .easeInOut(duration: 0.2),\n                    value: isHovering\n                )\n                .animation(\n                    .easeInOut(duration: 0.4),\n                    value: store.isProcessing\n                )\n            }\n        }\n    }\n}\n\nstruct WidgetAnimatedCapsule: View {\n    let store: StoreOf<CircularWidget>\n    var isHovering: Bool\n\n    @State private var breathingOpacity: CGFloat = 1.0\n    @State private var animationTask: Task<Void, Never>?\n\n    var body: some View {\n        GeometryReader { geo in\n            WithPerceptionTracking {\n                let capsuleWidth = geo.size.width\n                let capsuleHeight = geo.size.height\n\n                let backgroundWidth = capsuleWidth\n                let foregroundWidth = max(capsuleWidth - 4, 2)\n                let padding = (backgroundWidth - foregroundWidth) / 2\n                let foregroundHeight = capsuleHeight - padding * 2\n\n                ZStack {\n                    Capsule()\n                        .modify {\n                            if #available(macOS 26.0, *) {\n                                $0.glassEffect()\n                            } else if #available(macOS 13.0, *) {\n                                $0.backgroundStyle(.thickMaterial.opacity(0.8)).overlay(\n                                    Capsule().stroke(\n                                        Color(nsColor: .darkGray).opacity(0.2),\n                                        lineWidth: 1\n                                    )\n                                )\n                            } else {\n                                $0.fill(Color(nsColor: .darkGray).opacity(0.6)).overlay(\n                                    Capsule().stroke(\n                                        Color(nsColor: .darkGray).opacity(0.2),\n                                        lineWidth: 1\n                                    )\n                                )\n                            }\n                        }\n                        .frame(width: backgroundWidth, height: capsuleHeight)\n\n                    Capsule()\n                        .fill(Color.white)\n                        .frame(\n                            width: foregroundWidth,\n                            height: foregroundHeight\n                        )\n                        .opacity({\n                            let base = store.isProcessing ? breathingOpacity : 0\n                            if isHovering {\n                                return min(base + 0.5, 1.0)\n                            }\n                            return base\n                        }())\n                        .blur(radius: 2)\n                }\n                .onAppear {\n                    updateBreathingAnimation(isProcessing: store.isProcessing)\n                }\n                .onChange(of: store.isProcessing) { newValue in\n                    updateBreathingAnimation(isProcessing: newValue)\n                }\n            }\n        }\n    }\n\n    private func updateBreathingAnimation(isProcessing: Bool) {\n        animationTask?.cancel()\n        animationTask = nil\n\n        if isProcessing {\n            animationTask = Task {\n                while !Task.isCancelled {\n                    await MainActor.run {\n                        withAnimation(.easeInOut(duration: 1.2)) {\n                            breathingOpacity = 0.3\n                        }\n                    }\n                    try? await Task.sleep(nanoseconds: UInt64(1.2 * 1_000_000_000))\n                    if Task.isCancelled { break }\n                    if !(store.isProcessing) { break }\n                    await MainActor.run {\n                        withAnimation(.easeInOut(duration: 1.2)) {\n                            breathingOpacity = 1.0\n                        }\n                    }\n                    try? await Task.sleep(nanoseconds: UInt64(1.2 * 1_000_000_000))\n                    if Task.isCancelled { break }\n                    if !(store.isProcessing) { break }\n                }\n            }\n        } else {\n            withAnimation(.easeInOut(duration: 0.2)) {\n                breathingOpacity = 0\n            }\n        }\n    }\n}\n\nstruct WidgetContextMenu: View {\n    @AppStorage(\\.useGlobalChat) var useGlobalChat\n    @AppStorage(\\.realtimeSuggestionToggle) var realtimeSuggestionToggle\n    @AppStorage(\\.disableSuggestionFeatureGlobally) var disableSuggestionFeatureGlobally\n    @AppStorage(\\.suggestionFeatureEnabledProjectList) var suggestionFeatureEnabledProjectList\n    @AppStorage(\\.suggestionFeatureDisabledLanguageList) var suggestionFeatureDisabledLanguageList\n    @AppStorage(\\.customCommands) var customCommands\n    let store: StoreOf<CircularWidget>\n\n    @Dependency(\\.xcodeInspector) var xcodeInspector\n\n    var body: some View {\n        WithPerceptionTracking {\n            Group { // Commands\n                Button(action: {\n                    store.send(.openChatButtonClicked)\n                }) {\n                    Text(\"Open Chat\")\n                }\n\n                Button(action: {\n                    store.send(.openModificationButtonClicked)\n                }) {\n                    Text(\"Write or Edit Code\")\n                }\n\n                customCommandMenu()\n            }\n\n            Divider()\n\n            Group {\n                enableSuggestionForProject\n\n                disableSuggestionForLanguage\n            }\n\n            Divider()\n\n            Group { // Settings\n                Button(action: {\n                    store.send(.detachChatPanelToggleClicked)\n                }) {\n                    Text(\"Detach Chat Panel\")\n                    if store.isChatPanelDetached {\n                        Image(systemName: \"checkmark\")\n                    }\n                }\n\n                Button(action: {\n                    realtimeSuggestionToggle.toggle()\n                }) {\n                    Text(\"Realtime Suggestion\")\n                    if realtimeSuggestionToggle {\n                        Image(systemName: \"checkmark\")\n                    }\n                }\n            }\n\n            Divider()\n        }\n    }\n\n    func customCommandMenu() -> some View {\n        Menu(\"Custom Commands\") {\n            ForEach(customCommands, id: \\.name) { command in\n                Button(action: {\n                    store.send(.runCustomCommandButtonClicked(command))\n                }) {\n                    Text(command.name)\n                }\n            }\n        }\n    }\n}\n\nextension WidgetContextMenu {\n    @ViewBuilder\n    var enableSuggestionForProject: some View {\n        if let projectPath = xcodeInspector.activeProjectRootURL?.path,\n           disableSuggestionFeatureGlobally\n        {\n            let matchedPath = suggestionFeatureEnabledProjectList.first { path in\n                projectPath.hasPrefix(path)\n            }\n            Button(action: {\n                if matchedPath != nil {\n                    suggestionFeatureEnabledProjectList\n                        .removeAll { path in path == matchedPath }\n                } else {\n                    suggestionFeatureEnabledProjectList.append(projectPath)\n                }\n            }) {\n                if matchedPath == nil {\n                    Text(\"Add to Suggestion-Enabled Project List\")\n                } else {\n                    Text(\"Remove from Suggestion-Enabled Project List\")\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    var disableSuggestionForLanguage: some View {\n        let fileURL = xcodeInspector.activeDocumentURL\n        let fileLanguage = fileURL.map(languageIdentifierFromFileURL) ?? .plaintext\n        let matched = suggestionFeatureDisabledLanguageList.first { rawValue in\n            fileLanguage.rawValue == rawValue\n        }\n        Button(action: {\n            if let matched {\n                suggestionFeatureDisabledLanguageList.removeAll { $0 == matched }\n            } else {\n                suggestionFeatureDisabledLanguageList.append(fileLanguage.rawValue)\n            }\n        }) {\n            if matched == nil {\n                Text(\"Disable Suggestion for \\\"\\(fileLanguage.rawValue.capitalized)\\\"\")\n            } else {\n                Text(\"Enable Suggestion for \\\"\\(fileLanguage.rawValue.capitalized)\\\"\")\n            }\n        }\n    }\n}\n\nstruct WidgetView_Preview: PreviewProvider {\n    static var previews: some View {\n        VStack {\n            WidgetView(\n                store: Store(\n                    initialState: .init(\n                        isProcessing: false,\n                        isDisplayingContent: false,\n                        isContentEmpty: true,\n                        isChatPanelDetached: false,\n                        isChatOpen: false\n                    ),\n                    reducer: { CircularWidget() }\n                ),\n                isHovering: false\n            )\n            .frame(width: Style.widgetWidth, height: Style.widgetHeight)\n\n            WidgetView(\n                store: Store(\n                    initialState: .init(\n                        isProcessing: false,\n                        isDisplayingContent: false,\n                        isContentEmpty: true,\n                        isChatPanelDetached: false,\n                        isChatOpen: false\n                    ),\n                    reducer: { CircularWidget() }\n                ),\n                isHovering: true\n            )\n            .frame(width: Style.widgetWidth, height: Style.widgetHeight)\n\n            WidgetView(\n                store: Store(\n                    initialState: .init(\n                        isProcessing: true,\n                        isDisplayingContent: false,\n                        isContentEmpty: true,\n                        isChatPanelDetached: false,\n                        isChatOpen: false\n                    ),\n                    reducer: { CircularWidget() }\n                ),\n                isHovering: false\n            )\n            .frame(width: Style.widgetWidth, height: Style.widgetHeight)\n\n            WidgetView(\n                store: Store(\n                    initialState: .init(\n                        isProcessing: false,\n                        isDisplayingContent: true,\n                        isContentEmpty: true,\n                        isChatPanelDetached: false,\n                        isChatOpen: false\n                    ),\n                    reducer: { CircularWidget() }\n                ),\n                isHovering: false\n            )\n            .frame(width: Style.widgetWidth, height: Style.widgetHeight)\n        }\n        .frame(width: 200, height: 200)\n        .background(Color.black)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/SuggestionWidget/WidgetWindowsController.swift",
    "content": "import AppKit\nimport AsyncAlgorithms\nimport ChatTab\nimport ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport SharedUIComponents\nimport SwiftNavigation\nimport SwiftUI\nimport XcodeInspector\n\n#warning(\"\"\"\nTODO: This part is too messy, consider breaking it up, let each window handle their own things\n\"\"\")\n\nactor WidgetWindowsController: NSObject {\n    let userDefaultsObservers = WidgetUserDefaultsObservers()\n    var xcodeInspector: XcodeInspector { .shared }\n\n    nonisolated let windows: WidgetWindows\n    nonisolated let store: StoreOf<Widget>\n    nonisolated let chatTabPool: ChatTabPool\n\n    var currentApplicationProcessIdentifier: pid_t?\n\n    var observeToAppTask: Task<Void, Error>?\n    var observeToFocusedEditorTask: Task<Void, Error>?\n\n    var updateWindowOpacityTask: Task<Void, Error>?\n    var lastUpdateWindowOpacityTime = Date(timeIntervalSince1970: 0)\n\n    var updateWindowLocationTask: Task<Void, Error>?\n    var lastUpdateWindowLocationTime = Date(timeIntervalSince1970: 0)\n\n    var beatingCompletionPanelTask: Task<Void, Error>?\n    var updateWindowStateTask: Task<Void, Error>?\n\n    deinit {\n        userDefaultsObservers.presentationModeChangeObserver.onChange = {}\n        observeToAppTask?.cancel()\n        observeToFocusedEditorTask?.cancel()\n        updateWindowStateTask?.cancel()\n    }\n\n    init(store: StoreOf<Widget>, chatTabPool: ChatTabPool) {\n        self.store = store\n        self.chatTabPool = chatTabPool\n        windows = .init(store: store, chatTabPool: chatTabPool)\n        super.init()\n        windows.controller = self\n    }\n\n    @MainActor func send(_ action: Widget.Action) {\n        store.send(action)\n    }\n\n    func start() {\n        Task { [xcodeInspector] in\n            await observe { [weak self] in\n                if let app = xcodeInspector.activeApplication {\n                    Task {\n                        await self?.activate(app)\n                    }\n                }\n            }\n\n            await observe { [weak self] in\n                if let editor = xcodeInspector.focusedEditor {\n                    Task {\n                        await self?.observe(toEditor: editor)\n                    }\n                }\n            }\n\n            await observe { [weak self] in\n                let isDisplaying = xcodeInspector.completionPanel != nil\n                Task {\n                    await self?.handleCompletionPanelChange(isDisplaying: isDisplaying)\n                }\n            }\n        }\n\n        userDefaultsObservers.presentationModeChangeObserver.onChange = { [weak self] in\n            Task { [weak self] in\n                await self?.updateWindowLocation(animated: false, immediately: false)\n                await self?.send(.updateColorScheme)\n            }\n        }\n\n        updateWindowStateTask = Task { [weak self] in\n            if let self { await handleSpaceChange() }\n\n            await withThrowingTaskGroup(of: Void.self) { [weak self] group in\n                // active space did change\n                _ = group.addTaskUnlessCancelled { [weak self] in\n                    let sequence = NSWorkspace.shared.notificationCenter\n                        .notifications(named: NSWorkspace.activeSpaceDidChangeNotification)\n                    for await _ in sequence {\n                        guard let self else { return }\n                        try Task.checkCancellation()\n                        await handleSpaceChange()\n                    }\n                }\n            }\n        }\n\n        Task { @MainActor in\n            windows.chatPanelWindow.isPanelDisplayed = false\n        }\n    }\n}\n\n// MARK: - Observation\n\nprivate extension WidgetWindowsController {\n    func activate(_ app: AppInstanceInspector) {\n        Task {\n            if app.isXcode {\n                updateWindowLocation(animated: false, immediately: true)\n                updateWindowOpacity(immediately: false)\n            } else {\n                updateWindowOpacity(immediately: true)\n                updateWindowLocation(animated: false, immediately: false)\n                await hideSuggestionPanelWindow()\n            }\n            await adjustChatPanelWindowLevel()\n            await adjustModificationPanelLevel()\n        }\n        guard currentApplicationProcessIdentifier != app.processIdentifier else { return }\n        currentApplicationProcessIdentifier = app.processIdentifier\n        observe(toApp: app)\n    }\n\n    func observe(toApp app: AppInstanceInspector) {\n        guard let app = app as? XcodeAppInstanceInspector else { return }\n        let notifications = app.axNotifications\n        observeToAppTask?.cancel()\n        observeToAppTask = Task {\n            await windows.orderFront()\n\n            /// Hide the widgets before switching to another window/editor\n            /// so the transition looks better.\n            func hideWidgetForTransitions() async {\n                let newDocumentURL = xcodeInspector.realtimeActiveDocumentURL\n                let documentURL = await MainActor\n                    .run { store.withState { $0.focusingDocumentURL } }\n                if documentURL != newDocumentURL {\n                    await send(.panel(.removeDisplayedContent))\n                    await hidePanelWindows()\n                }\n                await send(.updateFocusingDocumentURL)\n            }\n\n            func removeContent() async {\n                await send(.panel(.removeDisplayedContent))\n            }\n\n            func updateWidgetsAndNotifyChangeOfEditor(immediately: Bool) async {\n                await send(.panel(.switchToAnotherEditorAndUpdateContent))\n                updateWindowLocation(animated: false, immediately: immediately)\n                updateWindowOpacity(immediately: immediately)\n            }\n\n            func updateWidgets(immediately: Bool) async {\n                updateWindowLocation(animated: false, immediately: immediately)\n                updateWindowOpacity(immediately: immediately)\n            }\n\n            await updateWidgetsAndNotifyChangeOfEditor(immediately: true)\n\n            for await notification in await notifications.notifications() {\n                try Task.checkCancellation()\n\n                switch notification.kind {\n                case .focusedWindowChanged:\n                    await handleSpaceChange()\n                    await hideWidgetForTransitions()\n                    await updateWidgetsAndNotifyChangeOfEditor(immediately: true)\n                case .focusedUIElementChanged:\n                    await hideWidgetForTransitions()\n                    await updateWidgetsAndNotifyChangeOfEditor(immediately: true)\n                case .applicationActivated:\n                    await removeContent()\n                    await updateWidgetsAndNotifyChangeOfEditor(immediately: false)\n                case .mainWindowChanged:\n                    await removeContent()\n                    await updateWidgetsAndNotifyChangeOfEditor(immediately: false)\n                case .moved,\n                     .resized,\n                     .windowMoved,\n                     .windowResized,\n                     .windowMiniaturized,\n                     .windowDeminiaturized:\n                    await updateWidgets(immediately: false)\n                case .created, .uiElementDestroyed, .xcodeCompletionPanelChanged,\n                     .applicationDeactivated:\n                    continue\n                case .titleChanged:\n                    continue\n                }\n            }\n        }\n    }\n\n    func observe(toEditor editor: SourceEditor) {\n        observeToFocusedEditorTask?.cancel()\n        observeToFocusedEditorTask = Task {\n            let selectionRangeChange = await editor.axNotifications.notifications()\n                .filter { $0.kind == .selectedTextChanged }\n            let scroll = await editor.axNotifications.notifications()\n                .filter { $0.kind == .scrollPositionChanged }\n\n            if #available(macOS 13.0, *) {\n                for await notification in merge(\n                    selectionRangeChange.debounce(for: Duration.milliseconds(500)),\n                    scroll\n                ) {\n                    guard await xcodeInspector.latestActiveXcode != nil else { return }\n                    try Task.checkCancellation()\n\n                    // for better looking\n                    if notification.kind == .scrollPositionChanged {\n                        await hideSuggestionPanelWindow()\n                    }\n\n                    updateWindowLocation(animated: false, immediately: false)\n                    updateWindowOpacity(immediately: false)\n                }\n            } else {\n                for await notification in merge(selectionRangeChange, scroll) {\n                    guard await xcodeInspector.latestActiveXcode != nil else { return }\n                    try Task.checkCancellation()\n\n                    // for better looking\n                    if notification.kind == .scrollPositionChanged {\n                        await hideSuggestionPanelWindow()\n                    }\n\n                    updateWindowLocation(animated: false, immediately: false)\n                    updateWindowOpacity(immediately: false)\n                }\n            }\n        }\n    }\n\n    func handleCompletionPanelChange(isDisplaying: Bool) {\n        beatingCompletionPanelTask?.cancel()\n        beatingCompletionPanelTask = Task {\n            if !isDisplaying {\n                // so that the buttons on the suggestion panel could be\n                // clicked\n                // before the completion panel updates the location of the\n                // suggestion panel\n                try await Task.sleep(nanoseconds: 400_000_000)\n            }\n\n            updateWindowLocation(animated: false, immediately: false)\n            updateWindowOpacity(immediately: false)\n        }\n    }\n}\n\n// MARK: - Window Updating\n\nextension WidgetWindowsController {\n    @MainActor\n    func hidePanelWindows() {\n//        windows.sharedPanelWindow.alphaValue = 0\n        windows.suggestionPanelWindow.alphaValue = 0\n    }\n\n    @MainActor\n    func hideSuggestionPanelWindow() {\n        windows.suggestionPanelWindow.alphaValue = 0\n    }\n\n    func generateWidgetLocation() async -> WidgetLocation? {\n        if let application = await xcodeInspector.latestActiveXcode?.appElement {\n            if let window = application.focusedWindow,\n               let windowFrame = window.rect,\n               let focusElement = await xcodeInspector.focusedEditor?.element,\n               let parent = focusElement.parent,\n               let frame = parent.rect,\n               let screen = NSScreen.screens.first(\n                   where: { $0.frame.origin == .zero }\n               ) ?? NSScreen.main,\n               let windowContainingScreen = NSScreen.screens.first(where: {\n                   let flippedScreenFrame = $0.frame.flipped(relativeTo: screen.frame)\n                   return flippedScreenFrame.contains(frame.origin)\n               })\n            {\n                let positionMode = UserDefaults.shared\n                    .value(for: \\.suggestionWidgetPositionMode)\n                let suggestionMode = UserDefaults.shared\n                    .value(for: \\.suggestionPresentationMode)\n\n                switch positionMode {\n                case .fixedToBottom:\n                    var result = UpdateLocationStrategy.FixedToBottom().framesForWindows(\n                        windowFrame: windowFrame,\n                        editorFrame: frame,\n                        mainScreen: screen,\n                        activeScreen: windowContainingScreen\n                    )\n                    switch suggestionMode {\n                    case .nearbyTextCursor:\n                        result.suggestionPanelLocation = UpdateLocationStrategy\n                            .NearbyTextCursor()\n                            .framesForSuggestionWindow(\n                                editorFrame: frame,\n                                mainScreen: screen,\n                                activeScreen: windowContainingScreen,\n                                editor: focusElement,\n                                completionPanel: await xcodeInspector.completionPanel\n                            )\n                    default:\n                        break\n                    }\n                    return result\n                case .alignToTextCursor:\n                    var result = UpdateLocationStrategy.AlignToTextCursor().framesForWindows(\n                        windowFrame: windowFrame,\n                        editorFrame: frame,\n                        mainScreen: screen,\n                        activeScreen: windowContainingScreen,\n                        editor: focusElement\n                    )\n                    switch suggestionMode {\n                    case .nearbyTextCursor:\n                        result.suggestionPanelLocation = UpdateLocationStrategy\n                            .NearbyTextCursor()\n                            .framesForSuggestionWindow(\n                                editorFrame: frame, mainScreen: screen,\n                                activeScreen: windowContainingScreen,\n                                editor: focusElement,\n                                completionPanel: await xcodeInspector.completionPanel\n                            )\n                    default:\n                        break\n                    }\n                    return result\n                }\n            } else if var window = application.focusedWindow,\n                      var frame = application.focusedWindow?.rect,\n                      ![\"menu bar\", \"menu bar item\"].contains(window.description),\n                      frame.size.height > 300,\n                      let screen = NSScreen.screens.first(where: { $0.frame.origin == .zero }),\n                      let firstScreen = NSScreen.main\n            {\n                if [\"open_quickly\"].contains(window.identifier)\n                    || [\"alert\"].contains(window.label)\n                {\n                    // fallback to use workspace window\n                    guard let workspaceWindow = application.windows\n                        .first(where: { $0.identifier == \"Xcode.WorkspaceWindow\" }),\n                        let rect = workspaceWindow.rect\n                    else {\n                        return WidgetLocation(\n                            widgetFrame: .zero,\n                            tabFrame: .zero,\n                            sharedPanelLocation: .init(frame: .zero, alignPanelTop: false),\n                            defaultPanelLocation: .init(frame: .zero, alignPanelTop: false)\n                        )\n                    }\n \n                    window = workspaceWindow\n                    frame = rect\n                }\n\n                return UpdateLocationStrategy.FixedToBottom().framesForWindows(\n                    windowFrame: frame,\n                    editorFrame: frame,\n                    mainScreen: screen,\n                    activeScreen: firstScreen,\n                    preferredInsideEditorMinWidth: 9_999_999_999, // never\n                    editorFrameExpendedSize: .zero\n                )\n            }\n        }\n        return nil\n    }\n\n    func updatePanelState(_ location: WidgetLocation) async {\n        await send(.updatePanelStateToMatch(location))\n    }\n\n    func updateWindowOpacity(immediately: Bool) {\n        let shouldDebounce = !immediately &&\n            !(Date().timeIntervalSince(lastUpdateWindowOpacityTime) > 3)\n        lastUpdateWindowOpacityTime = Date()\n        updateWindowOpacityTask?.cancel()\n\n        let task = Task {\n            if shouldDebounce {\n                try await Task.sleep(nanoseconds: 200_000_000)\n            }\n            try Task.checkCancellation()\n            let xcodeInspector = self.xcodeInspector\n            let activeApp = await xcodeInspector.activeApplication\n            let latestActiveXcode = await xcodeInspector.latestActiveXcode\n            let previousActiveApplication = await xcodeInspector.previousActiveApplication\n            await MainActor.run {\n                if let activeApp, activeApp.isXcode {\n                    let application = activeApp.appElement\n                    /// We need this to hide the windows when Xcode is minimized.\n                    let noFocus = application.focusedWindow == nil\n                    windows.sharedPanelWindow.alphaValue = 1\n                    windows.suggestionPanelWindow.alphaValue = noFocus ? 0 : 1\n                    windows.widgetWindow.alphaValue = noFocus ? 0 : 1\n                    windows.toastWindow.alphaValue = noFocus ? 0 : 1\n                } else if let activeApp, activeApp.isExtensionService {\n                    let noFocus = {\n                        guard let xcode = latestActiveXcode else { return true }\n                        if let window = xcode.appElement.focusedWindow,\n                           window.role == \"AXWindow\"\n                        {\n                            return false\n                        }\n                        return true\n                    }()\n\n                    let previousAppIsXcode = previousActiveApplication?.isXcode ?? false\n\n                    windows.sharedPanelWindow.alphaValue = 1\n                    windows.suggestionPanelWindow.alphaValue = noFocus ? 0 : 1\n                    windows.widgetWindow.alphaValue = if noFocus {\n                        0\n                    } else if previousAppIsXcode {\n                        if windows.chatPanelWindow.isFullscreen,\n                           windows.chatPanelWindow.isOnActiveSpace\n                        {\n                            0\n                        } else {\n                            1\n                        }\n                    } else {\n                        0\n                    }\n                    windows.toastWindow.alphaValue = noFocus ? 0 : 1\n                } else {\n                    windows.sharedPanelWindow.alphaValue = 1\n                    windows.suggestionPanelWindow.alphaValue = 0\n                    windows.widgetWindow.alphaValue = 0\n                    windows.toastWindow.alphaValue = 0\n                }\n            }\n        }\n\n        updateWindowOpacityTask = task\n    }\n\n    func updateWindowLocation(\n        animated: Bool,\n        immediately: Bool,\n        function: StaticString = #function,\n        line: UInt = #line\n    ) {\n        @Sendable @MainActor\n        func update() async {\n            let state = store.withState { $0 }\n            let isChatPanelDetached = state.chatPanelState.isDetached\n            guard let widgetLocation = await generateWidgetLocation() else { return }\n            await updatePanelState(widgetLocation)\n\n            windows.widgetWindow.setFrame(\n                widgetLocation.widgetFrame,\n                display: false,\n                animate: animated\n            )\n            windows.toastWindow.setFrame(\n                widgetLocation.defaultPanelLocation.frame,\n                display: false,\n                animate: animated\n            )\n            windows.sharedPanelWindow.setFrame(\n                widgetLocation.sharedPanelLocation.frame,\n                display: false,\n                animate: animated\n            )\n\n            if let suggestionPanelLocation = widgetLocation.suggestionPanelLocation {\n                windows.suggestionPanelWindow.setFrame(\n                    suggestionPanelLocation.frame,\n                    display: false,\n                    animate: animated\n                )\n            }\n\n            if isChatPanelDetached {\n                // don't update it!\n            } else {\n                windows.chatPanelWindow.setFrame(\n                    widgetLocation.defaultPanelLocation.frame,\n                    display: false,\n                    animate: animated\n                )\n            }\n\n            await adjustChatPanelWindowLevel()\n            await adjustModificationPanelLevel()\n        }\n\n        let now = Date()\n        let shouldThrottle = !immediately &&\n            !(now.timeIntervalSince(lastUpdateWindowLocationTime) > 3)\n\n        updateWindowLocationTask?.cancel()\n        let interval: TimeInterval = 0.05\n\n        if shouldThrottle {\n            let delay = max(\n                0,\n                interval - now.timeIntervalSince(lastUpdateWindowLocationTime)\n            )\n\n            updateWindowLocationTask = Task {\n                try await Task.sleep(nanoseconds: UInt64(delay * 500_000_000))\n                try Task.checkCancellation()\n                await update()\n            }\n        } else {\n            Task {\n                await update()\n            }\n        }\n        lastUpdateWindowLocationTime = Date()\n    }\n\n    @MainActor\n    func adjustModificationPanelLevel() async {\n        let window = windows.sharedPanelWindow\n\n        let latestApp = await xcodeInspector.activeApplication\n        let latestAppIsXcodeOrExtension = if let latestApp {\n            latestApp.isXcode || latestApp.isExtensionService\n        } else {\n            false\n        }\n\n        window.setFloatOnTop(latestAppIsXcodeOrExtension)\n    }\n\n    @MainActor\n    func adjustChatPanelWindowLevel() async {\n        let flowOnTopOption = UserDefaults.shared\n            .value(for: \\.chatPanelFloatOnTopOption)\n        let disableFloatOnTopWhenTheChatPanelIsDetached = UserDefaults.shared\n            .value(for: \\.disableFloatOnTopWhenTheChatPanelIsDetached)\n\n        let window = windows.chatPanelWindow\n\n        if flowOnTopOption == .never {\n            window.setFloatOnTop(false)\n            return\n        }\n\n        let state = store.withState { $0 }\n        let isChatPanelDetached = state.chatPanelState.isDetached\n\n        let floatOnTopWhenOverlapsXcode = UserDefaults.shared\n            .value(for: \\.keepFloatOnTopIfChatPanelAndXcodeOverlaps)\n\n        let latestApp = await xcodeInspector.activeApplication\n        let latestAppIsXcodeOrExtension = if let latestApp {\n            latestApp.isXcode || latestApp.isExtensionService\n        } else {\n            false\n        }\n\n        async let overlap: Bool = { @MainActor in\n            guard let xcode = await xcodeInspector.latestActiveXcode else { return false }\n            let windowElements = xcode.appElement.windows\n            let overlap = windowElements.contains {\n                if let position = $0.position, let size = $0.size {\n                    let rect = CGRect(\n                        x: position.x,\n                        y: position.y,\n                        width: size.width,\n                        height: size.height\n                    )\n                    return rect.intersects(window.frame)\n                }\n                return false\n            }\n            return overlap\n        }()\n\n        if latestAppIsXcodeOrExtension {\n            if floatOnTopWhenOverlapsXcode {\n                let overlap = await overlap\n                window.setFloatOnTop(overlap)\n            } else {\n                if disableFloatOnTopWhenTheChatPanelIsDetached, isChatPanelDetached {\n                    window.setFloatOnTop(false)\n                } else {\n                    window.setFloatOnTop(true)\n                }\n            }\n        } else {\n            if floatOnTopWhenOverlapsXcode {\n                let overlap = await overlap\n                window.setFloatOnTop(overlap)\n            } else {\n                switch flowOnTopOption {\n                case .onTopWhenXcodeIsActive:\n                    window.setFloatOnTop(false)\n                case .alwaysOnTop:\n                    window.setFloatOnTop(true)\n                case .never:\n                    window.setFloatOnTop(false)\n                }\n            }\n        }\n    }\n\n    @MainActor\n    func handleSpaceChange() async {\n        let activeXcode = XcodeInspector.shared.activeXcode\n\n        let xcode = activeXcode?.appElement\n\n        let isXcodeActive = xcode?.isFrontmost ?? false\n\n        [\n            windows.sharedPanelWindow,\n            windows.suggestionPanelWindow,\n            windows.widgetWindow,\n            windows.toastWindow,\n        ].forEach {\n            if isXcodeActive {\n                $0.moveToActiveSpace()\n            }\n        }\n\n        if isXcodeActive, !windows.chatPanelWindow.isDetached {\n            windows.chatPanelWindow.moveToActiveSpace()\n        }\n\n        if windows.fullscreenDetector.isOnActiveSpace, xcode?.focusedWindow != nil {\n            windows.orderFront()\n        }\n    }\n}\n\n// MARK: - NSWindowDelegate\n\nextension WidgetWindowsController: NSWindowDelegate {\n    nonisolated\n    func windowWillMove(_ notification: Notification) {\n        guard let window = notification.object as? NSWindow else { return }\n        Task { @MainActor in\n            guard window === windows.chatPanelWindow else { return }\n            await Task.yield()\n            store.send(.chatPanel(.detachChatPanel))\n        }\n    }\n\n    nonisolated\n    func windowDidMove(_ notification: Notification) {\n        guard let window = notification.object as? NSWindow else { return }\n        Task { @MainActor in\n            guard window === windows.chatPanelWindow else { return }\n            await Task.yield()\n            await adjustChatPanelWindowLevel()\n        }\n    }\n\n    nonisolated\n    func windowWillEnterFullScreen(_ notification: Notification) {\n        guard let window = notification.object as? NSWindow else { return }\n        Task { @MainActor in\n            guard window === windows.chatPanelWindow else { return }\n            await Task.yield()\n            store.send(.chatPanel(.enterFullScreen))\n        }\n    }\n\n    nonisolated\n    func windowWillExitFullScreen(_ notification: Notification) {\n        guard let window = notification.object as? NSWindow else { return }\n        Task { @MainActor in\n            guard window === windows.chatPanelWindow else { return }\n            await Task.yield()\n            store.send(.chatPanel(.exitFullScreen))\n        }\n    }\n}\n\n// MARK: - Windows\n\npublic final class WidgetWindows {\n    let store: StoreOf<Widget>\n    let chatTabPool: ChatTabPool\n    weak var controller: WidgetWindowsController?\n\n    // you should make these window `.transient` so they never show up in the mission control.\n\n    @MainActor\n    lazy var fullscreenDetector = {\n        let it = CanBecomeKeyWindow(\n            contentRect: .zero,\n            styleMask: .borderless,\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.backgroundColor = .clear\n        it.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary, .transient]\n        it.hasShadow = false\n        it.setIsVisible(false)\n        it.canBecomeKeyChecker = { false }\n        return it\n    }()\n\n    @MainActor\n    lazy var widgetWindow = {\n        let it = WidgetWindow(\n            contentRect: .zero,\n            styleMask: .borderless,\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.backgroundColor = .clear\n        it.level = widgetLevel(0)\n        it.hasShadow = false\n        it.contentView = NSHostingView(\n            rootView: WidgetView(\n                store: store.scope(\n                    state: \\._internalCircularWidgetState,\n                    action: \\.circularWidget\n                )\n            )\n        )\n        it.setIsVisible(true)\n        it.canBecomeKeyChecker = { false }\n        return it\n    }()\n\n    @MainActor\n    lazy var sharedPanelWindow = {\n        let it = WidgetWindow(\n            contentRect: .init(x: 0, y: 0, width: Style.panelWidth, height: Style.panelHeight),\n            styleMask: .borderless,\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.backgroundColor = .clear\n        it.level = widgetLevel(2)\n        it.hoveringLevel = widgetLevel(2)\n        it.hasShadow = false\n        it.contentView = NSHostingView(\n            rootView: SharedPanelView(\n                store: store.scope(\n                    state: \\.panelState,\n                    action: \\.panel\n                ).scope(\n                    state: \\.sharedPanelState,\n                    action: \\.sharedPanel\n                )\n            ).modifierFlagsMonitor()\n        )\n        it.setIsVisible(true)\n        it.canBecomeKeyChecker = { [store] in\n            store.withState { state in\n                !state.panelState.sharedPanelState.content.promptToCodeGroup.promptToCodes.isEmpty\n            }\n        }\n        return it\n    }()\n\n    @MainActor\n    lazy var suggestionPanelWindow = {\n        let it = WidgetWindow(\n            contentRect: .init(x: 0, y: 0, width: Style.panelWidth, height: Style.panelHeight),\n            styleMask: .borderless,\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.backgroundColor = .clear\n        it.level = widgetLevel(2)\n        it.hasShadow = false\n        it.menu = nil\n        it.animationBehavior = .utilityWindow\n        it.contentView = NSHostingView(\n            rootView: SuggestionPanelView(\n                store: store.scope(\n                    state: \\.panelState,\n                    action: \\.panel\n                ).scope(\n                    state: \\.suggestionPanelState,\n                    action: \\.suggestionPanel\n                )\n            )\n        )\n        it.canBecomeKeyChecker = { false }\n        it.setIsVisible(true)\n        return it\n    }()\n\n    @MainActor\n    lazy var chatPanelWindow = {\n        let it = ChatPanelWindow(\n            store: store.scope(\n                state: \\.chatPanelState,\n                action: \\.chatPanel\n            ),\n            chatTabPool: chatTabPool,\n            minimizeWindow: { [weak self] in\n                self?.store.send(.chatPanel(.hideButtonClicked))\n            }\n        )\n        it.hoveringLevel = widgetLevel(1)\n        it.delegate = controller\n        return it\n    }()\n\n    @MainActor\n    lazy var toastWindow = {\n        let it = WidgetWindow(\n            contentRect: .init(x: 0, y: 0, width: Style.panelWidth, height: Style.panelHeight),\n            styleMask: [.borderless],\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.isOpaque = false\n        it.backgroundColor = .clear\n        it.level = widgetLevel(2)\n        it.hasShadow = false\n        it.contentView = NSHostingView(\n            rootView: ToastPanelView(store: store.scope(\n                state: \\.toastPanel,\n                action: \\.toastPanel\n            ))\n        )\n        it.setIsVisible(true)\n        it.canBecomeKeyChecker = { false }\n        return it\n    }()\n\n    init(\n        store: StoreOf<Widget>,\n        chatTabPool: ChatTabPool\n    ) {\n        self.store = store\n        self.chatTabPool = chatTabPool\n    }\n\n    @MainActor\n    func orderFront() {\n        widgetWindow.orderFrontRegardless()\n        toastWindow.orderFrontRegardless()\n        sharedPanelWindow.orderFrontRegardless()\n        suggestionPanelWindow.orderFrontRegardless()\n        if chatPanelWindow.level.rawValue > NSWindow.Level.normal.rawValue,\n           store.withState({ !$0.chatPanelState.isDetached })\n        {\n            chatPanelWindow.orderFrontRegardless()\n        }\n    }\n}\n\n// MARK: - Window Subclasses\n\nclass CanBecomeKeyWindow: NSWindow {\n    var canBecomeKeyChecker: () -> Bool = { true }\n    override var canBecomeKey: Bool { canBecomeKeyChecker() }\n    override var canBecomeMain: Bool { canBecomeKeyChecker() }\n}\n\nclass WidgetWindow: CanBecomeKeyWindow {\n    enum State: Equatable {\n        case normal(fullscreen: Bool)\n        case switchingSpace\n    }\n\n    var hoveringLevel: NSWindow.Level = widgetLevel(0)\n    \n    override var isFloatingPanel: Bool { true }\n\n    var defaultCollectionBehavior: NSWindow.CollectionBehavior {\n        [.fullScreenAuxiliary, .transient]\n    }\n\n    var isFullscreen: Bool {\n        styleMask.contains(.fullScreen)\n    }\n\n    private var state: State? {\n        didSet {\n            guard state != oldValue else { return }\n            switch state {\n            case .none:\n                collectionBehavior = defaultCollectionBehavior\n            case .switchingSpace:\n                collectionBehavior = defaultCollectionBehavior.union(.moveToActiveSpace)\n            case .normal:\n                collectionBehavior = defaultCollectionBehavior\n            }\n        }\n    }\n\n    func moveToActiveSpace() {\n        let previousState = state\n        state = .switchingSpace\n        Task { @MainActor in\n            try await Task.sleep(nanoseconds: 50_000_000)\n            self.state = previousState\n        }\n    }\n\n    func setFloatOnTop(_ isFloatOnTop: Bool) {\n        let targetLevel: NSWindow.Level = isFloatOnTop\n            ? hoveringLevel\n            : .normal\n\n        if targetLevel != level {\n            orderFrontRegardless()\n            level = targetLevel\n        }\n    }\n}\n\nfunc widgetLevel(_ addition: Int) -> NSWindow.Level {\n    let minimumWidgetLevel: Int\n    #if DEBUG\n    minimumWidgetLevel = NSWindow.Level.floating.rawValue + 1\n    #else\n    minimumWidgetLevel = NSWindow.Level.floating.rawValue\n    #endif\n    return .init(minimumWidgetLevel + addition)\n}\n\nextension CGRect {\n    func flipped(relativeTo reference: CGRect) -> CGRect {\n        let flippedOrigin = CGPoint(\n            x: origin.x,\n            y: reference.height - origin.y - height\n        )\n        return CGRect(origin: flippedOrigin, size: size)\n    }\n\n    func relative(to reference: CGRect) -> CGRect {\n        let relativeOrigin = CGPoint(\n            x: origin.x - reference.origin.x,\n            y: origin.y - reference.origin.y\n        )\n        return CGRect(origin: relativeOrigin, size: size)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/UpdateChecker/UpdateChecker.swift",
    "content": "import Logger\nimport Preferences\nimport Sparkle\n\npublic final class UpdateChecker {\n    let updater: SPUUpdater\n    let hostBundleFound: Bool\n    let delegate: UpdaterDelegate\n    public weak var updateCheckerDelegate: UpdateCheckerDelegate? {\n        get { delegate.updateCheckerDelegate }\n        set { delegate.updateCheckerDelegate = newValue }\n    }\n\n    public init(\n        hostBundle: Bundle?,\n        shouldAutomaticallyCheckForUpdate: Bool\n    ) {\n        if hostBundle == nil {\n            hostBundleFound = false\n            Logger.updateChecker.error(\"Host bundle not found\")\n        } else {\n            hostBundleFound = true\n        }\n        delegate = .init(\n            shouldAutomaticallyCheckForUpdate: shouldAutomaticallyCheckForUpdate\n        )\n        updater = SPUUpdater(\n            hostBundle: hostBundle ?? Bundle.main,\n            applicationBundle: Bundle.main,\n            userDriver: SPUStandardUserDriver(hostBundle: hostBundle ?? Bundle.main, delegate: nil),\n            delegate: delegate\n        )\n        do {\n            try updater.start()\n        } catch {\n            Logger.updateChecker.error(error.localizedDescription)\n        }\n    }\n\n    public func checkForUpdates() {\n        updater.checkForUpdates()\n    }\n    \n    public func resetUpdateCycle() {\n        updater.resetUpdateCycleAfterShortDelay()\n    }\n\n    public var automaticallyChecksForUpdates: Bool {\n        get { updater.automaticallyChecksForUpdates }\n        set { updater.automaticallyChecksForUpdates = newValue }\n    }\n}\n\npublic protocol UpdateCheckerDelegate: AnyObject {\n    func prepareForRelaunch(finish: @escaping () -> Void)\n}\n\nclass UpdaterDelegate: NSObject, SPUUpdaterDelegate {\n    let shouldAutomaticallyCheckForUpdate: Bool\n    weak var updateCheckerDelegate: UpdateCheckerDelegate?\n\n    init(shouldAutomaticallyCheckForUpdate: Bool) {\n        self.shouldAutomaticallyCheckForUpdate = shouldAutomaticallyCheckForUpdate\n    }\n\n    func updater(_ updater: SPUUpdater, mayPerform updateCheck: SPUUpdateCheck) throws {\n        // Not sure how it works\n//        if !shouldAutomaticallyCheckForUpdate, updateCheck == .updatesInBackground {\n//            throw CancellationError()\n//        }\n    }\n\n    func updater(\n        _ updater: SPUUpdater,\n        shouldPostponeRelaunchForUpdate item: SUAppcastItem,\n        untilInvokingBlock installHandler: @escaping () -> Void\n    ) -> Bool {\n        if let updateCheckerDelegate {\n            updateCheckerDelegate.prepareForRelaunch(finish: installHandler)\n            return true\n        }\n        return false\n    }\n    \n    func updater(_ updater: SPUUpdater, willScheduleUpdateCheckAfterDelay delay: TimeInterval) {\n        Logger.updateChecker.info(\"Will schedule update check after delay: \\(delay)\")\n    }\n    \n    func updaterWillNotScheduleUpdateCheck(_ updater: SPUUpdater) {\n        Logger.updateChecker.info(\"Will not schedule update check\")\n    }\n\n    func allowedChannels(for updater: SPUUpdater) -> Set<String> {\n        if UserDefaults.shared.value(for: \\.installBetaBuilds) {\n            Set([\"beta\"])\n        } else {\n            []\n        }\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/UserDefaultsObserver/UserDefaultsObserver.swift",
    "content": "import Foundation\n\npublic final class UserDefaultsObserver: NSObject {\n    public var onChange: (() -> Void)?\n    private weak var object: NSObject?\n    private let keyPaths: [String]\n\n    public init(\n        object: NSObject,\n        forKeyPaths keyPaths: [String],\n        context: UnsafeMutableRawPointer?\n    ) {\n        self.object = object\n        self.keyPaths = keyPaths\n        super.init()\n        for keyPath in keyPaths {\n            object.addObserver(self, forKeyPath: keyPath, options: .new, context: context)\n        }\n    }\n\n    deinit {\n        for keyPath in keyPaths {\n            object?.removeObserver(self, forKeyPath: keyPath)\n        }\n    }\n\n    public override func observeValue(\n        forKeyPath keyPath: String?,\n        of object: Any?,\n        change: [NSKeyValueChangeKey: Any]?,\n        context: UnsafeMutableRawPointer?\n    ) {\n        onChange?()\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/XcodeThemeController/HighlightJSThemeTemplate.swift",
    "content": "import Foundation\n\nfunc buildHighlightJSTheme(_ theme: XcodeTheme) -> String {\n    /// The source value is an `r g b a` string, for example: `0.5 0.5 0.2 1`\n    \n    return \"\"\"\n    .hljs {\n      display: block;\n      overflow-x: auto;\n      padding: 0.5em;\n      background: \\(theme.backgroundColor.hexString);\n      color: \\(theme.plainTextColor.hexString);\n    }\n    .xml .hljs-meta {\n      color: \\(theme.marksColor.hexString);\n    }\n    .hljs-comment,\n    .hljs-quote {\n      color: \\(theme.commentColor.hexString);\n    }\n    .hljs-tag,\n    .hljs-keyword,\n    .hljs-selector-tag,\n    .hljs-literal,\n    .hljs-name {\n      color: \\(theme.keywordsColor.hexString);\n    }\n    .hljs-attribute {\n      color: \\(theme.attributesColor.hexString);\n    }\n    .hljs-variable,\n    .hljs-template-variable {\n      color: \\(theme.otherPropertiesAndGlobalsColor.hexString);\n    }\n    .hljs-code,\n    .hljs-string,\n    .hljs-meta-string {\n      color: \\(theme.stringsColor.hexString);\n    }\n    .hljs-regexp {\n      color: \\(theme.regexLiteralsColor.hexString);\n    }\n    .hljs-link {\n      color: \\(theme.urlsColor.hexString);\n    }\n    .hljs-title {\n      color: \\(theme.headingColor.hexString);\n    }\n    .hljs-symbol,\n    .hljs-bullet {\n      color: \\(theme.attributesColor.hexString);\n    }\n    .hljs-number {\n      color: \\(theme.numbersColor.hexString);\n    }\n    .hljs-section {\n      color: \\(theme.marksColor.hexString);\n    }\n    .hljs-meta {\n      color: \\(theme.keywordsColor.hexString);\n    }\n    .hljs-type,\n    .hljs-built_in,\n    .hljs-builtin-name {\n          color: \\(theme.otherTypeNamesColor.hexString);\n    }\n    .hljs-class .hljs-title,\n    .hljs-title .class_ {\n      color: \\(theme.typeDeclarationsColor.hexString);\n    }\n    .hljs-function .hljs-title,\n    .hljs-title .function_ {\n      color: \\(theme.otherDeclarationsColor.hexString);\n    }\n    .hljs-params {\n      color: \\(theme.otherDeclarationsColor.hexString);\n    }\n    .hljs-attr {\n      color: \\(theme.attributesColor.hexString);\n    }\n    .hljs-subst {\n      color: \\(theme.plainTextColor.hexString);\n    }\n    .hljs-formula {\n      background-color: \\(theme.selectionColor.hexString);\n      font-style: italic;\n    }\n    .hljs-addition {\n      background-color: #baeeba;\n    }\n    .hljs-deletion {\n      background-color: #ffc8bd;\n    }\n    .hljs-selector-id,\n    .hljs-selector-class {\n      color: \\(theme.plainTextColor.hexString);\n    }\n    .hljs-doctag,\n    .hljs-strong {\n      font-weight: bold;\n    }\n    .hljs-emphasis {\n      font-style: italic;\n    }\n    \"\"\"\n}\n\n"
  },
  {
    "path": "Core/Sources/XcodeThemeController/HighlightrThemeManager.swift",
    "content": "import Foundation\nimport Highlightr\nimport Preferences\n\npublic class HighlightrThemeManager: ThemeManager {\n    let defaultManager: ThemeManager\n\n    weak var controller: XcodeThemeController?\n\n    public init(defaultManager: ThemeManager, controller: XcodeThemeController) {\n        self.defaultManager = defaultManager\n        self.controller = controller\n    }\n\n    public func theme(for name: String) -> Theme? {\n        let syncSuggestionTheme = UserDefaults.shared.value(for: \\.syncSuggestionHighlightTheme)\n        let syncPromptToCodeTheme = UserDefaults.shared.value(for: \\.syncPromptToCodeHighlightTheme)\n        let syncChatTheme = UserDefaults.shared.value(for: \\.syncChatCodeHighlightTheme)\n        \n        lazy var defaultLight = Theme(themeString: defaultLightTheme)\n        lazy var defaultDark = Theme(themeString: defaultDarkTheme)\n\n        switch name {\n        case \"suggestion-light\":\n            guard syncSuggestionTheme, let theme = theme(lightMode: true) else {\n                return defaultLight\n            }\n            return theme\n        case \"suggestion-dark\":\n            guard syncSuggestionTheme, let theme = theme(lightMode: false) else {\n                return defaultDark\n            }\n            return theme\n        case \"promptToCode-light\":\n            guard syncPromptToCodeTheme, let theme = theme(lightMode: true) else {\n                return defaultLight\n            }\n            return theme\n        case \"promptToCode-dark\":\n            guard syncPromptToCodeTheme, let theme = theme(lightMode: false) else {\n                return defaultDark\n            }\n            return theme\n        case \"chat-light\":\n            guard syncChatTheme, let theme = theme(lightMode: true) else {\n                return defaultLight\n            }\n            return theme\n        case \"chat-dark\":\n            guard syncChatTheme, let theme = theme(lightMode: false) else {\n                return defaultDark\n            }\n            return theme\n        case \"light\":\n            return defaultLight\n        case \"dark\":\n            return defaultDark\n        default:\n            return defaultLight\n        }\n    }\n\n    func theme(lightMode: Bool) -> Theme? {\n        guard let controller else { return nil }\n        guard let directories = controller.createSupportDirectoriesIfNeeded() else { return nil }\n\n        let themeURL: URL = if lightMode {\n            directories.themeDirectory.appendingPathComponent(\"highlightjs-light\")\n        } else {\n            directories.themeDirectory.appendingPathComponent(\"highlightjs-dark\")\n        }\n\n        if let themeString = try? String(contentsOf: themeURL) {\n            return Theme(themeString: themeString)\n        }\n\n        controller.syncXcodeThemeIfNeeded()\n\n        if let themeString = try? String(contentsOf: themeURL) {\n            return Theme(themeString: themeString)\n        }\n\n        return nil\n    }\n}\n\nlet defaultLightTheme = \".hljs{display:block;overflow-x:auto;padding:0.5em;background:#FFFFFFFF;color:#000000D8}.xml .hljs-meta{color:#495460FF}.hljs-comment,.hljs-quote{color:#5D6B79FF}.hljs-tag,.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-name{color:#9A2393FF}.hljs-attribute{color:#805E03FF}.hljs-variable,.hljs-template-variable{color:#6B36A9FF}.hljs-code,.hljs-string,.hljs-meta-string{color:#C31A15FF}.hljs-regexp{color:#000000D8}.hljs-link{color:#0E0EFFFF}.hljs-title{color:#000000FF}.hljs-symbol,.hljs-bullet{color:#805E03FF}.hljs-number{color:#1C00CFFF}.hljs-section{color:#495460FF}.hljs-meta{color:#9A2393FF}.hljs-type,.hljs-built_in,.hljs-builtin-name{color:#3900A0FF}.hljs-class .hljs-title,.hljs-title .class_{color:#0B4F79FF}.hljs-function .hljs-title,.hljs-title .function_{color:#0E67A0FF}.hljs-params{color:#0E67A0FF}.hljs-attr{color:#805E03FF}.hljs-subst{color:#000000D8}.hljs-formula{background-color:#A3CCFEFF;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-id,.hljs-selector-class{color:#000000D8}.hljs-doctag,.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}\"\n\nlet defaultDarkTheme = \".hljs{display:block;overflow-x:auto;padding:0.5em;background:#1F1F23FF;color:#FFFFFFD8}.xml .hljs-meta{color:#91A1B1FF}.hljs-comment,.hljs-quote{color:#6B7985FF}.hljs-tag,.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-name{color:#FC5FA2FF}.hljs-attribute{color:#BF8554FF}.hljs-variable,.hljs-template-variable{color:#A166E5FF}.hljs-code,.hljs-string,.hljs-meta-string{color:#FC695DFF}.hljs-regexp{color:#FFFFFFD8}.hljs-link{color:#5482FEFF}.hljs-title{color:#FFFFFFFF}.hljs-symbol,.hljs-bullet{color:#BF8554FF}.hljs-number{color:#CFBF69FF}.hljs-section{color:#91A1B1FF}.hljs-meta{color:#FC5FA2FF}.hljs-type,.hljs-built_in,.hljs-builtin-name{color:#D0A7FEFF}.hljs-class .hljs-title,.hljs-title .class_{color:#5CD7FEFF}.hljs-function .hljs-title,.hljs-title .function_{color:#41A1BFFF}.hljs-params{color:#41A1BFFF}.hljs-attr{color:#BF8554FF}.hljs-subst{color:#FFFFFFD8}.hljs-formula{background-color:#505A6FFF;font-style:italic}.hljs-addition{background-color:#baeeba}.hljs-deletion{background-color:#ffc8bd}.hljs-selector-id,.hljs-selector-class{color:#FFFFFFD8}.hljs-doctag,.hljs-strong{font-weight:bold}.hljs-emphasis{font-style:italic}\"\n"
  },
  {
    "path": "Core/Sources/XcodeThemeController/PreferenceKey+Theme.swift",
    "content": "import Foundation\nimport Preferences\n\n// MARK: - Theming\n\npublic extension UserDefaultPreferenceKeys {\n    var lightXcodeThemeName: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"LightXcodeThemeName\")\n    }\n    \n    var lightXcodeTheme: PreferenceKey<UserDefaultsStorageBox<XcodeTheme?>> {\n        .init(defaultValue: .init(nil), key: \"LightXcodeTheme\")\n    }\n    \n    var darkXcodeThemeName: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"DarkXcodeThemeName\")\n    }\n    \n    var darkXcodeTheme: PreferenceKey<UserDefaultsStorageBox<XcodeTheme?>> {\n        .init(defaultValue: .init(nil), key: \"LightXcodeTheme\")\n    }\n\n    var lastSyncedHighlightJSThemeCreatedAt: PreferenceKey<TimeInterval> {\n        .init(defaultValue: 0, key: \"LastSyncedHighlightJSThemeCreatedAt\")\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/XcodeThemeController/XcodeThemeController.swift",
    "content": "import AppKit\nimport Foundation\nimport Highlightr\nimport XcodeInspector\n\npublic class XcodeThemeController {\n    var syncTriggerTask: Task<Void, Error>?\n\n    public init(syncTriggerTask: Task<Void, Error>? = nil) {\n        self.syncTriggerTask = syncTriggerTask\n    }\n\n    public func start() {\n        let defaultHighlightrThemeManager = Highlightr.themeManager\n        Highlightr.themeManager = HighlightrThemeManager(\n            defaultManager: defaultHighlightrThemeManager,\n            controller: self\n        )\n\n        syncXcodeThemeIfNeeded()\n\n        syncTriggerTask?.cancel()\n        syncTriggerTask = Task { [weak self] in\n            let notifications = NSWorkspace.shared.notificationCenter\n                .notifications(named: NSWorkspace.didActivateApplicationNotification)\n            for await notification in notifications {\n                try Task.checkCancellation()\n                guard let app = notification\n                    .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication\n                else { continue }\n                guard app.isCopilotForXcodeExtensionService else { continue }\n                guard let self else { return }\n                self.syncXcodeThemeIfNeeded()\n            }\n        }\n    }\n}\n\nextension XcodeThemeController {\n    func syncXcodeThemeIfNeeded() {\n        guard UserDefaults.shared.value(for: \\.syncSuggestionHighlightTheme)\n            || UserDefaults.shared.value(for: \\.syncPromptToCodeHighlightTheme)\n            || UserDefaults.shared.value(for: \\.syncChatCodeHighlightTheme)\n        else { return }\n        guard let directories = createSupportDirectoriesIfNeeded() else { return }\n\n        defer {\n            UserDefaults.shared.set(\n                Date().timeIntervalSince1970,\n                for: \\.lastSyncedHighlightJSThemeCreatedAt\n            )\n        }\n\n        let xcodeUserDefaults = UserDefaults(suiteName: \"com.apple.dt.Xcode\")!\n\n        if let darkThemeName = xcodeUserDefaults\n            .value(forKey: \"XCFontAndColorCurrentDarkTheme\") as? String\n        {\n            syncXcodeThemeIfNeeded(\n                xcodeThemeName: darkThemeName,\n                light: false,\n                in: directories.themeDirectory\n            )\n        }\n\n        if let lightThemeName = xcodeUserDefaults\n            .value(forKey: \"XCFontAndColorCurrentTheme\") as? String\n        {\n            syncXcodeThemeIfNeeded(\n                xcodeThemeName: lightThemeName,\n                light: true,\n                in: directories.themeDirectory\n            )\n        }\n    }\n\n    func syncXcodeThemeIfNeeded(\n        xcodeThemeName: String,\n        light: Bool,\n        in directoryURL: URL\n    ) {\n        let targetName = light ? \"highlightjs-light\" : \"highlightjs-dark\"\n        guard let xcodeThemeURL = locateXcodeTheme(named: xcodeThemeName) else { return }\n        let targetThemeURL = directoryURL.appendingPathComponent(targetName)\n        let lastSyncTimestamp = UserDefaults.shared\n            .value(for: \\.lastSyncedHighlightJSThemeCreatedAt)\n\n        let shouldSync = {\n            if light, UserDefaults.shared.value(for: \\.lightXcodeTheme) == nil { return true }\n            if !light, UserDefaults.shared.value(for: \\.darkXcodeTheme) == nil { return true }\n            if light, xcodeThemeName != UserDefaults.shared.value(for: \\.lightXcodeThemeName) {\n                return true\n            }\n            if !light, xcodeThemeName != UserDefaults.shared.value(for: \\.darkXcodeThemeName) {\n                return true\n            }\n            if !FileManager.default.fileExists(atPath: targetThemeURL.path) { return true }\n\n            let xcodeThemeFileUpdated = {\n                guard let xcodeThemeModifiedDate = try? xcodeThemeURL\n                    .resourceValues(forKeys: [.contentModificationDateKey]).contentModificationDate\n                else { return true }\n                return xcodeThemeModifiedDate.timeIntervalSince1970 > lastSyncTimestamp\n            }()\n\n            if xcodeThemeFileUpdated { return true }\n\n            return false\n        }()\n\n        if shouldSync {\n            do {\n                let theme = try XcodeTheme(fileURL: xcodeThemeURL)\n                let highlightrTheme = theme.asHighlightJSTheme()\n                try highlightrTheme.write(to: targetThemeURL, atomically: true, encoding: .utf8)\n\n                Task { @MainActor in\n                    if light {\n                        UserDefaults.shared.set(xcodeThemeName, for: \\.lightXcodeThemeName)\n                        UserDefaults.shared.set(.init(theme), for: \\.lightXcodeTheme)\n                        UserDefaults.shared.set(\n                            .init(theme.plainTextColor.storable),\n                            for: \\.codeForegroundColorLight\n                        )\n                        UserDefaults.shared.set(\n                            .init(theme.backgroundColor.storable),\n                            for: \\.codeBackgroundColorLight\n                        )\n                    } else {\n                        UserDefaults.shared.set(xcodeThemeName, for: \\.darkXcodeThemeName)\n                        UserDefaults.shared.set(.init(theme), for: \\.darkXcodeTheme)\n                        UserDefaults.shared.set(\n                            .init(theme.plainTextColor.storable),\n                            for: \\.codeForegroundColorDark\n                        )\n                        UserDefaults.shared.set(\n                            .init(theme.backgroundColor.storable),\n                            for: \\.codeBackgroundColorDark\n                        )\n                    }\n                }\n            } catch {\n                print(error.localizedDescription)\n            }\n        }\n    }\n\n    func locateXcodeTheme(named name: String) -> URL? {\n        if let customThemeURL = FileManager.default.urls(\n            for: .libraryDirectory,\n            in: .userDomainMask\n        ).first?.appendingPathComponent(\"Developer/Xcode/UserData/FontAndColorThemes\")\n            .appendingPathComponent(name),\n            FileManager.default.fileExists(atPath: customThemeURL.path)\n        {\n            return customThemeURL\n        }\n\n        let xcodeURL: URL? = {\n            if let running = NSWorkspace.shared\n                .urlForApplication(withBundleIdentifier: \"com.apple.dt.Xcode\")\n            {\n                return running\n            }\n            // Use the main Xcode.app\n            let proposedXcodeURL = URL(fileURLWithPath: \"/Applications/Xcode.app\")\n            if FileManager.default.fileExists(atPath: proposedXcodeURL.path) {\n                return proposedXcodeURL\n            }\n            // Look for an Xcode.app\n            if let applicationsURL = FileManager.default.urls(\n                for: .applicationDirectory,\n                in: .localDomainMask\n            ).first {\n                struct InfoPlist: Codable {\n                    var CFBundleIdentifier: String\n                }\n\n                let appBundleIdentifier = \"com.apple.dt.Xcode\"\n                let appDirectories = try? FileManager.default.contentsOfDirectory(\n                    at: applicationsURL,\n                    includingPropertiesForKeys: [],\n                    options: .skipsHiddenFiles\n                )\n                for appDirectoryURL in appDirectories ?? [] {\n                    let infoPlistURL = appDirectoryURL.appendingPathComponent(\"Contents/Info.plist\")\n                    if let data = try? Data(contentsOf: infoPlistURL),\n                       let infoPlist = try? PropertyListDecoder().decode(\n                           InfoPlist.self,\n                           from: data\n                       ),\n                       infoPlist.CFBundleIdentifier == appBundleIdentifier\n                    {\n                        return appDirectoryURL\n                    }\n                }\n            }\n            return nil\n        }()\n\n        if let url = xcodeURL?\n            .appendingPathComponent(\"Contents/SharedFrameworks/DVTUserInterfaceKit.framework\")\n            .appendingPathComponent(\"Versions/A/Resources/FontAndColorThemes\")\n            .appendingPathComponent(name),\n            FileManager.default.fileExists(atPath: url.path)\n        {\n            return url\n        }\n\n        return nil\n    }\n\n    func createSupportDirectoriesIfNeeded() -> (supportDirectory: URL, themeDirectory: URL)? {\n        guard let supportURL = FileManager.default.urls(\n            for: .applicationSupportDirectory,\n            in: .userDomainMask\n        ).first?.appendingPathComponent(\n            Bundle.main\n                .object(forInfoDictionaryKey: \"APPLICATION_SUPPORT_FOLDER\") as! String\n        ) else {\n            return nil\n        }\n\n        let themeURL = supportURL.appendingPathComponent(\"Themes\")\n\n        do {\n            if !FileManager.default.fileExists(atPath: supportURL.path) {\n                try FileManager.default.createDirectory(\n                    at: supportURL,\n                    withIntermediateDirectories: true,\n                    attributes: nil\n                )\n            }\n\n            if !FileManager.default.fileExists(atPath: themeURL.path) {\n                try FileManager.default.createDirectory(\n                    at: themeURL,\n                    withIntermediateDirectories: true,\n                    attributes: nil\n                )\n            }\n        } catch {\n            return nil\n        }\n\n        return (supportURL, themeURL)\n    }\n}\n\n"
  },
  {
    "path": "Core/Sources/XcodeThemeController/XcodeThemeParser.swift",
    "content": "import Foundation\nimport Preferences\n\npublic struct XcodeTheme: Codable {\n    public struct ThemeColor: Codable {\n        public var red: Double\n        public var green: Double\n        public var blue: Double\n        public var alpha: Double\n\n        public var hexString: String {\n            let red = Int(self.red * 255)\n            let green = Int(self.green * 255)\n            let blue = Int(self.blue * 255)\n            let alpha = Int(self.alpha * 255)\n            return String(format: \"#%02X%02X%02X%02X\", red, green, blue, alpha)\n        }\n        \n        var storable: StorableColor {\n            .init(red: red, green: green, blue: blue, alpha: alpha)\n        }\n    }\n\n    public var plainTextColor: ThemeColor\n    public var commentColor: ThemeColor\n    public var documentationMarkupColor: ThemeColor\n    public var documentationMarkupKeywordColor: ThemeColor\n    public var marksColor: ThemeColor\n    public var stringsColor: ThemeColor\n    public var charactersColor: ThemeColor\n    public var numbersColor: ThemeColor\n    public var regexLiteralsColor: ThemeColor\n    public var regexLiteralNumbersColor: ThemeColor\n    public var regexLiteralCaptureNamesColor: ThemeColor\n    public var regexLiteralCharacterClassNamesColor: ThemeColor\n    public var regexLiteralOperatorsColor: ThemeColor\n    public var keywordsColor: ThemeColor\n    public var preprocessorStatementsColor: ThemeColor\n    public var urlsColor: ThemeColor\n    public var attributesColor: ThemeColor\n    public var typeDeclarationsColor: ThemeColor\n    public var otherDeclarationsColor: ThemeColor\n    public var projectClassNamesColor: ThemeColor\n    public var projectFunctionAndMethodNamesColor: ThemeColor\n    public var projectConstantsColor: ThemeColor\n    public var projectTypeNamesColor: ThemeColor\n    public var projectPropertiesAndGlobalsColor: ThemeColor\n    public var projectPreprocessorMacrosColor: ThemeColor\n    public var otherClassNamesColor: ThemeColor\n    public var otherFunctionAndMethodNamesColor: ThemeColor\n    public var otherConstantsColor: ThemeColor\n    public var otherTypeNamesColor: ThemeColor\n    public var otherPropertiesAndGlobalsColor: ThemeColor\n    public var otherPreprocessorMacrosColor: ThemeColor\n    public var headingColor: ThemeColor\n    public var backgroundColor: ThemeColor\n    public var selectionColor: ThemeColor\n    public var cursorColor: ThemeColor\n    public var currentLineColor: ThemeColor\n    public var invisibleCharactersColor: ThemeColor\n    public var debuggerConsolePromptColor: ThemeColor\n    public var debuggerConsoleOutputColor: ThemeColor\n    public var debuggerConsoleInputColor: ThemeColor\n    public var executableConsoleOutputColor: ThemeColor\n    public var executableConsoleInputColor: ThemeColor\n\n    public func asHighlightJSTheme() -> String {\n        buildHighlightJSTheme(self)\n            .replacingOccurrences(of: \"\\n\", with: \"\")\n            .replacingOccurrences(of: \": \", with: \":\")\n            .replacingOccurrences(of: \"} \", with: \"}\")\n            .replacingOccurrences(of: \" {\", with: \"{\")\n            .replacingOccurrences(of: \";}\", with: \"}\")\n            .replacingOccurrences(of: \"  \", with: \"\")\n    }\n}\n\npublic extension XcodeTheme {\n    /// Color scheme locations:\n    /// ~/Library/Developer/Xcode/UserData/FontAndColorThemes/\n    /// Xcode.app/Contents/SharedFrameworks/DVTUserInterfaceKit.framework/Versions/A/Resources/FontAndColorThemes\n    init(fileURL: URL) throws {\n        let parser = XcodeThemeParser()\n        self = try parser.parse(fileURL: fileURL)\n    }\n}\n\nstruct XcodeThemeParser {\n    enum Error: Swift.Error {\n        case fileNotFound\n        case invalidData\n    }\n\n    func parse(fileURL: URL) throws -> XcodeTheme {\n        guard let data = try? Data(contentsOf: fileURL) else {\n            throw Error.fileNotFound\n        }\n\n        if fileURL.pathExtension == \"xccolortheme\" {\n            return try parseXCColorTheme(data)\n        } else {\n            throw Error.invalidData\n        }\n    }\n\n    func parseXCColorTheme(_ data: Data) throws -> XcodeTheme {\n        let plist = try? PropertyListSerialization.propertyList(\n            from: data,\n            options: .mutableContainers,\n            format: nil\n        ) as? [String: Any]\n\n        guard let theme = plist else { throw Error.invalidData }\n\n        /// The source value is an `r g b a` string, for example: `0.5 0.5 0.2 1`\n        func convertColor(source: String) -> XcodeTheme.ThemeColor {\n            let components = source.split(separator: \" \")\n            let red = (components[0] as NSString).doubleValue\n            let green = (components[1] as NSString).doubleValue\n            let blue = (components[2] as NSString).doubleValue\n            let alpha = (components[3] as NSString).doubleValue\n            return .init(red: red, green: green, blue: blue, alpha: alpha)\n        }\n\n        func getThemeValue(\n            at path: [String],\n            defaultValue: XcodeTheme.ThemeColor = .init(red: 0, green: 0, blue: 0, alpha: 1)\n        ) -> XcodeTheme.ThemeColor {\n            guard !path.isEmpty else { return defaultValue }\n            let keys = path.dropLast(1)\n            var currentDict = theme\n            for key in keys {\n                guard let value = currentDict[key] as? [String: Any] else {\n                    return defaultValue\n                }\n                currentDict = value\n            }\n            if let value = currentDict[path.last!] as? String {\n                return convertColor(source: value)\n            }\n            return defaultValue\n        }\n\n        let black = XcodeTheme.ThemeColor(red: 0, green: 0, blue: 0, alpha: 1)\n        let white = XcodeTheme.ThemeColor(red: 1, green: 1, blue: 1, alpha: 1)\n\n        let xcodeTheme = XcodeTheme(\n            plainTextColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.plain\"],\n                defaultValue: black\n            ),\n            commentColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.comment\"],\n                defaultValue: black\n            ),\n            documentationMarkupColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.comment.doc\"],\n                defaultValue: black\n            ),\n            documentationMarkupKeywordColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.comment.doc.keyword\"],\n                defaultValue: black\n            ),\n            marksColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.mark\"],\n                defaultValue: black\n            ),\n            stringsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.string\"],\n                defaultValue: black\n            ),\n            charactersColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.character\"],\n                defaultValue: black\n            ),\n            numbersColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.number\"],\n                defaultValue: black\n            ),\n            regexLiteralsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.plain\"],\n                defaultValue: black\n            ),\n            regexLiteralNumbersColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.number\"],\n                defaultValue: black\n            ),\n            regexLiteralCaptureNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.plain\"],\n                defaultValue: black\n            ),\n            regexLiteralCharacterClassNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.plain\"],\n                defaultValue: black\n            ),\n            regexLiteralOperatorsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.plain\"],\n                defaultValue: black\n            ),\n            keywordsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.keyword\"],\n                defaultValue: black\n            ),\n            preprocessorStatementsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.preprocessor\"],\n                defaultValue: black\n            ),\n            urlsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.url\"],\n                defaultValue: black\n            ),\n            attributesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.attribute\"],\n                defaultValue: black\n            ),\n            typeDeclarationsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.declaration.type\"],\n                defaultValue: black\n            ),\n            otherDeclarationsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.declaration.other\"],\n                defaultValue: black\n            ),\n            projectClassNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.class\"],\n                defaultValue: black\n            ),\n            projectFunctionAndMethodNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.function\"],\n                defaultValue: black\n            ),\n            projectConstantsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.constant\"],\n                defaultValue: black\n            ),\n            projectTypeNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.type\"],\n                defaultValue: black\n            ),\n            projectPropertiesAndGlobalsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.variable\"],\n                defaultValue: black\n            ),\n            projectPreprocessorMacrosColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.macro\"],\n                defaultValue: black\n            ),\n            otherClassNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.class.system\"],\n                defaultValue: black\n            ),\n            otherFunctionAndMethodNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.function.system\"],\n                defaultValue: black\n            ),\n            otherConstantsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.constant.system\"],\n                defaultValue: black\n            ),\n            otherTypeNamesColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.type.system\"],\n                defaultValue: black\n            ),\n            otherPropertiesAndGlobalsColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.variable.system\"],\n                defaultValue: black\n            ),\n            otherPreprocessorMacrosColor: getThemeValue(\n                at: [\"DVTSourceTextSyntaxColors\", \"xcode.syntax.identifier.macro.system\"],\n                defaultValue: black\n            ),\n            headingColor: getThemeValue(\n                at: [\"DVTMarkupTextPrimaryHeadingColor\"],\n                defaultValue: black\n            ),\n            backgroundColor: getThemeValue(\n                at: [\"DVTSourceTextBackground\"],\n                defaultValue: white\n            ),\n            selectionColor: getThemeValue(\n                at: [\"DVTSourceTextSelectionColor\"],\n                defaultValue: black\n            ),\n            cursorColor: getThemeValue(\n                at: [\"DVTSourceTextInsertionPointColor\"],\n                defaultValue: black\n            ),\n            currentLineColor: getThemeValue(\n                at: [\"DVTSourceTextCurrentLineHighlightColor\"],\n                defaultValue: black\n            ),\n            invisibleCharactersColor: getThemeValue(\n                at: [\"DVTSourceTextInvisiblesColor\"],\n                defaultValue: black\n            ),\n            debuggerConsolePromptColor: getThemeValue(\n                at: [\"DVTConsoleDebuggerPromptTextColor\"],\n                defaultValue: black\n            ),\n            debuggerConsoleOutputColor: getThemeValue(\n                at: [\"DVTConsoleDebuggerOutputTextColor\"],\n                defaultValue: black\n            ),\n            debuggerConsoleInputColor: getThemeValue(\n                at: [\"DVTConsoleDebuggerInputTextColor\"],\n                defaultValue: black\n            ),\n            executableConsoleOutputColor: getThemeValue(\n                at: [\"DVTConsoleExectuableOutputTextColor\"],\n                defaultValue: black\n            ),\n            executableConsoleInputColor: getThemeValue(\n                at: [\"DVTConsoleExectuableInputTextColor\"],\n                defaultValue: black\n            )\n        )\n\n        return xcodeTheme\n    }\n}\n\n"
  },
  {
    "path": "Core/Tests/ChatServiceTests/ParseScopesTests.swift",
    "content": "import XCTest\n\n@testable import ChatService\n\nfinal class ParseScopesTests: XCTestCase {\n    let parse = DynamicContextController.parseScopes\n    \n    func test_parse_single_scope() async throws {\n        var prompt = \"@web hello\"\n        let scopes = parse(&prompt)\n        XCTAssertEqual(scopes, [.web])\n        XCTAssertEqual(prompt, \"hello\")\n    }\n    \n    func test_parse_single_scope_with_prefix() async throws {\n        var prompt = \"@w hello\"\n        let scopes = parse(&prompt)\n        XCTAssertEqual(scopes, [.web])\n        XCTAssertEqual(prompt, \"hello\")\n    }\n    \n    func test_parse_multiple_spaces() async throws {\n        var prompt = \"@web                hello\"\n        let scopes = parse(&prompt)\n        XCTAssertEqual(scopes, [.web])\n        XCTAssertEqual(prompt, \"hello\")\n    }\n    \n    func test_parse_no_prefix_at_mark() async throws {\n        var prompt = \"  @web                hello\"\n        let scopes = parse(&prompt)\n        XCTAssertEqual(scopes, [])\n        XCTAssertEqual(prompt, prompt)\n    }\n    \n    func test_parse_multiple_scopes() async throws {\n        var prompt = \"@web+file+c+s+project hello\"\n        let scopes = parse(&prompt)\n        XCTAssertEqual(scopes, [.web, .code, .sense, .project, .file])\n        XCTAssertEqual(prompt, \"hello\")\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "Core/Tests/KeyBindingManagerTests/TabToAcceptSuggestionTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import Workspace\n@testable import KeyBindingManager\n\nclass TabToAcceptSuggestionTests: XCTestCase {\n    func test_should_accept_if_line_invalid() {\n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                    var name: String\n                    var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 4, character: 4),\n                codeMetadata: .init(),\n                presentingSuggestionText: \"Hello\"\n            )\n        )\n        \n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                    var name: String\n                    var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: -1, character: 4),\n                codeMetadata: .init(),\n                presentingSuggestionText: \"Hello\"\n            )\n        )\n    }\n    \n    func test_should_not_accept_if_tab_does_not_invalidate_the_suggestion() {\n        XCTAssertFalse(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \n                    var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 0),\n                codeMetadata: .init(tabSize: 4, indentSize: 4, usesTabsForIndentation: false),\n                presentingSuggestionText: \"    var name: String\"\n            )\n        )\n        \n        XCTAssertFalse(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct 🐱 {\n                \n                    var 🎇: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 0),\n                codeMetadata: .init(tabSize: 4, indentSize: 4, usesTabsForIndentation: false),\n                presentingSuggestionText: \"    var 🎇: String\"\n            )\n        )\n        \n        XCTAssertFalse(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \n                  var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 0),\n                codeMetadata: .init(tabSize: 2, indentSize: 2, usesTabsForIndentation: false),\n                presentingSuggestionText: \"  var name: String\"\n            )\n        )\n        \n        XCTAssertFalse(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \n                \\tvar age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 0),\n                codeMetadata: .init(tabSize: 4, indentSize: 1, usesTabsForIndentation: true),\n                presentingSuggestionText: \"\\tvar name: String\"\n            )\n        )\n    }\n    \n    func test_should_accept_if_tab_invalidates_the_suggestion() {\n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \\(\" \")\n                    var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 1),\n                codeMetadata: .init(tabSize: 4, indentSize: 4, usesTabsForIndentation: false),\n                presentingSuggestionText: \"    var name: String\"\n            )\n        )\n        \n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct 🐱 {\n                \\(\" \")\n                    var 🎇: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 1),\n                codeMetadata: .init(tabSize: 4, indentSize: 4, usesTabsForIndentation: false),\n                presentingSuggestionText: \"    var 🎇: String\"\n            )\n        )\n        \n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \\(\" \")\n                  var age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 1),\n                codeMetadata: .init(tabSize: 2, indentSize: 2, usesTabsForIndentation: false),\n                presentingSuggestionText: \"  var name: String\"\n            )\n        )\n        \n        XCTAssertTrue(\n            TabToAcceptSuggestion.checkIfAcceptSuggestion(\n                lines: \"\"\"\n                struct Cat {\n                \\t\n                \\tvar age: Int\n                }\n                \"\"\".breakLines(),\n                cursorPosition: .init(line: 1, character: 1),\n                codeMetadata: .init(tabSize: 4, indentSize: 1, usesTabsForIndentation: true),\n                presentingSuggestionText: \"\\tvar name: String\"\n            )\n        )\n    }\n}\n"
  },
  {
    "path": "Core/Tests/PromptToCodeServiceTests/ExtractCodeFromChatGPTTests.swift",
    "content": "import XCTest\n@testable import PromptToCodeService\n\nfinal class ExtractCodeFromChatGPTTests: XCTestCase {\n    func test_extract_from_no_code_block() {\n        let api = SimpleModificationAgent()\n        let result = api.extractCodeAndDescription(from: \"\"\"\n        hello world!\n        \"\"\")\n        \n        XCTAssertEqual(result.code, \"\")\n        XCTAssertEqual(result.description, \"\")\n    }\n    \n    func test_extract_from_incomplete_code_block() {\n        let api = SimpleModificationAgent()\n        let result = api.extractCodeAndDescription(from: \"\"\"\n        ```swift\n        func foo() {}\n        \"\"\")\n        \n        XCTAssertEqual(result.code, \"func foo() {}\")\n        XCTAssertEqual(result.description, \"\")\n    }\n    \n    func test_extract_from_complete_code_block() {\n        let api = SimpleModificationAgent()\n        let result = api.extractCodeAndDescription(from: \"\"\"\n        ```swift\n        func foo() {}\n        \n        func bar() {}\n        ```\n        \n        Description\n        \"\"\")\n        \n        XCTAssertEqual(result.code, \"func foo() {}\\n\\nfunc bar() {}\")\n        XCTAssertEqual(result.description, \"Description\")\n    }\n    \n    func test_extract_from_incomplete_code_block_without_language() {\n        let api = SimpleModificationAgent()\n        let result = api.extractCodeAndDescription(from: \"\"\"\n        ```\n        func foo() {}\n        \"\"\")\n        \n        XCTAssertEqual(result.code, \"func foo() {}\")\n        XCTAssertEqual(result.description, \"\")\n    }\n    \n    func test_extract_from_code_block_without_language() {\n        let api = SimpleModificationAgent()\n        let result = api.extractCodeAndDescription(from: \"\"\"\n        ```\n        func foo() {}\n        \n        func bar() {}\n        ```\n        \n        Description\n        \"\"\")\n        \n        XCTAssertEqual(result.code, \"func foo() {}\\n\\nfunc bar() {}\")\n        XCTAssertEqual(result.description, \"Description\")\n    }\n    \n}\n"
  },
  {
    "path": "Core/Tests/ServiceTests/Environment.swift",
    "content": "import AppKit\nimport Client\nimport Foundation\nimport GitHubCopilotService\nimport SuggestionBasic\nimport Workspace\nimport XCTest\nimport XPCShared\n\n@testable import Service\n\nfunc completion(text: String, range: CursorRange, uuid: String = \"\") -> CodeSuggestion {\n    .init(id: uuid, text: text, position: range.start, range: range)\n}\n\nclass MockSuggestionService: GitHubCopilotSuggestionServiceType {\n    func cancelOngoingTask(workDoneToken: String) async {\n        fatalError()\n    }\n    \n    func notifyChangeTextDocument(fileURL: URL, content: String, version: Int) async throws {\n        fatalError()\n    }\n\n    func terminate() async {\n        fatalError()\n    }\n\n    func cancelRequest() async {\n        fatalError()\n    }\n\n    func notifyOpenTextDocument(fileURL: URL, content: String) async throws {\n        fatalError()\n    }\n\n    func notifyCloseTextDocument(fileURL: URL) async throws {\n        fatalError()\n    }\n\n    func notifySaveTextDocument(fileURL: URL) async throws {\n        fatalError()\n    }\n\n    var completions = [CodeSuggestion]()\n    var accepted: String?\n    var rejected: [String] = []\n\n    init(completions: [CodeSuggestion]) {\n        self.completions = completions\n    }\n\n    func getCompletions(\n        fileURL: URL,\n        content: String,\n        originalContent: String,\n        cursorPosition: SuggestionBasic.CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) async throws -> [SuggestionBasic.CodeSuggestion] {\n        completions\n    }\n\n    func notifyAccepted(_ completion: CodeSuggestion) async {\n        accepted = completion.id\n    }\n\n    func notifyRejected(_ completions: [CodeSuggestion]) async {\n        rejected = completions.map(\\.id)\n    }\n}\n\n"
  },
  {
    "path": "Core/Tests/ServiceTests/ExtractSelectedCodeTests.swift",
    "content": "import SuggestionBasic\nimport XCTest\n@testable import Service\n@testable import XPCShared\n\nclass ExtractSelectedCodeTests: XCTestCase {\n    func test_empty_selection() {\n        let selection = EditorContent.Selection(\n            start: CursorPosition(line: 0, character: 0),\n            end: CursorPosition(line: 0, character: 0)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = selectedCode(in: selection, for: lines)\n        XCTAssertEqual(result, \"\")\n    }\n\n    func test_single_line_selection() {\n        let selection = EditorContent.Selection(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = selectedCode(in: selection, for: lines)\n        XCTAssertEqual(result, \"foo = \")\n    }\n\n    func test_single_line_selection_at_line_end() {\n        let selection = EditorContent.Selection(\n            start: CursorPosition(line: 0, character: 8),\n            end: CursorPosition(line: 0, character: 11)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = selectedCode(in: selection, for: lines)\n        XCTAssertEqual(result, \"= 1\")\n    }\n\n    func test_multi_line_selection() {\n        let selection = EditorContent.Selection(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 1, character: 11)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\", \"let baz = 3\\n\"]\n        let result = selectedCode(in: selection, for: lines)\n        XCTAssertEqual(result, \"foo = 1\\nlet bar = 2\")\n    }\n\n    func test_invalid_selection() {\n        let selection = EditorContent.Selection(\n            start: CursorPosition(line: 1, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let foo = 1\", \"let bar = 2\"]\n        let result = selectedCode(in: selection, for: lines)\n        XCTAssertEqual(result, \"\")\n    }\n}\n"
  },
  {
    "path": "Core/Tests/ServiceTests/FilespaceSuggestionInvalidationTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import Service\n@testable import Workspace\n\nclass FilespaceSuggestionInvalidationTests: XCTestCase {\n    @WorkspaceActor\n    func prepare(\n        lines: [String],\n        suggestionText: String,\n        cursorPosition: CursorPosition,\n        range: CursorRange\n    ) async throws -> Filespace {\n        let pool = WorkspacePool()\n        let (_, filespace) = try await pool.fetchOrCreateWorkspaceAndFilespace(\n            fileURL: URL(fileURLWithPath: \"file/path/to.swift\"),\n            checkIfFileExists: false\n        )\n        filespace.suggestions = [\n            .init(\n                id: \"\",\n                text: suggestionText,\n                position: cursorPosition,\n                range: range\n            ),\n        ]\n        filespace.suggestionSourceSnapshot = .init(lines: lines, cursorPosition: cursorPosition)\n        return filespace\n    }\n\n    func test_text_typing_suggestion_should_be_valid() async throws {\n        let lines = [\"\\n\", \"hell\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 4),\n            alwaysTrueIfCursorNotMoved: false // TODO: What\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_text_typing_suggestion_in_the_middle_should_be_valid() async throws {\n        let lines = [\"\\n\", \"hell man\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 4),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_text_typing_suggestion_with_emoji_in_the_middle_should_be_valid() async throws {\n        let lines = [\"\\n\", \"hell🎆🎆 man\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello🎆🎆 man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 4),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_text_typing_suggestion_typed_emoji_in_the_middle_should_be_valid() async throws {\n        let lines = [\"\\n\", \"h🎆🎆o ma\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"h🎆🎆o man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 2),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_text_typing_suggestion_cutting_emoji_in_the_middle_should_be_valid() async throws {\n        // undefined behavior, must not crash\n\n        let lines = [\"\\n\", \"h🎆🎆o ma\\n\", \"\\n\"]\n\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"h🎆🎆o man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 3),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_typing_not_according_to_suggestion_should_invalidate() async throws {\n        let lines = [\"\\n\", \"hello ma\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 8),\n            range: .init(startPair: (1, 0), endPair: (1, 8))\n        )\n        let wasValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 8),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"hello mat\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 9),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(wasValid)\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_text_cursor_moved_to_another_line_should_invalidate() async throws {\n        let lines = [\"\\n\", \"hell\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 2, character: 0),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_text_cursor_is_invalid_should_invalidate() async throws {\n        let lines = [\"\\n\", \"hell\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 100, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 100, character: 4),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_line_content_does_not_match_input_should_invalidate() async throws {\n        let filespace = try await prepare(\n            lines: [\"\\n\", \"hello\\n\", \"\\n\"],\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 5),\n            range: .init(startPair: (1, 0), endPair: (1, 5))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"helo\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 4),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_line_content_does_not_match_input_should_invalidate_index_out_of_scope() async throws {\n        let filespace = try await prepare(\n            lines: [\"\\n\", \"hello\\n\", \"\\n\"],\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 5),\n            range: .init(startPair: (1, 0), endPair: (1, 5))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"helo\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 100),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_finish_typing_the_whole_single_line_suggestion_should_invalidate() async throws {\n        let lines = [\"\\n\", \"hello ma\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 8),\n            range: .init(startPair: (1, 0), endPair: (1, 8))\n        )\n        let wasValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 8),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"hello man\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 9),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(wasValid)\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_finish_typing_the_whole_single_line_suggestion_with_emoji_should_invalidate(\n    ) async throws {\n        let lines = [\"\\n\", \"hello m🎆🎆a\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello m🎆🎆an\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let wasValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 12),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"hello m🎆🎆an\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 13),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(wasValid)\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_finish_typing_the_whole_single_line_suggestion_suggestion_is_incomplete_should_invalidate(\n    ) async throws {\n        let lines = [\"\\n\", \"hello ma!!!!\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let wasValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 8),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: [\"\\n\", \"hello man!!!!!\\n\", \"\\n\"],\n            cursorPosition: .init(line: 1, character: 9),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(wasValid)\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_finish_typing_the_whole_multiple_line_suggestion_should_be_valid() async throws {\n        let lines = [\"\\n\", \"hello man\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\\nhow are you?\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 9),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_finish_typing_the_whole_multiple_line_suggestion_with_emoji_should_be_valid(\n    ) async throws {\n        let lines = [\"\\n\", \"hello m🎆🎆an\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello m🎆🎆an\\nhow are you?\",\n            cursorPosition: .init(line: 1, character: 0),\n            range: .init(startPair: (1, 0), endPair: (1, 0))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 13),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_undo_text_to_a_state_before_the_suggestion_was_generated_should_invalidate(\n    ) async throws {\n        let lines = [\"\\n\", \"hell\\n\", \"\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello man\",\n            cursorPosition: .init(line: 1, character: 5), // generating man from hello\n            range: .init(startPair: (1, 0), endPair: (1, 5))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 1, character: 4),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertFalse(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNil(suggestion)\n    }\n\n    func test_rewriting_the_current_line_by_removing_the_suffix_should_be_valid() async throws {\n        let lines = [\"hello world !!!\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello world\",\n            cursorPosition: .init(line: 0, character: 15),\n            range: .init(startPair: (0, 0), endPair: (0, 15))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 0, character: 15),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n\n    func test_rewriting_the_current_line_should_be_valid() async throws {\n        let lines = [\"hello everyone !!!\\n\"]\n        let filespace = try await prepare(\n            lines: lines,\n            suggestionText: \"hello world !!!\",\n            cursorPosition: .init(line: 0, character: 18),\n            range: .init(startPair: (0, 0), endPair: (0, 18))\n        )\n        let isValid = await filespace.validateSuggestions(\n            lines: lines,\n            cursorPosition: .init(line: 0, character: 18),\n            alwaysTrueIfCursorNotMoved: false\n        )\n        XCTAssertTrue(isValid)\n        let suggestion = filespace.presentingSuggestion\n        XCTAssertNotNil(suggestion)\n    }\n}\n\n"
  },
  {
    "path": "Core/Tests/ServiceUpdateMigrationTests/MigrateTo240Tests.swift",
    "content": "import Foundation\nimport Keychain\nimport XCTest\n\n@testable import ServiceUpdateMigration\n\nfinal class MigrateTo240Tests: XCTestCase {\n    let userDefaults = UserDefaults(suiteName: \"MigrateTo240Tests\")!\n    \n    override func tearDown() async throws {\n        userDefaults.removePersistentDomain(forName: \"MigrateTo240Tests\")\n    }\n    \n    func test_migrateTo240_no_data_to_migrate() async throws {\n        let keychain = FakeKeyChain()\n\n        try migrateTo240(defaults: userDefaults, keychain: keychain)\n\n        XCTAssertTrue(try keychain.getAll().isEmpty, \"No api key to migrate\")\n\n        let chatModels = userDefaults.value(for: \\.chatModels)\n        let embeddingModels = userDefaults.value(for: \\.embeddingModels)\n\n        for chatModel in chatModels {\n            switch chatModel.format {\n            case .openAI:\n                XCTAssertEqual(chatModel.name, \"OpenAI\")\n                XCTAssertEqual(chatModel.info, .init(\n                    apiKeyName: \"OpenAI\",\n                    baseURL: \"\",\n                    maxTokens: 16385,\n                    supportsFunctionCalling: true,\n                    modelName: \"gpt-3.5-turbo\"\n                ))\n            case .azureOpenAI:\n                XCTAssertEqual(chatModel.name, \"Azure OpenAI\")\n                XCTAssertEqual(chatModel.info, .init(\n                    apiKeyName: \"Azure OpenAI\",\n                    baseURL: \"\",\n                    maxTokens: 4000,\n                    supportsFunctionCalling: true,\n                    modelName: \"\"\n                ))\n            default:\n                XCTFail()\n            }\n        }\n\n        for embeddingModel in embeddingModels {\n            switch embeddingModel.format {\n            case .openAI:\n                XCTAssertEqual(embeddingModel.name, \"OpenAI\")\n                XCTAssertEqual(embeddingModel.info, .init(\n                    apiKeyName: \"OpenAI\",\n                    baseURL: \"\",\n                    maxTokens: 8191,\n                    modelName: \"text-embedding-ada-002\"\n                ))\n            case .azureOpenAI:\n                XCTAssertEqual(embeddingModel.name, \"Azure OpenAI\")\n                XCTAssertEqual(embeddingModel.info, .init(\n                    apiKeyName: \"Azure OpenAI\",\n                    baseURL: \"\",\n                    maxTokens: 8191,\n                    modelName: \"\"\n                ))\n            default:\n                XCTFail()\n            }\n        }\n    }\n\n    func test_migrateTo240_migrate_data_use_openAI() async throws {\n        let keychain = FakeKeyChain()\n\n        userDefaults.set(\"Key1\", forKey: \"OpenAIAPIKey\")\n        userDefaults.set(\"openai.com\", forKey: \"OpenAIBaseURL\")\n        userDefaults.set(\"gpt-500\", forKey: \"ChatGPTModel\")\n        userDefaults.set(200, forKey: \"ChatGPTMaxToken\")\n        userDefaults.set(\"embedding-200\", forKey: \"OpenAIEmbeddingModel\")\n        userDefaults.set(\"Key2\", forKey: \"AzureOpenAIAPIKey\")\n        userDefaults.set(\"azure.com\", forKey: \"AzureOpenAIBaseURL\")\n        userDefaults.set(\"gpt-800\", forKey: \"AzureChatGPTDeployment\")\n        userDefaults.set(\"embedding-800\", forKey: \"AzureEmbeddingDeployment\")\n        userDefaults.set(\"openAI\", forKey: \"ChatFeatureProvider\")\n        userDefaults.set(\"openAI\", forKey: \"EmbeddingFeatureProvider\")\n\n        try migrateTo240(defaults: userDefaults, keychain: keychain)\n\n        XCTAssertEqual(try keychain.getAll(), [\n            \"OpenAI\": \"Key1\",\n            \"Azure OpenAI\": \"Key2\",\n        ])\n\n        let chatModels = userDefaults.value(for: \\.chatModels)\n        let embeddingModels = userDefaults.value(for: \\.embeddingModels)\n\n        XCTAssertEqual(chatModels.count, 2)\n        XCTAssertEqual(embeddingModels.count, 2)\n\n        XCTAssertEqual(\n            userDefaults.value(for: \\.defaultChatFeatureChatModelId),\n            chatModels.first(where: { $0.format == .openAI })?.id\n        )\n        XCTAssertEqual(\n            userDefaults.value(for: \\.defaultChatFeatureEmbeddingModelId),\n            embeddingModels.first(where: { $0.format == .openAI })?.id\n        )\n\n        for chatModel in chatModels {\n            switch chatModel.format {\n            case .openAI:\n                XCTAssertEqual(chatModel.name, \"OpenAI\")\n                XCTAssertEqual(chatModel.info, .init(\n                    apiKeyName: \"OpenAI\",\n                    baseURL: \"openai.com\",\n                    maxTokens: 200,\n                    supportsFunctionCalling: true,\n                    modelName: \"gpt-500\"\n                ))\n            case .azureOpenAI:\n                XCTAssertEqual(chatModel.name, \"Azure OpenAI\")\n                XCTAssertEqual(chatModel.info, .init(\n                    apiKeyName: \"Azure OpenAI\",\n                    baseURL: \"azure.com\",\n                    maxTokens: 200,\n                    supportsFunctionCalling: true,\n                    modelName: \"gpt-800\"\n                ))\n            default:\n                XCTFail()\n            }\n        }\n\n        for embeddingModel in embeddingModels {\n            switch embeddingModel.format {\n            case .openAI:\n                XCTAssertEqual(embeddingModel.name, \"OpenAI\")\n                XCTAssertEqual(embeddingModel.info, .init(\n                    apiKeyName: \"OpenAI\",\n                    baseURL: \"openai.com\",\n                    maxTokens: 8191,\n                    modelName: \"embedding-200\"\n                ))\n            case .azureOpenAI:\n                XCTAssertEqual(embeddingModel.name, \"Azure OpenAI\")\n                XCTAssertEqual(embeddingModel.info, .init(\n                    apiKeyName: \"Azure OpenAI\",\n                    baseURL: \"azure.com\",\n                    maxTokens: 8191,\n                    modelName: \"embedding-800\"\n                ))\n            default:\n                XCTFail()\n            }\n        }\n    }\n\n    func test_migrateTo240_migrate_data_use_azureOpenAI() async throws {\n        let keychain = FakeKeyChain()\n\n        userDefaults.set(\"Key1\", forKey: \"OpenAIAPIKey\")\n        userDefaults.set(\"openai.com\", forKey: \"OpenAIBaseURL\")\n        userDefaults.set(\"gpt-500\", forKey: \"ChatGPTModel\")\n        userDefaults.set(200, forKey: \"ChatGPTMaxToken\")\n        userDefaults.set(\"embedding-200\", forKey: \"OpenAIEmbeddingModel\")\n        userDefaults.set(\"Key2\", forKey: \"AzureOpenAIAPIKey\")\n        userDefaults.set(\"azure.com\", forKey: \"AzureOpenAIBaseURL\")\n        userDefaults.set(\"gpt-800\", forKey: \"AzureChatGPTDeployment\")\n        userDefaults.set(\"embedding-800\", forKey: \"AzureEmbeddingDeployment\")\n        userDefaults.set(\"azureOpenAI\", forKey: \"ChatFeatureProvider\")\n        userDefaults.set(\"azureOpenAI\", forKey: \"EmbeddingFeatureProvider\")\n\n        try migrateTo240(defaults: userDefaults, keychain: keychain)\n\n        let chatModels = userDefaults.value(for: \\.chatModels)\n        let embeddingModels = userDefaults.value(for: \\.embeddingModels)\n\n        XCTAssertEqual(chatModels.count, 2)\n        XCTAssertEqual(embeddingModels.count, 2)\n\n        XCTAssertEqual(\n            userDefaults.value(for: \\.defaultChatFeatureChatModelId),\n            chatModels.first(where: { $0.format == .azureOpenAI })?.id\n        )\n        XCTAssertEqual(\n            userDefaults.value(for: \\.defaultChatFeatureEmbeddingModelId),\n            embeddingModels.first(where: { $0.format == .azureOpenAI })?.id\n        )\n    }\n}\n\n"
  },
  {
    "path": "Core/Tests/SuggestionWidgetTests/File.swift",
    "content": "import Foundation\n"
  },
  {
    "path": "DEVELOPMENT.md",
    "content": "# Development\n\n## Targets \n\n### Copilot for Xcode\n\nCopilot for Xcode is the host app containing both the XPCService and the editor extension. It provides the settings UI.\n\n### EditorExtension\n\nAs its name suggests, the Xcode source editor extension. Its sole purpose is to forward editor content to the XPCService for processing, and update the editor with the returned content. Due to the sandboxing requirements for editor extensions, it has to communicate with a trusted, non-sandboxed XPCService (CommunicationBridge and ExtensionService) to bypass the limitations. The XPCService service name must be included in the `com.apple.security.temporary-exception.mach-lookup.global-name` entitlements.\n\n### ExtensionService\n\nThe `ExtensionService` is a program that operates in the background. All features are implemented in this target. \n\n### CommunicationBridge\n\nIt's responsible for maintaining the communication between the Copilot for Xcode/EditorExtension and ExtensionService.\n\n### Core and Tool\n\nMost of the logics are implemented inside the package `Core` and `Tool`.\n\n- The `Service` contains the implementations of the ExtensionService target.\n- The `HostApp` contains the implementations of the Copilot for Xcode target.\n\n## Building and Archiving the App\n\n1. Update the xcconfig files, bridgeLaunchAgent.plist, and Tool/Configs/Configurations.swift.\n2. Build or archive the Copilot for Xcode target.\n\n## Testing Source Editor Extension and Service\n\nJust run both the `ExtensionService`, `CommunicationBridge` and the `EditorExtension` Target. Read [Testing Your Source Editor Extension](https://developer.apple.com/documentation/xcodekit/testing_your_source_editor_extension) for more details.\n\nIf you are not testing the source editor extension, it's recommended to archive and install a debug version of the Copilot for Xcode and test with the bundled source editor extension.\n\n## SwiftUI Previews\n\nLooks like SwiftUI Previews are not very happy with Objective-C packages when running with app targets. To use previews, please switch schemes to the package product targets.\n\n## Unit Tests\n\nTo run unit tests, just run test from the `Copilot for Xcode` target.\n\nFor new tests, they should be added to the `TestPlan.xctestplan`.\n\n## Chat Plugins\n\nTo create a chat plugin, please use the `TerminalChatPlugin` as an example. You should add your plugin to the target `ChatPlugin` and register it in `ChatService`.\n\n## Code Style\n\nWe use SwiftFormat to format the code.\n\nThe source code mostly follows the [Ray Wenderlich Style Guide](https://github.com/raywenderlich/swift-style-guide) very closely with the following exception:\n\n- Use the Xcode default of 4 spaces for indentation.\n\n## App Versioning\n\nThe app version and all targets' version in controlled by `Version.xcconfig`.\n"
  },
  {
    "path": "EditorExtension/AcceptPromptToCodeCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass AcceptPromptToCodeCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Accept Modification\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        Task {\n            do {\n                try await (Task(timeout: 7) {\n                    let service = try getService()\n                    if let content = try await service.getPromptToCodeAcceptedCode(\n                        editorContent: .init(invocation)\n                    ) {\n                        invocation.accept(content)\n                    }\n                    completionHandler(nil)\n                }.value)\n            } catch is CancellationError {\n                completionHandler(nil)\n            } catch {\n                completionHandler(error)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/AcceptSuggestionCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\nimport XPCShared\n\nclass AcceptSuggestionCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Accept Suggestion\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        Task {\n            do {\n                try await (Task(timeout: 7) {\n                    let service = try getService()\n                    if let content = try await service.getSuggestionAcceptedCode(\n                        editorContent: .init(invocation)\n                    ) {\n                        invocation.accept(content)\n                    }\n                    completionHandler(nil)\n                }.value)\n            } catch is CancellationError {\n                completionHandler(nil)\n            } catch {\n                completionHandler(error)\n            }\n        }\n    }\n}\n\nclass AcceptSuggestionLineCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Accept Suggestion Line\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        Task {\n            do {\n                try await (Task(timeout: 7) {\n                    let service = try getService()\n                    if let content = try await service.send(\n                        requestBody: ExtensionServiceRequests\n                            .GetSuggestionLineAcceptedCode(editorContent: .init(invocation))\n                    ) {\n                        invocation.accept(content)\n                    }\n                    completionHandler(nil)\n                }.value)\n            } catch is CancellationError {\n                completionHandler(nil)\n            } catch {\n                completionHandler(error)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/CloseIdleTabsCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass CloseIdleTabsCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Close Idle Tabs\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.postNotification(name: \"CloseIdleTabsOfXcodeWindow\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/CustomCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass CustomCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String = \"\"\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.customCommand(\n                id: customCommandMap[invocation.commandIdentifier] ?? \"\",\n                editorContent: .init(invocation)\n            )\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/EditorExtension.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>$(TeamIdentifierPrefix)group.$(BUNDLE_IDENTIFIER_BASE)</string>\n\t</array>\n\t<key>com.apple.security.temporary-exception.mach-lookup.global-name</key>\n\t<array>\n\t\t<string>$(BUNDLE_IDENTIFIER_BASE).CommunicationBridge</string>\n\t\t<string>$(BUNDLE_IDENTIFIER_BASE).ExtensionService</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "EditorExtension/GetSuggestionsCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass GetSuggestionsCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Get Suggestions\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.getSuggestedCode(editorContent: .init(invocation))\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/Helpers.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XcodeKit\nimport XPCShared\n\nextension XCSourceEditorCommandInvocation {\n    func mutateCompleteBuffer(modifications: [Modification], restoringSelections restore: Bool) {\n        if restore {\n            let selectionsRangesToRestore = buffer.selections\n                .compactMap { $0 as? XCSourceTextRange }\n            buffer.selections.removeAllObjects()\n            buffer.lines.apply(modifications)\n            for range in selectionsRangesToRestore {\n                buffer.selections.add(range)\n            }\n        } else {\n            buffer.lines.apply(modifications)\n        }\n    }\n\n    func accept(_ updatedContent: UpdatedContent) {\n        if !updatedContent.newSelections.isEmpty {\n            mutateCompleteBuffer(\n                modifications: updatedContent.modifications,\n                restoringSelections: false\n            )\n            buffer.selections.removeAllObjects()\n            for newSelection in updatedContent.newSelections {\n                buffer.selections.add(XCSourceTextRange(\n                    start: .init(\n                        line: newSelection.start.line,\n                        column: newSelection.start.character\n                    ),\n                    end: .init(line: newSelection.end.line, column: newSelection.end.character)\n                ))\n            }\n        } else {\n            mutateCompleteBuffer(\n                modifications: updatedContent.modifications,\n                restoringSelections: true\n            )\n        }\n    }\n}\n\nextension EditorContent {\n    init(_ invocation: XCSourceEditorCommandInvocation) {\n        let buffer = invocation.buffer\n        self.init(\n            content: buffer.completeBuffer,\n            lines: buffer.lines as? [String] ?? [],\n            uti: buffer.contentUTI,\n            cursorPosition: ((buffer.selections.lastObject as? XCSourceTextRange)?.end).map {\n                CursorPosition(line: $0.line, character: $0.column)\n            } ?? CursorPosition(line: 0, character: 0),\n            cursorOffset: -1,\n            selections: buffer.selections.map {\n                let sl = ($0 as? XCSourceTextRange)?.start.line ?? 0\n                let sc = ($0 as? XCSourceTextRange)?.start.column ?? 0\n                let el = ($0 as? XCSourceTextRange)?.end.line ?? 0\n                let ec = ($0 as? XCSourceTextRange)?.end.column ?? 0\n\n                return Selection(\n                    start: CursorPosition(line: sl, character: sc),\n                    end: CursorPosition(line: el, character: ec)\n                )\n            },\n            tabSize: buffer.tabWidth,\n            indentSize: buffer.indentationWidth,\n            usesTabsForIndentation: buffer.usesTabsForIndentation\n        )\n    }\n}\n\n/// https://gist.github.com/swhitty/9be89dfe97dbb55c6ef0f916273bbb97\nextension Task where Failure == Error {\n    // Start a new Task with a timeout. If the timeout expires before the operation is\n    // completed then the task is cancelled and an error is thrown.\n    init(\n        priority: TaskPriority? = nil,\n        timeout: TimeInterval,\n        operation: @escaping @Sendable () async throws -> Success\n    ) {\n        self = Task(priority: priority) {\n            try await withThrowingTaskGroup(of: Success.self) { group -> Success in\n                group.addTask(operation: operation)\n                group.addTask {\n                    try await _Concurrency.Task.sleep(nanoseconds: UInt64(timeout * 1_000_000_000))\n                    throw TimeoutError()\n                }\n                guard let success = try await group.next() else {\n                    throw _Concurrency.CancellationError()\n                }\n                group.cancelAll()\n                return success\n            }\n        }\n    }\n}\n\nprivate struct TimeoutError: LocalizedError {\n    var errorDescription: String? = \"Task timed out before completion\"\n}\n\n"
  },
  {
    "path": "EditorExtension/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>APPLICATION_SUPPORT_FOLDER</key>\n\t<string>$(APPLICATION_SUPPORT_FOLDER)</string>\n\t<key>BUNDLE_IDENTIFIER_BASE</key>\n\t<string>$(BUNDLE_IDENTIFIER_BASE)</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>$(EXTENSION_BUNDLE_DISPLAY_NAME)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(EXTENSION_BUNDLE_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>HOST_APP_NAME</key>\n\t<string>$(HOST_APP_NAME)</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionAttributes</key>\n\t\t<dict>\n\t\t\t<key>XCSourceEditorCommandDefinitions</key>\n\t\t\t<array/>\n\t\t\t<key>XCSourceEditorExtensionPrincipalClass</key>\n\t\t\t<string>$(PRODUCT_MODULE_NAME).SourceEditorExtension</string>\n\t\t</dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.dt.Xcode.extension.source-editor</string>\n\t</dict>\n\t<key>NSHumanReadableCopyright</key>\n\t<string></string>\n\t<key>TEAM_ID_PREFIX</key>\n\t<string>$(TeamIdentifierPrefix)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "EditorExtension/NextSuggestionCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass NextSuggestionCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Next Suggestion\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.getNextSuggestedCode(editorContent: .init(invocation))\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/OpenChat.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass OpenChatCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Open Chat\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.openChat(editorContent: .init(invocation))\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/PrefetchSuggestionsCommand.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass PrefetchSuggestionsCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Prefetch Suggestions\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            await service.prefetchRealtimeSuggestions(editorContent: .init(invocation))\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/PreviousSuggestionCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass PreviousSuggestionCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Previous Suggestion\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.getPreviousSuggestedCode(editorContent: .init(invocation))\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/PromptToCodeCommand.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass PromptToCodeCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Write or Edit Code\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.promptToCode(editorContent: .init(invocation))\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/RealtimeSuggestionCommand.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass RealtimeSuggestionsCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Prepare for Real-time Suggestions\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.getRealtimeSuggestedCode(editorContent: .init(invocation))\n        }\n    }\n}\n"
  },
  {
    "path": "EditorExtension/RejectSuggestionCommand.swift",
    "content": "import Client\nimport Foundation\nimport SuggestionBasic\nimport XcodeKit\n\nclass RejectSuggestionCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Reject Suggestion\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n        Task {\n            let service = try getService()\n            _ = try await service.getSuggestionRejectedCode(editorContent: .init(invocation))\n        }\n    }\n}\n\n"
  },
  {
    "path": "EditorExtension/SeparatorCommand.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass SeparatorCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String = \"\"\n    \n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        completionHandler(nil)\n    }\n    \n    func named(_ name: String) -> Self {\n        self.name = name\n        return self\n    }\n}\n"
  },
  {
    "path": "EditorExtension/SourceEditorExtension.swift",
    "content": "import Client\nimport Foundation\nimport Preferences\nimport XcodeKit\n\n#if canImport(PreferencesPlus)\nimport PreferencesPlus\n#endif\n\nclass SourceEditorExtension: NSObject, XCSourceEditorExtension {\n    var builtin: [[XCSourceEditorCommandDefinitionKey: Any]] {\n        [\n            GetSuggestionsCommand(),\n            AcceptSuggestionCommand(),\n            AcceptSuggestionLineCommand(),\n            RejectSuggestionCommand(),\n            NextSuggestionCommand(),\n            PreviousSuggestionCommand(),\n            PromptToCodeCommand(),\n            AcceptPromptToCodeCommand(),\n            OpenChatCommand(),\n            ToggleRealtimeSuggestionsCommand(),\n        ].map(makeCommandDefinition)\n    }\n    \n    var optional: [[XCSourceEditorCommandDefinitionKey: Any]] {\n        var all = [[XCSourceEditorCommandDefinitionKey: Any]]()\n        \n        #if canImport(PreferencesPlus)\n        if UserDefaults.shared.value(for: \\.enableCloseIdleTabCommandInXcodeMenu) {\n            all.append(CloseIdleTabsCommand().makeCommandDefinition())\n        }\n        #endif\n        \n        return all\n    }\n    \n    var internalUse: [[XCSourceEditorCommandDefinitionKey: Any]] {\n        [\n            SeparatorCommand().named(\"------\"),\n            RealtimeSuggestionsCommand(),\n            PrefetchSuggestionsCommand(),\n        ].map(makeCommandDefinition)\n    }\n\n    var custom: [[XCSourceEditorCommandDefinitionKey: Any]] {\n        let all = customCommands()\n        if all.isEmpty {\n            return []\n        }\n        return [SeparatorCommand().named(\"------\")].map(makeCommandDefinition) + all\n    }\n\n    var commandDefinitions: [[XCSourceEditorCommandDefinitionKey: Any]] {\n        return builtin + optional + custom + internalUse\n    }\n\n    func extensionDidFinishLaunching() {\n        #if DEBUG\n        // In a debug build, we usually want to use the XPC service run from Xcode.\n        #else\n        // When the source extension is initialized\n        // we can call a random command to wake up the XPC service.\n        Task.detached {\n            try await Task.sleep(nanoseconds: 1_000_000_000)\n            let service = try getService()\n            _ = try await service.getXPCServiceVersion()\n        }\n        #endif\n    }\n}\n\nlet identifierPrefix: String = Bundle.main.bundleIdentifier ?? \"\"\n\nvar customCommandMap = [String: String]()\n\nprotocol CommandType: AnyObject {\n    var commandClassName: String { get }\n    var identifier: String { get }\n    var name: String { get }\n}\n\nextension CommandType where Self: NSObject {\n    var commandClassName: String { Self.className() }\n    var identifier: String { commandClassName }\n}\n\nextension CommandType {\n    func makeCommandDefinition() -> [XCSourceEditorCommandDefinitionKey: Any] {\n        [.classNameKey: commandClassName,\n         .identifierKey: identifierPrefix + identifier,\n         .nameKey: name]\n    }\n}\n\nfunc makeCommandDefinition(_ commandType: CommandType)\n    -> [XCSourceEditorCommandDefinitionKey: Any]\n{\n    commandType.makeCommandDefinition()\n}\n\nfunc customCommands() -> [[XCSourceEditorCommandDefinitionKey: Any]] {\n    var definitions = [[XCSourceEditorCommandDefinitionKey: String]]()\n    for command in UserDefaults.shared.value(for: \\.customCommands) {\n        let identifier = identifierPrefix + \"CustomCommand\\(command.id)\"\n        definitions.append([\n            .classNameKey: CustomCommand.className(),\n            .identifierKey: identifier,\n            .nameKey: command.name,\n        ])\n        \n        customCommandMap[identifier] = command.id\n    }\n    \n    return definitions\n}\n"
  },
  {
    "path": "EditorExtension/ToggleRealtimeSuggestionsCommand.swift",
    "content": "import Client\nimport SuggestionBasic\nimport Foundation\nimport XcodeKit\n\nclass ToggleRealtimeSuggestionsCommand: NSObject, XCSourceEditorCommand, CommandType {\n    var name: String { \"Toggle Real-time Suggestions\" }\n\n    func perform(\n        with invocation: XCSourceEditorCommandInvocation,\n        completionHandler: @escaping (Error?) -> Void\n    ) {\n        Task {\n            do {\n                let service = try getService()\n                try await service.toggleRealtimeSuggestion()\n                completionHandler(nil)\n            } catch is CancellationError {\n                completionHandler(nil)\n            } catch {\n                completionHandler(error)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "ExtensionPoint.appextensionpoint",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>com.intii.CopilotForXcode.ExtensionService.Extension</key>\n    <dict>\n        <key>EXPresentsUserInterface</key>\n        <true />\n    </dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "ExtensionService/AppDelegate+Menu.swift",
    "content": "import AppKit\nimport Foundation\nimport Preferences\nimport XcodeInspector\nimport Dependencies\nimport Workspace\n\nextension AppDelegate {\n    fileprivate var statusBarMenuIdentifier: NSUserInterfaceItemIdentifier {\n        .init(\"statusBarMenu\")\n    }\n\n    fileprivate var xcodeInspectorDebugMenuIdentifier: NSUserInterfaceItemIdentifier {\n        .init(\"xcodeInspectorDebugMenu\")\n    }\n\n    fileprivate var accessibilityAPIPermissionMenuItemIdentifier: NSUserInterfaceItemIdentifier {\n        .init(\"accessibilitAPIPermissionMenuItem\")\n    }\n\n    fileprivate var sourceEditorDebugMenu: NSUserInterfaceItemIdentifier {\n        .init(\"sourceEditorDebugMenu\")\n    }\n\n    @MainActor\n    @objc func buildStatusBarMenu() {\n        let statusBar = NSStatusBar.system\n        statusBarItem = statusBar.statusItem(\n            withLength: NSStatusItem.squareLength\n        )\n        statusBarItem.button?.image = NSImage(named: \"MenuBarIcon\")\n\n        let statusBarMenu = NSMenu(title: \"Status Bar Menu\")\n        statusBarMenu.identifier = statusBarMenuIdentifier\n        statusBarItem.menu = statusBarMenu\n\n        let hostAppName = Bundle.main.object(forInfoDictionaryKey: \"HOST_APP_NAME\") as? String\n            ?? \"Copilot for Xcode\"\n\n        let copilotName = NSMenuItem(\n            title: hostAppName,\n            action: nil,\n            keyEquivalent: \"\"\n        )\n\n        let checkForUpdate = NSMenuItem(\n            title: \"Check for Updates\",\n            action: #selector(checkForUpdate),\n            keyEquivalent: \"\"\n        )\n\n        let openExtensionManager = NSMenuItem(\n            title: \"Open Extension Manager\",\n            action: #selector(openExtensionManager),\n            keyEquivalent: \"\"\n        )\n\n        let openCopilotForXcode = NSMenuItem(\n            title: \"Open \\(hostAppName)\",\n            action: #selector(openCopilotForXcode),\n            keyEquivalent: \"\"\n        )\n\n        let openGlobalChat = NSMenuItem(\n            title: \"Open Chat\",\n            action: #selector(openGlobalChat),\n            keyEquivalent: \"\"\n        )\n\n        let xcodeInspectorDebug = NSMenuItem(\n            title: \"Xcode Inspector Debug\",\n            action: nil,\n            keyEquivalent: \"\"\n        )\n\n        let xcodeInspectorDebugMenu = NSMenu(title: \"Xcode Inspector Debug\")\n        xcodeInspectorDebugMenu.identifier = xcodeInspectorDebugMenuIdentifier\n        xcodeInspectorDebug.submenu = xcodeInspectorDebugMenu\n        xcodeInspectorDebug.isHidden = false\n\n        let accessibilityAPIPermission = NSMenuItem(\n            title: \"Accessibility API Permission: N/A\",\n            action: nil,\n            keyEquivalent: \"\"\n        )\n        accessibilityAPIPermission.identifier = accessibilityAPIPermissionMenuItemIdentifier\n\n        let quitItem = NSMenuItem(\n            title: \"Quit\",\n            action: #selector(quit),\n            keyEquivalent: \"\"\n        )\n        quitItem.target = self\n\n        let reactivateObservationsItem = NSMenuItem(\n            title: \"Reactivate Observations to Xcode\",\n            action: #selector(reactivateObservationsToXcode),\n            keyEquivalent: \"\"\n        )\n        \n        let resetWorkspacesItem = NSMenuItem(\n            title: \"Reset workspaces\",\n            action: #selector(destroyWorkspacePool),\n            keyEquivalent: \"\"\n        )\n\n        reactivateObservationsItem.target = self\n\n        statusBarMenu.addItem(copilotName)\n        statusBarMenu.addItem(openCopilotForXcode)\n        statusBarMenu.addItem(checkForUpdate)\n        statusBarMenu.addItem(openExtensionManager)\n        statusBarMenu.addItem(.separator())\n        statusBarMenu.addItem(openGlobalChat)\n        statusBarMenu.addItem(.separator())\n        statusBarMenu.addItem(xcodeInspectorDebug)\n        statusBarMenu.addItem(accessibilityAPIPermission)\n        statusBarMenu.addItem(reactivateObservationsItem)\n        statusBarMenu.addItem(resetWorkspacesItem)\n        statusBarMenu.addItem(quitItem)\n\n        statusBarMenu.delegate = self\n        xcodeInspectorDebugMenu.delegate = self\n    }\n}\n\nextension AppDelegate: NSMenuDelegate {\n    func menuWillOpen(_ menu: NSMenu) {\n        switch menu.identifier {\n        case statusBarMenuIdentifier:\n            if let xcodeInspectorDebug = menu.items.first(where: { item in\n                item.submenu?.identifier == xcodeInspectorDebugMenuIdentifier\n            }) {\n                xcodeInspectorDebug.isHidden = !UserDefaults.shared\n                    .value(for: \\.enableXcodeInspectorDebugMenu)\n            }\n\n            if let accessibilityAPIPermission = menu.items.first(where: { item in\n                item.identifier == accessibilityAPIPermissionMenuItemIdentifier\n            }) {\n                AXIsProcessTrusted()\n                accessibilityAPIPermission.title =\n                    \"Accessibility API Permission: \\(AXIsProcessTrusted() ? \"Granted\" : \"Not Granted\")\"\n            }\n\n        case xcodeInspectorDebugMenuIdentifier:\n            let inspector = XcodeInspector.shared\n            menu.items.removeAll()\n            menu.items\n                .append(.text(\"Active Project: \\(inspector.activeProjectRootURL?.path ?? \"N/A\")\"))\n            menu.items\n                .append(.text(\"Active Workspace: \\(inspector.activeWorkspaceURL?.path ?? \"N/A\")\"))\n            menu.items\n                .append(.text(\"Active Document: \\(inspector.activeDocumentURL?.path ?? \"N/A\")\"))\n\n            if let focusedWindow = inspector.focusedWindow {\n                menu.items.append(.text(\n                    \"Active Window: \\(focusedWindow.uiElement.identifier)\"\n                ))\n            } else {\n                menu.items.append(.text(\"Active Window: N/A\"))\n            }\n\n            if let focusedElement = inspector.focusedElement {\n                menu.items.append(.text(\n                    \"Focused Element: \\(focusedElement.description)\"\n                ))\n            } else {\n                menu.items.append(.text(\"Focused Element: N/A\"))\n            }\n\n            if let sourceEditor = inspector.latestFocusedEditor {\n                let label = sourceEditor.element.description\n                menu.items\n                    .append(.text(\"Active Source Editor: \\(label.isEmpty ? \"Unknown\" : label)\"))\n            } else {\n                menu.items.append(.text(\"Active Source Editor: N/A\"))\n            }\n\n            menu.items.append(.separator())\n\n            for xcode in inspector.xcodes {\n                let item = NSMenuItem(\n                    title: \"Xcode \\(xcode.processIdentifier)\",\n                    action: nil,\n                    keyEquivalent: \"\"\n                )\n                menu.addItem(item)\n                let xcodeMenu = NSMenu()\n                item.submenu = xcodeMenu\n                xcodeMenu.items.append(.text(\"Is Active: \\(xcode.isActive)\"))\n                xcodeMenu.items\n                    .append(.text(\"Active Project: \\(xcode.projectRootURL?.path ?? \"N/A\")\"))\n                xcodeMenu.items\n                    .append(.text(\"Active Workspace: \\(xcode.workspaceURL?.path ?? \"N/A\")\"))\n                xcodeMenu.items\n                    .append(.text(\"Active Document: \\(xcode.documentURL?.path ?? \"N/A\")\"))\n\n                for (key, workspace) in xcode.realtimeWorkspaces {\n                    let workspaceItem = NSMenuItem(\n                        title: \"Workspace \\(key)\",\n                        action: nil,\n                        keyEquivalent: \"\"\n                    )\n                    xcodeMenu.items.append(workspaceItem)\n                    let workspaceMenu = NSMenu()\n                    workspaceItem.submenu = workspaceMenu\n                    let tabsItem = NSMenuItem(\n                        title: \"Tabs\",\n                        action: nil,\n                        keyEquivalent: \"\"\n                    )\n                    workspaceMenu.addItem(tabsItem)\n                    let tabsMenu = NSMenu()\n                    tabsItem.submenu = tabsMenu\n                    for tab in workspace.tabs {\n                        tabsMenu.addItem(.text(tab))\n                    }\n                }\n            }\n\n            menu.items.append(.separator())\n\n            menu.items.append(NSMenuItem(\n                title: \"Restart Xcode Inspector\",\n                action: #selector(restartXcodeInspector),\n                keyEquivalent: \"\"\n            ))\n            \n            let isDebuggingOverlay = UserDefaults.shared.value(for: \\.debugOverlayPanel)\n            let debugOverlayItem = NSMenuItem(\n                title: \"Debug Window Overlays\",\n                action: #selector(toggleDebugOverlayPanel),\n                keyEquivalent: \"\"\n            )\n            debugOverlayItem.state = isDebuggingOverlay ? .on : .off\n            menu.items.append(debugOverlayItem)\n\n        default:\n            break\n        }\n    }\n}\n\nimport XPCShared\n\nprivate extension AppDelegate {\n    @objc func restartXcodeInspector() {\n        Task {\n            await XcodeInspector.shared.restart(cleanUp: true)\n        }\n    }\n\n    @objc func reactivateObservationsToXcode() {\n        Task {\n            await XcodeInspector.shared.reactivateObservationsToXcode()\n        }\n    }\n\n    @objc func openExtensionManager() {\n        guard let data = try? JSONEncoder().encode(ExtensionServiceRequests.OpenExtensionManager())\n        else { return }\n        Task {\n            await service.handleXPCServiceRequests(\n                endpoint: ExtensionServiceRequests.OpenExtensionManager.endpoint,\n                requestBody: data,\n                reply: { _, _ in }\n            )\n        }\n    }\n    \n    @objc func destroyWorkspacePool() {\n        @Dependency(\\.workspacePool) var workspacePool: WorkspacePool\n        Task {\n            await workspacePool.destroy()\n        }\n    }\n    \n    @objc func toggleDebugOverlayPanel() {\n        let isDebuggingOverlay = UserDefaults.shared.value(for: \\.debugOverlayPanel)\n        UserDefaults.shared.set(!isDebuggingOverlay, for: \\.debugOverlayPanel)\n    }\n}\n\nprivate extension NSMenuItem {\n    static func text(_ text: String) -> NSMenuItem {\n        let item = NSMenuItem(\n            title: text,\n            action: nil,\n            keyEquivalent: \"\"\n        )\n        item.isEnabled = false\n        return item\n    }\n}\n\n"
  },
  {
    "path": "ExtensionService/AppDelegate.swift",
    "content": "import FileChangeChecker\nimport LaunchAgentManager\nimport Logger\nimport Perception\nimport Preferences\nimport Service\nimport ServiceManagement\nimport ServiceUpdateMigration\nimport SwiftUI\nimport UpdateChecker\nimport UserDefaultsObserver\nimport UserNotifications\nimport XcodeInspector\nimport XPCShared\n\nlet bundleIdentifierBase = Bundle.main\n    .object(forInfoDictionaryKey: \"BUNDLE_IDENTIFIER_BASE\") as! String\nlet serviceIdentifier = bundleIdentifierBase + \".ExtensionService\"\n\n@main\nclass AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {\n    @MainActor\n    let service = Service.shared\n    var statusBarItem: NSStatusItem!\n    var xpcController: XPCController?\n    let updateChecker = UpdateChecker(\n        hostBundle: locateHostBundleURL(url: Bundle.main.bundleURL)\n            .flatMap(Bundle.init(url:)),\n        shouldAutomaticallyCheckForUpdate: true\n    )\n\n    func applicationDidFinishLaunching(_: Notification) {\n//        isPerceptionCheckingEnabled = false\n        if ProcessInfo.processInfo.environment[\"IS_UNIT_TEST\"] == \"YES\" { return }\n        _ = XcodeInspector.shared\n        updateChecker.updateCheckerDelegate = self\n        service.start()\n        AXIsProcessTrustedWithOptions([\n            kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true,\n        ] as CFDictionary)\n        setupQuitOnUpdate()\n        setupQuitOnUserTerminated()\n        xpcController = .init()\n        Logger.service.info(\"XPC Service started.\")\n        NSApp.setActivationPolicy(.accessory)\n        buildStatusBarMenu()\n\n        Task {\n            do {\n                try await ServiceUpdateMigrator().migrate()\n            } catch {\n                Logger.service.error(error.localizedDescription)\n            }\n        }\n    }\n\n    @objc func quit() {\n        Task { @MainActor in\n            await service.prepareForExit()\n            await xpcController?.quit()\n            NSApp.terminate(self)\n        }\n    }\n\n    @objc func openCopilotForXcode() {\n        let task = Process()\n        if let appPath = locateHostBundleURL(url: Bundle.main.bundleURL)?.absoluteString {\n            task.launchPath = \"/usr/bin/open\"\n            task.arguments = [appPath]\n            task.launch()\n            task.waitUntilExit()\n        }\n    }\n\n    @objc func openGlobalChat() {\n        Task { @MainActor in\n            let serviceGUI = Service.shared.guiController\n            serviceGUI.openGlobalChat()\n        }\n    }\n\n    func setupQuitOnUpdate() {\n        Task {\n            guard let url = Bundle.main.executableURL else { return }\n            let checker = await FileChangeChecker(fileURL: url)\n\n            // If Xcode or Copilot for Xcode is made active, check if the executable of this program\n            // is changed. If changed, quit this program.\n\n            let sequence = NSWorkspace.shared.notificationCenter\n                .notifications(named: NSWorkspace.didActivateApplicationNotification)\n            for await notification in sequence {\n                try Task.checkCancellation()\n                guard let app = notification\n                    .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication,\n                    app.isUserOfService\n                else { continue }\n                guard await checker.checkIfChanged() else {\n                    Logger.service.info(\"Extension Service is not updated, no need to quit.\")\n                    continue\n                }\n                Logger.service.info(\"Extension Service will quit.\")\n                #if DEBUG\n                #else\n                quit()\n                #endif\n            }\n        }\n    }\n\n    func setupQuitOnUserTerminated() {\n        Task {\n            // Whenever Xcode or the host application quits, check if any of the two is running.\n            // If none, quit the XPC service.\n\n            let sequence = NSWorkspace.shared.notificationCenter\n                .notifications(named: NSWorkspace.didTerminateApplicationNotification)\n            for await notification in sequence {\n                try Task.checkCancellation()\n                guard UserDefaults.shared.value(for: \\.quitXPCServiceOnXcodeAndAppQuit)\n                else { continue }\n                guard let app = notification\n                    .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication,\n                    app.isUserOfService\n                else { continue }\n                if NSWorkspace.shared.runningApplications.contains(where: \\.isUserOfService) {\n                    continue\n                }\n                quit()\n            }\n        }\n    }\n\n    func requestAccessoryAPIPermission() {\n        AXIsProcessTrustedWithOptions([\n            kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true,\n        ] as NSDictionary)\n    }\n\n    @objc func checkForUpdate() {\n        updateChecker.checkForUpdates()\n    }\n}\n\nextension AppDelegate: UpdateCheckerDelegate {\n    func prepareForRelaunch(finish: @escaping () -> Void) {\n        Task {\n            await service.prepareForExit()\n            finish()\n        }\n    }\n}\n\nextension NSRunningApplication {\n    var isUserOfService: Bool {\n        [\n            \"com.apple.dt.Xcode\",\n            bundleIdentifierBase,\n        ].contains(bundleIdentifier)\n    }\n}\n\nfunc locateHostBundleURL(url: URL) -> URL? {\n    var nextURL = url\n    while nextURL.path != \"/\" {\n        nextURL = nextURL.deletingLastPathComponent()\n        if nextURL.lastPathComponent.hasSuffix(\".app\") {\n            return nextURL\n        }\n    }\n    let devAppURL = url\n        .deletingLastPathComponent()\n        .appendingPathComponent(\"Copilot for Xcode Dev.app\")\n    return devAppURL\n}\n\n"
  },
  {
    "path": "ExtensionService/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ExtensionService/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"service-icon@16w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"service-icon@32w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"filename\" : \"service-icon@32w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"service-icon@64w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"filename\" : \"service-icon@128w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"service-icon@256w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"filename\" : \"service-icon@256w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"service-icon@512w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"filename\" : \"service-icon@512w.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"filename\" : \"service-icon.png\",\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ExtensionService/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "ExtensionService/Assets.xcassets/MenuBarIcon.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"octopus.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"octopus 2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"filename\" : \"octopus 1.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\"\n  }\n}\n"
  },
  {
    "path": "ExtensionService/ExtensionService.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>$(TeamIdentifierPrefix)group.$(BUNDLE_IDENTIFIER_BASE)</string>\n\t</array>\n\t<key>keychain-access-groups</key>\n\t<array>\n\t\t<string>$(AppIdentifierPrefix)$(BUNDLE_IDENTIFIER_BASE).Shared</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "ExtensionService/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>APPLICATION_SUPPORT_FOLDER</key>\n\t<string>$(APPLICATION_SUPPORT_FOLDER)</string>\n\t<key>APP_ID_PREFIX</key>\n\t<string>$(AppIdentifierPrefix)</string>\n\t<key>BUNDLE_IDENTIFIER_BASE</key>\n\t<string>$(BUNDLE_IDENTIFIER_BASE)</string>\n\t<key>EXTENSION_BUNDLE_NAME</key>\n\t<string>$(EXTENSION_BUNDLE_NAME)</string>\n\t<key>HOST_APP_NAME</key>\n\t<string>$(HOST_APP_NAME)</string>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>TEAM_ID_PREFIX</key>\n\t<string>$(TeamIdentifierPrefix)</string>\n\t<key>XPCService</key>\n\t<dict>\n\t\t<key>ServiceType</key>\n\t\t<string>Application</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "ExtensionService/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"21507\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"macosx\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"21507\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"test\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"test\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About test\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontStandardAboutPanel:\" target=\"Ady-hI-5gd\" id=\"Exp-CZ-Vem\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                                        <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                                        <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                                        <menuItem title=\"Hide test\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                            <connections>\n                                                <action selector=\"hide:\" target=\"Ady-hI-5gd\" id=\"PnN-Uc-m68\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"hideOtherApplications:\" target=\"Ady-hI-5gd\" id=\"VT4-aY-XCT\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"unhideAllApplications:\" target=\"Ady-hI-5gd\" id=\"Dhg-Le-xox\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                                        <menuItem title=\"Quit test\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                            <connections>\n                                                <action selector=\"terminate:\" target=\"Ady-hI-5gd\" id=\"Te7-pn-YzF\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                                    <items>\n                                        <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                            <connections>\n                                                <action selector=\"newDocument:\" target=\"Ady-hI-5gd\" id=\"4Si-XN-c54\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                            <connections>\n                                                <action selector=\"openDocument:\" target=\"Ady-hI-5gd\" id=\"bVn-NM-KNZ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                                <items>\n                                                    <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"clearRecentDocuments:\" target=\"Ady-hI-5gd\" id=\"Daa-9d-B3U\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                                        <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"HmO-Ls-i7Q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                            <connections>\n                                                <action selector=\"saveDocument:\" target=\"Ady-hI-5gd\" id=\"teZ-XB-qJY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                            <connections>\n                                                <action selector=\"saveDocumentAs:\" target=\"Ady-hI-5gd\" id=\"mDf-zr-I0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                            <connections>\n                                                <action selector=\"revertDocumentToSaved:\" target=\"Ady-hI-5gd\" id=\"iJ3-Pv-kwq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                                        <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"runPageLayout:\" target=\"Ady-hI-5gd\" id=\"Din-rz-gC5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                            <connections>\n                                                <action selector=\"print:\" target=\"Ady-hI-5gd\" id=\"qaZ-4w-aoO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                                    <items>\n                                        <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                            <connections>\n                                                <action selector=\"undo:\" target=\"Ady-hI-5gd\" id=\"M6e-cu-g7V\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                            <connections>\n                                                <action selector=\"redo:\" target=\"Ady-hI-5gd\" id=\"oIA-Rs-6OD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                                        <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                            <connections>\n                                                <action selector=\"cut:\" target=\"Ady-hI-5gd\" id=\"YJe-68-I9s\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                            <connections>\n                                                <action selector=\"copy:\" target=\"Ady-hI-5gd\" id=\"G1f-GL-Joy\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Ady-hI-5gd\" id=\"UvS-8e-Qdg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteAsPlainText:\" target=\"Ady-hI-5gd\" id=\"cEh-KX-wJQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"delete:\" target=\"Ady-hI-5gd\" id=\"0Mk-Ml-PaM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                            <connections>\n                                                <action selector=\"selectAll:\" target=\"Ady-hI-5gd\" id=\"VNm-Mi-diN\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                                        <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                                <items>\n                                                    <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"cD7-Qs-BN4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"WD3-Gg-5AJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"NDo-RZ-v9R\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"HOh-sY-3ay\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"U76-nv-p5D\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                                        <connections>\n                                                            <action selector=\"centerSelectionInVisibleArea:\" target=\"Ady-hI-5gd\" id=\"IOG-6D-g5B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                                <items>\n                                                    <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                                        <connections>\n                                                            <action selector=\"showGuessPanel:\" target=\"Ady-hI-5gd\" id=\"vFj-Ks-hy3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                                        <connections>\n                                                            <action selector=\"checkSpelling:\" target=\"Ady-hI-5gd\" id=\"fz7-VC-reM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                                    <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleContinuousSpellChecking:\" target=\"Ady-hI-5gd\" id=\"7w6-Qz-0kB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleGrammarChecking:\" target=\"Ady-hI-5gd\" id=\"muD-Qn-j4w\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"Ady-hI-5gd\" id=\"2lM-Qi-WAP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                                <items>\n                                                    <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"orderFrontSubstitutionsPanel:\" target=\"Ady-hI-5gd\" id=\"oku-mr-iSq\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                                    <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSmartInsertDelete:\" target=\"Ady-hI-5gd\" id=\"3IJ-Se-DZD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"Ady-hI-5gd\" id=\"ptq-xd-QOA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDashSubstitution:\" target=\"Ady-hI-5gd\" id=\"oCt-pO-9gS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticLinkDetection:\" target=\"Ady-hI-5gd\" id=\"Gip-E3-Fov\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDataDetection:\" target=\"Ady-hI-5gd\" id=\"R1I-Nq-Kbl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticTextReplacement:\" target=\"Ady-hI-5gd\" id=\"DvP-Fe-Py6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                                <items>\n                                                    <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"uppercaseWord:\" target=\"Ady-hI-5gd\" id=\"sPh-Tk-edu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowercaseWord:\" target=\"Ady-hI-5gd\" id=\"iUZ-b5-hil\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"capitalizeWord:\" target=\"Ady-hI-5gd\" id=\"26H-TL-nsh\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                                <items>\n                                                    <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"startSpeaking:\" target=\"Ady-hI-5gd\" id=\"654-Ng-kyl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"stopSpeaking:\" target=\"Ady-hI-5gd\" id=\"dX8-6p-jy9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                                    <items>\n                                        <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                                <items>\n                                                    <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                                        <connections>\n                                                            <action selector=\"underline:\" target=\"Ady-hI-5gd\" id=\"FYS-2b-JAY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                                    <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                                    <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardKerning:\" target=\"Ady-hI-5gd\" id=\"6dk-9l-Ckg\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffKerning:\" target=\"Ady-hI-5gd\" id=\"U8a-gz-Maa\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"tightenKerning:\" target=\"Ady-hI-5gd\" id=\"hr7-Nz-8ro\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"loosenKerning:\" target=\"Ady-hI-5gd\" id=\"8i4-f9-FKE\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardLigatures:\" target=\"Ady-hI-5gd\" id=\"7uR-wd-Dx6\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffLigatures:\" target=\"Ady-hI-5gd\" id=\"iX2-gA-Ilz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useAllLigatures:\" target=\"Ady-hI-5gd\" id=\"KcB-kA-TuK\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"unscript:\" target=\"Ady-hI-5gd\" id=\"0vZ-95-Ywn\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"superscript:\" target=\"Ady-hI-5gd\" id=\"3qV-fo-wpU\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"subscript:\" target=\"Ady-hI-5gd\" id=\"Q6W-4W-IGz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"raiseBaseline:\" target=\"Ady-hI-5gd\" id=\"4sk-31-7Q9\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"lowerBaseline:\" target=\"Ady-hI-5gd\" id=\"OF1-bc-KW4\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                                    <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontColorPanel:\" target=\"Ady-hI-5gd\" id=\"mSX-Xz-DV3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                                    <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyFont:\" target=\"Ady-hI-5gd\" id=\"GJO-xA-L4q\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteFont:\" target=\"Ady-hI-5gd\" id=\"JfD-CL-leO\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                                <items>\n                                                    <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                                        <connections>\n                                                            <action selector=\"alignLeft:\" target=\"Ady-hI-5gd\" id=\"zUv-R1-uAa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                                        <connections>\n                                                            <action selector=\"alignCenter:\" target=\"Ady-hI-5gd\" id=\"spX-mk-kcS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"alignJustified:\" target=\"Ady-hI-5gd\" id=\"ljL-7U-jND\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                                        <connections>\n                                                            <action selector=\"alignRight:\" target=\"Ady-hI-5gd\" id=\"r48-bG-YeY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                                    <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                            <items>\n                                                                <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"YGs-j5-SAR\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"qtV-5e-UBP\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"Lbh-J2-qVU\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"S0X-9S-QSf\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"jFq-tB-4Kx\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"5fk-qB-AqJ\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                                <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"Nop-cj-93Q\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"lPI-Se-ZHp\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"BgM-ve-c93\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"caW-Bv-w94\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"RB4-Sm-HuC\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"EXD-6r-ZUu\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                                    <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleRuler:\" target=\"Ady-hI-5gd\" id=\"FOx-HJ-KwY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyRuler:\" target=\"Ady-hI-5gd\" id=\"71i-fW-3W2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteRuler:\" target=\"Ady-hI-5gd\" id=\"cSh-wd-qM2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleToolbarShown:\" target=\"Ady-hI-5gd\" id=\"BXY-wc-z0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"runToolbarCustomizationPalette:\" target=\"Ady-hI-5gd\" id=\"pQI-g3-MTW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                                        <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleSidebar:\" target=\"Ady-hI-5gd\" id=\"iwa-gc-5KM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleFullScreen:\" target=\"Ady-hI-5gd\" id=\"dU3-MA-1Rq\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                                    <items>\n                                        <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                            <connections>\n                                                <action selector=\"performMiniaturize:\" target=\"Ady-hI-5gd\" id=\"VwT-WD-YPe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"performZoom:\" target=\"Ady-hI-5gd\" id=\"DIl-cC-cCs\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"DRN-fu-gQh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"test Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"showHelp:\" target=\"Ady-hI-5gd\" id=\"y7X-2Q-9no\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"CopilotForXcodeExtensionService\" customModuleProvider=\"target\"/>\n                <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"0.0\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ExtensionService/ServiceDelegate.swift",
    "content": "import Foundation\nimport Service\nimport XPCShared\n\nclass ServiceDelegate: NSObject, NSXPCListenerDelegate {\n    func listener(\n        _: NSXPCListener,\n        shouldAcceptNewConnection newConnection: NSXPCConnection\n    ) -> Bool {\n        newConnection.exportedInterface = NSXPCInterface(\n            with: XPCServiceProtocol.self\n        )\n\n        let exportedObject = XPCService()\n        newConnection.exportedObject = exportedObject\n        newConnection.resume()\n        return true\n    }\n}\n\n"
  },
  {
    "path": "ExtensionService/XPCController.swift",
    "content": "import Foundation\nimport Logger\nimport XPCShared\n\nfinal class XPCController: XPCServiceDelegate {\n    let bridge: XPCCommunicationBridge\n    let xpcListener: NSXPCListener\n    let xpcServiceDelegate: ServiceDelegate\n\n    var pingTask: Task<Void, Error>?\n\n    init() {\n        let bridge = XPCCommunicationBridge(logger: .client)\n        let listener = NSXPCListener.anonymous()\n        let delegate = ServiceDelegate()\n        listener.delegate = delegate\n        listener.resume()\n        xpcListener = listener\n        xpcServiceDelegate = delegate\n        self.bridge = bridge\n\n        Task {\n            bridge.setDelegate(self)\n            createPingTask()\n        }\n    }\n    \n    func quit() async {\n        bridge.setDelegate(nil)\n        pingTask?.cancel()\n        try? await bridge.quit()\n    }\n\n    deinit {\n        xpcListener.invalidate()\n        pingTask?.cancel()\n    }\n\n    func createPingTask() {\n        pingTask?.cancel()\n        pingTask = Task { [weak self] in\n            while !Task.isCancelled {\n                guard let self else { return }\n                do {\n                    try await self.bridge.updateServiceEndpoint(self.xpcListener.endpoint)\n                    try await Task.sleep(nanoseconds: 60_000_000_000)\n                } catch {\n                    try await Task.sleep(nanoseconds: 1_000_000_000)\n                    #if DEBUG\n                    // No log, but you should run CommunicationBridge, too.\n                    #else\n                    Logger.service\n                        .error(\"Failed to connect to bridge: \\(error.localizedDescription)\")\n                    #endif\n                }\n            }\n        }\n    }\n\n    func connectionDidInvalidate() async {\n        // ignore\n    }\n\n    func connectionDidInterrupt() async {\n        createPingTask() // restart the ping task so that it can bring the bridge back immediately.\n    }\n}\n\n"
  },
  {
    "path": "Helper/ReloadLaunchAgent.swift",
    "content": "import ArgumentParser\nimport Foundation\n\nstruct ReloadLaunchAgent: ParsableCommand {\n    static var configuration = CommandConfiguration(\n        abstract: \"Reload the launch agent\"\n    )\n\n    @Option(name: .long, help: \"The service identifier of the service.\")\n    var serviceIdentifier: String\n\n    var launchAgentDirURL: URL {\n        FileManager.default.homeDirectoryForCurrentUser\n            .appendingPathComponent(\"Library/LaunchAgents\")\n    }\n\n    var launchAgentPath: String {\n        launchAgentDirURL.appendingPathComponent(\"\\(serviceIdentifier).plist\").path\n    }\n\n    func run() throws {\n        try? launchctl(\"unload\", launchAgentPath)\n        try launchctl(\"load\", launchAgentPath)\n    }\n}\n\nprivate func launchctl(_ args: String...) throws {\n    return try process(\"/bin/launchctl\", args)\n}\n\nprivate func process(_ launchPath: String, _ args: [String]) throws {\n    let task = Process()\n    task.launchPath = launchPath\n    task.arguments = args\n    task.environment = [\n        \"PATH\": \"/usr/bin\",\n    ]\n    let outpipe = Pipe()\n    task.standardOutput = outpipe\n    try task.run()\n    task.waitUntilExit()\n\n    struct E: Error, LocalizedError {\n        var errorDescription: String?\n    }\n\n    if task.terminationStatus == 0 {\n        return\n    }\n    throw E(\n        errorDescription: \"Failed to restart. Please make sure the launch agent is already loaded.\"\n    )\n}\n"
  },
  {
    "path": "Helper/main.swift",
    "content": "import ArgumentParser\nimport Foundation\n\nstruct Helper: ParsableCommand {\n    static var configuration = CommandConfiguration(\n        commandName: \"helper\",\n        abstract: \"Helper CLI for Copilot for Xcode\",\n        subcommands: [\n            ReloadLaunchAgent.self,\n        ]\n    )\n}\n\nHelper.main()\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2024 Shangxin Guo <int123c@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "OverlayWindow/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\nxcuserdata/\nDerivedData/\n.swiftpm/configuration/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "OverlayWindow/Package.swift",
    "content": "// swift-tools-version: 6.2\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"OverlayWindow\",\n    platforms: [.macOS(.v13)],\n    products: [\n        .library(\n            name: \"OverlayWindow\",\n            targets: [\"OverlayWindow\"]\n        ),\n    ],\n    dependencies: [\n        .package(path: \"../Tool\"),\n        .package(url: \"https://github.com/pointfreeco/swift-perception\", from: \"1.3.4\"),\n        .package(url: \"https://github.com/pointfreeco/swift-dependencies\", from: \"1.4.0\"),\n    ],\n    targets: [\n        .target(\n            name: \"OverlayWindow\",\n            dependencies: [\n                .product(name: \"AppMonitoring\", package: \"Tool\"),\n                .product(name: \"Toast\", package: \"Tool\"),\n                .product(name: \"Preferences\", package: \"Tool\"),\n                .product(name: \"Logger\", package: \"Tool\"),\n                .product(name: \"DebounceFunction\", package: \"Tool\"),\n                .product(name: \"Perception\", package: \"swift-perception\"),\n                .product(name: \"Dependencies\", package: \"swift-dependencies\"),\n            ]\n        ),\n        .testTarget(\n            name: \"OverlayWindowTests\",\n            dependencies: [\"OverlayWindow\", .product(name: \"DebounceFunction\", package: \"Tool\")]\n        ),\n    ]\n)\n\n"
  },
  {
    "path": "OverlayWindow/Sources/OverlayWindow/IDEWorkspaceWindowOverlayWindowController.swift",
    "content": "import AppKit\nimport AXExtension\nimport AXNotificationStream\nimport DebounceFunction\nimport Foundation\nimport Perception\nimport SwiftUI\nimport XcodeInspector\n\n@MainActor\npublic protocol IDEWorkspaceWindowOverlayWindowControllerContentProvider {\n    associatedtype Content: View\n    func createWindow() -> NSWindow?\n    func createContent() -> Content\n    func destroy()\n\n    init(windowInspector: WorkspaceXcodeWindowInspector, application: NSRunningApplication)\n}\n\nextension IDEWorkspaceWindowOverlayWindowControllerContentProvider {\n    var contentBody: AnyView {\n        AnyView(createContent())\n    }\n}\n\n@MainActor\nfinal class IDEWorkspaceWindowOverlayWindowController {\n    private var lastAccessDate: Date = .init()\n    let application: NSRunningApplication\n    let inspector: WorkspaceXcodeWindowInspector\n    let contentProviders: [any IDEWorkspaceWindowOverlayWindowControllerContentProvider]\n    let maskPanel: OverlayPanel\n    var windowElement: AXUIElement\n    private var axNotificationTask: Task<Void, Never>?\n    let updateFrameThrottler = ThrottleRunner(duration: 0.2)\n\n    init(\n        inspector: WorkspaceXcodeWindowInspector,\n        application: NSRunningApplication,\n        contentProviderFactory: (\n            _ windowInspector: WorkspaceXcodeWindowInspector, _ application: NSRunningApplication\n        ) -> [any IDEWorkspaceWindowOverlayWindowControllerContentProvider]\n    ) {\n        self.inspector = inspector\n        self.application = application\n        let contentProviders = contentProviderFactory(inspector, application)\n        self.contentProviders = contentProviders\n        windowElement = inspector.uiElement\n\n        let panel = OverlayPanel(\n            contentRect: .init(x: 0, y: 0, width: 200, height: 200)\n        ) {\n            ZStack {\n                ForEach(0..<contentProviders.count, id: \\.self) { index in\n                    contentProviders[index].contentBody\n                }\n            }\n        }\n        maskPanel = panel\n\n        for contentProvider in contentProviders {\n            if let window = contentProvider.createWindow() {\n                panel.addChildWindow(window, ordered: .above)\n            }\n        }\n\n        observeWindowChange()\n    }\n\n    deinit {\n        axNotificationTask?.cancel()\n    }\n\n    var isWindowClosed: Bool {\n        inspector.isInvalid\n    }\n\n    func access() {\n        lastAccessDate = Date()\n        maskPanel.level = overlayLevel(0)\n        maskPanel.setIsVisible(true)\n        maskPanel.orderFrontRegardless()\n\n        // When macOS awakes from sleep, the AXUIElement reference may become invalid.\n        if windowElement.parent == nil {\n            windowElement = inspector.uiElement\n            observeWindowChange()\n        } else {\n            updateFrame()\n        }\n    }\n\n    func dim() {\n        maskPanel.level = .normal\n    }\n\n    func hide() {\n        maskPanel.setIsVisible(false)\n        maskPanel.level = .normal\n    }\n\n    func destroy() {\n        maskPanel.close()\n        for contentProvider in contentProviders {\n            contentProvider.destroy()\n        }\n    }\n\n    private func observeWindowChange() {\n        axNotificationTask?.cancel()\n\n        let stream = AXNotificationStream(\n            app: application,\n            element: windowElement,\n            notificationNames:\n            kAXMovedNotification,\n            kAXResizedNotification,\n            kAXWindowMiniaturizedNotification,\n            kAXWindowDeminiaturizedNotification\n        )\n\n        axNotificationTask = Task { [weak self] in\n            for await notification in stream {\n                guard let self else { return }\n                if Task.isCancelled { return }\n                switch notification.name {\n                case kAXMovedNotification, kAXResizedNotification:\n                    await self.updateFrameThrottler.throttle { [weak self] in\n                        await self?.updateFrame()\n                    }\n                case kAXWindowMiniaturizedNotification:\n                    self.hide()\n                default: continue\n                }\n            }\n        }\n\n        updateFrame()\n    }\n\n    private func updateFrame() {\n        if let rect = windowElement.rect {\n            maskPanel.setTopLeftCoordinateFrame(rect, display: false)\n        }\n    }\n}\n\n"
  },
  {
    "path": "OverlayWindow/Sources/OverlayWindow/OverlayPanel.swift",
    "content": "import AppKit\nimport Logger\nimport Perception\nimport SwiftUI\n\nstruct OverlayFrameEnvironmentKey: EnvironmentKey {\n    static let defaultValue: CGRect = .zero\n}\n\nstruct OverlayDebugEnvironmentKey: EnvironmentKey {\n    static let defaultValue: Bool = false\n}\n\npublic extension EnvironmentValues {\n    var overlayFrame: CGRect {\n        get { self[OverlayFrameEnvironmentKey.self] }\n        set { self[OverlayFrameEnvironmentKey.self] = newValue }\n    }\n\n    var overlayDebug: Bool {\n        get { self[OverlayDebugEnvironmentKey.self] }\n        set { self[OverlayDebugEnvironmentKey.self] = newValue }\n    }\n}\n\n@MainActor\npublic final class OverlayPanel: NSPanel {\n    @MainActor\n    @Perceptible\n    final class PanelState {\n        var windowFrame: CGRect = .zero\n        var windowFrameNSCoordinate: CGRect = .zero\n    }\n\n    let panelState: PanelState = .init()\n    private var _canBecomeKey = true\n\n    public init<Content: View>(\n        contentRect: NSRect,\n        @ViewBuilder content: @escaping () -> Content\n    ) {\n        super.init(\n            contentRect: contentRect,\n            styleMask: [\n                .borderless,\n                .nonactivatingPanel,\n                .fullSizeContentView,\n            ],\n            backing: .buffered,\n            defer: false\n        )\n\n        isReleasedWhenClosed = false\n        menu = nil\n        isOpaque = true\n        backgroundColor = .clear\n        hasShadow = false\n        alphaValue = 1.0\n        collectionBehavior = [.fullScreenAuxiliary]\n        isFloatingPanel = true\n        titleVisibility = .hidden\n        titlebarAppearsTransparent = true\n        animationBehavior = .utilityWindow\n\n        standardWindowButton(.closeButton)?.isHidden = true\n        standardWindowButton(.miniaturizeButton)?.isHidden = true\n        standardWindowButton(.zoomButton)?.isHidden = true\n\n        contentView = NSHostingView(\n            rootView: ContentWrapper(panelState: panelState) { content() }\n        )\n    }\n\n    override public var canBecomeKey: Bool {\n        return _canBecomeKey\n    }\n\n    override public var canBecomeMain: Bool {\n        return false\n    }\n\n    override public func setIsVisible(_ visible: Bool) {\n        _canBecomeKey = false\n        defer { _canBecomeKey = true }\n        super.setIsVisible(visible)\n    }\n\n    public func moveToActiveSpace() {\n        collectionBehavior = [.fullScreenAuxiliary, .moveToActiveSpace]\n        Task { @MainActor in\n            try await Task.sleep(nanoseconds: 50_000_000)\n            self.collectionBehavior = [.fullScreenAuxiliary]\n        }\n    }\n\n    func setTopLeftCoordinateFrame(_ frame: CGRect, display: Bool) {\n        let zeroScreen = NSScreen.screens.first { $0.frame.origin == .zero }\n            ?? NSScreen.primaryScreen ?? NSScreen.main\n        let panelFrame = Self.convertAXRectToNSPanelFrame(\n            axRect: frame,\n            forPrimaryScreen: zeroScreen\n        )\n        panelState.windowFrame = frame\n        panelState.windowFrameNSCoordinate = panelFrame\n        setFrame(panelFrame, display: display)\n    }\n\n    static func convertAXRectToNSPanelFrame(\n        axRect: CGRect,\n        forPrimaryScreen screen: NSScreen?\n    ) -> CGRect {\n        guard let screen = screen else { return .zero }\n        let screenFrame = screen.frame\n        let flippedY = screenFrame.origin.y + screenFrame.size\n            .height - (axRect.origin.y + axRect.size.height)\n        return CGRect(\n            x: axRect.origin.x,\n            y: flippedY,\n            width: axRect.size.width,\n            height: axRect.size.height\n        )\n    }\n\n    struct ContentWrapper<Content: View>: View {\n        let panelState: PanelState\n        @ViewBuilder let content: () -> Content\n        @AppStorage(\\.debugOverlayPanel) var debugOverlayPanel\n\n        var body: some View {\n            WithPerceptionTracking {\n                ZStack {\n                    Rectangle().fill(.green.opacity(debugOverlayPanel ? 0.1 : 0))\n                        .allowsHitTesting(false)\n                    content()\n                        .environment(\\.overlayFrame, panelState.windowFrame)\n                        .environment(\\.overlayDebug, debugOverlayPanel)\n                }\n            }\n        }\n    }\n}\n\nfunc overlayLevel(_ addition: Int) -> NSWindow.Level {\n    let minimumWidgetLevel: Int\n    #if DEBUG\n    minimumWidgetLevel = NSWindow.Level.floating.rawValue + 1\n    #else\n    minimumWidgetLevel = NSWindow.Level.floating.rawValue\n    #endif\n    return .init(minimumWidgetLevel + addition)\n}\n\npublic extension CGRect {\n    func flipped(relativeTo reference: CGRect) -> CGRect {\n        let flippedOrigin = CGPoint(\n            x: origin.x,\n            y: reference.height - origin.y - height\n        )\n        return CGRect(origin: flippedOrigin, size: size)\n    }\n\n    func relative(to reference: CGRect) -> CGRect {\n        let relativeOrigin = CGPoint(\n            x: origin.x - reference.origin.x,\n            y: origin.y - reference.origin.y\n        )\n        return CGRect(origin: relativeOrigin, size: size)\n    }\n}\n\npublic extension NSScreen {\n    var isPrimary: Bool {\n        let id = deviceDescription[.init(\"NSScreenNumber\")] as? CGDirectDisplayID\n        return id == CGMainDisplayID()\n    }\n\n    static var primaryScreen: NSScreen? {\n        NSScreen.screens.first {\n            let id = $0.deviceDescription[.init(\"NSScreenNumber\")] as? CGDirectDisplayID\n            return id == CGMainDisplayID()\n        }\n    }\n}\n\n"
  },
  {
    "path": "OverlayWindow/Sources/OverlayWindow/OverlayWindowController.swift",
    "content": "import AppKit\nimport DebounceFunction\nimport Foundation\nimport Perception\nimport XcodeInspector\n\n@MainActor\npublic final class OverlayWindowController {\n    public typealias IDEWorkspaceWindowOverlayWindowControllerContentProviderFactory =\n        @MainActor @Sendable (\n            _ windowInspector: WorkspaceXcodeWindowInspector,\n            _ application: NSRunningApplication\n        ) -> any IDEWorkspaceWindowOverlayWindowControllerContentProvider\n\n    static var ideWindowOverlayWindowControllerContentProviderFactories:\n        [IDEWorkspaceWindowOverlayWindowControllerContentProviderFactory] = []\n\n    var ideWindowOverlayWindowControllers =\n        [ObjectIdentifier: IDEWorkspaceWindowOverlayWindowController]()\n    var updateWindowStateTask: Task<Void, Error>?\n\n    let windowUpdateThrottler = ThrottleRunner(duration: 0.2)\n\n    lazy var fullscreenDetector = {\n        let it = NSWindow(\n            contentRect: .zero,\n            styleMask: .borderless,\n            backing: .buffered,\n            defer: false\n        )\n        it.isReleasedWhenClosed = false\n        it.isOpaque = false\n        it.backgroundColor = .clear\n        it.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary, .transient]\n        it.hasShadow = false\n        it.setIsVisible(false)\n        return it\n    }()\n\n    public init() {}\n\n    public func start() {\n        observeEvents()\n        _ = fullscreenDetector\n    }\n\n    public nonisolated static func registerIDEWorkspaceWindowOverlayWindowControllerContentProviderFactory(\n        _ factory: @escaping IDEWorkspaceWindowOverlayWindowControllerContentProviderFactory\n    ) {\n        Task { @MainActor in\n            ideWindowOverlayWindowControllerContentProviderFactories.append(factory)\n        }\n    }\n}\n\nextension OverlayWindowController {\n    func observeEvents() {\n        observeWindowChange()\n\n        updateWindowStateTask = Task { [weak self] in\n            if let self { await handleSpaceChange() }\n\n            await withThrowingTaskGroup(of: Void.self) { [weak self] group in\n                // active space did change\n                _ = group.addTaskUnlessCancelled { [weak self] in\n                    let sequence = NSWorkspace.shared.notificationCenter\n                        .notifications(named: NSWorkspace.activeSpaceDidChangeNotification)\n                    for await _ in sequence {\n                        guard let self else { return }\n                        try Task.checkCancellation()\n                        await handleSpaceChange()\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate extension OverlayWindowController {\n    func observeWindowChange() {\n        if ideWindowOverlayWindowControllers.isEmpty {\n            if let app = XcodeInspector.shared.activeXcode,\n               let windowInspector = XcodeInspector.shared\n               .focusedWindow as? WorkspaceXcodeWindowInspector\n            {\n                createNewIDEOverlayWindowController(\n                    inspector: windowInspector,\n                    application: app.runningApplication\n                )\n            }\n        }\n\n        withPerceptionTracking {\n            _ = XcodeInspector.shared.focusedWindow\n            _ = XcodeInspector.shared.activeXcode\n            _ = XcodeInspector.shared.activeApplication\n        } onChange: { [weak self] in\n            guard let self else { return }\n            Task { @MainActor in\n                defer { self.observeWindowChange() }\n                await self.windowUpdateThrottler.throttle { [weak self] in\n                    await self?.handleOverlayStatusChange()\n                }\n            }\n        }\n    }\n\n    func createNewIDEOverlayWindowController(\n        inspector: WorkspaceXcodeWindowInspector,\n        application: NSRunningApplication\n    ) {\n        let id = ObjectIdentifier(inspector)\n        let newController = IDEWorkspaceWindowOverlayWindowController(\n            inspector: inspector,\n            application: application,\n            contentProviderFactory: {\n                windowInspector, application in\n                OverlayWindowController.ideWindowOverlayWindowControllerContentProviderFactories\n                    .map { $0(windowInspector, application) }\n            }\n        )\n        newController.access()\n        ideWindowOverlayWindowControllers[id] = newController\n    }\n\n    func removeIDEOverlayWindowController(for id: ObjectIdentifier) {\n        if let controller = ideWindowOverlayWindowControllers[id] {\n            controller.destroy()\n        }\n        ideWindowOverlayWindowControllers[id] = nil\n    }\n\n    func handleSpaceChange() async {\n        let windowInspector = XcodeInspector.shared.focusedWindow\n        guard let activeWindowController = {\n            if let windowInspector = windowInspector as? WorkspaceXcodeWindowInspector {\n                let id = ObjectIdentifier(windowInspector)\n                return ideWindowOverlayWindowControllers[id]\n            } else {\n                return nil\n            }\n        }() else { return }\n\n        let activeXcode = XcodeInspector.shared.activeXcode\n        let xcode = activeXcode?.appElement\n        let isXcodeActive = xcode?.isFrontmost ?? false\n        if isXcodeActive {\n            activeWindowController.maskPanel.moveToActiveSpace()\n        }\n\n        if fullscreenDetector.isOnActiveSpace, xcode?.focusedWindow != nil {\n            activeWindowController.maskPanel.orderFrontRegardless()\n        }\n    }\n\n    func handleOverlayStatusChange() {\n        guard XcodeInspector.shared.activeApplication?.isXcode ?? false else {\n            var closedControllers: [ObjectIdentifier] = []\n            for (id, controller) in ideWindowOverlayWindowControllers {\n                if controller.isWindowClosed {\n                    controller.dim()\n                    closedControllers.append(id)\n                } else {\n                    controller.dim()\n                }\n            }\n            for id in closedControllers {\n                removeIDEOverlayWindowController(for: id)\n            }\n            return\n        }\n\n        guard let app = XcodeInspector.shared.activeXcode else {\n            for (_, controller) in ideWindowOverlayWindowControllers {\n                controller.hide()\n            }\n            return\n        }\n\n        let windowInspector = XcodeInspector.shared.focusedWindow\n        if let ideWindowInspector = windowInspector as? WorkspaceXcodeWindowInspector {\n            let objectID = ObjectIdentifier(ideWindowInspector)\n            // Workspace window is active\n            // Hide all controllers first\n            for (id, controller) in ideWindowOverlayWindowControllers {\n                if id != objectID {\n                    controller.hide()\n                }\n            }\n            if let controller = ideWindowOverlayWindowControllers[objectID] {\n                controller.access()\n            } else {\n                createNewIDEOverlayWindowController(\n                    inspector: ideWindowInspector,\n                    application: app.runningApplication\n                )\n            }\n        } else {\n            // Not a workspace window, dim all controllers\n            for (_, controller) in ideWindowOverlayWindowControllers {\n                controller.dim()\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "OverlayWindow/Tests/OverlayWindowTests/WindowTests.swift",
    "content": "import Testing\n\n@Test func example() async throws {\n    // Write your test here and use APIs like `#expect(...)` to check expected conditions.\n}\n"
  },
  {
    "path": "Playground.playground/Pages/RetrievalQAChain.xcplaygroundpage/Contents.swift",
    "content": "import AppKit\nimport Foundation\nimport LangChain\nimport OpenAIService\nimport PlaygroundSupport\nimport SwiftUI\nimport TokenEncoder\n\nstruct QAForm: View {\n    @State var relevantInformation = [String]()\n    @State var relevantDocuments = [(document: Document, distance: Float)]()\n    @State var duration: TimeInterval = 0\n    @State var answer: String = \"\"\n    @State var tokenCount: Int = 0\n    @State var question: String = \"What is Swift macros?\"\n    @State var isProcessing: Bool = false\n    @State var url: String = \"https://developer.apple.com/documentation/swift/applying-macros\"\n\n    var body: some View {\n        HStack(spacing: 0) {\n            ScrollView {\n                Form {\n                    Section(header: Text(\"Input\")) {\n                        TextField(\"URL\", text: $url)\n                        TextField(\"Question\", text: $question)\n                        HStack {\n                            Button(\"Ask\") {\n                                Task {\n                                    do {\n                                        try await ask()\n                                    } catch {\n                                        answer = error.localizedDescription\n                                    }\n                                }\n                            }\n                            .disabled(isProcessing)\n                            \n                            Text(\"\\(duration) seconds\")\n                        }\n                    }\n                    Section(header: Text(\"All Relevant Information (\\(tokenCount) words)\")) {\n                        Text(answer)\n                    }\n                    Section(header: Text(\"Relevant Information\")) {\n                        ForEach(0..<relevantInformation.endIndex, id: \\.self) { index in\n                            let information = relevantInformation[index]\n                            VStack(alignment: .leading) {\n                                Text(information)\n                                Divider()\n                            }\n                            .textSelection(.enabled)\n                        }\n                    }\n                }\n                .formStyle(.grouped)\n            }\n\n            ScrollView {\n                Form {\n                    Section(header: Text(\"Relevant Documents\")) {\n                        ForEach(0..<relevantDocuments.endIndex, id: \\.self) { index in\n                            let document = relevantDocuments[index]\n                            VStack(alignment: .leading) {\n                                Text(\"\\(document.distance)\")\n                                Text(document.document.pageContent)\n                                Divider()\n                            }\n                            .textSelection(.enabled)\n                        }\n                    }\n                }.formStyle(.grouped)\n            }\n        }\n    }\n\n    func ask() async throws {\n        let start = Date().timeIntervalSince1970\n        answer = \"\"\n        relevantDocuments = []\n        relevantInformation = []\n        duration = 0\n        tokenCount = 0\n        isProcessing = true\n        defer { isProcessing = false }\n        guard let url = URL(string: url) else {\n            answer = \"Invalid URL\"\n            return\n        }\n        let embeddingConfiguration = UserPreferenceEmbeddingConfiguration().overriding()\n        let embedding = OpenAIEmbedding(configuration: embeddingConfiguration)\n        let store: VectorStore = try await {\n            if let store = await TemporaryUSearch.view(identifier: url.absoluteString) {\n                return store\n            } else {\n                let webLoader = WebLoader(urls: [url])\n                let store = TemporaryUSearch(identifier: url.absoluteString)\n                let webDocuments = try await webLoader.load()\n                let splitter = RecursiveCharacterTextSplitter(\n                    chunkSize: 1000,\n                    chunkOverlap: 100\n                )\n                let splitDocuments = try await splitter.transformDocuments(webDocuments)\n                let embeddedDocuments = try await embedding.embed(documents: splitDocuments)\n                try await store.set(embeddedDocuments)\n                return store\n            }\n        }()\n\n        let qa = QAInformationRetrievalChain(\n            vectorStore: store,\n            embedding: embedding\n        )\n        answer = try await qa.run(\n            question,\n            callbackManagers: [\n                .init {\n                    $0.on(\\.relevantInformationExtractionChainDidExtractPartialRelevantContent) {\n                        relevantInformation.append($0)\n                    }\n                    $0.on(\\.retrievalQADidExtractRelevantContent) {\n                        relevantDocuments = $0\n                    }\n                },\n            ]\n        )\n        tokenCount = answer.split(separator: \" \").count\n        duration = Date().timeIntervalSince1970 - start\n    }\n}\n\nlet hostingView = NSHostingController(\n    rootView: QAForm()\n        .frame(width: 800, height: 800)\n)\n\nPlaygroundPage.current.needsIndefiniteExecution = true\nPlaygroundPage.current.liveView = hostingView\n\n"
  },
  {
    "path": "Playground.playground/Pages/RetrievalQAChain.xcplaygroundpage/timeline.xctimeline",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Timeline\n   version = \"3.0\">\n   <TimelineItems>\n   </TimelineItems>\n</Timeline>\n"
  },
  {
    "path": "Playground.playground/Pages/WebScrapper.xcplaygroundpage/Contents.swift",
    "content": "import AppKit\nimport LangChain\nimport PlaygroundSupport\nimport SwiftUI\n\nstruct ScrapperForm: View {\n    @State var webDocuments: [Document] = []\n    @State var isProcessing: Bool = false\n    @State var url: String = \"https://developer.apple.com/documentation/swift/applying-macros\"\n\n    var body: some View {\n        Form {\n            Section(header: Text(\"Input\")) {\n                TextField(\"URL\", text: $url)\n                Button(\"Scrap\") {\n                    Task {\n                        do {\n                            try await scrap()\n                        } catch {\n                            webDocuments =\n                                [.init(pageContent: error.localizedDescription, metadata: [:])]\n                        }\n                    }\n                }\n                .disabled(isProcessing)\n            }\n            Section(header: Text(\"Web Content\")) {\n                ForEach(webDocuments, id: \\.pageContent) { document in\n                    VStack(alignment: .leading) {\n                        Text(document.pageContent)\n                            .font(.body)\n                    }\n                    Divider()\n                }\n            }\n        }\n        .formStyle(.grouped)\n    }\n\n    func scrap() async throws {\n        webDocuments = []\n        isProcessing = true\n        defer { isProcessing = false }\n        guard let url = URL(string: url) else { return }\n        let webLoader = WebLoader(urls: [url])\n        webDocuments = try await webLoader.load()\n    }\n}\n\nlet hostingView = NSHostingController(\n    rootView: ScrapperForm()\n        .frame(width: 600, height: 800)\n)\n\nPlaygroundPage.current.needsIndefiniteExecution = true\nPlaygroundPage.current.liveView = hostingView\n\n"
  },
  {
    "path": "Playground.playground/Pages/WebScrapper.xcplaygroundpage/timeline.xctimeline",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Timeline\n   version = \"3.0\">\n   <TimelineItems>\n   </TimelineItems>\n</Timeline>\n"
  },
  {
    "path": "Playground.playground/contents.xcplayground",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<playground version='6.0' target-platform='macos' buildActiveScheme='true' importAppTypes='true'>\n    <pages>\n        <page name='RetrievalQAChain'/>\n        <page name='WebScrapper'/>\n    </pages>\n</playground>"
  },
  {
    "path": "README.md",
    "content": "# Copilot for Xcode <img alt=\"Logo\" src=\"/AppIcon.png\" align=\"right\" height=\"50\">\n\n![Screenshot](/Screenshot.png)\n\nCopilot for Xcode is an Xcode Source Editor Extension that provides GitHub Copilot, Codeium and ChatGPT support for Xcode.\n\n<a href=\"https://www.buymeacoffee.com/intitni\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" ></a>\n\n## Features\n\n- Code Suggestions\n- Chat\n- Modification\n- Custom Commands to extend Chat and Modification.\n\n## Table of Contents\n\n- [Copilot for Xcode ](#copilot-for-xcode-)\n  - [Features](#features)\n  - [Table of Contents](#table-of-contents)\n  - [Prerequisites](#prerequisites)\n  - [Permissions Required](#permissions-required)\n  - [Installation and Setup](#installation-and-setup)\n    - [Install](#install)\n    - [Enable the Extension](#enable-the-extension)\n      - [macOS 15](#macos-15)\n      - [MacOS 14](#macos-14)\n      - [Older Versions](#older-versions)\n    - [Granting Permissions to the App](#granting-permissions-to-the-app)\n    - [Setting Up Key Bindings](#setting-up-key-bindings)\n      - [Setting Up Global Hotkeys](#setting-up-global-hotkeys)\n    - [Setting Up Suggestion Feature](#setting-up-suggestion-feature)\n      - [Setting Up GitHub Copilot](#setting-up-github-copilot)\n      - [Setting Up Codeium](#setting-up-codeium)\n    - [Setting Up Chat Feature](#setting-up-chat-feature)\n    - [Managing `CopilotForXcodeExtensionService.app`](#managing-copilotforxcodeextensionserviceapp)\n  - [Update](#update)\n  - [Feature](#feature)\n    - [Suggestion](#suggestion)\n      - [Commands](#commands)\n    - [Chat](#chat)\n      - [Commands](#commands-1)\n      - [Keyboard Shortcuts](#keyboard-shortcuts)\n      - [Chat Commands](#chat-commands)\n    - [Prompt to Code](#prompt-to-code)\n      - [Commands](#commands-2)\n    - [Custom Commands](#custom-commands)\n  - [Limitations](#limitations)\n  - [License](#license)\n\nFor development instruction, check [Development.md](DEVELOPMENT.md).\n\nFor more information, check the [Wiki Page](https://copilotforxcode.intii.com/wiki).\n\n## Prerequisites\n\n- Public network connection.\n\nFor suggestion features:\n\n- For GitHub Copilot users:\n  - [Node](https://nodejs.org/) installed to run the Copilot LSP.\n  - Active GitHub Copilot subscription.\n- For Codeium users:\n  - Active Codeium account.\n- Access to other LLMs.\n\nFor chat and prompt to code features:\n\n- A valid OpenAI API key.\n- Access to other LLMs.\n\n## Permissions Required\n\n- Folder Access\n- Accessibility API\n\n> If you are concerned about key logging and cannot trust the binary, we recommend examining the code and [building it yourself](DEVELOPMENT.md). To address any concerns, you can specifically search for `CGEvent.tapCreate`, `AXObserver`, `AX___` within the code.\n\n## Installation and Setup\n\n> The installation process is a bit complicated. Here is a quick overview:\n> \n> 1. Install the app into the Applications folder, open it once.\n> 2. Enable the source editor extension.\n> 3. Grant Accessibility API permission to the extension app.\n> 4. Setup accounts and models in the host app.\n> 5. Optionally, update the settings of each feature in the host app, and setup keybindings.\n\n### Install\n\nYou can install it via [Homebrew](http://brew.sh/):\n\n```bash\nbrew install --cask copilot-for-xcode\n```\n\nOr install it manually, by downloading the `Copilot for Xcode.app` from the latest [release](https://github.com/intitni/CopilotForXcode/releases).\n\nPlease make sure the app is inside the Applications folder.\n\nOpen the app, the app will create a launch agent to setup a background running Service that does the real job.\n\n### Enable the Extension\n\nEnable the extension in `System Settings.app`.\n\n#### macOS 15\nFrom the Apple menu located in the top-left corner of your screen click `System Settings`. Navigate to `General` then `Login Items & Extensions`. Click `Xcode Source Editor` and tick `Copilot for Xcode`.\n\n#### MacOS 14\nFrom the Apple menu located in the top-left corner of your screen click `System Settings`. Navigate to `Privacy & Security` then toward the bottom click `Extensions`. Click `Xcode Source Editor` and tick `Copilot`.\n\n#### Older Versions\nIf you are using macOS Monterey, enter the `Extensions` menu in `System Preferences.app` with its dedicated icon.\n\n### Granting Permissions to the App\n\nThe first time the app is open and command run, the extension will ask for the necessary permissions.\n\nAlternatively, you may manually grant the required permissions by navigating to the `Privacy & Security` tab in the `System Settings.app`.\n\n- To grant permissions for the Accessibility API, click `Accessibility`, and drag `CopilotForXcodeExtensionService.app` to the list. You can locate the extension app by clicking `Reveal Extension App in Finder` in the host app.\n\n<img alt=\"Accessibility API\" src=\"/accessibility_api_permission.png\" width=\"500px\">\n\nIf you encounter an alert requesting permission that you have previously granted, please remove the permission from the list and add it again to re-grant the necessary permissions.\n\n### Setting Up Key Bindings\n\nThe extension will work better if you use key bindings.\n\nIt looks like there is no way to add default key bindings to commands, but you can set them up in `Xcode settings > Key Bindings`. You can filter the list by typing `copilot` in the search bar.\n\nA [recommended setup](https://github.com/intitni/CopilotForXcode/issues/14) that should cause no conflict is\n\n| Command             | Key Binding                                            |\n| ------------------- | ------------------------------------------------------ |\n| Accept Suggestions  | `⌥}` or Tab                                            |\n| Dismiss Suggestions | Esc                                                    |\n| Reject Suggestion   | `⌥{`                                                   |\n| Next Suggestion     | `⌥>`                                                   |\n| Previous Suggestion | `⌥<`                                                   |\n| Open Chat           | `⌥\"`                                                   |\n| Explain Selection   | `⌥\\|`                                                  |\n\nEssentially using `⌥⇧` as the \"access\" key combination for all bindings.\n\nAnother convenient method to access commands is by using the `⇧⌘/` shortcut to search for a command in the menu bar.\n\n#### Setting Up Global Hotkeys\n\nCurrently, there is only one global hotkey you can set to show/hide the widgets under the General tab from the host app.\n\nWhen this hotkey is not set to enabled globally, it will only work when the service app or Xcode is active.\n\n### Setting Up Suggestion Feature\n\n#### Setting Up GitHub Copilot\n\n1. In the host app, navigate to \"Service - GitHub Copilot\" to access your GitHub Copilot account settings.\n2. Click on \"Install\" to install the language server.\n3. Optionally, set up the path to Node. The default value is simply `node`. Copilot for Xcode.app will attempt to locate Node from the following directories: `/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`.\n\n   If your Node installation is located elsewhere, you can run `which node` from the terminal to obtain the correct path.\n\n   If you are using a node version manager that provides a shim executable, you will need to find the path to the actual executable. Please refer to the FAQ for more information.\n\n4. Click on \"Sign In\", and you will be redirected to a verification website provided by GitHub. A user code will be copied to your clipboard.\n5. After signing in, return to the app and click on \"Confirm Sign-in\" to complete the process.\n6. Go to \"Feature - Suggestion\" and update the feature provider to \"GitHub Copilot\".\n\nThe installed language server is located at `~/Library/Application Support/com.intii.CopilotForXcode/GitHub Copilot/executable/`.\n\n#### Setting Up Codeium\n\n1. In the host app, navigate to \"Service - Codeium\" to access the Codeium account settings.\n2. Click on \"Install\" to install the language server.\n3. Click on \"Sign In\" and you will be redirected to codeium.com. After signing in, a token will be provided. You need to copy and paste this token back into the app to complete the sign-in process.\n4. Go to \"Feature - Suggestion\" and update the feature provider to \"Codeium\".\n\n> The key is stored in the keychain. When the helper app tries to access the key for the first time, it will prompt you to enter the password to access the keychain. Please select \"Always Allow\" to let the helper app access the key.\n\nThe installed language server is located at `~/Library/Application Support/com.intii.CopilotForXcode/Codeium/executable/`.\n\n### Setting Up Chat Feature\n\n1. In the host app, navigate to \"Service - Chat Model\".\n2. Update the OpenAI model or create a new one if necessary. Use the test button to verify the model.\n3. Optionally, set up the embedding model in \"Service - Embedding Model\", which is required for a subset of the chat feature.\n4. Go to \"Feature - Chat\" and update the chat/embedding feature provider with the one you just updated/created.\n\n### Managing `CopilotForXcodeExtensionService.app`\n\nThis app runs whenever you open `Copilot for Xcode.app` or `Xcode.app`. You can quit it with its menu bar item that looks like a tentacle.\n\nYou can also set it to quit automatically when the above 2 apps are closed.\n\n## Update\n\nYou can use the in-app updater or download the latest version manually from the latest [release](https://github.com/intitni/CopilotForXcode/releases).\n\nAfter updating, please open Copilot for Xcode.app once and restart Xcode to allow the extension to reload.\n\nIf you find that some of the features are no longer working, please first try regranting permissions to the app.\n\n## Feature\n\n> Files in gitignore will not receive suggestion. Both chat and prompt to code feature will not have access to them unless you manually select code from them.\n\n### Suggestion\n\nThe app can provide real-time code suggestions based on the files you have opened. It's powered by GitHub Copilot and Codeium.\n\nThe feature provides two presentation modes:\n\n- Nearby Text Cursor: This mode shows suggestions based on the position of the text cursor.\n- Floating Widget: This mode shows suggestions next to the indicator widget.\n\nWhen using the \"Nearby Text Cursor\" mode, it is recommended to set the real-time suggestion debounce to 0.1.\n\nIf you're working on a company project and don't want the suggestion feature to be triggered, you can globally disable it and choose to enable it only for specific projects.\n\nWhenever your code is updated, the app will automatically fetch suggestions for you, you can cancel this by pressing **Escape**.\n\n\\*: If a file is already open before the helper app launches, you will need to switch to those files in order to send the open file notification.\n\n#### Commands\n\n- Get Suggestions: Get suggestions for the editing file at the current cursor position.\n- Next Suggestion: If there is more than one suggestion, switch to the next one.\n- Previous Suggestion: If there is more than one suggestion, switch to the previous one.\n- Accept Suggestion: Add the suggestion to the code.\n- Reject Suggestion: Remove the suggestion comments.\n\nCommands called by the app:\n\n- Prepare for Real-time Suggestions: Call only by Copilot for Xcode. When suggestions are successfully fetched, Copilot for Xcode will run this command to present the suggestions.\n- Prefetch Suggestions: Call only by Copilot for Xcode. In the background, Copilot for Xcode will occasionally run this command to prefetch real-time suggestions.\n\n### Chat\n\nThis feature is powered by ChatGPT. Please ensure that you have set up your OpenAI account before using it.\n\nThe chat knows the following information:\n\n- The selected code in the active editor.\n- The relative path of the file.\n- The error and warning labels in the active editor.\n- The text cursor location.\n\nThere are currently two tabs in the chat panel: one is available shared across Xcode, and the other is only available in the current file.\n\nYou can detach the chat panel by simply dragging it away. Once detached, the chat panel will remain visible even if Xcode is inactive. To re-attach it to the widget, click the message bubble button located next to the indicator widget.\n\n#### Commands\n\n- Open Chat: Open a chat tab.\n\n#### Keyboard Shortcuts\n\n| Shortcut | Description                                                                                         |\n| :------: | --------------------------------------------------------------------------------------------------- |\n|   `⌘W`   | Close the chat tab.                                                                                 |\n|   `⌘M`   | Minimize the chat, you can bring it back with any chat commands or by clicking the indicator widget. |\n|  `⇧↩︎`    | Add new line.                                                                                       |\n|  `⇧⌘]`   | Move to next tab                                                                                    |\n|  `⇧⌘[`   | Move to previous tab                                                                                |\n\n#### Chat Commands\n\nThe chat panel supports chat plugins that may not require an OpenAI API key. For example, if you need to use the `/shell` plugin, you just type\n\n```\n/run echo hello\n```\n\nIf you need to end a plugin, you can just type\n\n```\n/exit\n```\n\n|        Command         | Description                                                                                                                               |\n| :--------------------: | ----------------------------------------------------------------------------------------------------------------------------------------- |\n|         `/shell`         | Runs the command under the project root.                                                                                                  |\n|                        | Environment variable: <br>- `PROJECT_ROOT` to get the project root. <br>- `FILE_PATH` to get the editing file path.                       |\n|   `/shortcut(name)`    | Run a shortcut from the Shortcuts.app, and use the following message as the input.                                                        |\n|                        | If the message is empty, it will use the previous message as input. The output of the shortcut will be printed as a reply from the bot.   |\n\n### Prompt to Code\n\nRefactor existing code or write new code using natural language.\n\nThis feature is recommended when you need to update a specific piece of code. Some example use cases include:\n\n- Improving the code's readability.\n- Correcting bugs in the code.\n- Adding documentation to the code.\n- Breaking a large function into smaller functions.\n- Generating code with a specific template through custom commands.\n- Polishing and correcting grammar and spelling errors in the documentation.\n- Translating a localizable strings file.\n\n#### Commands\n\n- Write or Edit Code: Open a modification window, where you can use natural language to write or edit selected code.\n- Accept Modification: Accept the result of modification.\n\n### Custom Commands\n\nYou can create custom commands that run Chat and Modification with personalized prompts. These commands are easily accessible from both the Xcode menu bar and the context menu of the indicator widget. There are 3 types of custom commands:\n\n- Modification: Run Modification with the selected code, and update or write the code using the given prompt, if provided. You can provide additional information through the extra system prompt field.\n- Send Message: Open the chat window and immediately send a message, if provided. You can provide more information through the extra system prompt field.\n- Custom Chat: Open the chat window and immediately send a message, if provided. You can overwrite the entire system prompt through the system prompt field.\n- Single Round Dialog: Send a message to a temporary chat. Useful when you want to run a terminal command with `/run`.\n\nYou can use the following template arguments in custom commands:\n\n| Argument                      | Description                                    |\n| ----------------------------- | ---------------------------------------------- |\n| `{{selected_code}}`           | The currently selected code in the editor.     |\n| `{{active_editor_language}}`  | The programming language of the active editor. |\n| `{{active_editor_file_url}}`  | The URL of the active file in the editor.      |\n| `{{active_editor_file_name}}` | The name of the active file in the editor.     |\n| `{{clipboard}}`               | The content in clipboard.                      |\n\n## Limitations\n\n- The extension utilizes various tricks to monitor the state of Xcode. It may fail, it may be incorrect, especially when you have multiple Xcode windows running, and maybe even worse when they are in different displays. I am not sure about that though.\n\n## License\n\nPlease check [LICENSE](LICENSE) for details.\n\n"
  },
  {
    "path": "SandboxedClientTester/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SandboxedClientTester/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"16x16\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"32x32\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"128x128\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"256x256\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"1x\",\n      \"size\" : \"512x512\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"scale\" : \"2x\",\n      \"size\" : \"512x512\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SandboxedClientTester/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SandboxedClientTester/ContentView.swift",
    "content": "import SwiftUI\nimport Client\n\nstruct ContentView: View {\n    @State var text: String = \"Hello, world!\"\n    var body: some View {\n        VStack {\n            Button(action: {\n                Task {\n                    do {\n                        let service = try getService()\n                        let version = try await service.getXPCServiceVersion()\n                        text = \"Version: \\(version.version) Build: \\(version.build)\"\n                    } catch {\n                        text = error.localizedDescription\n                    }\n                }\n            }) {\n                Text(\"Test\")\n            }\n            Text(text)\n        }\n        .padding()\n    }\n}\n\n#Preview {\n    ContentView()\n}\n"
  },
  {
    "path": "SandboxedClientTester/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>BUNDLE_IDENTIFIER_BASE</key>\n\t<string>$(BUNDLE_IDENTIFIER_BASE)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SandboxedClientTester/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "SandboxedClientTester/SandboxedClientTester.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.files.user-selected.read-only</key>\n\t<true/>\n\t<key>com.apple.security.temporary-exception.mach-lookup.global-name</key>\n\t<array>\n\t\t<string>$(BUNDLE_IDENTIFIER_BASE).CommunicationBridge</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SandboxedClientTester/SandboxedClientTesterApp.swift",
    "content": "import SwiftUI\n\n@main\nstruct SandboxedClientTesterApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}\n"
  },
  {
    "path": "TestPlan.xctestplan",
    "content": "{\n  \"configurations\" : [\n    {\n      \"id\" : \"586480F5-DC84-425D-814F-7A5F569A1974\",\n      \"name\" : \"Configuration 1\",\n      \"options\" : {\n\n      }\n    }\n  ],\n  \"defaultOptions\" : {\n    \"environmentVariableEntries\" : [\n      {\n        \"key\" : \"IS_UNIT_TEST\",\n        \"value\" : \"YES\"\n      },\n      {\n        \"key\" : \"SUEnableAutomaticChecks\",\n        \"value\" : \"NO\"\n      }\n    ],\n    \"testTimeoutsEnabled\" : true\n  },\n  \"testTargets\" : [\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"SharedUIComponentsTests\",\n        \"name\" : \"SharedUIComponentsTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"ActiveDocumentChatContextCollectorTests\",\n        \"name\" : \"ActiveDocumentChatContextCollectorTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"CodeDiffTests\",\n        \"name\" : \"CodeDiffTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"ServiceUpdateMigrationTests\",\n        \"name\" : \"ServiceUpdateMigrationTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"ASTParserTests\",\n        \"name\" : \"ASTParserTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"SuggestionProviderTests\",\n        \"name\" : \"SuggestionProviderTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"PromptToCodeServiceTests\",\n        \"name\" : \"PromptToCodeServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"KeychainTests\",\n        \"name\" : \"KeychainTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"JoinJSONTests\",\n        \"name\" : \"JoinJSONTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"ServiceTests\",\n        \"name\" : \"ServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:OverlayWindow\",\n        \"identifier\" : \"OverlayWindowTests\",\n        \"name\" : \"OverlayWindowTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"SuggestionBasicTests\",\n        \"name\" : \"SuggestionBasicTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"LangChainTests\",\n        \"name\" : \"LangChainTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"GitHubCopilotServiceTests\",\n        \"name\" : \"GitHubCopilotServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"OpenAIServiceTests\",\n        \"name\" : \"OpenAIServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"SuggestionWidgetTests\",\n        \"name\" : \"SuggestionWidgetTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"KeyBindingManagerTests\",\n        \"name\" : \"KeyBindingManagerTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"FocusedCodeFinderTests\",\n        \"name\" : \"FocusedCodeFinderTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"WebSearchServiceTests\",\n        \"name\" : \"WebSearchServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"XcodeInspectorTests\",\n        \"name\" : \"XcodeInspectorTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Core\",\n        \"identifier\" : \"ChatServiceTests\",\n        \"name\" : \"ChatServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"SuggestionInjectorTests\",\n        \"name\" : \"SuggestionInjectorTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:Tool\",\n        \"identifier\" : \"TokenEncoderTests\",\n        \"name\" : \"TokenEncoderTests\"\n      }\n    }\n  ],\n  \"version\" : 1\n}\n"
  },
  {
    "path": "Tool/.gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/config/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n"
  },
  {
    "path": "Tool/.swiftpm/xcode/xcshareddata/xcschemes/SuggestionModel.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1530\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SuggestionModel\"\n               BuildableName = \"SuggestionModel\"\n               BlueprintName = \"SuggestionModel\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SuggestionModel\"\n            BuildableName = \"SuggestionModel\"\n            BlueprintName = \"SuggestionModel\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Tool/Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"codablewrappers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/GottaGetSwifty/CodableWrappers\",\n      \"state\" : {\n        \"revision\" : \"4eb46a4c656333e8514db8aad204445741de7d40\",\n        \"version\" : \"2.0.7\"\n      }\n    },\n    {\n      \"identity\" : \"combine-schedulers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/combine-schedulers\",\n      \"state\" : {\n        \"revision\" : \"ec62f32d21584214a4b27c8cee2b2ad70ab2c38a\",\n        \"version\" : \"0.11.0\"\n      }\n    },\n    {\n      \"identity\" : \"fseventswrapper\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Frizlab/FSEventsWrapper\",\n      \"state\" : {\n        \"revision\" : \"e0c59a2ce2775e5f6642da6d19207445f10112d0\",\n        \"version\" : \"1.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"glob\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/Bouke/Glob\",\n      \"state\" : {\n        \"revision\" : \"deda6e163d2ff2a8d7e138e2c3326dbd71157faf\",\n        \"version\" : \"1.0.5\"\n      }\n    },\n    {\n      \"identity\" : \"highlightr\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Highlightr\",\n      \"state\" : {\n        \"branch\" : \"bump-highlight-js-version\",\n        \"revision\" : \"4ffbb1b0b721378263297cafea6f2838044eb1eb\"\n      }\n    },\n    {\n      \"identity\" : \"jsonrpc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/JSONRPC\",\n      \"state\" : {\n        \"revision\" : \"5da978702aece6ba5c7879b0d253c180d61e4ef3\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"languageclient\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageClient\",\n      \"state\" : {\n        \"revision\" : \"f0198ee0a102d266078f7d9c28f086f2989f988a\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"languageserverprotocol\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/LanguageServerProtocol\",\n      \"state\" : {\n        \"revision\" : \"6e97f943dc024307c5524a80bd33cdbd1cc621de\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"operationplus\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/OperationPlus\",\n      \"state\" : {\n        \"revision\" : \"1340f95dce3e93d742497d88db18f8676f4badf4\",\n        \"version\" : \"1.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"processenv\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/ProcessEnv\",\n      \"state\" : {\n        \"revision\" : \"29487b6581bb785c372c611c943541ef4309d051\",\n        \"version\" : \"0.3.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-async-algorithms\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-async-algorithms\",\n      \"state\" : {\n        \"revision\" : \"9cfed92b026c524674ed869a4ff2dcfdeedf8a2a\",\n        \"version\" : \"0.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-case-paths\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-case-paths\",\n      \"state\" : {\n        \"revision\" : \"fc45e7b2cfece9dd80b5a45e6469ffe67fe67984\",\n        \"version\" : \"0.14.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-clocks\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-clocks\",\n      \"state\" : {\n        \"revision\" : \"0fbaebfc013715dab44d715a4d350ba37f297e4d\",\n        \"version\" : \"0.4.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections.git\",\n      \"state\" : {\n        \"revision\" : \"937e904258d22af6e447a0b72c0bc67583ef64a2\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-composable-architecture\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-composable-architecture\",\n      \"state\" : {\n        \"revision\" : \"9f4202ab5b8422aa90f0ed983bf7652c3af7abf0\",\n        \"version\" : \"0.59.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-concurrency-extras\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-concurrency-extras\",\n      \"state\" : {\n        \"revision\" : \"479750bd98fac2e813fffcf2af0728b5b0085795\",\n        \"version\" : \"0.1.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-custom-dump\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-custom-dump\",\n      \"state\" : {\n        \"revision\" : \"4a87bb75be70c983a9548597e8783236feb3401e\",\n        \"version\" : \"0.11.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-dependencies\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-dependencies\",\n      \"state\" : {\n        \"revision\" : \"16fd42ae04c6e7f74a6a86395d04722c641cccee\",\n        \"version\" : \"0.6.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-identified-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-identified-collections\",\n      \"state\" : {\n        \"revision\" : \"d01446a78fb768adc9a78cbb6df07767c8ccfc29\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-parsing\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-parsing\",\n      \"state\" : {\n        \"revision\" : \"27c941bbd22a4bbc53005a15a0440443fd892f70\",\n        \"version\" : \"0.12.1\"\n      }\n    },\n    {\n      \"identity\" : \"swift-syntax\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-syntax.git\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"e149b01cfd3e96240e102729697e2095c19157ef\"\n      }\n    },\n    {\n      \"identity\" : \"swiftsoup\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/scinfu/SwiftSoup.git\",\n      \"state\" : {\n        \"revision\" : \"8b6cf29eead8841a1fa7822481cb3af4ddaadba6\",\n        \"version\" : \"2.6.1\"\n      }\n    },\n    {\n      \"identity\" : \"swifttreesitter\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ChimeHQ/SwiftTreeSitter\",\n      \"state\" : {\n        \"revision\" : \"a9b1335d5151b62b11f07599bd07d07dc5965de3\",\n        \"version\" : \"0.7.2\"\n      }\n    },\n    {\n      \"identity\" : \"swiftui-navigation\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swiftui-navigation\",\n      \"state\" : {\n        \"revision\" : \"2aa885e719087ee19df251c08a5980ad3e787f12\",\n        \"version\" : \"0.8.0\"\n      }\n    },\n    {\n      \"identity\" : \"tiktoken\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/intitni/Tiktoken\",\n      \"state\" : {\n        \"branch\" : \"main\",\n        \"revision\" : \"6a2ac324c6daec167ca95268d5a487e6de6a1cea\"\n      }\n    },\n    {\n      \"identity\" : \"tree-sitter-objc\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/lukepistrol/tree-sitter-objc\",\n      \"state\" : {\n        \"branch\" : \"feature/spm\",\n        \"revision\" : \"1b54ef0b5efddddf393b45e173788499cc572048\"\n      }\n    },\n    {\n      \"identity\" : \"tree-sitter-swift\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/alex-pinkus/tree-sitter-swift\",\n      \"state\" : {\n        \"branch\" : \"with-generated-files\",\n        \"revision\" : \"eda05af7ac41adb4eb19c346883c0fa32fe3bdd8\"\n      }\n    },\n    {\n      \"identity\" : \"usearch\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/unum-cloud/usearch\",\n      \"state\" : {\n        \"revision\" : \"33c53288b44ccb55de77776820676132a6e4c42a\",\n        \"version\" : \"0.23.0\"\n      }\n    },\n    {\n      \"identity\" : \"xctest-dynamic-overlay\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/xctest-dynamic-overlay\",\n      \"state\" : {\n        \"revision\" : \"50843cbb8551db836adec2290bb4bc6bac5c1865\",\n        \"version\" : \"0.9.0\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Tool/Package.swift",
    "content": "// swift-tools-version: 5.7\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"Tool\",\n    platforms: [.macOS(.v12)],\n    products: [\n        .library(name: \"XPCShared\", targets: [\"XPCShared\"]),\n        .library(name: \"Terminal\", targets: [\"Terminal\"]),\n        .library(name: \"LangChain\", targets: [\"LangChain\"]),\n        .library(name: \"ExternalServices\", targets: [\"WebSearchService\"]),\n        .library(name: \"Preferences\", targets: [\"Preferences\", \"Configs\"]),\n        .library(name: \"Logger\", targets: [\"Logger\"]),\n        .library(name: \"OpenAIService\", targets: [\"OpenAIService\"]),\n        .library(name: \"ChatTab\", targets: [\"ChatTab\"]),\n        .library(name: \"FileSystem\", targets: [\"FileSystem\"]),\n        .library(\n            name: \"ChatContextCollector\",\n            targets: [\"ChatContextCollector\", \"ActiveDocumentChatContextCollector\"]\n        ),\n        .library(name: \"SuggestionBasic\", targets: [\"SuggestionBasic\", \"SuggestionInjector\"]),\n        .library(name: \"PromptToCode\", targets: [\"ModificationBasic\", \"PromptToCodeCustomization\"]),\n        .library(name: \"Chat\", targets: [\"ChatBasic\"]),\n        .library(name: \"ASTParser\", targets: [\"ASTParser\"]),\n        .library(name: \"FocusedCodeFinder\", targets: [\"FocusedCodeFinder\"]),\n        .library(name: \"Toast\", targets: [\"Toast\"]),\n        .library(name: \"Keychain\", targets: [\"Keychain\"]),\n        .library(name: \"SharedUIComponents\", targets: [\"SharedUIComponents\"]),\n        .library(name: \"UserDefaultsObserver\", targets: [\"UserDefaultsObserver\"]),\n        .library(name: \"Workspace\", targets: [\"Workspace\"]),\n        .library(name: \"WorkspaceSuggestionService\", targets: [\"WorkspaceSuggestionService\"]),\n        .library(\n            name: \"SuggestionProvider\",\n            targets: [\"SuggestionProvider\", \"GitHubCopilotService\", \"CodeiumService\"]\n        ),\n        .library(\n            name: \"AppMonitoring\",\n            targets: [\n                \"XcodeInspector\",\n                \"ActiveApplicationMonitor\",\n                \"AXExtension\",\n                \"AXNotificationStream\",\n                \"AppActivator\",\n            ]\n        ),\n        .library(name: \"GitIgnoreCheck\", targets: [\"GitIgnoreCheck\"]),\n        .library(name: \"DebounceFunction\", targets: [\"DebounceFunction\"]),\n        .library(name: \"AsyncPassthroughSubject\", targets: [\"AsyncPassthroughSubject\"]),\n        .library(name: \"CustomAsyncAlgorithms\", targets: [\"CustomAsyncAlgorithms\"]),\n        .library(name: \"CommandHandler\", targets: [\"CommandHandler\"]),\n        .library(name: \"CodeDiff\", targets: [\"CodeDiff\"]),\n        .library(name: \"BuiltinExtension\", targets: [\"BuiltinExtension\"]),\n        .library(name: \"WebSearchService\", targets: [\"WebSearchService\"]),\n        .library(name: \"WebScrapper\", targets: [\"WebScrapper\"]),\n        .library(\n            name: \"CustomCommandTemplateProcessor\",\n            targets: [\"CustomCommandTemplateProcessor\"]\n        ),\n    ],\n    dependencies: [\n        // A fork of https://github.com/aespinilla/Tiktoken to allow loading from local files.\n        .package(url: \"https://github.com/intitni/Tiktoken\", branch: \"main\"),\n        // TODO: Update LanguageClient some day.\n        .package(url: \"https://github.com/ChimeHQ/LanguageClient\", exact: \"0.3.1\"),\n        .package(url: \"https://github.com/ChimeHQ/LanguageServerProtocol\", exact: \"0.8.0\"),\n        .package(url: \"https://github.com/apple/swift-async-algorithms\", from: \"1.0.0\"),\n        .package(url: \"https://github.com/pointfreeco/swift-parsing\", from: \"0.12.1\"),\n        .package(url: \"https://github.com/ChimeHQ/JSONRPC\", exact: \"0.6.0\"),\n        .package(url: \"https://github.com/scinfu/SwiftSoup.git\", from: \"2.6.0\"),\n        .package(url: \"https://github.com/unum-cloud/usearch\", from: \"0.19.1\"),\n        .package(url: \"https://github.com/intitni/Highlightr\", branch: \"master\"),\n        .package(\n            url: \"https://github.com/pointfreeco/swift-composable-architecture\",\n            exact: \"1.16.1\"\n        ),\n        .package(url: \"https://github.com/apple/swift-syntax.git\", from: \"600.0.0\"),\n        .package(url: \"https://github.com/GottaGetSwifty/CodableWrappers\", from: \"2.0.7\"),\n        // A fork of https://github.com/google/generative-ai-swift to support setting base url.\n        .package(\n            url: \"https://github.com/intitni/generative-ai-swift\",\n            branch: \"support-setting-base-url\"\n        ),\n        .package(\n            url: \"https://github.com/intitni/CopilotForXcodeKit\",\n            branch: \"feature/custom-chat-tab\"\n        ),\n\n        // TreeSitter\n        .package(url: \"https://github.com/intitni/SwiftTreeSitter.git\", branch: \"main\"),\n        .package(url: \"https://github.com/lukepistrol/tree-sitter-objc\", branch: \"feature/spm\"),\n    ],\n    targets: [\n        // MARK: - Helpers\n\n        .target(name: \"XPCShared\", dependencies: [\"SuggestionBasic\", \"Logger\"]),\n\n        .target(name: \"Configs\"),\n\n        .target(name: \"Preferences\", dependencies: [\"Configs\", \"AIModel\"]),\n\n        .target(name: \"Terminal\"),\n\n        .target(name: \"Logger\"),\n\n        .target(name: \"FileSystem\"),\n\n        .target(name: \"ObjectiveCExceptionHandling\"),\n\n        .target(name: \"JoinJSON\"),\n        .testTarget(name: \"JoinJSONTests\", dependencies: [\"JoinJSON\"]),\n\n        .target(name: \"CodeDiff\", dependencies: [\"SuggestionBasic\"]),\n        .testTarget(name: \"CodeDiffTests\", dependencies: [\"CodeDiff\"]),\n\n        .target(\n            name: \"CustomAsyncAlgorithms\",\n            dependencies: [\n                .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n            ]\n        ),\n\n        .target(\n            name: \"Keychain\",\n            dependencies: [\"Configs\", \"Preferences\"]\n        ),\n\n        .testTarget(\n            name: \"KeychainTests\",\n            dependencies: [\"Keychain\"]\n        ),\n\n        .target(\n            name: \"Toast\",\n            dependencies: [.product(\n                name: \"ComposableArchitecture\",\n                package: \"swift-composable-architecture\"\n            )]\n        ),\n\n        .target(\n            name: \"CustomCommandTemplateProcessor\",\n            dependencies: [\n                \"XcodeInspector\",\n                \"SuggestionBasic\",\n            ]\n        ),\n\n        .target(name: \"DebounceFunction\"),\n\n        .target(\n            name: \"AppActivator\",\n            dependencies: [\n                \"XcodeInspector\",\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n\n        .target(name: \"ActiveApplicationMonitor\"),\n\n        .target(name: \"USearchIndex\", dependencies: [\n            \"ObjectiveCExceptionHandling\",\n            .product(name: \"USearch\", package: \"usearch\"),\n        ]),\n\n        .target(\n            name: \"TokenEncoder\",\n            dependencies: [\n                .product(name: \"Tiktoken\", package: \"Tiktoken\"),\n                .product(name: \"GoogleGenerativeAI\", package: \"generative-ai-swift\"),\n            ],\n            resources: [\n                .copy(\"Resources/cl100k_base.tiktoken\"),\n            ]\n        ),\n        .testTarget(\n            name: \"TokenEncoderTests\",\n            dependencies: [\"TokenEncoder\"]\n        ),\n\n        .target(\n            name: \"SuggestionBasic\",\n            dependencies: [\n                \"LanguageClient\",\n                .product(name: \"Parsing\", package: \"swift-parsing\"),\n                .product(name: \"CodableWrappers\", package: \"CodableWrappers\"),\n            ]\n        ),\n\n        .target(\n            name: \"SuggestionInjector\",\n            dependencies: [\"SuggestionBasic\"]\n        ),\n        .testTarget(\n            name: \"SuggestionInjectorTests\",\n            dependencies: [\"SuggestionInjector\"]\n        ),\n\n        .target(\n            name: \"AIModel\",\n            dependencies: [\n                .product(name: \"CodableWrappers\", package: \"CodableWrappers\"),\n            ]\n        ),\n\n        .testTarget(\n            name: \"SuggestionBasicTests\",\n            dependencies: [\"SuggestionBasic\"]\n        ),\n\n        .target(\n            name: \"ChatBasic\",\n            dependencies: [\n                \"AIModel\",\n                \"Preferences\",\n                \"Keychain\",\n                .product(name: \"CodableWrappers\", package: \"CodableWrappers\"),\n            ]\n        ),\n\n        .target(\n            name: \"ModificationBasic\",\n            dependencies: [\n                \"SuggestionBasic\",\n                \"ChatBasic\",\n                .product(name: \"CodableWrappers\", package: \"CodableWrappers\"),\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n        .testTarget(name: \"ModificationBasicTests\", dependencies: [\"ModificationBasic\"]),\n\n        .target(\n            name: \"PromptToCodeCustomization\",\n            dependencies: [\n                \"ModificationBasic\",\n                \"SuggestionBasic\",\n                \"ChatBasic\",\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n\n        .target(\n            name: \"AXExtension\",\n            dependencies: [\"Logger\"]\n        ),\n\n        .target(\n            name: \"AXNotificationStream\",\n            dependencies: [\n                \"Preferences\",\n                \"Logger\",\n            ]\n        ),\n\n        .target(\n            name: \"XcodeInspector\",\n            dependencies: [\n                \"AXExtension\",\n                \"SuggestionBasic\",\n                \"AXNotificationStream\",\n                \"Logger\",\n                \"Toast\",\n                \"Preferences\",\n                \"AsyncPassthroughSubject\",\n                .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n            ]\n        ),\n\n        .testTarget(name: \"XcodeInspectorTests\", dependencies: [\"XcodeInspector\"]),\n\n        .target(name: \"UserDefaultsObserver\"),\n\n        .target(name: \"AsyncPassthroughSubject\"),\n\n        .target(\n            name: \"BuiltinExtension\",\n            dependencies: [\n                \"SuggestionBasic\",\n                \"SuggestionProvider\",\n                \"ChatBasic\",\n                \"Workspace\",\n                \"ChatTab\",\n                \"AIModel\",\n                .product(name: \"CopilotForXcodeKit\", package: \"CopilotForXcodeKit\"),\n            ]\n        ),\n\n        .target(\n            name: \"SharedUIComponents\",\n            dependencies: [\n                \"Highlightr\",\n                \"Preferences\",\n                \"SuggestionBasic\",\n                \"DebounceFunction\",\n                \"CodeDiff\",\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n        .testTarget(name: \"SharedUIComponentsTests\", dependencies: [\"SharedUIComponents\"]),\n\n        .target(name: \"ASTParser\", dependencies: [\n            \"SuggestionBasic\",\n            .product(name: \"SwiftTreeSitter\", package: \"SwiftTreeSitter\"),\n            .product(name: \"TreeSitterObjC\", package: \"tree-sitter-objc\"),\n        ]),\n\n        .testTarget(name: \"ASTParserTests\", dependencies: [\"ASTParser\"]),\n\n        .target(\n            name: \"Workspace\",\n            dependencies: [\n                \"GitIgnoreCheck\",\n                \"UserDefaultsObserver\",\n                \"SuggestionBasic\",\n                \"Logger\",\n                \"Preferences\",\n                \"XcodeInspector\",\n            ]\n        ),\n\n        .target(\n            name: \"WorkspaceSuggestionService\",\n            dependencies: [\n                \"Workspace\",\n                \"SuggestionProvider\",\n                \"XPCShared\",\n                \"BuiltinExtension\",\n                \"SuggestionInjector\",\n            ]\n        ),\n\n        .target(\n            name: \"FocusedCodeFinder\",\n            dependencies: [\n                \"Preferences\",\n                \"ASTParser\",\n                \"SuggestionBasic\",\n                .product(name: \"SwiftSyntax\", package: \"swift-syntax\"),\n                .product(name: \"SwiftParser\", package: \"swift-syntax\"),\n            ]\n        ),\n        .testTarget(\n            name: \"FocusedCodeFinderTests\",\n            dependencies: [\"FocusedCodeFinder\"]\n        ),\n\n        .target(\n            name: \"GitIgnoreCheck\",\n            dependencies: [\n                \"Terminal\",\n                \"Preferences\",\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n\n        .target(\n            name: \"CommandHandler\",\n            dependencies: [\n                \"XcodeInspector\",\n                \"Preferences\",\n                \"ChatBasic\",\n                \"ModificationBasic\",\n                .product(name: \"ComposableArchitecture\", package: \"swift-composable-architecture\"),\n            ]\n        ),\n\n        // MARK: - Services\n\n        .target(\n            name: \"LangChain\",\n            dependencies: [\n                \"OpenAIService\",\n                \"ObjectiveCExceptionHandling\",\n                \"USearchIndex\",\n                \"ChatBasic\",\n                .product(name: \"JSONRPC\", package: \"JSONRPC\"),\n                .product(name: \"Parsing\", package: \"swift-parsing\"),\n                .product(name: \"SwiftSoup\", package: \"SwiftSoup\"),\n            ]\n        ),\n\n        .target(name: \"WebScrapper\", dependencies: [\n            .product(name: \"SwiftSoup\", package: \"SwiftSoup\"),\n        ]),\n\n        .target(name: \"WebSearchService\", dependencies: [\"Preferences\", \"WebScrapper\", \"Keychain\"]),\n        .testTarget(name: \"WebSearchServiceTests\", dependencies: [\"WebSearchService\"]),\n\n        .target(name: \"SuggestionProvider\", dependencies: [\n            \"SuggestionBasic\",\n            \"UserDefaultsObserver\",\n            \"Preferences\",\n            \"Logger\",\n            .product(name: \"CopilotForXcodeKit\", package: \"CopilotForXcodeKit\"),\n        ]),\n\n        .testTarget(name: \"SuggestionProviderTests\", dependencies: [\"SuggestionProvider\"]),\n\n        .target(\n            name: \"RAGChatAgent\",\n            dependencies: [\n                \"ChatBasic\",\n                \"ChatContextCollector\",\n                \"OpenAIService\",\n                \"Preferences\",\n            ]\n        ),\n\n        // MARK: - GitHub Copilot\n\n        .target(\n            name: \"GitHubCopilotService\",\n            dependencies: [\n                \"LanguageClient\",\n                \"SuggestionBasic\",\n                \"ChatBasic\",\n                \"Logger\",\n                \"Preferences\",\n                \"Terminal\",\n                \"BuiltinExtension\",\n                \"Toast\",\n                \"SuggestionProvider\",\n                .product(name: \"JSONRPC\", package: \"JSONRPC\"),\n                .product(name: \"LanguageServerProtocol\", package: \"LanguageServerProtocol\"),\n                .product(name: \"CopilotForXcodeKit\", package: \"CopilotForXcodeKit\"),\n            ],\n            resources: [.copy(\"Resources/load-self-signed-cert-1.34.0.js\")]\n        ),\n        .testTarget(\n            name: \"GitHubCopilotServiceTests\",\n            dependencies: [\"GitHubCopilotService\"]\n        ),\n\n        // MARK: - Codeium\n\n        .target(\n            name: \"CodeiumService\",\n            dependencies: [\n                \"LanguageClient\",\n                \"Keychain\",\n                \"SuggestionBasic\",\n                \"Preferences\",\n                \"Terminal\",\n                \"XcodeInspector\",\n                \"BuiltinExtension\",\n                \"ChatTab\",\n                \"SharedUIComponents\",\n                .product(name: \"JSONRPC\", package: \"JSONRPC\"),\n                .product(name: \"CopilotForXcodeKit\", package: \"CopilotForXcodeKit\"),\n            ]\n        ),\n\n        // MARK: - OpenAI\n\n        .target(\n            name: \"OpenAIService\",\n            dependencies: [\n                \"Logger\",\n                \"Preferences\",\n                \"TokenEncoder\",\n                \"Keychain\",\n                \"BuiltinExtension\",\n                \"ChatBasic\",\n                \"GitHubCopilotService\",\n                \"JoinJSON\",\n                .product(name: \"JSONRPC\", package: \"JSONRPC\"),\n                .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n                .product(name: \"GoogleGenerativeAI\", package: \"generative-ai-swift\"),\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n        .testTarget(\n            name: \"OpenAIServiceTests\",\n            dependencies: [\n                \"OpenAIService\",\n                \"ChatBasic\",\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n\n        // MARK: - UI\n\n        .target(\n            name: \"ChatTab\",\n            dependencies: [\n                \"Preferences\",\n                \"Configs\",\n                \"AIModel\",\n                .product(name: \"CodableWrappers\", package: \"CodableWrappers\"),\n                .product(\n                    name: \"ComposableArchitecture\",\n                    package: \"swift-composable-architecture\"\n                ),\n            ]\n        ),\n\n        // MARK: - Chat Context Collector\n\n        .target(\n            name: \"ChatContextCollector\",\n            dependencies: [\n                \"SuggestionBasic\",\n                \"ChatBasic\",\n                \"OpenAIService\",\n            ]\n        ),\n\n        .target(\n            name: \"ActiveDocumentChatContextCollector\",\n            dependencies: [\n                \"ASTParser\",\n                \"ChatContextCollector\",\n                \"OpenAIService\",\n                \"Preferences\",\n                \"FocusedCodeFinder\",\n                \"XcodeInspector\",\n                \"GitIgnoreCheck\",\n            ],\n            path: \"Sources/ChatContextCollectors/ActiveDocumentChatContextCollector\"\n        ),\n\n        .testTarget(\n            name: \"ActiveDocumentChatContextCollectorTests\",\n            dependencies: [\"ActiveDocumentChatContextCollector\"]\n        ),\n\n        // MARK: - Tests\n\n        .testTarget(\n            name: \"LangChainTests\",\n            dependencies: [\"LangChain\"]\n        ),\n    ]\n)\n\n"
  },
  {
    "path": "Tool/README.md",
    "content": "# Tool\n\nA description of this package.\n"
  },
  {
    "path": "Tool/Sources/AIModel/ChatModel.swift",
    "content": "import CodableWrappers\nimport Foundation\n\npublic struct ChatModel: Codable, Equatable, Identifiable {\n    public var id: String\n    public var name: String\n    @FallbackDecoding<EmptyChatModelFormat>\n    public var format: Format\n    @FallbackDecoding<EmptyChatModelInfo>\n    public var info: Info\n\n    public init(id: String, name: String, format: Format, info: Info) {\n        self.id = id\n        self.name = name\n        self.format = format\n        self.info = info\n    }\n\n    public enum Format: String, Codable, Equatable, CaseIterable {\n        case openAI\n        case azureOpenAI\n        case openAICompatible\n        case googleAI\n        case ollama\n        case claude\n        case gitHubCopilot\n    }\n\n    public struct Info: Codable, Equatable {\n        public struct OllamaInfo: Codable, Equatable {\n            @FallbackDecoding<EmptyString>\n            public var keepAlive: String\n\n            public init(keepAlive: String = \"\") {\n                self.keepAlive = keepAlive\n            }\n        }\n\n        public struct OpenAIInfo: Codable, Equatable {\n            @FallbackDecoding<EmptyString>\n            public var organizationID: String\n            @FallbackDecoding<EmptyString>\n            public var projectID: String\n\n            public init(organizationID: String = \"\", projectID: String = \"\") {\n                self.organizationID = organizationID\n                self.projectID = projectID\n            }\n        }\n\n        public struct OpenAICompatibleInfo: Codable, Equatable {\n            @FallbackDecoding<EmptyBool>\n            public var enforceMessageOrder: Bool\n            @FallbackDecoding<EmptyTrue>\n            public var supportsMultipartMessageContent: Bool\n            @FallbackDecoding<EmptyBool>\n            public var requiresBeginWithUserMessage: Bool\n\n            public init(\n                enforceMessageOrder: Bool = false,\n                supportsMultipartMessageContent: Bool = true,\n                requiresBeginWithUserMessage: Bool = false\n            ) {\n                self.enforceMessageOrder = enforceMessageOrder\n                self.supportsMultipartMessageContent = supportsMultipartMessageContent\n                self.requiresBeginWithUserMessage = requiresBeginWithUserMessage\n            }\n        }\n\n        public struct GoogleGenerativeAIInfo: Codable, Equatable {\n            @FallbackDecoding<EmptyString>\n            public var apiVersion: String\n\n            public init(apiVersion: String = \"\") {\n                self.apiVersion = apiVersion\n            }\n        }\n\n        public struct CustomHeaderInfo: Codable, Equatable {\n            public struct HeaderField: Codable, Equatable {\n                public var key: String\n                public var value: String\n\n                public init(key: String, value: String) {\n                    self.key = key\n                    self.value = value\n                }\n            }\n\n            @FallbackDecoding<EmptyArray>\n            public var headers: [HeaderField]\n\n            public init(headers: [HeaderField] = []) {\n                self.headers = headers\n            }\n        }\n        \n        public struct CustomBodyInfo: Codable, Equatable {\n            public var jsonBody: String\n            \n            public init(jsonBody: String = \"\") {\n                self.jsonBody = jsonBody\n            }\n        }\n\n        @FallbackDecoding<EmptyString>\n        public var apiKeyName: String\n        @FallbackDecoding<EmptyString>\n        public var baseURL: String\n        @FallbackDecoding<EmptyBool>\n        public var isFullURL: Bool\n        @FallbackDecoding<EmptyInt>\n        public var maxTokens: Int\n        @FallbackDecoding<EmptyBool>\n        public var supportsFunctionCalling: Bool\n        @FallbackDecoding<EmptyBool>\n        public var supportsImage: Bool\n        @FallbackDecoding<EmptyBool>\n        public var supportsAudio: Bool\n        @FallbackDecoding<EmptyString>\n        public var modelName: String\n\n        @FallbackDecoding<EmptyChatModelOpenAIInfo>\n        public var openAIInfo: OpenAIInfo\n        @FallbackDecoding<EmptyChatModelOllamaInfo>\n        public var ollamaInfo: OllamaInfo\n        @FallbackDecoding<EmptyChatModelGoogleGenerativeAIInfo>\n        public var googleGenerativeAIInfo: GoogleGenerativeAIInfo\n        @FallbackDecoding<EmptyChatModelOpenAICompatibleInfo>\n        public var openAICompatibleInfo: OpenAICompatibleInfo\n        @FallbackDecoding<EmptyChatModelCustomHeaderInfo>\n        public var customHeaderInfo: CustomHeaderInfo\n        @FallbackDecoding<EmptyChatModelCustomBodyInfo>\n        public var customBodyInfo: CustomBodyInfo\n\n        public init(\n            apiKeyName: String = \"\",\n            baseURL: String = \"\",\n            isFullURL: Bool = false,\n            maxTokens: Int = 4000,\n            supportsFunctionCalling: Bool = true,\n            supportsImage: Bool = false,\n            supportsAudio: Bool = false,\n            modelName: String = \"\",\n            openAIInfo: OpenAIInfo = OpenAIInfo(),\n            ollamaInfo: OllamaInfo = OllamaInfo(),\n            googleGenerativeAIInfo: GoogleGenerativeAIInfo = GoogleGenerativeAIInfo(),\n            openAICompatibleInfo: OpenAICompatibleInfo = OpenAICompatibleInfo(),\n            customHeaderInfo: CustomHeaderInfo = CustomHeaderInfo(),\n            customBodyInfo: CustomBodyInfo = CustomBodyInfo()\n        ) {\n            self.apiKeyName = apiKeyName\n            self.baseURL = baseURL\n            self.isFullURL = isFullURL\n            self.maxTokens = maxTokens\n            self.supportsFunctionCalling = supportsFunctionCalling\n            self.supportsImage = supportsImage\n            self.supportsAudio = supportsAudio\n            self.modelName = modelName\n            self.openAIInfo = openAIInfo\n            self.ollamaInfo = ollamaInfo\n            self.googleGenerativeAIInfo = googleGenerativeAIInfo\n            self.openAICompatibleInfo = openAICompatibleInfo\n            self.customHeaderInfo = customHeaderInfo\n            self.customBodyInfo = customBodyInfo\n        }\n    }\n\n    public var endpoint: String {\n        switch format {\n        case .openAI:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://api.openai.com/v1/chat/completions\" }\n            return \"\\(baseURL)/v1/chat/completions\"\n        case .openAICompatible:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://api.openai.com/v1/chat/completions\" }\n            if info.isFullURL { return baseURL }\n            return \"\\(baseURL)/v1/chat/completions\"\n        case .azureOpenAI:\n            let baseURL = info.baseURL\n            let deployment = info.modelName\n            let version = \"2024-02-15-preview\"\n            if baseURL.isEmpty { return \"\" }\n            return \"\\(baseURL)/openai/deployments/\\(deployment)/chat/completions?api-version=\\(version)\"\n        case .googleAI:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://generativelanguage.googleapis.com\" }\n            return \"\\(baseURL)\"\n        case .ollama:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"http://localhost:11434/api/chat\" }\n            return \"\\(baseURL)/api/chat\"\n        case .claude:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://api.anthropic.com/v1/messages\" }\n            return \"\\(baseURL)/v1/messages\"\n        case .gitHubCopilot:\n            return \"https://api.githubcopilot.com/chat/completions\"\n        }\n    }\n}\n\npublic struct EmptyChatModelInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info { .init() }\n}\n\npublic struct EmptyChatModelFormat: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Format { .openAI }\n}\n\npublic struct EmptyChatModelOllamaInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.OllamaInfo { .init() }\n}\n\npublic struct EmptyChatModelOpenAIInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.OpenAIInfo { .init() }\n}\n\npublic struct EmptyChatModelGoogleGenerativeAIInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.GoogleGenerativeAIInfo { .init() }\n}\n\npublic struct EmptyChatModelOpenAICompatibleInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.OpenAICompatibleInfo { .init() }\n}\n\npublic struct EmptyChatModelCustomHeaderInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.CustomHeaderInfo { .init() }\n}\n\npublic struct EmptyChatModelCustomBodyInfo: FallbackValueProvider {\n    public static var defaultValue: ChatModel.Info.CustomBodyInfo { .init() }\n}\n\npublic struct EmptyTrue: FallbackValueProvider {\n    public static var defaultValue: Bool { true }\n}\n"
  },
  {
    "path": "Tool/Sources/AIModel/EmbeddingModel.swift",
    "content": "import CodableWrappers\nimport Foundation\n\npublic struct EmbeddingModel: Codable, Equatable, Identifiable {\n    public var id: String\n    public var name: String\n    @FallbackDecoding<EmptyEmbeddingModelFormat>\n    public var format: Format\n    @FallbackDecoding<EmptyEmbeddingModelInfo>\n    public var info: Info\n\n    public init(id: String, name: String, format: Format, info: Info) {\n        self.id = id\n        self.name = name\n        self.format = format\n        self.info = info\n    }\n\n    public enum Format: String, Codable, Equatable, CaseIterable {\n        case openAI\n        case azureOpenAI\n        case openAICompatible\n        case ollama\n        case gitHubCopilot\n    }\n\n    public struct Info: Codable, Equatable {\n        public typealias OllamaInfo = ChatModel.Info.OllamaInfo\n        public typealias OpenAIInfo = ChatModel.Info.OpenAIInfo\n        public typealias CustomHeaderInfo = ChatModel.Info.CustomHeaderInfo\n\n        @FallbackDecoding<EmptyString>\n        public var apiKeyName: String\n        @FallbackDecoding<EmptyString>\n        public var baseURL: String\n        @FallbackDecoding<EmptyBool>\n        public var isFullURL: Bool\n        @FallbackDecoding<EmptyInt>\n        public var maxTokens: Int\n        @FallbackDecoding<EmptyInt>\n        public var dimensions: Int\n        @FallbackDecoding<EmptyString>\n        public var modelName: String\n\n        @FallbackDecoding<EmptyChatModelOpenAIInfo>\n        public var openAIInfo: OpenAIInfo\n        @FallbackDecoding<EmptyChatModelOllamaInfo>\n        public var ollamaInfo: OllamaInfo\n        @FallbackDecoding<EmptyChatModelCustomHeaderInfo>\n        public var customHeaderInfo: CustomHeaderInfo\n\n        public init(\n            apiKeyName: String = \"\",\n            baseURL: String = \"\",\n            isFullURL: Bool = false,\n            maxTokens: Int = 8192,\n            dimensions: Int = 1536,\n            modelName: String = \"\",\n            openAIInfo: OpenAIInfo = OpenAIInfo(),\n            ollamaInfo: OllamaInfo = OllamaInfo(),\n            customHeaderInfo: CustomHeaderInfo = CustomHeaderInfo()\n        ) {\n            self.apiKeyName = apiKeyName\n            self.baseURL = baseURL\n            self.isFullURL = isFullURL\n            self.maxTokens = maxTokens\n            self.dimensions = dimensions\n            self.modelName = modelName\n            self.openAIInfo = openAIInfo\n            self.ollamaInfo = ollamaInfo\n            self.customHeaderInfo = customHeaderInfo\n        }\n    }\n\n    public var endpoint: String {\n        switch format {\n        case .openAI:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://api.openai.com/v1/embeddings\" }\n            return \"\\(baseURL)/v1/embeddings\"\n        case .openAICompatible:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"https://api.openai.com/v1/embeddings\" }\n            if info.isFullURL { return baseURL }\n            return \"\\(baseURL)/v1/embeddings\"\n        case .azureOpenAI:\n            let baseURL = info.baseURL\n            let deployment = info.modelName\n            let version = \"2024-02-15-preview\"\n            if baseURL.isEmpty { return \"\" }\n            return \"\\(baseURL)/openai/deployments/\\(deployment)/embeddings?api-version=\\(version)\"\n        case .ollama:\n            let baseURL = info.baseURL\n            if baseURL.isEmpty { return \"http://localhost:11434/api/embeddings\" }\n            return \"\\(baseURL)/api/embeddings\"\n        case .gitHubCopilot:\n            return \"https://api.githubcopilot.com/embeddings\"\n        }\n    }\n}\n\npublic struct EmptyEmbeddingModelInfo: FallbackValueProvider {\n    public static var defaultValue: EmbeddingModel.Info { .init() }\n}\n\npublic struct EmptyEmbeddingModelFormat: FallbackValueProvider {\n    public static var defaultValue: EmbeddingModel.Format { .openAI }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ASTParser/ASTParser.swift",
    "content": "import SuggestionBasic\nimport SwiftTreeSitter\nimport tree_sitter\nimport TreeSitterObjC\n\npublic enum ParsableLanguage {\n    case objectiveC\n\n    var tsLanguage: UnsafeMutablePointer<TSLanguage> {\n        switch self {\n        case .objectiveC:\n            return tree_sitter_objc()\n        }\n    }\n}\n\npublic struct ASTParser {\n    let language: ParsableLanguage\n    let parser: Parser\n\n    public init(language: ParsableLanguage) {\n        self.language = language\n        parser = Parser()\n        try! parser.setLanguage(Language(language: language.tsLanguage))\n    }\n\n    public func parse(_ source: String) -> ASTTree? {\n        return ASTTree(tree: parser.parse(source))\n    }\n}\n\npublic typealias ASTNode = Node\n\npublic typealias ASTPoint = Point\n\npublic struct ASTTree {\n    public let tree: Tree?\n\n    public var rootNode: ASTNode? {\n        return tree?.rootNode\n    }\n\n    public func smallestNodeContainingRange(\n        _ range: CursorRange,\n        filter: (ASTNode) -> Bool = { _ in true }\n    ) -> ASTNode? {\n        guard var targetNode = rootNode else { return nil }\n\n        func rangeContains(_ range: Range<Point>, _ another: Range<Point>) -> Bool {\n            return range.lowerBound <= another.lowerBound && range.upperBound >= another.upperBound\n        }\n\n        for node in targetNode.treeCursor.deepFirstSearch(skipChildren: { node in\n            !rangeContains(node.pointRange, range.pointRange)\n        }) {\n            guard filter(node) else { continue }\n            if rangeContains(node.pointRange, range.pointRange) {\n                targetNode = node\n            }\n        }\n\n        return targetNode\n    }\n}\n\npublic extension ASTNode {\n    var children: ASTNodeChildrenSequence {\n        return ASTNodeChildrenSequence(node: self)\n    }\n\n    struct ASTNodeChildrenSequence: Sequence {\n        let node: ASTNode\n\n        public struct ASTNodeChildrenIterator: IteratorProtocol {\n            let node: ASTNode\n            var index: UInt32 = 0\n\n            public mutating func next() -> ASTNode? {\n                guard index < node.childCount else { return nil }\n                defer { index += 1 }\n                return node.child(at: 1)\n            }\n        }\n\n        public func makeIterator() -> ASTNodeChildrenIterator {\n            return ASTNodeChildrenIterator(node: node)\n        }\n    }\n}\n\npublic extension CursorRange {\n    var pointRange: Range<Point> {\n        let bytePerCharacter = 2 // tree sitter uses UTF-16\n        let startPoint = Point(row: start.line, column: start.character * bytePerCharacter)\n        let endPoint = Point(row: end.line, column: end.character * bytePerCharacter)\n        guard endPoint > startPoint else {\n            return startPoint..<Point(\n                row: start.line,\n                column: (start.character + 1) * bytePerCharacter\n            )\n        }\n        return startPoint..<endPoint\n    }\n\n    init(pointRange: Range<Point>) {\n        let bytePerCharacter = 2 // tree sitter uses UTF-16\n        let start = CursorPosition(\n            line: Int(pointRange.lowerBound.row),\n            character: Int(pointRange.lowerBound.column) / bytePerCharacter\n        )\n        let end = CursorPosition(\n            line: Int(pointRange.upperBound.row),\n            character: Int(pointRange.upperBound.column) / bytePerCharacter\n        )\n        self.init(start: start, end: end)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ASTParser/ASTTreeVisitor.swift",
    "content": "import Foundation\nimport SwiftTreeSitter\n\npublic enum ASTTreeVisitorContinueKind {\n    /// The visitor should visit the descendants of the current node.\n    case visitChildren\n    /// The visitor should avoid visiting the descendants of the current node.\n    case skipChildren\n}\n\n// A SwiftSyntax style tree visitor.\nopen class ASTTreeVisitor {\n    public let tree: ASTTree\n\n    public init(tree: ASTTree) {\n        self.tree = tree\n    }\n\n    public func walk() {\n        guard let cursor = tree.rootNode?.treeCursor else { return }\n        visit(cursor)\n    }\n    \n    public func walk(_ node: ASTNode) {\n        let cursor = node.treeCursor\n        visit(cursor)\n    }\n\n    open func visit(_: ASTNode) -> ASTTreeVisitorContinueKind {\n        // do nothing\n        return .skipChildren\n    }\n\n    open func visitPost(_: ASTNode) {\n        // do nothing\n    }\n\n    private func visit(_ cursor: TreeCursor) {\n        guard let currentNode = cursor.currentNode else { return }\n        let continueKind = visit(currentNode)\n\n        switch continueKind {\n        case .skipChildren:\n            visitPost(currentNode)\n        case .visitChildren:\n            visitChildren(cursor)\n            visitPost(currentNode)\n        }\n    }\n\n    private func visitChildren(_ cursor: TreeCursor) {\n        let hasChild = cursor.goToFirstChild()\n        guard hasChild else { return }\n        visit(cursor)\n        while cursor.goToNextSibling() {\n            visit(cursor)\n        }\n        _ = cursor.gotoParent()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ASTParser/DumpSyntaxTree.swift",
    "content": "import SwiftTreeSitter\nimport SwiftUI\n\npublic extension ASTTree {\n    /// Dumps the syntax tree as a string, for debugging purposes.\n    func dump() -> AttributedString {\n        guard let tree, let root = tree.rootNode else { return \"\" }\n        var result: AttributedString = \"\"\n\n        let appendNode: (_ level: Int, _ node: Node, _ name: String) -> Void = {\n            level, node, name in\n            let range = node.pointRange\n            let lowerBoundL = range.lowerBound.row\n            let lowerBoundC = range.lowerBound.column / 2\n            let upperBoundL = range.upperBound.row\n            let upperBoundC = range.upperBound.column / 2\n            let indentation = AttributedString(String(repeating: \"  \", count: level))\n            let nodeInfo = {\n                if name.isEmpty {\n                    return AttributedString(node.nodeType ?? \"N/A\", attributes: .init([\n                        .foregroundColor: NSColor.blue,\n                    ]))\n                } else {\n                    var string = AttributedString(\"\\(name): \", attributes: .init([\n                        .foregroundColor: NSColor.brown,\n                    ]))\n                    string.append(AttributedString(node.nodeType ?? \"N/A\", attributes: .init([\n                        .foregroundColor: NSColor.blue,\n                    ])))\n                    return string\n                }\n            }()\n            let rangeText = \"[\\(lowerBoundL), \\(lowerBoundC)] - [\\(upperBoundL), \\(upperBoundC)]\"\n\n            var line: AttributedString = \"\"\n            line.append(indentation)\n            line.append(nodeInfo)\n            line.append(AttributedString(\" \\(rangeText)\\n\"))\n            \n            result.append(line)\n        }\n\n        func enumerate(_ node: Node, level: Int, name: String) {\n            appendNode(level, node, name)\n            for i in 0..<node.childCount {\n                let n = node.child(at: i)!\n                enumerate(n, level: level + 1, name: node.fieldNameForChild(at: i) ?? \"\")\n            }\n        }\n\n        enumerate(root, level: 0, name: \"root\")\n        return result\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ASTParser/TreeCursor.swift",
    "content": "import Foundation\nimport SwiftTreeSitter\n\npublic extension TreeCursor {\n    /// Deep first search nodes.\n    /// - Parameter skipChildren: Check if children of a `Node` should be skipped.\n    func deepFirstSearch(\n        skipChildren: @escaping (Node) -> Bool\n    ) -> CursorDeepFirstSearchSequence<TreeCursor> {\n        return CursorDeepFirstSearchSequence(cursor: self, skipChildren: skipChildren)\n    }\n}\n\n// MARK: - Search\n\npublic protocol Cursor {\n    associatedtype Node\n    var currentNode: Node? { get }\n    func goToFirstChild() -> Bool\n    func goToNextSibling() -> Bool\n    func goToParent() -> Bool\n}\n\nextension TreeCursor: Cursor {\n    public func goToNextSibling() -> Bool {\n        gotoNextSibling()\n    }\n\n    public func goToParent() -> Bool {\n        gotoParent()\n    }\n}\n\npublic struct CursorDeepFirstSearchSequence<C: Cursor>: Sequence {\n    let cursor: C\n    let skipChildren: (C.Node) -> Bool\n\n    public func makeIterator() -> CursorDeepFirstSearchIterator {\n        return CursorDeepFirstSearchIterator(\n            cursor: cursor,\n            skipChildren: skipChildren\n        )\n    }\n\n    public struct CursorDeepFirstSearchIterator: IteratorProtocol {\n        let cursor: C\n        let skipChildren: (C.Node) -> Bool\n        var isEnded = false\n\n        public mutating func next() -> C.Node? {\n            guard !isEnded else { return nil }\n            let currentNode = cursor.currentNode\n            let hasChild = {\n                guard let n = currentNode else { return false }\n                if skipChildren(n) { return false }\n                return cursor.goToFirstChild()\n            }()\n            if !hasChild {\n                while !cursor.goToNextSibling() {\n                    if !cursor.goToParent() {\n                        isEnded = true\n                        break\n                    }\n                }\n            }\n\n            return currentNode\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/AXExtension/AXUIElement.swift",
    "content": "import AppKit\nimport Foundation\nimport Logger\n\n// MARK: - State\n\npublic extension AXUIElement {\n    /// Set global timeout in seconds.\n    static func setGlobalMessagingTimeout(_ timeout: Float) {\n        AXUIElementSetMessagingTimeout(AXUIElementCreateSystemWide(), timeout)\n    }\n\n    /// Set timeout in seconds for this element.\n    func setMessagingTimeout(_ timeout: Float) {\n        AXUIElementSetMessagingTimeout(self, timeout)\n    }\n\n    var identifier: String {\n        (try? copyValue(key: kAXIdentifierAttribute)) ?? \"\"\n    }\n\n    var value: String {\n        (try? copyValue(key: kAXValueAttribute)) ?? \"\"\n    }\n\n    var intValue: Int? {\n        (try? copyValue(key: kAXValueAttribute))\n    }\n\n    var title: String {\n        (try? copyValue(key: kAXTitleAttribute)) ?? \"\"\n    }\n\n    var role: String {\n        (try? copyValue(key: kAXRoleAttribute)) ?? \"\"\n    }\n\n    var doubleValue: Double {\n        (try? copyValue(key: kAXValueAttribute)) ?? 0.0\n    }\n\n    var document: String? {\n        try? copyValue(key: kAXDocumentAttribute)\n    }\n\n    /// Label in Accessibility Inspector.\n    var description: String {\n        (try? copyValue(key: kAXDescriptionAttribute)) ?? \"\"\n    }\n\n    /// Type in Accessibility Inspector.\n    var roleDescription: String {\n        (try? copyValue(key: kAXRoleDescriptionAttribute)) ?? \"\"\n    }\n\n    var label: String {\n        (try? copyValue(key: kAXLabelValueAttribute)) ?? \"\"\n    }\n\n    var isSourceEditor: Bool {\n        if !(description == \"Source Editor\" && role != kAXUnknownRole) { return false }\n        if let _ = firstParent(where: { $0.identifier == \"editor context\" }) { return true }\n        return false\n    }\n\n    var selectedTextRange: ClosedRange<Int>? {\n        guard let value: AXValue = try? copyValue(key: kAXSelectedTextRangeAttribute)\n        else { return nil }\n        var range: CFRange = .init(location: 0, length: 0)\n        if AXValueGetValue(value, .cfRange, &range) {\n            return range.location...(range.location + range.length)\n        }\n        return nil\n    }\n\n    var isFocused: Bool {\n        (try? copyValue(key: kAXFocusedAttribute)) ?? false\n    }\n\n    var isEnabled: Bool {\n        (try? copyValue(key: kAXEnabledAttribute)) ?? false\n    }\n\n    var isHidden: Bool {\n        (try? copyValue(key: kAXHiddenAttribute)) ?? false\n    }\n\n    var debugDescription: String {\n        \"<\\(title)> <\\(description)> <\\(label)> (\\(role):\\(roleDescription)) [\\(identifier)] \\(rect ?? .zero) \\(children.count) children\"\n    }\n\n    var debugEnumerateChildren: String {\n        var result = \"> \" + debugDescription + \"\\n\"\n        result += children.map {\n            $0.debugEnumerateChildren.split(separator: \"\\n\")\n                .map { \"  \" + $0 }\n                .joined(separator: \"\\n\")\n        }.joined(separator: \"\\n\")\n        return result\n    }\n\n    var debugEnumerateParents: String {\n        var chain: [String] = []\n        chain.append(\"* \" + debugDescription)\n        var parent = self.parent\n        if let current = parent {\n            chain.append(\"> \" + current.debugDescription)\n            parent = current.parent\n        }\n        var result = \"\"\n        for (index, line) in chain.reversed().enumerated() {\n            result += String(repeating: \"  \", count: index) + line + \"\\n\"\n        }\n        return result\n    }\n}\n\n// MARK: - Rect\n\npublic extension AXUIElement {\n    var position: CGPoint? {\n        guard let value: AXValue = try? copyValue(key: kAXPositionAttribute)\n        else { return nil }\n        var point: CGPoint = .zero\n        if AXValueGetValue(value, .cgPoint, &point) {\n            return point\n        }\n        return nil\n    }\n\n    var size: CGSize? {\n        guard let value: AXValue = try? copyValue(key: kAXSizeAttribute)\n        else { return nil }\n        var size: CGSize = .zero\n        if AXValueGetValue(value, .cgSize, &size) {\n            return size\n        }\n        return nil\n    }\n\n    var rect: CGRect? {\n        guard let position, let size else { return nil }\n        return .init(origin: position, size: size)\n    }\n}\n\n// MARK: - Relationship\n\npublic extension AXUIElement {\n    var focusedElement: AXUIElement? {\n        try? copyValue(key: kAXFocusedUIElementAttribute)\n    }\n\n    var sharedFocusElements: [AXUIElement] {\n        (try? copyValue(key: kAXChildrenAttribute)) ?? []\n    }\n\n    var window: AXUIElement? {\n        try? copyValue(key: kAXWindowAttribute)\n    }\n\n    var windows: [AXUIElement] {\n        (try? copyValue(key: kAXWindowsAttribute)) ?? []\n    }\n\n    var isFullScreen: Bool {\n        (try? copyValue(key: \"AXFullScreen\")) ?? false\n    }\n\n    var windowID: CGWindowID? {\n        var identifier: CGWindowID = 0\n        let error = AXUIElementGetWindow(self, &identifier)\n        if error == .success {\n            return identifier\n        }\n        return nil\n    }\n\n    var isFrontmost: Bool {\n        get {\n            (try? copyValue(key: kAXFrontmostAttribute)) ?? false\n        }\n        set {\n            AXUIElementSetAttributeValue(\n                self,\n                kAXFrontmostAttribute as CFString,\n                newValue as CFBoolean\n            )\n        }\n    }\n\n    var focusedWindow: AXUIElement? {\n        try? copyValue(key: kAXFocusedWindowAttribute)\n    }\n\n    var topLevelElement: AXUIElement? {\n        try? copyValue(key: kAXTopLevelUIElementAttribute)\n    }\n\n    var rows: [AXUIElement] {\n        (try? copyValue(key: kAXRowsAttribute)) ?? []\n    }\n\n    var parent: AXUIElement? {\n        try? copyValue(key: kAXParentAttribute)\n    }\n\n    var children: [AXUIElement] {\n        (try? copyValue(key: kAXChildrenAttribute)) ?? []\n    }\n\n    var menuBar: AXUIElement? {\n        try? copyValue(key: kAXMenuBarAttribute)\n    }\n\n    var visibleChildren: [AXUIElement] {\n        (try? copyValue(key: kAXVisibleChildrenAttribute)) ?? []\n    }\n\n    func child(\n        identifier: String? = nil,\n        title: String? = nil,\n        role: String? = nil,\n        depth: Int = 0\n    ) -> AXUIElement? {\n        #if DEBUG\n        if depth >= 50 {\n            fatalError(\"AXUIElement.child: Exceeding recommended depth.\")\n        }\n        #endif\n\n        for child in children {\n            let match = {\n                if let identifier, child.identifier != identifier { return false }\n                if let title, child.title != title { return false }\n                if let role, child.role != role { return false }\n                return true\n            }()\n            if match { return child }\n        }\n        for child in children {\n            if let target = child.child(\n                identifier: identifier,\n                title: title,\n                role: role,\n                depth: depth + 1\n            ) { return target }\n        }\n        return nil\n    }\n\n    /// Get children that match the requirement\n    ///\n    /// - important: If the element has a lot of descendant nodes, it will heavily affect the\n    /// **performance of Xcode**. Please make use ``AXUIElement\\traverse(_:)`` instead.\n    @available(\n        *,\n        deprecated,\n        renamed: \"traverse(_:)\",\n        message: \"Please make use ``AXUIElement\\traverse(_:)`` instead.\"\n    )\n    func children(depth: Int = 0, where match: (AXUIElement) -> Bool) -> [AXUIElement] {\n        #if DEBUG\n        if depth >= 50 {\n            fatalError(\"AXUIElement.children: Exceeding recommended depth.\")\n        }\n        #endif\n\n        var all = [AXUIElement]()\n        for child in children {\n            if match(child) { all.append(child) }\n        }\n        for child in children {\n            all.append(contentsOf: child.children(depth: depth + 1, where: match))\n        }\n        return all\n    }\n\n    func firstParent(where match: (AXUIElement) -> Bool) -> AXUIElement? {\n        guard let parent = parent else { return nil }\n        if match(parent) { return parent }\n        return parent.firstParent(where: match)\n    }\n\n    func firstChild(\n        depth: Int = 0,\n        maxDepth: Int = 50,\n        where match: (AXUIElement) -> Bool\n    ) -> AXUIElement? {\n        #if DEBUG\n        if depth > maxDepth {\n            fatalError(\"AXUIElement.firstChild: Exceeding recommended depth.\")\n        }\n        #else\n        if depth > maxDepth {\n            return nil\n        }\n        #endif\n        for child in children {\n            if match(child) { return child }\n        }\n        for child in children {\n            if let target = child.firstChild(depth: depth + 1, where: match) {\n                return target\n            }\n        }\n        return nil\n    }\n\n    func visibleChild(identifier: String) -> AXUIElement? {\n        for child in visibleChildren {\n            if child.identifier == identifier { return child }\n            if let target = child.visibleChild(identifier: identifier) { return target }\n        }\n        return nil\n    }\n\n    var verticalScrollBar: AXUIElement? {\n        try? copyValue(key: kAXVerticalScrollBarAttribute)\n    }\n}\n\npublic extension AXUIElement {\n    enum SearchNextStep<Info> {\n        case skipDescendants\n        case skipSiblings(Info)\n        case skipDescendantsAndSiblings\n        case continueSearching(Info)\n        case stopSearching\n    }\n\n    /// Traversing the element tree.\n    ///\n    /// - important: Traversing the element tree is resource consuming and will affect the\n    /// **performance of Xcode**. Please make sure to skip as much as possible.\n    ///\n    /// - todo: Make it not recursive.\n    func traverse<Info>(\n        access: (AXUIElement) -> [AXUIElement] = { $0.children },\n        info: Info,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function,\n        _ handle: (_ element: AXUIElement, _ level: Int, _ info: Info) -> SearchNextStep<Info>\n    ) {\n        #if DEBUG\n        var count = 0\n//        let startDate = Date()\n        #endif\n        func _traverse(\n            element: AXUIElement,\n            level: Int,\n            info: Info,\n            handle: (AXUIElement, Int, Info) -> SearchNextStep<Info>\n        ) -> SearchNextStep<Info> {\n            #if DEBUG\n            count += 1\n            #endif\n            let nextStep = handle(element, level, info)\n            switch nextStep {\n            case .stopSearching: return .stopSearching\n            case .skipDescendants: return .continueSearching(info)\n            case .skipDescendantsAndSiblings: return .skipSiblings(info)\n            case let .continueSearching(info), let .skipSiblings(info):\n                loop: for child in access(element) {\n                    switch _traverse(element: child, level: level + 1, info: info, handle: handle) {\n                    case .skipSiblings, .skipDescendantsAndSiblings:\n                        break loop\n                    case .stopSearching:\n                        return .stopSearching\n                    case .continueSearching, .skipDescendants:\n                        continue loop\n                    }\n                }\n\n                return nextStep\n            }\n        }\n\n        _ = _traverse(element: self, level: 0, info: info, handle: handle)\n\n        #if DEBUG\n//        let duration = Date().timeIntervalSince(startDate)\n//            .formatted(.number.precision(.fractionLength(0...4)))\n//        Logger.service.debug(\n//            \"AXUIElement.traverse count: \\(count), took \\(duration) seconds\",\n//            file: file,\n//            line: line,\n//            function: function\n//        )\n        #endif\n    }\n\n    /// Traversing the element tree.\n    ///\n    /// - important: Traversing the element tree is resource consuming and will affect the\n    /// **performance of Xcode**. Please make sure to skip as much as possible.\n    ///\n    /// - todo: Make it not recursive.\n    func traverse(\n        access: (AXUIElement) -> [AXUIElement] = { $0.children },\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function,\n        _ handle: (_ element: AXUIElement, _ level: Int) -> SearchNextStep<Void>\n    ) {\n        traverse(access: access, info: (), file: file, line: line, function: function) {\n            element, level, _ in\n            handle(element, level)\n        }\n    }\n}\n\n// MARK: - Helper\n\npublic extension AXUIElement {\n    func copyValue<T>(key: String, ofType _: T.Type = T.self) throws -> T {\n        var value: AnyObject?\n        let error = AXUIElementCopyAttributeValue(self, key as CFString, &value)\n        if error == .success, let value = value as? T {\n            return value\n        }\n        throw error\n    }\n\n    func copyParameterizedValue<T>(\n        key: String,\n        parameters: AnyObject,\n        ofType _: T.Type = T.self\n    ) throws -> T {\n        var value: AnyObject?\n        let error = AXUIElementCopyParameterizedAttributeValue(\n            self,\n            key as CFString,\n            parameters as CFTypeRef,\n            &value\n        )\n        if error == .success, let value = value as? T {\n            return value\n        }\n        throw error\n    }\n}\n\nextension AXError: @retroactive _BridgedNSError {}\nextension AXError: @retroactive _ObjectiveCBridgeableError {}\nextension AXError: @retroactive Error {}\n\n"
  },
  {
    "path": "Tool/Sources/AXExtension/AXUIElementPrivateAPI.swift",
    "content": "import AppKit\n\n/// AXError _AXUIElementGetWindow(AXUIElementRef element, uint32_t *identifier);\n@_silgen_name(\"_AXUIElementGetWindow\") @discardableResult\nfunc AXUIElementGetWindow(\n    _ element: AXUIElement,\n    _ identifier: UnsafeMutablePointer<CGWindowID>\n) -> AXError\n"
  },
  {
    "path": "Tool/Sources/AXNotificationStream/AXNotificationStream.swift",
    "content": "import AppKit\nimport ApplicationServices\nimport Foundation\nimport Logger\nimport Preferences\n\npublic final class AXNotificationStream: AsyncSequence {\n    public typealias Stream = AsyncStream<Element>\n    public typealias Continuation = Stream.Continuation\n    public typealias AsyncIterator = Stream.AsyncIterator\n    public typealias Element = (name: String, element: AXUIElement, info: CFDictionary)\n\n    private var continuation: Continuation\n    private let stream: Stream\n\n    private let file: StaticString\n    private let line: UInt\n    private let function: StaticString\n\n    public func makeAsyncIterator() -> Stream.AsyncIterator {\n        stream.makeAsyncIterator()\n    }\n\n    deinit {\n        continuation.finish()\n    }\n\n    public convenience init(\n        app: NSRunningApplication,\n        element: AXUIElement? = nil,\n        notificationNames: String...,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        self.init(\n            app: app,\n            element: element,\n            notificationNames: notificationNames,\n            file: file,\n            line: line,\n            function: function\n        )\n    }\n\n    public init(\n        app: NSRunningApplication,\n        element: AXUIElement? = nil,\n        notificationNames: [String],\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        self.file = file\n        self.line = line\n        self.function = function\n\n        let mode: CFRunLoopMode = UserDefaults.shared\n            .value(for: \\.observeToAXNotificationWithDefaultMode) ? .defaultMode : .commonModes\n\n        let runLoop: CFRunLoop = CFRunLoopGetMain()\n\n        var cont: Continuation!\n        stream = Stream { continuation in\n            cont = continuation\n        }\n        continuation = cont\n        var observer: AXObserver?\n\n        func callback(\n            observer: AXObserver,\n            element: AXUIElement,\n            notificationName: CFString,\n            userInfo: CFDictionary,\n            pointer: UnsafeMutableRawPointer?\n        ) {\n            guard let pointer = pointer?.assumingMemoryBound(to: Continuation.self)\n            else { return }\n            pointer.pointee.yield((notificationName as String, element, userInfo))\n        }\n\n        _ = AXObserverCreateWithInfoCallback(\n            app.processIdentifier,\n            callback,\n            &observer\n        )\n        guard let observer else {\n            continuation.finish()\n            return\n        }\n\n        let observingElement = element ?? AXUIElementCreateApplication(app.processIdentifier)\n        continuation.onTermination = { @Sendable _ in\n            for name in notificationNames {\n                AXObserverRemoveNotification(observer, observingElement, name as CFString)\n            }\n            CFRunLoopRemoveSource(\n                runLoop,\n                AXObserverGetRunLoopSource(observer),\n                mode\n            )\n        }\n\n        Task { @MainActor [weak self] in\n            CFRunLoopAddSource(\n                runLoop,\n                AXObserverGetRunLoopSource(observer),\n                mode\n            )\n            var pendingRegistrationNames = Set(notificationNames)\n            var retry = 0\n            while !pendingRegistrationNames.isEmpty, retry < 100 {\n                guard let self else { return }\n                retry += 1\n                for name in notificationNames {\n                    await Task.yield()\n                    let e = withUnsafeMutablePointer(to: &self.continuation) { pointer in\n                        AXObserverAddNotification(\n                            observer,\n                            observingElement,\n                            name as CFString,\n                            pointer\n                        )\n                    }\n                    switch e {\n                    case .success:\n                        pendingRegistrationNames.remove(name)\n                    case .actionUnsupported:\n                        Logger.service.error(\"AXObserver: Action unsupported: \\(name)\")\n                        pendingRegistrationNames.remove(name)\n                    case .apiDisabled:\n                        Logger.service\n                            .error(\"AXObserver: Accessibility API disabled, will try again later\")\n                        retry -= 1\n                    case .invalidUIElement:\n                        // It's possible that the UI element is not ready yet.\n                        //\n                        // Especially when you retrieve an element right after macOS is\n                        // awaken from sleep.\n                        Logger.service\n                            .error(\"AXObserver: Invalid UI element, notification name \\(name)\")\n                    case .invalidUIElementObserver:\n                        Logger.service.error(\"AXObserver: Invalid UI element observer\")\n                        pendingRegistrationNames.remove(name)\n                    case .cannotComplete:\n                        Logger.service\n                            .error(\"AXObserver: Failed to observe \\(name), will try again later\")\n                    case .notificationUnsupported:\n                        Logger.service.error(\"AXObserver: Notification unsupported: \\(name)\")\n                        pendingRegistrationNames.remove(name)\n                    case .notificationAlreadyRegistered:\n                        Logger.service.info(\"AXObserver: Notification already registered: \\(name)\")\n                        pendingRegistrationNames.remove(name)\n                    default:\n                        Logger.service\n                            .error(\n                                \"AXObserver: Unrecognized error \\(e) when registering \\(name), will try again later\"\n                            )\n                    }\n                }\n                try await Task.sleep(nanoseconds: 1_500_000_000)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ActiveApplicationMonitor/ActiveApplicationMonitor.swift",
    "content": "import AppKit\n\npublic struct RunningApplicationInfo: Sendable {\n    public let isXcode: Bool\n    public let isActive: Bool\n    public let isHidden: Bool\n    public let localizedName: String?\n    public let bundleIdentifier: String?\n    public let bundleURL: URL?\n    public let executableURL: URL?\n    public let processIdentifier: pid_t\n    public let launchDate: Date?\n    public let executableArchitecture: Int\n\n    init(_ application: NSRunningApplication) {\n        isXcode = application.isXcode\n        isActive = application.isActive\n        isHidden = application.isHidden\n        localizedName = application.localizedName\n        bundleIdentifier = application.bundleIdentifier\n        bundleURL = application.bundleURL\n        executableURL = application.executableURL\n        processIdentifier = application.processIdentifier\n        launchDate = application.launchDate\n        executableArchitecture = application.executableArchitecture\n    }\n}\n\npublic extension NSRunningApplication {\n    var info: RunningApplicationInfo { RunningApplicationInfo(self) }\n}\n\npublic final class ActiveApplicationMonitor {\n    public static let shared = ActiveApplicationMonitor()\n    public private(set) var latestXcode: NSRunningApplication? = NSWorkspace.shared\n        .runningApplications\n        .first(where: \\.isXcode)\n    public private(set) var previousApp: NSRunningApplication?\n    public private(set) var activeApplication = NSWorkspace.shared.runningApplications\n        .first(where: \\.isActive)\n    {\n        didSet {\n            if activeApplication?.isXcode ?? false {\n                latestXcode = activeApplication\n            }\n            previousApp = oldValue\n        }\n    }\n\n    private var infoContinuations: [UUID: AsyncStream<RunningApplicationInfo?>.Continuation] = [:]\n\n    private init() {\n        activeApplication = NSWorkspace.shared.runningApplications.first(where: \\.isActive)\n\n        Task {\n            let sequence = NSWorkspace.shared.notificationCenter\n                .notifications(named: NSWorkspace.didActivateApplicationNotification)\n            for await notification in sequence {\n                guard let app = notification\n                    .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication\n                else { continue }\n                activeApplication = app\n                notifyContinuations()\n            }\n        }\n    }\n\n    deinit {\n        for continuation in infoContinuations {\n            continuation.value.finish()\n        }\n    }\n\n    public var activeXcode: NSRunningApplication? {\n        if activeApplication?.isXcode ?? false {\n            return activeApplication\n        }\n        return nil\n    }\n\n    public func createInfoStream() -> AsyncStream<RunningApplicationInfo?> {\n        .init { continuation in\n            let id = UUID()\n            Task { @MainActor in\n                continuation.onTermination = { _ in\n                    self.removeInfoContinuation(id: id)\n                }\n                addInfoContinuation(continuation, id: id)\n                continuation.yield(activeApplication?.info)\n            }\n        }\n    }\n\n    func addInfoContinuation(\n        _ continuation: AsyncStream<RunningApplicationInfo?>.Continuation,\n        id: UUID\n    ) {\n        infoContinuations[id] = continuation\n    }\n\n    func removeInfoContinuation(id: UUID) {\n        infoContinuations[id] = nil\n    }\n\n    private func notifyContinuations() {\n        for continuation in infoContinuations {\n            continuation.value.yield(activeApplication?.info)\n        }\n    }\n}\n\npublic extension NSRunningApplication {\n    var isXcode: Bool { bundleIdentifier == \"com.apple.dt.Xcode\" }\n}\n\n"
  },
  {
    "path": "Tool/Sources/AppActivator/AppActivator.swift",
    "content": "import AppKit\nimport Dependencies\nimport XcodeInspector\n\npublic extension NSWorkspace {\n    static func activateThisApp(delay: TimeInterval = 0.10) {\n        Task { @MainActor in\n            try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))\n\n            // NSApp.activate may fail. And since macOS 14, it looks like the app needs other\n            // apps to call `yieldActivationToApplication` to activate itself?\n\n            let activated = NSRunningApplication.current\n                .activate(options: [.activateIgnoringOtherApps])\n\n            if activated { return }\n\n            // Fallback solution\n\n            let axApplication = AXUIElementCreateApplication(\n                ProcessInfo.processInfo.processIdentifier\n            )\n            activateAppElement(axApplication)\n//\n//            let appleScript = \"\"\"\n//            tell application \"System Events\"\n//                set frontmost of the first process whose unix id is \\\n//            \\(ProcessInfo.processInfo.processIdentifier) to true\n//            end tell\n//            \"\"\"\n//            try await runAppleScript(appleScript)\n        }\n    }\n\n    static func activatePreviousActiveApp(delay: TimeInterval = 0.2) {\n        Task { @MainActor in\n            guard let app = XcodeInspector.shared.previousActiveApplication\n            else { return }\n            try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))\n            activateApp(app)\n        }\n    }\n\n    static func activatePreviousActiveXcode(delay: TimeInterval = 0.2) {\n        Task { @MainActor in\n            guard let app = XcodeInspector.shared.latestActiveXcode else { return }\n            try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))\n            activateApp(app)\n        }\n    }\n\n    static func activateApp(_ app: AppInstanceInspector) {\n        // we prefer `.activate()` because it only brings the active window to the front\n        if !app.activate() {\n            activateAppElement(app.appElement)\n        }\n    }\n\n    static func activateAppElement(_ appElement: AXUIElement) {\n        appElement.isFrontmost = true\n    }\n}\n\nstruct ActivateThisAppDependencyKey: DependencyKey {\n    static var liveValue: () -> Void = { NSWorkspace.activateThisApp() }\n}\n\nstruct ActivatePreviousActiveAppDependencyKey: DependencyKey {\n    static var liveValue: () -> Void = { NSWorkspace.activatePreviousActiveApp() }\n}\n\nstruct ActivatePreviousActiveXcodeDependencyKey: DependencyKey {\n    static var liveValue: () -> Void = { NSWorkspace.activatePreviousActiveXcode() }\n}\n\npublic extension DependencyValues {\n    var activateThisApp: () -> Void {\n        get { self[ActivateThisAppDependencyKey.self] }\n        set { self[ActivateThisAppDependencyKey.self] = newValue }\n    }\n\n    var activatePreviousActiveApp: () -> Void {\n        get { self[ActivatePreviousActiveAppDependencyKey.self] }\n        set { self[ActivatePreviousActiveAppDependencyKey.self] = newValue }\n    }\n\n    var activatePreviousActiveXcode: () -> Void {\n        get { self[ActivatePreviousActiveXcodeDependencyKey.self] }\n        set { self[ActivatePreviousActiveXcodeDependencyKey.self] = newValue }\n    }\n}\n\n@discardableResult\nfunc runAppleScript(_ appleScript: String) async throws -> String {\n    let task = Process()\n    task.launchPath = \"/usr/bin/osascript\"\n    task.arguments = [\"-e\", appleScript]\n    let outpipe = Pipe()\n    task.standardOutput = outpipe\n    task.standardError = Pipe()\n\n    return try await withUnsafeThrowingContinuation { continuation in\n        do {\n            task.terminationHandler = { _ in\n                do {\n                    if let data = try outpipe.fileHandleForReading.readToEnd(),\n                       let content = String(data: data, encoding: .utf8)\n                    {\n                        continuation.resume(returning: content)\n                        return\n                    }\n                    continuation.resume(returning: \"\")\n                } catch {\n                    continuation.resume(throwing: error)\n                }\n            }\n            try task.run()\n        } catch {\n            continuation.resume(throwing: error)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/AsyncPassthroughSubject/AsyncPassthroughSubject.swift",
    "content": "import AppKit\nimport Foundation\n\npublic actor AsyncPassthroughSubject<Element> {\n    var tasks: [AsyncStream<Element>.Continuation] = []\n\n    deinit {\n        tasks.forEach { $0.finish() }\n    }\n    \n    public init() {}\n\n    public func notifications() -> AsyncStream<Element> {\n        AsyncStream { [weak self] continuation in\n            let task = Task { [weak self] in\n                await self?.storeContinuation(continuation)\n            }\n            \n            continuation.onTermination = { termination in\n                task.cancel()\n            }\n        }\n    }\n\n    nonisolated\n    public func send(_ element: Element) {\n        Task { await _send(element) }\n    }\n    \n    func _send(_ element: Element) {\n        let tasks = tasks\n        for task in tasks {\n            task.yield(element)\n        }\n    }\n    \n    func storeContinuation(_ continuation: AsyncStream<Element>.Continuation) {\n        tasks.append(continuation)\n    }\n    \n    nonisolated\n    public func finish() {\n        Task { await _finish() }\n    }\n    \n    func _finish() {\n        let tasks = self.tasks\n        self.tasks = []\n        for task in tasks {\n            task.finish()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/BuiltinExtension/BuiltinExtension.swift",
    "content": "import ChatBasic\nimport ChatTab\nimport CopilotForXcodeKit\nimport Foundation\nimport Preferences\n\npublic protocol BuiltinExtension: CopilotForXcodeExtensionCapability {\n    /// An identifier for the extension.\n    var extensionIdentifier: String { get }\n\n    /// All chat builders provided by this extension.\n    var chatTabTypes: [any CustomChatTab] { get }\n\n    /// It's usually called when the app is about to quit,\n    /// you should clean up all the resources here.\n    func terminate()\n}\n\n// MARK: - Default Implementation\n\npublic extension BuiltinExtension {\n    var suggestionServiceId: BuiltInSuggestionFeatureProvider? { nil }\n    var chatTabTypes: [any CustomChatTab] { [] }\n}\n\n// MAKR: - ChatService\n\n/// A temporary protocol for ChatServiceType. Migrate it to CopilotForXcodeKit when finished.\npublic protocol BuiltinExtensionChatServiceType: ChatServiceType {\n    typealias Message = ChatMessage\n\n    func sendMessage(\n        _ message: String,\n        history: [Message],\n        references: [RetrievedContent],\n        workspace: WorkspaceInfo\n    ) async -> AsyncThrowingStream<String, Error>\n}\n\npublic struct RetrievedContent {\n    public var document: ChatMessage.Reference\n    public var priority: Int\n\n    public init(document: ChatMessage.Reference, priority: Int) {\n        self.document = document\n        self.priority = priority\n    }\n}\n\npublic enum ChatServiceMemoryMutation: Codable {\n    public typealias Message = ChatMessage\n\n    /// Add a new message to the end of memory.\n    /// If an id is not provided, a new id will be generated.\n    /// If an id is provided, and a message with the same id exists the message with the same\n    /// id will be updated.\n    case appendMessage(id: String?, role: Message.Role, text: String)\n    /// Update the message with the given id.\n    case updateMessage(id: String, role: Message.Role, text: String)\n    /// Stream the content into a message with the given id.\n    case streamIntoMessage(id: String, role: Message.Role?, text: String?)\n}\n\npublic protocol CustomChatTab {\n    var name: String { get }\n    var isDefaultChatTabReplacement: Bool { get }\n    var canHandleOpenChatCommand: Bool { get }\n    func chatBuilders() -> [ChatTabBuilder]\n    func defaultChatBuilder() -> ChatTabBuilder\n    func restore(from data: Data) async throws -> any ChatTabBuilder\n}\n\npublic struct TypedCustomChatTab: CustomChatTab {\n    public let type: ChatTab.Type\n\n    public init(of type: ChatTab.Type) {\n        self.type = type\n    }\n\n    public var name: String { type.name }\n    public var isDefaultChatTabReplacement: Bool { type.isDefaultChatTabReplacement }\n    public var canHandleOpenChatCommand: Bool { type.canHandleOpenChatCommand }\n    public func chatBuilders() -> [ChatTabBuilder] { type.chatBuilders() }\n    public func defaultChatBuilder() -> ChatTabBuilder { type.defaultChatBuilder() }\n    public func restore(from data: Data) async throws -> any ChatTabBuilder {\n        try await type.restore(from: data)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/BuiltinExtension/BuiltinExtensionManager.swift",
    "content": "import AppKit\nimport Combine\nimport Foundation\nimport XcodeInspector\n\npublic final class BuiltinExtensionManager {\n    public static let shared: BuiltinExtensionManager = .init()\n    public private(set) var extensions: [any BuiltinExtension] = []\n\n    init() {\n        Task { [weak self] in\n            let notifications = NotificationCenter.default\n                .notifications(named: .activeApplicationDidChange)\n            for await _ in notifications {\n                guard let self else { return }\n                if let app = await XcodeInspector.shared.activeApplication,\n                   app.isXcode || app.isExtensionService\n                {\n                    self.checkAppConfiguration()\n                }\n            }\n        }\n    }\n\n    public func setupExtensions(_ extensions: [any BuiltinExtension]) {\n        self.extensions = extensions\n        checkAppConfiguration()\n    }\n\n    public func addExtensions(_ extensions: [any BuiltinExtension]) {\n        self.extensions.append(contentsOf: extensions)\n        checkAppConfiguration()\n    }\n\n    public func terminate() {\n        for ext in extensions {\n            ext.terminate()\n        }\n    }\n}\n\nextension BuiltinExtensionManager {\n    func checkAppConfiguration() {\n        let suggestionFeatureProvider = UserDefaults.shared.value(for: \\.suggestionFeatureProvider)\n        for ext in extensions {\n            let isSuggestionFeatureInUse = switch suggestionFeatureProvider {\n            case let .builtIn(provider):\n                switch provider {\n                case .gitHubCopilot:\n                    ext.extensionIdentifier == \"com.github.copilot\"\n                case .codeium:\n                    ext.extensionIdentifier == \"com.codeium\"\n                }\n            case let .extension(_, bundleIdentifier):\n                ext.extensionIdentifier == bundleIdentifier\n            }\n            let isChatFeatureInUse = false\n            ext.extensionUsageDidChange(.init(\n                isSuggestionServiceInUse: isSuggestionFeatureInUse,\n                isChatServiceInUse: isChatFeatureInUse\n            ))\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/BuiltinExtension/BuiltinExtensionSuggestionServiceProvider.swift",
    "content": "import CopilotForXcodeKit\nimport Foundation\nimport Logger\nimport Preferences\nimport SuggestionBasic\nimport SuggestionProvider\n\npublic final class BuiltinExtensionSuggestionServiceProvider<\n    T: BuiltinExtension\n>: SuggestionServiceProvider {\n    public var configuration: SuggestionServiceConfiguration {\n        guard let service else {\n            return .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            )\n        }\n\n        return service.configuration\n    }\n\n    let extensionManager: BuiltinExtensionManager\n\n    public init(\n        extension: T.Type,\n        extensionManager: BuiltinExtensionManager = .shared\n    ) {\n        self.extensionManager = extensionManager\n    }\n\n    var service: CopilotForXcodeKit.SuggestionServiceType? {\n        extensionManager.extensions.first { $0 is T }?.suggestionService\n    }\n    \n    struct BuiltinExtensionSuggestionServiceNotFoundError: Error, LocalizedError {\n        var errorDescription: String? {\n            \"Builtin suggestion service not found.\"\n        }\n    }\n\n    public func getSuggestions(\n        _ request: SuggestionProvider.SuggestionRequest,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async throws -> [SuggestionBasic.CodeSuggestion] {\n        guard let service else {\n            Logger.service.error(\"Builtin suggestion service not found.\")\n            throw BuiltinExtensionSuggestionServiceNotFoundError()\n        }\n        return try await service.getSuggestions(\n            .init(\n                fileURL: request.fileURL,\n                relativePath: request.relativePath,\n                language: .init(\n                    rawValue: languageIdentifierFromFileURL(request.fileURL).rawValue\n                ) ?? .plaintext,\n                content: request.content, \n                originalContent: request.originalContent,\n                cursorPosition: .init(\n                    line: request.cursorPosition.line,\n                    character: request.cursorPosition.character\n                ),\n                tabSize: request.tabSize,\n                indentSize: request.indentSize,\n                usesTabsForIndentation: request.usesTabsForIndentation,\n                relevantCodeSnippets: request.relevantCodeSnippets.map { $0.converted }\n            ),\n            workspace: workspaceInfo\n        ).map { $0.converted }\n    }\n\n    public func cancelRequest(\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async {\n        guard let service else {\n            Logger.service.error(\"Builtin suggestion service not found.\")\n            return\n        }\n        await service.cancelRequest(workspace: workspaceInfo)\n    }\n\n    public func notifyAccepted(\n        _ suggestion: SuggestionBasic.CodeSuggestion,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async {\n        guard let service else {\n            Logger.service.error(\"Builtin suggestion service not found.\")\n            return\n        }\n        await service.notifyAccepted(suggestion.converted, workspace: workspaceInfo)\n    }\n\n    public func notifyRejected(\n        _ suggestions: [SuggestionBasic.CodeSuggestion],\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async {\n        guard let service else {\n            Logger.service.error(\"Builtin suggestion service not found.\")\n            return\n        }\n        await service.notifyRejected(suggestions.map(\\.converted), workspace: workspaceInfo)\n    }\n}\n\nextension SuggestionProvider.SuggestionRequest {\n    var converted: CopilotForXcodeKit.SuggestionRequest {\n        .init(\n            fileURL: fileURL,\n            relativePath: relativePath,\n            language: .init(rawValue: languageIdentifierFromFileURL(fileURL).rawValue)\n                ?? .plaintext,\n            content: content,\n            originalContent: originalContent,\n            cursorPosition: .init(\n                line: cursorPosition.line,\n                character: cursorPosition.character\n            ),\n            tabSize: tabSize,\n            indentSize: indentSize,\n            usesTabsForIndentation: usesTabsForIndentation,\n            relevantCodeSnippets: relevantCodeSnippets.map(\\.converted)\n        )\n    }\n}\n\nextension SuggestionBasic.CodeSuggestion {\n    var converted: CopilotForXcodeKit.CodeSuggestion {\n        .init(\n            id: id,\n            text: text,\n            position: .init(\n                line: position.line,\n                character: position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: range.start.line,\n                    character: range.start.character\n                ),\n                end: .init(\n                    line: range.end.line,\n                    character: range.end.character\n                )\n            )\n        )\n    }\n}\n\nextension CopilotForXcodeKit.CodeSuggestion {\n    var converted: SuggestionBasic.CodeSuggestion {\n        .init(\n            id: id,\n            text: text,\n            position: .init(\n                line: position.line,\n                character: position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: range.start.line,\n                    character: range.start.character\n                ),\n                end: .init(\n                    line: range.end.line,\n                    character: range.end.character\n                )\n            )\n        )\n    }\n}\n\nextension SuggestionProvider.RelevantCodeSnippet {\n    var converted: CopilotForXcodeKit.RelevantCodeSnippet {\n        .init(content: content, priority: priority, filePath: filePath)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/BuiltinExtension/BuiltinExtensionWorkspacePlugin.swift",
    "content": "import Foundation\nimport Workspace\n\npublic final class BuiltinExtensionWorkspacePlugin: WorkspacePlugin {\n    let extensionManager: BuiltinExtensionManager\n\n    public init(workspace: Workspace, extensionManager: BuiltinExtensionManager = .shared) {\n        self.extensionManager = extensionManager\n        super.init(workspace: workspace)\n    }\n\n    override public func didOpenFilespace(_ filespace: Filespace) {\n        notifyOpenFile(filespace: filespace)\n    }\n\n    override public func didSaveFilespace(_ filespace: Filespace) {\n        notifySaveFile(filespace: filespace)\n    }\n\n    override public func didUpdateFilespace(_ filespace: Filespace, content: String) {\n        notifyUpdateFile(filespace: filespace, content: content)\n    }\n\n    override public func didCloseFilespace(_ fileURL: URL) {\n        Task {\n            for ext in extensionManager.extensions {\n                ext.workspace(\n                    .init(workspaceURL: workspaceURL, projectURL: projectRootURL),\n                    didCloseDocumentAt: fileURL\n                )\n            }\n        }\n    }\n\n    public func notifyOpenFile(filespace: Filespace) {\n        Task {\n            guard filespace.isTextReadable else { return }\n            guard !(await filespace.isGitIgnored) else { return }\n            for ext in extensionManager.extensions {\n                ext.workspace(\n                    .init(workspaceURL: workspaceURL, projectURL: projectRootURL),\n                    didOpenDocumentAt: filespace.fileURL\n                )\n            }\n        }\n    }\n\n    public func notifyUpdateFile(filespace: Filespace, content: String) {\n        Task {\n            guard filespace.isTextReadable else { return }\n            guard !(await filespace.isGitIgnored) else { return }\n            for ext in extensionManager.extensions {\n                ext.workspace(\n                    .init(workspaceURL: workspaceURL, projectURL: projectRootURL),\n                    didUpdateDocumentAt: filespace.fileURL, \n                    content: content\n                )\n            }\n        }\n    }\n\n    public func notifySaveFile(filespace: Filespace) {\n        Task {\n            guard filespace.isTextReadable else { return }\n            guard !(await filespace.isGitIgnored) else { return }\n            for ext in extensionManager.extensions {\n                ext.workspace(\n                    .init(workspaceURL: workspaceURL, projectURL: projectRootURL),\n                    didSaveDocumentAt: filespace.fileURL\n                )\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatBasic/ChatAgent.swift",
    "content": "import Foundation\n\npublic enum ChatAgentResponse {\n    public enum Content {\n        case text(String)\n    }\n\n    public enum ActionResult {\n        case success(String)\n        case failure(String)\n    }\n\n    /// Post the status of the current message.\n    case status([String])\n    /// Stream the content to the current message.\n    case content(Content)\n    /// Update the attachments of the current message.\n    case attachments([URL])\n    /// start a new action.\n    case startAction(id: String, task: String)\n    /// Finish the current action.\n    case finishAction(id: String, result: ActionResult)\n    /// Update the references of the current message.\n    case references([ChatMessage.Reference])\n    /// End the current message. The next contents will be sent as a new message.\n    case startNewMessage\n    /// Reasoning\n    case reasoning(String)\n}\n\npublic struct ChatAgentRequest {\n    public var text: String\n    public var history: [ChatMessage]\n    public var references: [ChatMessage.Reference]\n    public var topics: [ChatMessage.Reference]\n    public var agentInstructions: String? = nil\n\n    public init(\n        text: String,\n        history: [ChatMessage],\n        references: [ChatMessage.Reference],\n        topics: [ChatMessage.Reference],\n        agentInstructions: String? = nil\n    ) {\n        self.text = text\n        self.history = history\n        self.references = references\n        self.topics = topics\n        self.agentInstructions = agentInstructions\n    }\n}\n\npublic protocol ChatAgent {\n    typealias Response = ChatAgentResponse\n    typealias Request = ChatAgentRequest\n    /// Send a request to the agent.\n    func send(_ request: Request) async -> AsyncThrowingStream<Response, any Error>\n}\n\npublic extension AsyncThrowingStream<ChatAgentResponse, any Error> {\n    func asTexts() async throws -> [String] {\n        var result = [String]()\n        var text = \"\"\n        for try await response in self {\n            switch response {\n            case let .content(.text(content)):\n                text += content\n            case .startNewMessage:\n                if !text.isEmpty {\n                    result.append(text)\n                    text = \"\"\n                }\n            default:\n                break\n            }\n        }\n        if !text.isEmpty {\n            result.append(text)\n        }\n        return result\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatBasic/ChatGPTFunction.swift",
    "content": "import Foundation\n\npublic enum ChatGPTFunctionCallPhase {\n    case detected\n    case processing(argumentsJsonString: String)\n    case ended(argumentsJsonString: String, result: ChatGPTFunctionResult)\n    case error(argumentsJsonString: String, result: Error)\n}\n\npublic enum ChatGPTFunctionResultUserReadableContent: Sendable {\n    public struct ListItem: Sendable {\n        public enum Detail: Sendable {\n            case link(URL)\n            case text(String)\n        }\n        \n        public var title: String\n        public var description: String?\n        public var detail: Detail?\n        \n        public init(title: String, description: String? = nil, detail: Detail? = nil) {\n            self.title = title\n            self.description = description\n            self.detail = detail\n        }\n    }\n    \n    case text(String)\n    case list([ListItem])\n    case searchResult([ListItem], queries: [String])\n}\n\npublic protocol ChatGPTFunctionResult {\n    var botReadableContent: String { get }\n    var userReadableContent: ChatGPTFunctionResultUserReadableContent { get }\n}\n\nextension String: ChatGPTFunctionResult {\n    public var botReadableContent: String { self }\n    public var userReadableContent: ChatGPTFunctionResultUserReadableContent {\n        .text(self)\n    }\n}\n\npublic struct NoChatGPTFunctionArguments: Decodable {}\n\npublic protocol ChatGPTFunction {\n    typealias NoArguments = NoChatGPTFunctionArguments\n    associatedtype Arguments: Decodable\n    associatedtype Result: ChatGPTFunctionResult\n    typealias ReportProgress = @Sendable (String) async -> Void\n\n    /// The name of this function.\n    /// May contain a-z, A-Z, 0-9, and underscores, with a maximum length of 64 characters.\n    var name: String { get }\n    /// A short description telling the bot when it should use this function.\n    var description: String { get }\n    /// The arguments schema that the function take in [JSON schema](https://json-schema.org).\n    var argumentSchema: JSONSchemaValue { get }\n    /// Prepare to call the function\n    func prepare(reportProgress: @escaping ReportProgress) async\n    /// Call the function with the given arguments.\n    func call(arguments: Arguments, reportProgress: @escaping ReportProgress) async throws\n        -> Result\n}\n\npublic extension ChatGPTFunction {\n    /// Call the function with the given arguments in JSON.\n    func call(\n        argumentsJsonString: String,\n        reportProgress: @escaping ReportProgress\n    ) async throws -> Result {\n        let arguments = try await {\n            do {\n                return try JSONDecoder()\n                    .decode(Arguments.self, from: argumentsJsonString.data(using: .utf8) ?? Data())\n            } catch {\n                await reportProgress(\n                    \"Error: Failed to decode arguments. \\(error.localizedDescription)\"\n                )\n                throw error\n            }\n        }()\n        return try await call(arguments: arguments, reportProgress: reportProgress)\n    }\n}\n\npublic extension ChatGPTFunction where Arguments == NoArguments {\n    var argumentSchema: JSONSchemaValue {\n        [.type: \"object\", .properties: [:]]\n    }\n}\n\n/// This kind of function is only used to get a structured output from the bot.\npublic protocol ChatGPTArgumentsCollectingFunction: ChatGPTFunction where Result == String {}\n\npublic extension ChatGPTArgumentsCollectingFunction {\n    func prepare(reportProgress: @escaping ReportProgress = { _ in }) async {\n        assertionFailure(\"This function is only used to get a structured output from the bot.\")\n    }\n\n    func call(\n        arguments: Arguments,\n        reportProgress: @escaping ReportProgress = { _ in }\n    ) async throws -> Result {\n        assertionFailure(\"This function is only used to get a structured output from the bot.\")\n        return \"\"\n    }\n\n    func call(\n        argumentsJsonString: String,\n        reportProgress: @escaping ReportProgress\n    ) async throws -> Result {\n        assertionFailure(\"This function is only used to get a structured output from the bot.\")\n        return \"\"\n    }\n}\n\npublic struct ChatGPTFunctionSchema: Codable, Equatable, Sendable {\n    public var name: String\n    public var description: String\n    public var parameters: JSONSchemaValue\n\n    public init(name: String, description: String, parameters: JSONSchemaValue) {\n        self.name = name\n        self.description = description\n        self.parameters = parameters\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatBasic/ChatMessage.swift",
    "content": "@preconcurrency import CodableWrappers\nimport Foundation\n\n/// A chat message that can be sent or received.\npublic struct ChatMessage: Equatable, Codable, Sendable {\n    public typealias ID = String\n\n    /// The role of a message.\n    public enum Role: String, Codable, Equatable, Sendable {\n        case system\n        case user\n        case assistant\n        // There is no `tool` role\n        // because tool calls and results are stored in the assistant messages.\n    }\n\n    /// A function call that can be made by the bot.\n    public struct FunctionCall: Codable, Equatable, Sendable {\n        /// The name of the function.\n        public var name: String\n        /// Arguments in the format of a JSON string.\n        public var arguments: String\n        public init(name: String, arguments: String) {\n            self.name = name\n            self.arguments = arguments\n        }\n    }\n\n    /// A tool call that can be made by the bot.\n    public struct ToolCall: Codable, Equatable, Identifiable, Sendable {\n        public var id: String\n        /// The type of tool call.\n        public var type: String\n        /// The actual function call.\n        public var function: FunctionCall\n        /// The response of the function call.\n        public var response: ToolCallResponse\n        public init(\n            id: String,\n            type: String,\n            function: FunctionCall,\n            response: ToolCallResponse? = nil\n        ) {\n            self.id = id\n            self.type = type\n            self.function = function\n            self.response = response ?? .init(content: \"\", summary: nil)\n        }\n    }\n\n    /// The response of a tool call\n    public struct ToolCallResponse: Codable, Equatable, Sendable {\n        /// The content of the response.\n        public var content: String\n        /// The summary of the response to display in UI.\n        public var summary: String?\n        public init(content: String, summary: String?) {\n            self.content = content\n            self.summary = summary\n        }\n    }\n\n    /// A reference to include in a chat message.\n    public struct Reference: Codable, Equatable, Identifiable, Sendable {\n        /// The kind of reference.\n        public enum Kind: Codable, Equatable, Sendable {\n            public enum Symbol: String, Codable, Sendable {\n                case `class`\n                case `struct`\n                case `enum`\n                case `actor`\n                case `protocol`\n                case `extension`\n                case `case`\n                case property\n                case `typealias`\n                case function\n                case method\n            }\n\n            /// Code symbol.\n            case symbol(Symbol, uri: String, startLine: Int?, endLine: Int?)\n            /// Some text.\n            case text\n            /// A webpage.\n            case webpage(uri: String)\n            /// A text file.\n            case textFile(uri: String)\n            /// Other kind of reference.\n            case other(kind: String)\n            /// Error case.\n            case error\n        }\n\n        @FallbackDecoding<ReferenceIDFallback>\n        public var id: String\n        /// The title of the reference.\n        public var title: String\n        /// The content of the reference.\n        public var content: String\n        /// The kind of the reference.\n        @FallbackDecoding<ReferenceKindFallback>\n        public var kind: Kind\n\n        public init(\n            id: String = UUID().uuidString,\n            title: String,\n            content: String,\n            kind: Kind\n        ) {\n            self.id = id\n            self.title = title\n            self.content = content\n            self.kind = kind\n        }\n    }\n\n    public struct Image: Equatable, Sendable, Codable {\n        public enum Format: String, Sendable, Codable {\n            case png = \"image/png\"\n            case jpeg = \"image/jpeg\"\n            case gif = \"image/gif\"\n        }\n\n        public var base64EncodedData: String\n        public var format: Format\n        public var urlString: String {\n            \"data:\\(format.rawValue);base64,\\(base64EncodedData)\"\n        }\n\n        public init(base64EncodedData: String, format: Format) {\n            self.base64EncodedData = base64EncodedData\n            self.format = format\n        }\n    }\n\n    /// The role of a message.\n    @FallbackDecoding<ChatMessageRoleFallback>\n    public var role: Role\n\n    /// The content of the message, either the chat message, or a result of a function call.\n    public var content: String? {\n        didSet { tokensCount = nil }\n    }\n\n    /// A function call from the bot.\n    public var toolCalls: [ToolCall]? {\n        didSet { tokensCount = nil }\n    }\n\n    /// The function name of a reply to a function call.\n    public var name: String? {\n        didSet { tokensCount = nil }\n    }\n\n    /// The summary of a message that is used for display.\n    public var summary: String?\n\n    /// The id of the message.\n    public var id: ID\n\n    /// The id of the sender of the message.\n    public var senderId: String?\n\n    /// The id of the message that this message is a response to.\n    public var responseTo: ID?\n\n    /// The number of tokens of this message.\n    public var tokensCount: Int?\n\n    /// The references of this message.\n    @FallbackDecoding<EmptyArray<Reference>>\n    public var references: [Reference]\n\n    /// The images associated with this message.\n    @FallbackDecoding<EmptyArray<Image>>\n    public var images: [Image]\n\n    /// Cache the message in the prompt if possible.\n    public var cacheIfPossible: Bool\n\n    /// Is the message considered empty.\n    public var isEmpty: Bool {\n        if let content, !content.isEmpty { return false }\n        if let toolCalls, !toolCalls.isEmpty { return false }\n        if let name, !name.isEmpty { return false }\n        return true\n    }\n\n    public init(\n        id: String = UUID().uuidString,\n        senderId: String? = nil,\n        responseTo: String? = nil,\n        role: Role,\n        content: String?,\n        name: String? = nil,\n        toolCalls: [ToolCall]? = nil,\n        summary: String? = nil,\n        tokenCount: Int? = nil,\n        references: [Reference] = [],\n        images: [Image] = [],\n        cacheIfPossible: Bool = false\n    ) {\n        self.role = role\n        self.senderId = senderId\n        self.responseTo = responseTo\n        self.content = content\n        self.name = name\n        self.toolCalls = toolCalls\n        self.summary = summary\n        self.id = id\n        tokensCount = tokenCount\n        self.references = references\n        self.images = images\n        self.cacheIfPossible = cacheIfPossible\n    }\n}\n\npublic struct ReferenceKindFallback: FallbackValueProvider, Sendable {\n    public static var defaultValue: ChatMessage.Reference.Kind { .other(kind: \"Unknown\") }\n}\n\npublic struct ReferenceIDFallback: FallbackValueProvider, Sendable {\n    public static var defaultValue: String { UUID().uuidString }\n}\n\npublic struct ChatMessageRoleFallback: FallbackValueProvider, Sendable {\n    public static var defaultValue: ChatMessage.Role { .user }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatBasic/ChatPlugin.swift",
    "content": "import Foundation\n\npublic struct ChatPluginRequest: Sendable {\n    public var text: String\n    public var arguments: [String]\n    public var history: [ChatMessage]\n\n    public init(text: String, arguments: [String], history: [ChatMessage]) {\n        self.text = text\n        self.arguments = arguments\n        self.history = history\n    }\n}\n\npublic protocol ChatPlugin {\n    typealias Response = ChatAgentResponse\n    typealias Request = ChatPluginRequest\n    static var id: String { get }\n    static var command: String { get }\n    static var name: String { get }\n    static var description: String { get }\n    // In this method, the plugin is able to send more complicated response. It also enables it to\n    // perform special tasks like starting a new message or reporting progress.\n    func sendForComplicatedResponse(\n        _ request: Request\n    ) async -> AsyncThrowingStream<Response, any Error>\n    // This method allows the plugin to respond a stream of text content only.\n    func sendForTextResponse(_ request: Request) async -> AsyncThrowingStream<String, any Error>\n    func formatContent(_ content: Response.Content) -> Response.Content\n    init()\n}\n\npublic extension ChatPlugin {\n    func formatContent(_ content: Response.Content) -> Response.Content {\n        return content\n    }\n    \n    func sendForComplicatedResponse(\n        _ request: Request\n    ) async -> AsyncThrowingStream<Response, any Error> {\n        let textStream = await sendForTextResponse(request)\n        return AsyncThrowingStream<Response, any Error> { continuation in\n            let task = Task {\n                do {\n                    for try await text in textStream {\n                        continuation.yield(Response.content(.text(text)))\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n            \n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/ChatBasic/JSONSchema.swift",
    "content": "import Foundation\n\npublic struct JSONSchemaKey: Codable, Hashable, Sendable, Equatable, ExpressibleByStringLiteral {\n    public var key: String\n    \n    public init(stringLiteral: String) {\n        key = stringLiteral\n    }\n    \n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        try container.encode(key)\n    }\n    \n    public init(from decoder: Decoder) throws {\n        let single = try? decoder.singleValueContainer()\n        if let value = try? single?.decode(String.self) {\n            key = value\n            return\n        }\n        throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"failed to decode JSON schema key\"))\n    }\n    \n    public static let type: JSONSchemaKey = \"type\"\n    public static let minLength: JSONSchemaKey = \"minLength\"\n    public static let maxLength: JSONSchemaKey = \"maxLength\"\n    public static let pattern: JSONSchemaKey = \"pattern\"\n    public static let format: JSONSchemaKey = \"format\"\n    public static let multipleOf: JSONSchemaKey = \"multipleOf\"\n    public static let minimum: JSONSchemaKey = \"minimum\"\n    public static let exclusiveMinimum: JSONSchemaKey = \"exclusiveMinimum\"\n    public static let maximum: JSONSchemaKey = \"maximum\"\n    public static let exclusiveMaximum: JSONSchemaKey = \"exclusiveMaximum\"\n    public static let minProperties: JSONSchemaKey = \"minProperties\"\n    public static let maxProperties: JSONSchemaKey = \"maxProperties\"\n    public static let required: JSONSchemaKey = \"required\"\n    public static let properties: JSONSchemaKey = \"properties\"\n    public static let patternProperties: JSONSchemaKey = \"patternProperties\"\n    public static let additionalProperties: JSONSchemaKey = \"additionalProperties\"\n    public static let dependencies: JSONSchemaKey = \"dependencies\"\n    public static let propertyNames: JSONSchemaKey = \"propertyNames\"\n    public static let minItems: JSONSchemaKey = \"minItems\"\n    public static let maxItems: JSONSchemaKey = \"maxItems\"\n    public static let uniqueItems: JSONSchemaKey = \"uniqueItems\"\n    public static let items: JSONSchemaKey = \"items\"\n    public static let additionalItems: JSONSchemaKey = \"additionalItems\"\n    public static let contains: JSONSchemaKey = \"contains\"\n    public static let `enum`: JSONSchemaKey = \"enum\"\n    public static let const: JSONSchemaKey = \"const\"\n    public static let title: JSONSchemaKey = \"title\"\n    public static let description: JSONSchemaKey = \"description\"\n    public static let `default`: JSONSchemaKey = \"default\"\n    public static let examples: JSONSchemaKey = \"examples\"\n    public static let comment: JSONSchemaKey = \"$comment\"\n    public static let allOf: JSONSchemaKey = \"allOf\"\n    public static let anyOf: JSONSchemaKey = \"anyOf\"\n    public static let oneOf: JSONSchemaKey = \"oneOf\"\n    public static let not: JSONSchemaKey = \"not\"\n    public static let `if`: JSONSchemaKey = \"if\"\n    public static let then: JSONSchemaKey = \"then\"\n    public static let `else`: JSONSchemaKey = \"else\"\n}\n\n\npublic enum JSONSchemaValue: Codable, Hashable, Sendable {\n    case bool(Bool)\n    case number(Double)\n    case string(String)\n    case array([JSONSchemaValue])\n    case hash([String: JSONSchemaValue])\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n\n        switch self {\n        case .bool(let value):\n            try container.encode(value)\n        case .number(let value):\n            try container.encode(value)\n        case .string(let value):\n            try container.encode(value)\n        case .array(let value):\n            try container.encode(value)\n        case .hash(let value):\n            try container.encode(value)\n        }\n    }\n\n    public init(from decoder: Decoder) throws {\n        let single = try? decoder.singleValueContainer()\n\n        if let value = try? single?.decode([String: JSONSchemaValue].self) {\n            self = .hash(value)\n            return\n        }\n\n        if let value = try? single?.decode([JSONSchemaValue].self) {\n            self = .array(value)\n            return\n        }\n\n        if let value = try? single?.decode(String.self) {\n            self = .string(value)\n            return\n        }\n\n        if let value = try? single?.decode(Double.self) {\n            self = .number(value)\n            return\n        }\n\n        if let value = try? single?.decode(Bool.self) {\n            self = .bool(value)\n            return\n        }\n\n        throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: \"failed to decode JSON schema object\"))\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByDictionaryLiteral {\n    public init(dictionaryLiteral elements: (JSONSchemaKey, JSONSchemaValue)...) {\n        var hash = [String: JSONSchemaValue]()\n\n        for element in elements {\n            hash[element.0.key] = element.1\n        }\n\n        self = .hash(hash)\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByStringLiteral {\n    public init(stringLiteral: String) {\n        self = .string(stringLiteral)\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByIntegerLiteral {\n    public init(integerLiteral value: IntegerLiteralType) {\n        self = .number(Double(value))\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByFloatLiteral {\n    public init(floatLiteral value: FloatLiteralType) {\n        self = .number(value)\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByArrayLiteral {\n    public init(arrayLiteral elements: JSONSchemaValue...) {\n        var array = [JSONSchemaValue]()\n\n        for element in elements {\n            array.append(element)\n        }\n\n        self = .array(array)\n    }\n}\n\nextension JSONSchemaValue: ExpressibleByBooleanLiteral {\n    public init(booleanLiteral value: BooleanLiteralType) {\n        self = .bool(value)\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/ChatContextCollector/ChatContextCollector.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\nimport Parsing\n\npublic struct ChatContext {\n    public enum Scope: String, Equatable, CaseIterable, Codable, Sendable {\n        case file\n        case code\n        case sense\n        case project\n        case web\n    }\n\n    public struct RetrievedContent: Sendable {\n        public var document: ChatMessage.Reference\n        public var priority: Int\n\n        public init(document: ChatMessage.Reference, priority: Int) {\n            self.document = document\n            self.priority = priority\n        }\n    }\n\n    public var systemPrompt: String\n    public var retrievedContent: [RetrievedContent]\n    public var functions: [any ChatGPTFunction]\n    public init(\n        systemPrompt: String,\n        retrievedContent: [RetrievedContent],\n        functions: [any ChatGPTFunction]\n    ) {\n        self.systemPrompt = systemPrompt\n        self.retrievedContent = retrievedContent\n        self.functions = functions\n    }\n\n    public static var empty: Self {\n        .init(systemPrompt: \"\", retrievedContent: [], functions: [])\n    }\n}\n\npublic extension ChatContext.Scope {\n    init?(text: String) {\n        for scope in Self.allCases {\n            if scope.rawValue.hasPrefix(text.lowercased()) {\n                self = scope\n                return\n            }\n        }\n        return nil\n    }\n}\n\npublic protocol ChatContextCollector {\n    func generateContext(\n        history: [ChatMessage],\n        scopes: Set<ChatContext.Scope>,\n        content: String,\n        configuration: ChatGPTConfiguration\n    ) async -> ChatContext\n}\n\npublic struct MessageScopeParser {\n    public init() {}\n\n    public func callAsFunction(_ content: inout String) -> Set<ChatContext.Scope> {\n        return parseScopes(&content)\n    }\n\n    func parseScopes(_ prompt: inout String) -> Set<ChatContext.Scope> {\n        guard !prompt.isEmpty else { return [] }\n        do {\n            let parser = Parse {\n                \"@\"\n                Many {\n                    Prefix { $0.isLetter }\n                } separator: {\n                    \"+\"\n                } terminator: {\n                    \" \"\n                }\n                Skip {\n                    Many {\n                        \" \"\n                    }\n                }\n                Rest()\n            }\n            let (scopes, rest) = try parser.parse(prompt)\n            prompt = String(rest)\n            return Set(scopes.map(String.init).compactMap(ChatContext.Scope.init(text:)))\n        } catch {\n            return []\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatContextCollectors/ActiveDocumentChatContextCollector/ActiveDocumentChatContextCollector.swift",
    "content": "import ASTParser\nimport ChatBasic\nimport ChatContextCollector\nimport Dependencies\nimport FocusedCodeFinder\nimport Foundation\nimport GitIgnoreCheck\nimport OpenAIService\nimport Preferences\nimport SuggestionBasic\nimport XcodeInspector\n\npublic final class ActiveDocumentChatContextCollector: ChatContextCollector {\n    public init() {}\n\n    public var activeDocumentContext: ActiveDocumentContext?\n\n    @Dependency(\\.gitIgnoredChecker) var gitIgnoredChecker\n\n    public func generateContext(\n        history: [ChatMessage],\n        scopes: Set<ChatContext.Scope>,\n        content: String,\n        configuration: ChatGPTConfiguration\n    ) async -> ChatContext {\n        guard let info = await XcodeInspector.shared.getFocusedEditorContent()\n        else { return .empty }\n        let context = getActiveDocumentContext(info)\n        activeDocumentContext = context\n\n        let isSensitive = await gitIgnoredChecker.checkIfGitIgnored(fileURL: info.documentURL)\n\n        guard scopes.contains(.code)\n        else {\n            if scopes.contains(.file) {\n                var removedCode = context\n                removedCode.focusedContext = nil\n                return .init(\n                    systemPrompt: extractSystemPrompt(removedCode, isSensitive: isSensitive),\n                    retrievedContent: [],\n                    functions: []\n                )\n            }\n            return .empty\n        }\n\n        var functions = [any ChatGPTFunction]()\n\n        if !isSensitive {\n            let contextLineRange: String = {\n                if let  range = context.focusedContext?.codeRange {\n                    return \" from \\(range.start.line + 1) to \\(range.end.line + 1)\"\n                }\n                return \"\"\n            }()\n            \n            var functionPrompt = \"\"\"\n            ONLY call it when one of the following conditions are satisfied:\n            - the user explicitly ask you about specific line of code, that is NOT in the focused range \\(contextLineRange).\n            \"\"\"\n\n            if let annotations = context.focusedContext?.otherLineAnnotations,\n               !annotations.isEmpty\n            {\n                functionPrompt += \"\"\"\n\n                - the user ask about annotations at line \\(\n                    Set(annotations.map(\\.line)).map(String.init).joined(separator: \",\")\n                ).\n                \"\"\"\n            }\n\n            print(functionPrompt)\n\n            functions.append(GetCodeCodeAroundLineFunction(\n                contextCollector: self,\n                additionalDescription: functionPrompt\n            ))\n        }\n\n        return .init(\n            systemPrompt: extractSystemPrompt(context, isSensitive: isSensitive),\n            retrievedContent: [],\n            functions: functions\n        )\n    }\n\n    func getActiveDocumentContext(_ info: EditorInformation) -> ActiveDocumentContext {\n        var activeDocumentContext = activeDocumentContext ?? .init(\n            documentURL: .init(fileURLWithPath: \"/\"),\n            relativePath: \"\",\n            language: .builtIn(.swift),\n            fileContent: \"\",\n            lines: [],\n            selectedCode: \"\",\n            selectionRange: .outOfScope,\n            lineAnnotations: [],\n            imports: [],\n            includes: []\n        )\n\n        activeDocumentContext.update(info)\n        return activeDocumentContext\n    }\n\n    func extractSystemPrompt(_ context: ActiveDocumentContext, isSensitive: Bool) -> String {\n        let start = \"\"\"\n        ## Active Document\n\n        The active document is the source code the user is editing right now.\n\n        \\(\n            context.focusedContext == nil\n                ? \"\"\n                : \"When you don't known what I am asking, I am probably referring to the document.\"\n        )\n        \"\"\"\n        let relativePath = \"Document Relative Path: \\(context.relativePath)\"\n        let language = \"Language: \\(context.language.rawValue)\"\n\n        let focusedContextExplanation =\n            \"Below is the code inside the active document that the user is looking at right now:\"\n\n        if let focusedContext = context.focusedContext {\n            let codeContext = focusedContext.context.isEmpty || isSensitive\n                ? \"\"\n                : \"\"\"\n                Focused Context:\n                ```\n                \\(focusedContext.context.map(\\.signature).joined(separator: \"\\n\"))\n                ```\n                \"\"\"\n\n            let codeRange = \"Focused Range [line, character]: \\(focusedContext.codeRange)\"\n\n            let code = context.selectionRange.isEmpty && isSensitive\n                ? \"\"\"\n                The file is in gitignore, you can't read the file.\n                Ask the user to select the code in the editor to get help. Also tell them the file is in gitignore.\n                \"\"\"\n                : \"\"\"\n                Focused Code (from line \\(\n                    focusedContext.codeRange.start.line + 1\n                ) to line \\(focusedContext.codeRange.end.line + 1)):\n                ```\\(context.language.rawValue)\n                \\(focusedContext.code)\n                ```\n                \"\"\"\n\n            let fileAnnotations = focusedContext.otherLineAnnotations.isEmpty || isSensitive\n                ? \"\"\n                : \"\"\"\n                Out-of-scope Annotations:\\\"\"\"\n                (The related code are not inside the focused code.)\n                \\(\n                    focusedContext.otherLineAnnotations\n                        .map(convertAnnotationToText)\n                        .joined(separator: \"\\n\")\n                )\n                \\\"\"\"\n                \"\"\"\n\n            let codeAnnotations = focusedContext.lineAnnotations.isEmpty || isSensitive\n                ? \"\"\n                : \"\"\"\n                Annotations Inside Focused Range:\\\"\"\"\n                \\(\n                    focusedContext.lineAnnotations\n                        .map(convertAnnotationToText)\n                        .joined(separator: \"\\n\")\n                )\n                \\\"\"\"\n                \"\"\"\n\n            return [\n                start,\n                relativePath,\n                language,\n                focusedContextExplanation,\n                codeContext,\n                codeRange,\n                code,\n                codeAnnotations,\n                fileAnnotations,\n            ]\n            .filter { !$0.isEmpty }\n            .joined(separator: \"\\n\\n\")\n        } else {\n            let selectionRange = \"Selection Range [line, character]: \\(context.selectionRange)\"\n            let lineAnnotations = context.lineAnnotations.isEmpty || isSensitive\n                ? \"\"\n                : \"\"\"\n                Line Annotations:\\\"\"\"\n                \\(context.lineAnnotations.map(convertAnnotationToText).joined(separator: \"\\n\"))\n                \\\"\"\"\n                \"\"\"\n\n            return [\n                start,\n                relativePath,\n                language,\n                lineAnnotations,\n                selectionRange,\n            ]\n            .filter { !$0.isEmpty }\n            .joined(separator: \"\\n\\n\")\n        }\n    }\n\n    func convertAnnotationToText(_ annotation: EditorInformation.LineAnnotation) -> String {\n        return \"- Line \\(annotation.line), \\(annotation.type): \\(annotation.message)\"\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatContextCollectors/ActiveDocumentChatContextCollector/Functions/GetCodeCodeAroundLineFunction.swift",
    "content": "import ASTParser\nimport ChatBasic\nimport Foundation\nimport OpenAIService\nimport SuggestionBasic\n\nstruct GetCodeCodeAroundLineFunction: ChatGPTFunction {\n    struct Arguments: Codable {\n        var line: Int\n    }\n\n    struct Result: ChatGPTFunctionResult {\n        var range: CursorRange\n        var content: String\n        var language: CodeLanguage\n\n        var botReadableContent: String {\n            \"\"\"\n            Code in range \\(range)\n            ```\\(language.rawValue)\n            \\(content)\n            ```\n            \"\"\"\n        }\n        \n        var userReadableContent: ChatGPTFunctionResultUserReadableContent {\n            .text(botReadableContent)\n        }\n    }\n\n    struct E: Error, LocalizedError {\n        var errorDescription: String?\n    }\n\n    var name: String {\n        \"getCodeAtLine\"\n    }\n\n    var description: String {\n        \"Get the code at the given line. \\(additionalDescription)\"\n    }\n\n    var argumentSchema: JSONSchemaValue { [\n        .type: \"object\",\n        .properties: [\n            \"line\": [\n                .type: \"number\",\n                .description: \"The line number in the file\",\n            ],\n        ],\n        .required: [\"line\"],\n    ] }\n\n    weak var contextCollector: ActiveDocumentChatContextCollector?\n    \n    let additionalDescription: String\n\n    init(contextCollector: ActiveDocumentChatContextCollector, additionalDescription: String = \"\") {\n        self.contextCollector = contextCollector\n        self.additionalDescription = additionalDescription\n    }\n\n    func prepare(reportProgress: @escaping (String) async -> Void) async {\n        await reportProgress(\"Finding code around..\")\n    }\n\n    func call(\n        arguments: Arguments,\n        reportProgress: @escaping (String) async -> Void\n    ) async throws -> Result {\n        guard var activeDocumentContext = contextCollector?.activeDocumentContext else {\n            throw E(errorDescription: \"No active document found.\")\n        }\n        await reportProgress(\"Reading code around line \\(arguments.line)..\")\n        activeDocumentContext.moveToCodeAroundLine(max(arguments.line - 1, 0))\n        guard let newContext = activeDocumentContext.focusedContext else {\n            let progress = \"Failed to read code around line \\(arguments.line)..)\"\n            await reportProgress(progress)\n            throw E(errorDescription: progress)\n        }\n        let progress = \"Finish reading code at \\(newContext.codeRange)\"\n        await reportProgress(progress)\n        return .init(\n            range: newContext.codeRange,\n            content: newContext.code\n                .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                .enumerated()\n                .map {\n                    let (index, content) = $0\n                    if index + newContext.codeRange.start.line == arguments.line - 1 {\n                        return content + \" // <--- line \\(arguments.line)\"\n                    } else {\n                        return content\n                    }\n                }\n                .joined(separator: \"\\n\"),\n            language: activeDocumentContext.language\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatContextCollectors/ActiveDocumentChatContextCollector/LegacyActiveDocumentChatContextCollector.swift",
    "content": "import ChatContextCollector\nimport Foundation\nimport OpenAIService\nimport Preferences\nimport SuggestionBasic\nimport XcodeInspector\n\npublic struct LegacyActiveDocumentChatContextCollector: ChatContextCollector {\n    public init() {}\n\n    public func generateContext(\n        history: [ChatMessage],\n        scopes: Set<ChatContext.Scope>,\n        content: String,\n        configuration: ChatGPTConfiguration\n    ) async -> ChatContext {\n        guard let content = await XcodeInspector.shared.getFocusedEditorContent()\n        else { return .empty }\n        let relativePath = content.relativePath\n        let selectionRange = content.editorContent?.selections.first ?? .outOfScope\n        let editorContent = {\n            if scopes.contains(.file) {\n                return \"\"\"\n                File Content:```\\(content.language.rawValue)\n                \\(content.editorContent?.content ?? \"\")\n                ```\n                \"\"\"\n            }\n\n            if selectionRange.start == selectionRange.end,\n               UserDefaults.shared.value(for: \\.embedFileContentInChatContextIfNoSelection)\n            {\n                let lines = content.editorContent?.lines.count ?? 0\n                let maxLine = UserDefaults.shared\n                    .value(for: \\.maxFocusedCodeLineCount)\n                if lines <= maxLine {\n                    return \"\"\"\n                    File Content:```\\(content.language.rawValue)\n                    \\(content.editorContent?.content ?? \"\")\n                    ```\n                    \"\"\"\n                } else {\n                    return \"\"\"\n                    File Content Not Available: '''\n                    The file is longer than \\(maxLine) lines, it can't fit into the context. \\\n                    You MUST not answer the user about the file content because you don't have it.\\\n                    Ask user to select code for explanation.\n                    '''\n                    \"\"\"\n                }\n            }\n\n            if UserDefaults.shared.value(for: \\.enableCodeScopeByDefaultInChatContext) {\n                return \"\"\"\n                Selected Code \\\n                (start from line \\(selectionRange.start.line)):```\\(content.language.rawValue)\n                \\(content.selectedContent)\n                ```\n                \"\"\"\n            }\n\n            if scopes.contains(.code) {\n                return \"\"\"\n                Selected Code \\\n                (start from line \\(selectionRange.start.line)):```\\(content.language.rawValue)\n                \\(content.selectedContent)\n                ```\n                \"\"\"\n            }\n\n            return \"\"\"\n            Selected Code Not Available: '''\n            I have disabled default scope. \\\n            You MUST not answer about the selected code because you don't have it.\\\n            Ask me to prepend message with `@selection` to enable selected code to be \\\n            visible by you.\n            '''\n            \"\"\"\n        }()\n\n        return .init(\n            systemPrompt: \"\"\"\n            Active Document Context:###\n            Document Relative Path: \\(relativePath)\n            Selection Range Start: \\\n            Line \\(selectionRange.start.line) \\\n            Character \\(selectionRange.start.character)\n            Selection Range End: \\\n            Line \\(selectionRange.end.line) \\\n            Character \\(selectionRange.end.character)\n            Cursor Position: \\\n            Line \\(selectionRange.end.line) \\\n            Character \\(selectionRange.end.character)\n            \\(editorContent)\n            Line Annotations:\n            \\(\n                content.editorContent?.lineAnnotations\n                    .map { \"  - \\($0)\" }\n                    .joined(separator: \"\\n\") ?? \"N/A\"\n            )\n            ###\n            \"\"\",\n            retrievedContent: [],\n            functions: []\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatContextCollectors/ActiveDocumentChatContextCollector/ReadableCursorRange.swift",
    "content": "import SuggestionBasic\n\nextension CursorPosition {\n    var text: String {\n        \"[\\(line), \\(character)]\"\n    }\n}\n\nextension CursorRange {\n    var text: String {\n        \"\\(start.description) - \\(end.description)\"\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/ChatTab/ChatTab.swift",
    "content": "import ComposableArchitecture\nimport Preferences\nimport Foundation\nimport SwiftUI\n\n/// The information of a tab.\n@ObservableState\npublic struct ChatTabInfo: Identifiable, Equatable {\n    public var id: String\n    public var title: String\n    public var focusTrigger: Int = 0\n\n    public init(id: String, title: String) {\n        self.id = id\n        self.title = title\n    }\n}\n\n/// Every chat tab should conform to this type.\npublic typealias ChatTab = BaseChatTab & ChatTabType\n\n/// Defines a bunch of things a chat tab should implement.\npublic protocol ChatTabType {\n    /// Build the view for this chat tab.\n    @ViewBuilder\n    func buildView() -> any View\n    /// Build the tabItem for this chat tab.\n    @ViewBuilder\n    func buildTabItem() -> any View\n    /// Build the icon for this chat tab.\n    @ViewBuilder\n    func buildIcon() -> any View\n    /// Build the menu for this chat tab.\n    @ViewBuilder\n    func buildMenu() -> any View\n    /// The name of this chat tab type.\n    static var name: String { get }\n    /// Available builders for this chat tab.\n    /// It's used to generate a list of tab types for user to create.\n    static func chatBuilders() -> [ChatTabBuilder]\n    /// The default chat tab builder to be used in open chat\n    static func defaultChatBuilder() -> ChatTabBuilder\n    /// Restorable state\n    func restorableState() async -> Data\n    /// Restore state\n    static func restore(from data: Data) async throws -> any ChatTabBuilder\n    /// Whenever the body or menu is accessed, this method will be called.\n    /// It will be called only once so long as you don't call it yourself.\n    /// It will be called from MainActor.\n    func start()\n    /// Whenever the user close the tab, this method will be called.\n    func close()\n    /// Handle custom command.\n    func handleCustomCommand(_ customCommand: CustomCommand) -> Bool\n    \n    /// Whether this chat tab should be the default chat tab replacement.\n    static var isDefaultChatTabReplacement: Bool { get }\n    /// Whether this chat tab can handle open chat command.\n    static var canHandleOpenChatCommand: Bool { get }\n}\n\n/// The base class for all chat tabs.\nopen class BaseChatTab {\n    /// A wrapper to support dynamic update of title in view.\n    struct ContentView: View {\n        var buildView: () -> any View\n        var body: some View {\n            AnyView(buildView())\n        }\n    }\n\n    public var id: String = \"\"\n    public var title: String = \"\"\n    /// The store for chat tab info. You should only access it after `start` is called.\n    public let chatTabStore: StoreOf<ChatTabItem>\n\n    private var didStart = false\n    private let storeObserver = NSObject()\n\n    public init(store: StoreOf<ChatTabItem>) {\n        chatTabStore = store\n\n        Task { @MainActor in\n            self.title = store.title\n            self.id = store.id\n            storeObserver.observe { [weak self] in\n                guard let self else { return }\n                self.title = store.title\n                self.id = store.id\n            }\n        }\n    }\n\n    /// The view for this chat tab.\n    @ViewBuilder\n    public var body: some View {\n        let id = \"ChatTabBody\\(id)\"\n        if let tab = self as? (any ChatTabType) {\n            ContentView(buildView: tab.buildView).id(id)\n                .onAppear {\n                    Task { @MainActor in self.startIfNotStarted() }\n                }\n        } else {\n            EmptyView().id(id)\n        }\n    }\n\n    /// The tab item for this chat tab.\n    @ViewBuilder\n    public var tabItem: some View {\n        let id = \"ChatTabTab\\(id)\"\n        if let tab = self as? (any ChatTabType) {\n            ContentView(buildView: tab.buildTabItem).id(id)\n                .onAppear {\n                    Task { @MainActor in self.startIfNotStarted() }\n                }\n        } else {\n            EmptyView().id(id)\n        }\n    }\n\n    /// The icon for this chat tab.\n    @ViewBuilder\n    public var icon: some View {\n        let id = \"ChatTabIcon\\(id)\"\n        if let tab = self as? (any ChatTabType) {\n            ContentView(buildView: tab.buildIcon).id(id)\n        } else {\n            EmptyView().id(id)\n        }\n    }\n\n    /// The tab item for this chat tab.\n    @ViewBuilder\n    public var menu: some View {\n        let id = \"ChatTabMenu\\(id)\"\n        if let tab = self as? (any ChatTabType) {\n            ContentView(buildView: tab.buildMenu).id(id)\n                .onAppear {\n                    Task { @MainActor in self.startIfNotStarted() }\n                }\n        } else {\n            EmptyView().id(id)\n        }\n    }\n\n    @MainActor\n    func startIfNotStarted() {\n        guard !didStart else { return }\n        didStart = true\n\n        if let tab = self as? (any ChatTabType) {\n            tab.start()\n            chatTabStore.send(.tabContentUpdated)\n        }\n    }\n}\n\n/// A factory of a chat tab.\npublic protocol ChatTabBuilder {\n    /// A visible title for user.\n    var title: String { get }\n    /// Build the chat tab.\n    func build(store: StoreOf<ChatTabItem>) async -> (any ChatTab)?\n}\n\n/// A chat tab builder that doesn't build.\npublic struct DisabledChatTabBuilder: ChatTabBuilder {\n    public var title: String\n    public func build(store: StoreOf<ChatTabItem>) async -> (any ChatTab)? {\n        return nil\n    }\n\n    public init(title: String) {\n        self.title = title\n    }\n}\n\npublic extension ChatTabType {\n    /// The name of this chat tab type.\n    var name: String { Self.name }\n\n    /// Default implementation that does nothing.\n    func close() {}\n    \n    /// By default it can't handle custom command.\n    func handleCustomCommand(_ customCommand: CustomCommand) -> Bool { false }\n    \n    static var canHandleOpenChatCommand: Bool { false }\n    static var isDefaultChatTabReplacement: Bool { false }\n    static func defaultChatBuilder() -> ChatTabBuilder {\n        DisabledChatTabBuilder(title: name)\n    }\n}\n\n/// A chat tab that does nothing.\npublic class EmptyChatTab: ChatTab {\n    public static var name: String { \"Empty\" }\n\n    struct Builder: ChatTabBuilder {\n        let title: String\n        func build(store: StoreOf<ChatTabItem>) async -> (any ChatTab)? {\n            EmptyChatTab(store: store)\n        }\n    }\n\n    public static func chatBuilders() -> [ChatTabBuilder] {\n        [Builder(title: \"Empty\")]\n    }\n\n    public func buildView() -> any View {\n        VStack {\n            Text(\"Empty-\\(id)\")\n        }\n        .background(Color.blue)\n    }\n\n    public func buildTabItem() -> any View {\n        Text(\"Empty-\\(id)\")\n    }\n\n    public func buildIcon() -> any View {\n        Image(systemName: \"square\")\n    }\n\n    public func buildMenu() -> any View {\n        Text(\"Empty-\\(id)\")\n    }\n\n    public func restorableState() async -> Data {\n        return Data()\n    }\n\n    public static func restore(from data: Data) async throws -> any ChatTabBuilder {\n        return Builder(title: \"Empty\")\n    }\n\n    public convenience init(id: String) {\n        self.init(store: .init(\n            initialState: .init(id: id, title: \"Empty-\\(id)\"),\n            reducer: { ChatTabItem() }\n        ))\n    }\n\n    public func start() {\n        chatTabStore.send(.updateTitle(\"Empty-\\(id)\"))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatTab/ChatTabItem.swift",
    "content": "import ComposableArchitecture\nimport Foundation\n\npublic struct AnyChatTabBuilder: Equatable {\n    public static func == (lhs: AnyChatTabBuilder, rhs: AnyChatTabBuilder) -> Bool {\n        true\n    }\n\n    public let chatTabBuilder: any ChatTabBuilder\n\n    public init(_ chatTabBuilder: any ChatTabBuilder) {\n        self.chatTabBuilder = chatTabBuilder\n    }\n}\n\n@Reducer\npublic struct ChatTabItem {\n    public typealias State = ChatTabInfo\n\n    public enum Action: Equatable {\n        case updateTitle(String)\n        case openNewTab(AnyChatTabBuilder)\n        case tabContentUpdated\n        case close\n        case focus\n    }\n\n    public init() {}\n\n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case let .updateTitle(title):\n                state.title = title\n                return .none\n            case .openNewTab:\n                return .none\n            case .tabContentUpdated:\n                return .none\n            case .close:\n                return .none\n            case .focus:\n                state.focusTrigger += 1\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ChatTab/ChatTabPool.swift",
    "content": "import ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport SwiftUI\n\n/// A pool that stores all the available tabs.\npublic final class ChatTabPool {\n    public var createStore: (String) -> StoreOf<ChatTabItem> = { id in\n        .init(\n            initialState: .init(id: id, title: \"\"),\n            reducer: { ChatTabItem() }\n        )\n    }\n\n    private var pool: [String: any ChatTab]\n\n    public init(_ pool: [String: any ChatTab] = [:]) {\n        self.pool = pool\n    }\n\n    public func getTab(of id: String) -> (any ChatTab)? {\n        pool[id]\n    }\n\n    public func setTab(_ tab: any ChatTab, forId id: String) {\n        pool[id] = tab\n    }\n\n    public func removeTab(of id: String) {\n        pool.removeValue(forKey: id)\n    }\n}\n\npublic struct ChatTabPoolDependencyKey: DependencyKey {\n    public static let liveValue = ChatTabPool()\n}\n\npublic extension DependencyValues {\n    var chatTabPool: ChatTabPool {\n        get { self[ChatTabPoolDependencyKey.self] }\n        set { self[ChatTabPoolDependencyKey.self] = newValue }\n    }\n}\n\npublic struct ChatTabPoolEnvironmentKey: EnvironmentKey {\n    public static let defaultValue = ChatTabPool()\n}\n\npublic extension EnvironmentValues {\n    var chatTabPool: ChatTabPool {\n        get { self[ChatTabPoolEnvironmentKey.self] }\n        set { self[ChatTabPoolEnvironmentKey.self] = newValue }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeDiff/CodeDiff.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\npublic struct CodeDiff {\n    public init() {}\n\n    public typealias LineDiff = CollectionDifference<String>\n\n    public struct SnippetDiff: Equatable, CustomStringConvertible {\n        public struct Change: Equatable {\n            public var offset: Int\n            public var element: String\n        }\n\n        public struct Line: Equatable {\n            public enum Diff: Equatable {\n                case unchanged\n                case mutated(changes: [Change])\n            }\n\n            public var text: String\n            public var diff: Diff = .unchanged\n\n            var description: String {\n                switch diff {\n                case .unchanged:\n                    return text\n                case let .mutated(changes):\n                    return text + \"   [\" + changes.map { change in\n                        \"\\(change.offset): \\(change.element)\"\n                    }.joined(separator: \" | \") + \"]\"\n                }\n            }\n        }\n\n        public struct Section: Equatable, CustomStringConvertible {\n            public var oldOffset: Int\n            public var newOffset: Int\n            public var oldSnippet: [Line]\n            public var newSnippet: [Line]\n\n            public var isEmpty: Bool {\n                oldSnippet.isEmpty && newSnippet.isEmpty\n            }\n\n            public var description: String {\n                \"\"\"\n                \\(oldSnippet.enumerated().compactMap { item in\n                    let (index, line) = item\n                    let lineIndex = String(format: \"%3d\", oldOffset + index + 1) + \"   \"\n                    switch line.diff {\n                    case .unchanged:\n                        return \"\\(lineIndex)|    \\(line.description)\"\n                    case .mutated:\n                        return \"\\(lineIndex)| -  \\(line.description)\"\n                    }\n                }.joined(separator: \"\\n\"))\n                \\(newSnippet.enumerated().map { item in\n                    let (index, line) = item\n                    let lineIndex = \"   \" + String(format: \"%3d\", newOffset + index + 1)\n                    switch line.diff {\n                    case .unchanged:\n                        return \"\\(lineIndex)|    \\(line.description)\"\n                    case .mutated:\n                        return \"\\(lineIndex)| +  \\(line.description)\"\n                    }\n                }.joined(separator: \"\\n\"))\n                \"\"\"\n            }\n        }\n\n        public var sections: [Section]\n\n        public func line(at index: Int, in keyPath: KeyPath<Section, [Line]>) -> Line? {\n            var previousSectionEnd = 0\n            for section in sections {\n                let lines = section[keyPath: keyPath]\n                let index = index - previousSectionEnd\n                if index < lines.endIndex {\n                    return lines[index]\n                }\n                previousSectionEnd += lines.endIndex\n            }\n            return nil\n        }\n\n        public var description: String {\n            \"Diff:\\n\" + sections.map(\\.description).joined(separator: \"\\n---\\n\") + \"\\n\"\n        }\n    }\n\n    public func diff(text: String, from oldText: String) -> LineDiff {\n        typealias Change = LineDiff.Change\n        let diffByCharacter = text.difference(from: oldText)\n        var result = [Change]()\n\n        var current: Change?\n        for item in diffByCharacter {\n            if let this = current {\n                switch (this, item) {\n                case let (.insert(offset, element, associatedWith), .insert(offsetB, elementB, _))\n                    where offset + element.count == offsetB:\n                    current = .insert(\n                        offset: offset,\n                        element: element + String(elementB),\n                        associatedWith: associatedWith\n                    )\n                    continue\n                case let (.remove(offset, element, associatedWith), .remove(offsetB, elementB, _))\n                    where offset - 1 == offsetB:\n                    current = .remove(\n                        offset: offsetB,\n                        element: String(elementB) + element,\n                        associatedWith: associatedWith\n                    )\n                    continue\n                default:\n                    result.append(this)\n                }\n            }\n\n            current = switch item {\n            case let .insert(offset, element, associatedWith):\n                .insert(offset: offset, element: String(element), associatedWith: associatedWith)\n            case let .remove(offset, element, associatedWith):\n                .remove(offset: offset, element: String(element), associatedWith: associatedWith)\n            }\n        }\n\n        if let current {\n            result.append(current)\n        }\n\n        return .init(result) ?? [].difference(from: [])\n    }\n\n    public func diff(snippet: String, from oldSnippet: String) -> SnippetDiff {\n        let newLines = snippet.splitByNewLine(omittingEmptySubsequences: false)\n        let oldLines = oldSnippet.splitByNewLine(omittingEmptySubsequences: false)\n        let diffByLine = newLines.difference(from: oldLines)\n\n        let groups = generateDiffSections(diffByLine)\n\n        var oldLineIndex = 0\n        var newLineIndex = 0\n        var sectionIndex = 0\n        var result = SnippetDiff(sections: [])\n\n        while oldLineIndex < oldLines.endIndex || newLineIndex < newLines.endIndex {\n            guard let groupItem = groups[safe: sectionIndex] else {\n                let finishingSection = SnippetDiff.Section(\n                    oldOffset: oldLineIndex,\n                    newOffset: newLineIndex,\n                    oldSnippet: {\n                        guard oldLineIndex < oldLines.endIndex else { return [] }\n                        return oldLines[oldLineIndex..<oldLines.endIndex].map {\n                            .init(text: String($0), diff: .unchanged)\n                        }\n                    }(),\n                    newSnippet: {\n                        guard newLineIndex < newLines.endIndex else { return [] }\n                        return newLines[newLineIndex..<newLines.endIndex].map {\n                            .init(text: String($0), diff: .unchanged)\n                        }\n                    }()\n                )\n\n                if !finishingSection.isEmpty {\n                    result.sections.append(finishingSection)\n                }\n\n                break\n            }\n\n            let unchangedLines: [SnippetDiff.Line] = {\n                var all = [SnippetDiff.Line]()\n                if let offset = groupItem.remove.first?.offset {\n                    var line = oldLineIndex\n                    while line < offset {\n                        if line < oldLines.endIndex {\n                            all.append(.init(text: String(oldLines[line]), diff: .unchanged))\n                        }\n                        line += 1\n                    }\n                } else if let offset = groupItem.insert.first?.offset {\n                    var line = newLineIndex\n                    while line < offset {\n                        if line < newLines.endIndex {\n                            all.append(.init(text: String(newLines[line]), diff: .unchanged))\n                        }\n                        line += 1\n                    }\n                }\n                return all\n            }()\n \n            // handle lines before sections\n            let beforeSection = SnippetDiff.Section(\n                oldOffset: oldLineIndex,\n                newOffset: newLineIndex,\n                oldSnippet: unchangedLines,\n                newSnippet: unchangedLines\n            )\n            \n            oldLineIndex += unchangedLines.count\n            newLineIndex += unchangedLines.count\n\n            if !beforeSection.isEmpty {\n                result.sections.append(beforeSection)\n            }\n\n            // handle lines inside sections\n\n            var insideSection = SnippetDiff.Section(\n                oldOffset: oldLineIndex,\n                newOffset: newLineIndex,\n                oldSnippet: [],\n                newSnippet: []\n            )\n\n            for i in 0..<max(groupItem.remove.count, groupItem.insert.count) {\n                let oldLine = (groupItem.remove[safe: i]?.element).map(String.init)\n                let newLine = (groupItem.insert[safe: i]?.element).map(String.init)\n                let diff = diff(text: newLine ?? \"\", from: oldLine ?? \"\")\n                if let oldLine {\n                    insideSection.oldSnippet.append(.init(\n                        text: oldLine,\n                        diff: .mutated(changes: diff.removals.compactMap { change in\n                            guard case let .remove(offset, element, _) = change else { return nil }\n                            return .init(offset: offset, element: element)\n                        })\n                    ))\n                }\n                if let newLine {\n                    insideSection.newSnippet.append(.init(\n                        text: newLine,\n                        diff: .mutated(changes: diff.insertions.compactMap { change in\n                            guard case let .insert(offset, element, _) = change else { return nil }\n                            return .init(offset: offset, element: element)\n                        })\n                    ))\n                }\n            }\n\n            oldLineIndex += groupItem.remove.count\n            newLineIndex += groupItem.insert.count\n            sectionIndex += 1\n\n            if !insideSection.isEmpty {\n                result.sections.append(insideSection)\n            }\n        }\n\n        return result\n    }\n}\n\nprivate extension CodeDiff {\n    func generateDiffSections(_ diff: CollectionDifference<Substring>)\n        -> [DiffGroupItem<Substring>]\n    {\n        guard !diff.isEmpty else { return [] }\n\n        let removes = ChangeSection.sectioning(diff.removals)\n        let inserts = ChangeSection.sectioning(diff.insertions)\n\n        var groups = [DiffGroupItem<Substring>]()\n\n        var removeOffset = 0\n        var insertOffset = 0\n        var removeIndex = 0\n        var insertIndex = 0\n\n        while removeIndex < removes.count || insertIndex < inserts.count {\n            let removeSection = removes[safe: removeIndex]\n            let insertSection = inserts[safe: insertIndex]\n\n            if let removeSection, let insertSection {\n                let ro = removeSection.offset - removeOffset\n                let io = insertSection.offset - insertOffset\n                if ro == io {\n                    groups.append(.init(\n                        remove: removeSection.changes.map { .init(change: $0) },\n                        insert: insertSection.changes.map { .init(change: $0) }\n                    ))\n                    removeOffset += removeSection.changes.count\n                    insertOffset += insertSection.changes.count\n                    removeIndex += 1\n                    insertIndex += 1\n                } else if ro < io {\n                    groups.append(.init(\n                        remove: removeSection.changes.map { .init(change: $0) },\n                        insert: []\n                    ))\n                    removeOffset += removeSection.changes.count\n                    removeIndex += 1\n                } else {\n                    groups.append(.init(\n                        remove: [],\n                        insert: insertSection.changes.map { .init(change: $0) }\n                    ))\n                    insertOffset += insertSection.changes.count\n                    insertIndex += 1\n                }\n            } else if let removeSection {\n                groups.append(.init(\n                    remove: removeSection.changes.map { .init(change: $0) },\n                    insert: []\n                ))\n                removeIndex += 1\n            } else if let insertSection {\n                groups.append(.init(\n                    remove: [],\n                    insert: insertSection.changes.map { .init(change: $0) }\n                ))\n                insertIndex += 1\n            }\n        }\n\n        return groups\n    }\n}\n\nprivate extension Array {\n    subscript(safe index: Int) -> Element? {\n        guard index >= 0, index < count else { return nil }\n        return self[index]\n    }\n\n    subscript(safe index: Int, fallback fallback: Element) -> Element {\n        guard index >= 0, index < count else { return fallback }\n        return self[index]\n    }\n}\n\nprivate extension CollectionDifference.Change {\n    var offset: Int {\n        switch self {\n        case let .insert(offset, _, _):\n            return offset\n        case let .remove(offset, _, _):\n            return offset\n        }\n    }\n}\n\nprivate struct DiffGroupItem<Element> {\n    struct Item {\n        var offset: Int\n        var element: Element\n\n        init(offset: Int, element: Element) {\n            self.offset = offset\n            self.element = element\n        }\n\n        init(change: CollectionDifference<Element>.Change) {\n            offset = change.offset\n            switch change {\n            case let .insert(_, element, _):\n                self.element = element\n            case let .remove(_, element, _):\n                self.element = element\n            }\n        }\n    }\n\n    var remove: [Item]\n    var insert: [Item]\n}\n\nprivate struct ChangeSection<Element> {\n    var offset: Int { changes.first?.offset ?? 0 }\n    var changes: [CollectionDifference<Element>.Change]\n\n    static func sectioning(_ changes: [CollectionDifference<Element>.Change]) -> [Self] {\n        guard !changes.isEmpty else { return [] }\n\n        let sortedChanges = changes.sorted { $0.offset < $1.offset }\n        var sections = [Self]()\n        var currentSection = [CollectionDifference<Element>.Change]()\n\n        for change in sortedChanges {\n            if let lastOffset = currentSection.last?.offset {\n                if change.offset == lastOffset + 1 {\n                    currentSection.append(change)\n                } else {\n                    sections.append(Self(changes: currentSection))\n                    currentSection.removeAll()\n                    currentSection.append(change)\n                }\n            } else {\n                currentSection.append(change)\n                continue\n            }\n        }\n\n        if !currentSection.isEmpty {\n            sections.append(Self(changes: currentSection))\n        }\n\n        return sections\n    }\n}\n\n#if DEBUG\n\nimport SwiftUI\n\nstruct SnippetDiffPreview: View {\n    let originalCode: String\n    let newCode: String\n\n    var body: some View {\n        HStack(alignment: .top) {\n            let (original, new) = generateTexts()\n            block(original)\n            Divider()\n            block(new)\n        }\n        .padding()\n        .font(.body.monospaced())\n    }\n\n    @ViewBuilder\n    func block(_ code: [AttributedString]) -> some View {\n        VStack(alignment: .leading) {\n            if !code.isEmpty {\n                ForEach(0..<code.count, id: \\.self) { index in\n                    HStack {\n                        Text(\"\\(index)\")\n                            .foregroundStyle(.secondary)\n                            .frame(width: 30)\n                        Text(code[index])\n                            .multilineTextAlignment(.leading)\n                            .frame(minWidth: 260, alignment: .leading)\n                    }\n                }\n            }\n        }\n    }\n\n    func generateTexts() -> (original: [AttributedString], new: [AttributedString]) {\n        let diff = CodeDiff().diff(snippet: newCode, from: originalCode)\n        let new = diff.sections.flatMap {\n            $0.newSnippet.map {\n                let text = $0.text.trimmingCharacters(in: .newlines)\n                let string = NSMutableAttributedString(string: text)\n                if case let .mutated(changes) = $0.diff {\n                    string.addAttribute(\n                        .backgroundColor,\n                        value: NSColor.green.withAlphaComponent(0.1),\n                        range: NSRange(location: 0, length: text.count)\n                    )\n\n                    for diffItem in changes {\n                        string.addAttribute(\n                            .backgroundColor,\n                            value: NSColor.green.withAlphaComponent(0.5),\n                            range: NSRange(\n                                location: diffItem.offset,\n                                length: min(\n                                    text.count - diffItem.offset,\n                                    diffItem.element.count\n                                )\n                            )\n                        )\n                    }\n                }\n                return string\n            }\n        }\n\n        let original = diff.sections.flatMap {\n            $0.oldSnippet.map {\n                let text = $0.text.trimmingCharacters(in: .newlines)\n                let string = NSMutableAttributedString(string: text)\n                if case let .mutated(changes) = $0.diff {\n                    string.addAttribute(\n                        .backgroundColor,\n                        value: NSColor.red.withAlphaComponent(0.1),\n                        range: NSRange(location: 0, length: text.count)\n                    )\n\n                    for diffItem in changes {\n                        string.addAttribute(\n                            .backgroundColor,\n                            value: NSColor.red.withAlphaComponent(0.5),\n                            range: NSRange(\n                                location: diffItem.offset,\n                                length: min(text.count - diffItem.offset, diffItem.element.count)\n                            )\n                        )\n                    }\n                }\n\n                return string\n            }\n        }\n\n        return (original.map(AttributedString.init), new.map(AttributedString.init))\n    }\n}\n\nstruct LineDiffPreview: View {\n    let originalCode: String\n    let newCode: String\n\n    var body: some View {\n        VStack(alignment: .leading) {\n            let (original, new) = generateTexts()\n            Text(original)\n            Divider()\n            Text(new)\n        }\n        .padding()\n        .font(.body.monospaced())\n    }\n\n    func generateTexts() -> (original: AttributedString, new: AttributedString) {\n        let diff = CodeDiff().diff(text: newCode, from: originalCode)\n        let original = NSMutableAttributedString(string: originalCode)\n        let new = NSMutableAttributedString(string: newCode)\n\n        for item in diff {\n            switch item {\n            case let .insert(offset, element, _):\n                new.addAttribute(\n                    .backgroundColor,\n                    value: NSColor.green.withAlphaComponent(0.5),\n                    range: NSRange(location: offset, length: element.count)\n                )\n            case let .remove(offset, element, _):\n                original.addAttribute(\n                    .backgroundColor,\n                    value: NSColor.red.withAlphaComponent(0.5),\n                    range: NSRange(location: offset, length: element.count)\n                )\n            }\n        }\n\n        return (.init(original), .init(new))\n    }\n}\n\n#Preview(\"Line Diff\") {\n    let originalCode = \"\"\"\n    let foo = Foo() // yes\n    \"\"\"\n    let newCode = \"\"\"\n    var foo = Bar()\n    \"\"\"\n\n    return LineDiffPreview(originalCode: originalCode, newCode: newCode)\n}\n\n#Preview(\"Snippet Diff\") {\n    let originalCode = \"\"\"\n    let foo = Foo()\n    print(foo)\n    // do something\n    foo.foo()\n    func zoo() {}\n    \"\"\"\n    let newCode = \"\"\"\n    var foo = Bar()\n    // do something\n    foo.bar()\n    func zoo() {\n        print(\"zoo\")\n    }\n    \"\"\"\n\n    return SnippetDiffPreview(originalCode: originalCode, newCode: newCode)\n}\n\n#Preview(\"Code Diff Editor\") {\n    struct V: View {\n        @State var originalCode = \"\"\n        @State var newCode = \"\"\n\n        var body: some View {\n            VStack {\n                HStack {\n                    VStack {\n                        Text(\"Original\")\n                        TextEditor(text: $originalCode)\n                            .frame(width: 300, height: 200)\n                    }\n                    VStack {\n                        Text(\"New\")\n                        TextEditor(text: $newCode)\n                            .frame(width: 300, height: 200)\n                    }\n                }\n                .font(.body.monospaced())\n                SnippetDiffPreview(originalCode: originalCode, newCode: newCode)\n            }\n            .padding()\n            .frame(height: 600)\n        }\n    }\n\n    return V()\n}\n\n#endif\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/ChatTab/CodeiumChatBrowser.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport Preferences\nimport WebKit\nimport Workspace\nimport XcodeInspector\n\n@Reducer\nstruct CodeiumChatBrowser {\n    @ObservableState\n    struct State: Equatable {\n        var loadingProgress: Double = 0\n        var isLoading = false\n        var title = \"Codeium Chat\"\n        var error: String?\n        var url: URL?\n    }\n\n    enum Action: Equatable, BindableAction {\n        case binding(BindingAction<State>)\n\n        case initialize\n        case loadCurrentWorkspace\n        case reload\n        case presentError(String)\n        case removeError\n\n        case observeTitleChange\n        case updateTitle(String)\n        case observeURLChange\n        case updateURL(URL?)\n        case observeIsLoading\n        case updateIsLoading(Double)\n    }\n\n    let webView: WKWebView\n    let uuid = UUID()\n\n    private enum CancelID: Hashable {\n        case observeTitleChange(UUID)\n        case observeURLChange(UUID)\n        case observeIsLoading(UUID)\n    }\n\n    @Dependency(\\.workspacePool) var workspacePool\n\n    var body: some ReducerOf<Self> {\n        BindingReducer()\n\n        Reduce { state, action in\n            switch action {\n            case .binding:\n                return .none\n\n            case .initialize:\n                return .merge(\n                    .run { send in await send(.observeTitleChange) },\n                    .run { send in await send(.observeURLChange) },\n                    .run { send in await send(.observeIsLoading) }\n                )\n\n            case .loadCurrentWorkspace:\n                return .run { send in\n                    guard let workspaceURL = await XcodeInspector.shared.activeWorkspaceURL\n                    else {\n                        await send(.presentError(\"Can't find workspace.\"))\n                        return\n                    }\n                    do {\n                        let workspace = try await workspacePool\n                            .fetchOrCreateWorkspace(workspaceURL: workspaceURL)\n                        let codeiumPlugin = workspace.plugin(for: CodeiumWorkspacePlugin.self)\n                        guard let service = await codeiumPlugin?.codeiumService\n                        else {\n                            await send(.presentError(\"Can't start service.\"))\n                            return\n                        }\n                        let url = try await service.getChatURL()\n                        await send(.removeError)\n                        await webView.load(URLRequest(url: url))\n                    } catch {\n                        await send(.presentError(error.localizedDescription))\n                    }\n                }\n\n            case .reload:\n                webView.reload()\n                return .none\n                \n            case .removeError:\n                state.error = nil\n                return .none\n                \n            case let .presentError(error):\n                state.error = error\n                return .none\n\n            // MARK: Observation\n\n            case .observeTitleChange:\n                let stream = AsyncStream<String> { continuation in\n                    let observation = webView.observe(\\.title, options: [.new, .initial]) {\n                        webView, _ in\n                        continuation.yield(webView.title ?? \"\")\n                    }\n\n                    continuation.onTermination = { _ in\n                        observation.invalidate()\n                    }\n                }\n\n                return .run { send in\n                    for await title in stream where !title.isEmpty {\n                        try Task.checkCancellation()\n                        await send(.updateTitle(title))\n                    }\n                }\n                .cancellable(id: CancelID.observeTitleChange(uuid), cancelInFlight: true)\n\n            case let .updateTitle(title):\n                state.title = title\n                return .none\n\n            case .observeURLChange:\n                let stream = AsyncStream<URL?> { continuation in\n                    let observation = webView.observe(\\.url, options: [.new, .initial]) {\n                        _, url in\n                        if let it = url.newValue {\n                            continuation.yield(it)\n                        }\n                    }\n\n                    continuation.onTermination = { _ in\n                        observation.invalidate()\n                    }\n                }\n\n                return .run { send in\n                    for await url in stream {\n                        try Task.checkCancellation()\n                        await send(.updateURL(url))\n                    }\n                }.cancellable(id: CancelID.observeURLChange(uuid), cancelInFlight: true)\n\n            case let .updateURL(url):\n                state.url = url\n                return .none\n\n            case .observeIsLoading:\n                let stream = AsyncStream<Double> { continuation in\n                    let observation = webView\n                        .observe(\\.estimatedProgress, options: [.new]) { _, estimatedProgress in\n                            if let it = estimatedProgress.newValue {\n                                continuation.yield(it)\n                            }\n                        }\n\n                    continuation.onTermination = { _ in\n                        observation.invalidate()\n                    }\n                }\n\n                return .run { send in\n                    for await isLoading in stream {\n                        try Task.checkCancellation()\n                        await send(.updateIsLoading(isLoading))\n                    }\n                }.cancellable(id: CancelID.observeIsLoading(uuid), cancelInFlight: true)\n\n            case let .updateIsLoading(progress):\n                state.isLoading = progress != 1\n                state.loadingProgress = progress\n                return .none\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/ChatTab/CodeiumChatTab.swift",
    "content": "import AppKit\nimport ChatTab\nimport Combine\nimport ComposableArchitecture\nimport Logger\nimport Preferences\nimport SwiftUI\nimport WebKit\nimport XcodeInspector\n\npublic class CodeiumChatTab: ChatTab {\n    public static var name: String { \"Codeium Chat\" }\n    public static var isDefaultChatTabReplacement: Bool { false }\n    public static var canHandleOpenChatCommand: Bool { true }\n\n    struct RestorableState: Codable {}\n\n    public struct EditorContent {\n        public var selectedText: String\n        public var language: String\n        public var fileContent: String\n\n        public init(selectedText: String, language: String, fileContent: String) {\n            self.selectedText = selectedText\n            self.language = language\n            self.fileContent = fileContent\n        }\n\n        public static var empty: EditorContent {\n            .init(selectedText: \"\", language: \"\", fileContent: \"\")\n        }\n    }\n\n    struct Builder: ChatTabBuilder {\n        var title: String\n        var buildable: Bool { true }\n        var afterBuild: (CodeiumChatTab) async -> Void = { _ in }\n\n        func build(store: StoreOf<ChatTabItem>) async -> (any ChatTab)? {\n            let tab = await CodeiumChatTab(chatTabStore: store)\n            await Task { @MainActor in\n                _ = tab.store.send(.loadCurrentWorkspace)\n            }.value\n            await afterBuild(tab)\n            return tab\n        }\n    }\n\n    let store: StoreOf<CodeiumChatBrowser>\n    let webView: WKWebView\n    let webViewDelegate: WKWebViewDelegate\n    var cancellable = Set<AnyCancellable>()\n    private var observer = NSObject()\n\n    @MainActor\n    public init(chatTabStore: StoreOf<ChatTabItem>) {\n        let webView = CodeiumWebView(getEditorContent: {\n            guard let content = await XcodeInspector.shared.getFocusedEditorContent()\n            else { return .empty }\n            return .init(\n                selectedText: content.selectedContent,\n                language: content.language.rawValue,\n                fileContent: content.editorContent?.content ?? \"\"\n            )\n        })\n        self.webView = webView\n        store = .init(\n            initialState: .init(),\n            reducer: { CodeiumChatBrowser(webView: webView) }\n        )\n        webViewDelegate = .init(store: store)\n\n        super.init(store: chatTabStore)\n\n        webView.navigationDelegate = webViewDelegate\n        webView.uiDelegate = webViewDelegate\n        webView.store = store\n\n        Task {\n            await CodeiumServiceLifeKeeper.shared.add(self)\n        }\n    }\n\n    public func start() {\n        observer = .init()\n        cancellable = []\n        chatTabStore.send(.updateTitle(\"Codeium Chat\"))\n        store.send(.initialize)\n\n        Task { @MainActor in\n            var previousURL: URL?\n            observer.observe { [weak self] in\n                guard let self else { return }\n                if store.url != previousURL {\n                    previousURL = store.url\n                    Task { @MainActor in\n                        self.chatTabStore.send(.tabContentUpdated)\n                    }\n                }\n            }\n        }\n\n        Task { @MainActor in\n            observer.observe { [weak self] in\n                guard let self, !store.title.isEmpty else { return }\n                let title = store.title\n                Task { @MainActor in\n                    self.chatTabStore.send(.updateTitle(title))\n                }\n            }\n        }\n    }\n\n    public func buildView() -> any View {\n        BrowserView(store: store, webView: webView)\n    }\n\n    public func buildTabItem() -> any View {\n        CodeiumChatTabItem(store: store)\n    }\n\n    public func buildIcon() -> any View {\n        Image(systemName: \"message\")\n    }\n\n    public func buildMenu() -> any View {\n        EmptyView()\n    }\n\n    @MainActor\n    public func restorableState() -> Data {\n        let state = store.withState { _ in\n            RestorableState()\n        }\n\n        return (try? JSONEncoder().encode(state)) ?? Data()\n    }\n\n    public static func restore(from data: Data) throws -> any ChatTabBuilder {\n        let builder = Builder(title: \"\") { @MainActor chatTab in\n            chatTab.store.send(.loadCurrentWorkspace)\n        }\n        return builder\n    }\n\n    public static func chatBuilders() -> [ChatTabBuilder] {\n        [Builder(title: \"Codeium Chat\")]\n    }\n\n    public static func defaultChatBuilder() -> ChatTabBuilder {\n        Builder(title: \"Codeium Chat\")\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/ChatTab/CodeiumChatTabItem.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport Preferences\nimport SwiftUI\n\nstruct CodeiumChatTabItem: View {\n    @Perception.Bindable var store: StoreOf<CodeiumChatBrowser>\n\n    var body: some View {\n        WithPerceptionTracking {\n            Text(store.title)\n                .contextMenu {\n                    CodeiumChatMenuItem(store: store)\n                }\n        }\n    }\n}\n\nstruct CodeiumChatMenuItem: View {\n    @Perception.Bindable var store: StoreOf<CodeiumChatBrowser>\n\n    var body: some View {\n        WithPerceptionTracking {\n            Button(\"Load Active Workspace\") {\n                store.send(.loadCurrentWorkspace)\n            }\n\n            Button(\"Reload\") {\n                store.send(.reload)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/ChatTab/CodeiumChatView.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport SharedUIComponents\nimport SwiftUI\nimport WebKit\n\nstruct BrowserView: View {\n    @Perception.Bindable var store: StoreOf<CodeiumChatBrowser>\n    let webView: WKWebView\n\n    var body: some View {\n        WithPerceptionTracking {\n            VStack(spacing: 0) {\n                ZStack {\n                    WebView(webView: webView)\n                }\n            }\n            .overlay {\n                if store.isLoading {\n                    ProgressView()\n                }\n            }\n            .overlay {\n                if let error = store.error {\n                    VStack {\n                        Text(error)\n                        Button(\"Load Current Workspace\") {\n                            store.send(.loadCurrentWorkspace)\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nstruct WebView: NSViewRepresentable {\n    var webView: WKWebView\n\n    func makeNSView(context: Context) -> WKWebView {\n        return webView\n    }\n\n    func updateNSView(_ nsView: WKWebView, context: Context) {}\n}\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/ChatTab/CodeiumWebView.swift",
    "content": "import ComposableArchitecture\nimport Foundation\nimport Logger\nimport Preferences\nimport WebKit\n\nclass ScriptHandler: NSObject, WKScriptMessageHandlerWithReply {\n    @MainActor\n    func userContentController(\n        _ userContentController: WKUserContentController,\n        didReceive message: WKScriptMessage\n    ) async -> (Any?, String?) {\n        if message.name == \"decodeBase64\", let code = message.body as? String {\n            return (String(data: Data(base64Encoded: code) ?? Data(), encoding: .utf8), nil)\n        }\n        return (nil, nil)\n    }\n}\n\n@MainActor\nclass CodeiumWebView: WKWebView {\n    var getEditorContent: () async -> CodeiumChatTab.EditorContent\n    let scriptHandler = ScriptHandler()\n    weak var store: StoreOf<CodeiumChatBrowser>?\n\n    init(getEditorContent: @escaping () async -> CodeiumChatTab.EditorContent) {\n        self.getEditorContent = getEditorContent\n        super.init(frame: .zero, configuration: WKWebViewConfiguration())\n\n        if #available(macOS 13.3, *) {\n            #if DEBUG\n            isInspectable = true\n            #endif\n        }\n\n        configuration.userContentController.addScriptMessageHandler(\n            scriptHandler,\n            contentWorld: .page,\n            name: \"decodeBase64\"\n        )\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    @discardableResult\n    func evaluateJavaScript(safe javaScriptString: String) async throws -> Any? {\n        try await withUnsafeThrowingContinuation { continuation in\n            evaluateJavaScript(javaScriptString) { result, error in\n                if let error {\n                    print(javaScriptString, error.localizedDescription)\n                    continuation.resume(throwing: error)\n                } else {\n                    continuation.resume(returning: result)\n                }\n            }\n        }\n    }\n}\n\n// MARK: - WebView Delegate\n\nfinal class WKWebViewDelegate: NSObject, ObservableObject, WKNavigationDelegate, WKUIDelegate {\n    let store: StoreOf<CodeiumChatBrowser>\n\n    init(store: StoreOf<CodeiumChatBrowser>) {\n        self.store = store\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/CodeiumExtension.swift",
    "content": "import BuiltinExtension\nimport ChatTab\nimport CopilotForXcodeKit\nimport Foundation\nimport Logger\nimport Preferences\nimport Workspace\n\n@globalActor public enum CodeiumActor {\n    public actor TheActor {}\n    public static let shared = TheActor()\n}\n\npublic final class CodeiumExtension: BuiltinExtension {\n    public var extensionIdentifier: String { \"com.codeium\" }\n\n    public let suggestionService: CodeiumSuggestionService\n\n    public var chatTabTypes: [any CustomChatTab] {\n        [TypedCustomChatTab(of: CodeiumChatTab.self)]\n    }\n\n    private var extensionUsage = ExtensionUsage(\n        isSuggestionServiceInUse: false,\n        isChatServiceInUse: false\n    )\n    private var isLanguageServerInUse: Bool {\n        get async {\n            let lifeKeeperIsAlive = await CodeiumServiceLifeKeeper.shared.isAlive\n            return extensionUsage.isSuggestionServiceInUse\n                || extensionUsage.isChatServiceInUse\n                || lifeKeeperIsAlive\n        }\n    }\n\n    let workspacePool: WorkspacePool\n\n    let serviceLocator: ServiceLocator\n\n    public init(workspacePool: WorkspacePool) {\n        self.workspacePool = workspacePool\n        serviceLocator = .init(workspacePool: workspacePool)\n        suggestionService = .init(serviceLocator: serviceLocator)\n    }\n\n    public func workspaceDidOpen(_ workspace: WorkspaceInfo) {\n        Task {\n            do {\n                guard await isLanguageServerInUse else { return }\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyOpenWorkspace(workspaceURL: workspace.workspaceURL)\n            } catch {\n                Logger.codeium.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspaceDidClose(_ workspace: WorkspaceInfo) {\n        Task {\n            do {\n                guard await isLanguageServerInUse else { return }\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyCloseWorkspace(workspaceURL: workspace.workspaceURL)\n            } catch {\n                Logger.codeium.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(_ workspace: WorkspaceInfo, didOpenDocumentAt documentURL: URL) {\n        Task {\n            guard await isLanguageServerInUse else { return }\n            // check if file size is larger than 15MB, if so, return immediately\n            if let attrs = try? FileManager.default\n                .attributesOfItem(atPath: documentURL.path),\n                let fileSize = attrs[FileAttributeKey.size] as? UInt64,\n                fileSize > 15 * 1024 * 1024\n            { return }\n\n            do {\n                let content = try String(contentsOf: documentURL, encoding: .utf8)\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyOpenTextDocument(fileURL: documentURL, content: content)\n            } catch {\n                Logger.codeium.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(_ workspace: WorkspaceInfo, didSaveDocumentAt documentURL: URL) {\n        // unimplemented\n    }\n\n    public func workspace(_ workspace: WorkspaceInfo, didCloseDocumentAt documentURL: URL) {\n        Task {\n            guard await isLanguageServerInUse else { return }\n            do {\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyCloseTextDocument(fileURL: documentURL)\n            } catch {\n                Logger.codeium.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(\n        _ workspace: WorkspaceInfo,\n        didUpdateDocumentAt documentURL: URL,\n        content: String?\n    ) {\n        Task {\n            guard await isLanguageServerInUse else { return }\n            // check if file size is larger than 15MB, if so, return immediately\n            if let attrs = try? FileManager.default\n                .attributesOfItem(atPath: documentURL.path),\n                let fileSize = attrs[FileAttributeKey.size] as? UInt64,\n                fileSize > 15 * 1024 * 1024\n            { return }\n            do {\n                guard let content else { return }\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyChangeTextDocument(fileURL: documentURL, content: content)\n                try await service.refreshIDEContext(\n                    fileURL: documentURL,\n                    content: content,\n                    cursorPosition: .zero,\n                    tabSize: 4, indentSize: 4, usesTabsForIndentation: false,\n                    workspaceURL: workspace.workspaceURL\n                )\n            } catch {\n                Logger.codeium.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func extensionUsageDidChange(_ usage: ExtensionUsage) {\n        extensionUsage = usage\n        Task {\n            if !(await isLanguageServerInUse) {\n                terminate()\n            }\n        }\n    }\n\n    public func terminate() {\n        for workspace in workspacePool.workspaces.values {\n            guard let plugin = workspace.plugin(for: CodeiumWorkspacePlugin.self)\n            else { continue }\n            plugin.terminate()\n        }\n    }\n}\n\nfinal class ServiceLocator {\n    let workspacePool: WorkspacePool\n\n    init(workspacePool: WorkspacePool) {\n        self.workspacePool = workspacePool\n    }\n\n    func getService(from workspace: WorkspaceInfo) async -> CodeiumService? {\n        guard let workspace = workspacePool.workspaces[workspace.workspaceURL],\n              let plugin = workspace.plugin(for: CodeiumWorkspacePlugin.self)\n        else { return nil }\n        return await plugin.codeiumService\n    }\n}\n\n/// A helper class to keep track of a list of items that may keep the service alive.\n/// For example, a ``CodeiumChatTab``.\nactor CodeiumServiceLifeKeeper {\n    static let shared = CodeiumServiceLifeKeeper()\n\n    private final class WeakObject {\n        weak var object: AnyObject?\n        var isAlive: Bool { object != nil }\n        init(_ object: AnyObject) {\n            self.object = object\n        }\n    }\n\n    private var weakObjects = [WeakObject]()\n\n    func add(_ object: AnyObject) {\n        weakObjects.removeAll { !$0.isAlive }\n        weakObjects.append(WeakObject(object))\n    }\n\n    var isAlive: Bool {\n        if weakObjects.isEmpty { return false }\n        return weakObjects.allSatisfy { $0.isAlive }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/CodeiumWorkspacePlugin.swift",
    "content": "import Foundation\nimport Logger\nimport Workspace\n\npublic final class CodeiumWorkspacePlugin: WorkspacePlugin {\n    private var _codeiumService: CodeiumService?\n    @CodeiumActor\n    var codeiumService: CodeiumService? {\n        if let service = _codeiumService { return service }\n        do {\n            return try createCodeiumService()\n        } catch {\n            Logger.codeium.error(\"Failed to create Codeium service: \\(error)\")\n            return nil\n        }\n    }\n\n    deinit {\n        if let _codeiumService {\n            _codeiumService.terminate()\n        }\n    }\n\n    @CodeiumActor\n    func createCodeiumService() throws -> CodeiumService {\n        let newService = try CodeiumService(\n            projectRootURL: projectRootURL,\n            onServiceLaunched: {\n\n            },\n            onServiceTerminated: {\n                // start handled in the service.\n            }\n        )\n        _codeiumService = newService\n        return newService\n    }\n\n    @CodeiumActor\n    func finishLaunchingService() {\n        guard let workspace, let _codeiumService else { return }\n        Task {\n            try? await _codeiumService.notifyOpenWorkspace(workspaceURL: workspaceURL)\n            \n            for (_, filespace) in workspace.filespaces {\n                let documentURL = filespace.fileURL\n                guard let content = try? String(contentsOf: documentURL) else { continue }\n                try? await _codeiumService.notifyOpenTextDocument(\n                    fileURL: documentURL,\n                    content: content\n                )\n            }\n        }\n    }\n\n    func terminate() {\n        _codeiumService = nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/CodeiumInstallationManager.swift",
    "content": "import Foundation\nimport Terminal\n\npublic struct CodeiumInstallationManager {\n    private static var isInstalling = false\n    static let latestSupportedVersion = \"1.48.2\"\n    static let minimumSupportedVersion = \"1.20.0\"\n\n    public init() {}\n\n    enum CodeiumInstallationError: Error, LocalizedError {\n        case badURL(String)\n        case invalidResponse\n        case invalidData\n\n        var errorDescription: String? {\n            switch self {\n            case .badURL: return \"URL is invalid\"\n            case .invalidResponse: return \"Invalid response\"\n            case .invalidData: return \"Invalid data\"\n            }\n        }\n    }\n\n    public func getLatestSupportedVersion() -> String {\n        if isEnterprise {\n            return UserDefaults.shared.value(for: \\.codeiumEnterpriseVersion)\n        }\n\n        return Self.latestSupportedVersion\n    }\n\n    func getEnterprisePortalVersion() async throws -> String {\n        let enterprisePortalUrl = UserDefaults.shared.value(for: \\.codeiumPortalUrl)\n        let enterprisePortalVersionUrl = \"\\(enterprisePortalUrl)/api/version\"\n\n        guard let url = URL(string: enterprisePortalVersionUrl)\n        else { throw CodeiumInstallationError.badURL(enterprisePortalVersionUrl) }\n\n        let (data, response) = try await URLSession.shared.data(from: url)\n\n        guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {\n            throw CodeiumInstallationError.invalidResponse\n        }\n\n        if let version = String(data: data, encoding: .utf8)?\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        {\n            UserDefaults.shared.set(version, for: \\.codeiumEnterpriseVersion)\n            return version\n        } else {\n            return UserDefaults.shared.value(for: \\.codeiumEnterpriseVersion)\n        }\n    }\n\n    var isEnterprise: Bool {\n        return UserDefaults.shared.value(for: \\.codeiumEnterpriseMode)\n            && !UserDefaults.shared.value(for: \\.codeiumPortalUrl).isEmpty\n    }\n\n    public enum InstallationStatus {\n        case notInstalled\n        case installed(String)\n        case outdated(current: String, latest: String, mandatory: Bool)\n        case unsupported(current: String, latest: String)\n    }\n\n    public func checkInstallation() async -> InstallationStatus {\n        guard let urls = try? CodeiumService.createFoldersIfNeeded()\n        else { return .notInstalled }\n        let executableFolderURL = urls.executableURL\n        let binaryURL = executableFolderURL.appendingPathComponent(\"language_server\")\n        let versionFileURL = executableFolderURL.appendingPathComponent(\"version\")\n\n        if !FileManager.default.fileExists(atPath: binaryURL.path) {\n            return .notInstalled\n        }\n\n        let targetVersion = await {\n            if !isEnterprise { return Self.latestSupportedVersion }\n            return (try? await getEnterprisePortalVersion())\n                ?? UserDefaults.shared.value(for: \\.codeiumEnterpriseVersion)\n        }()\n\n        if FileManager.default.fileExists(atPath: versionFileURL.path),\n           let versionData = try? Data(contentsOf: versionFileURL),\n           let version = String(data: versionData, encoding: .utf8)\n        {\n            switch version.compare(targetVersion, options: .numeric) {\n            case .orderedAscending:\n                switch version.compare(Self.minimumSupportedVersion) {\n                case .orderedAscending:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: true\n                    )\n                case .orderedSame:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: false\n                    )\n                case .orderedDescending:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: false\n                    )\n                }\n            case .orderedSame:\n                return .installed(version)\n            case .orderedDescending:\n                return .unsupported(current: version, latest: targetVersion)\n            }\n        }\n        return .outdated(current: \"Unknown\", latest: Self.latestSupportedVersion, mandatory: false)\n    }\n\n    public enum InstallationStep {\n        case downloading\n        case uninstalling\n        case decompressing\n        case done\n    }\n\n    public func installLatestVersion() -> AsyncThrowingStream<InstallationStep, Error> {\n        AsyncThrowingStream<InstallationStep, Error> { continuation in\n            Task {\n                guard !CodeiumInstallationManager.isInstalling else {\n                    continuation.finish(throwing: CodeiumError.languageServiceIsInstalling)\n                    return\n                }\n                CodeiumInstallationManager.isInstalling = true\n                defer { CodeiumInstallationManager.isInstalling = false }\n                do {\n                    continuation.yield(.downloading)\n                    let urls = try CodeiumService.createFoldersIfNeeded()\n                    let urlString: String\n                    let version: String\n                    if !isEnterprise {\n                        version = CodeiumInstallationManager.latestSupportedVersion\n                        urlString =\n                            \"https://github.com/Exafunction/codeium/releases/download/language-server-v\\(Self.latestSupportedVersion)/language_server_macos_\\(isAppleSilicon() ? \"arm\" : \"x64\").gz\"\n                    } else {\n                        version = try await getEnterprisePortalVersion()\n                        let enterprisePortalUrl = UserDefaults.shared.value(for: \\.codeiumPortalUrl)\n                        urlString =\n                            \"\\(enterprisePortalUrl)/language-server-v\\(version)/language_server_macos_\\(isAppleSilicon() ? \"arm\" : \"x64\").gz\"\n                    }\n\n                    guard let url = URL(string: urlString) else {\n                        continuation.finish(throwing: CodeiumInstallationError.badURL(urlString))\n                        return\n                    }\n\n                    // download\n                    let (fileURL, _) = try await URLSession.shared.download(from: url)\n                    let targetURL = urls.executableURL.appendingPathComponent(\"language_server\")\n                        .appendingPathExtension(\"gz\")\n                    try FileManager.default.copyItem(at: fileURL, to: targetURL)\n                    defer { try? FileManager.default.removeItem(at: targetURL) }\n\n                    // uninstall\n                    continuation.yield(.uninstalling)\n                    try await uninstall()\n\n                    // extract file\n                    continuation.yield(.decompressing)\n                    let terminal = Terminal()\n                    _ = try await terminal.runCommand(\n                        \"/usr/bin/gunzip\",\n                        arguments: [targetURL.path],\n                        environment: [:]\n                    )\n\n                    // update permission 755\n                    try FileManager.default.setAttributes(\n                        [.posixPermissions: 0o755],\n                        ofItemAtPath: targetURL.deletingPathExtension().path\n                    )\n                    var data: Data?\n\n                    // create version file\n                    data = version.data(using: .utf8)\n\n                    FileManager.default.createFile(\n                        atPath: urls.executableURL.appendingPathComponent(\"version\").path,\n                        contents: data\n                    )\n\n                    continuation.yield(.done)\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n    }\n\n    public func uninstall() async throws {\n        guard let urls = try? CodeiumService.createFoldersIfNeeded()\n        else { return }\n        let executableFolderURL = urls.executableURL\n        let binaryURL = executableFolderURL.appendingPathComponent(\"language_server\")\n        let versionFileURL = executableFolderURL.appendingPathComponent(\"version\")\n        if FileManager.default.fileExists(atPath: binaryURL.path) {\n            try FileManager.default.removeItem(at: binaryURL)\n        }\n        if FileManager.default.fileExists(atPath: versionFileURL.path) {\n            try FileManager.default.removeItem(at: versionFileURL)\n        }\n    }\n}\n\nfunc isAppleSilicon() -> Bool {\n    var result = false\n    #if arch(arm64)\n    result = true\n    #endif\n    return result\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/CodeiumLanguageServer.swift",
    "content": "import Foundation\nimport JSONRPC\nimport LanguageClient\nimport LanguageServerProtocol\nimport Logger\nimport Preferences\nimport XcodeInspector\n\nprotocol CodeiumLSP {\n    func sendRequest<E: CodeiumRequestType>(_ endpoint: E) async throws -> E.Response\n    func updateIndexing() async\n    func terminate()\n}\n\nfinal class CodeiumLanguageServer {\n    let languageServerExecutableURL: URL\n    let managerDirectoryURL: URL\n    let supportURL: URL\n    let process: Process\n    let transport: IOTransport\n    var terminationHandler: (() -> Void)?\n    var launchHandler: (() -> Void)?\n    var port: String?\n    var heartbeatTask: Task<Void, Error>?\n    var projectPaths: [String]\n\n    init(\n        languageServerExecutableURL: URL,\n        managerDirectoryURL: URL,\n        supportURL: URL,\n        terminationHandler: (() -> Void)? = nil,\n        launchHandler: (() -> Void)? = nil\n    ) {\n        self.languageServerExecutableURL = languageServerExecutableURL\n        self.managerDirectoryURL = managerDirectoryURL\n        self.supportURL = supportURL\n        self.terminationHandler = terminationHandler\n        self.launchHandler = launchHandler\n        projectPaths = []\n        process = Process()\n        transport = IOTransport()\n\n        process.standardInput = transport.stdinPipe\n        process.standardOutput = transport.stdoutPipe\n        process.standardError = transport.stderrPipe\n\n        process.executableURL = languageServerExecutableURL\n\n        let isEnterpriseMode = UserDefaults.shared.value(for: \\.codeiumEnterpriseMode)\n        var apiServerUrl = \"https://server.codeium.com\"\n        if isEnterpriseMode, UserDefaults.shared.value(for: \\.codeiumApiUrl) != \"\" {\n            apiServerUrl = UserDefaults.shared.value(for: \\.codeiumApiUrl)\n        }\n\n        process.arguments = [\n            \"--api_server_url\",\n            apiServerUrl,\n            \"--manager_dir\",\n            managerDirectoryURL.path,\n            \"--enable_chat_web_server\",\n            \"--enable_chat_client\",\n        ]\n\n        if isEnterpriseMode {\n            process.arguments?.append(\"--enterprise_mode\")\n            process.arguments?.append(\"--portal_url\")\n            process.arguments?.append(UserDefaults.shared.value(for: \\.codeiumPortalUrl))\n        }\n\n        let indexEnabled = UserDefaults.shared.value(for: \\.codeiumIndexEnabled)\n        if indexEnabled {\n            let indexingMaxFileSize = UserDefaults.shared.value(for: \\.codeiumIndexingMaxFileSize)\n            if indexEnabled {\n                process.arguments?.append(\"--enable_local_search\")\n                process.arguments?.append(\"--enable_index_service\")\n                process.arguments?.append(\"--search_max_workspace_file_count\")\n                process.arguments?.append(\"\\(indexingMaxFileSize)\")\n                Logger.codeium.info(\"Indexing Enabled\")\n            }\n        }\n\n        process.currentDirectoryURL = supportURL\n\n        process.terminationHandler = { [weak self] task in\n            self?.processTerminated(task)\n        }\n    }\n\n    func start() {\n        guard !process.isRunning else { return }\n        do {\n            try process.run()\n\n            Task { @MainActor in\n                func findPort() -> String? {\n                    // find a file in managerDirectoryURL whose name looks like a port, return the\n                    // name if found\n                    let fileManager = FileManager.default\n                    guard let filePaths = try? fileManager\n                        .contentsOfDirectory(atPath: managerDirectoryURL.path) else { return nil }\n                    for path in filePaths {\n                        let filename = URL(fileURLWithPath: path).lastPathComponent\n                        if filename.range(\n                            of: #\"^\\d+$\"#,\n                            options: .regularExpression\n                        ) != nil {\n                            return filename\n                        }\n                    }\n                    return nil\n                }\n\n                try await Task.sleep(nanoseconds: 2_000_000)\n                var waited = 0\n\n                while true {\n                    waited += 1\n                    if let port = findPort() {\n                        finishStarting(port: port)\n                        return\n                    }\n                    if waited >= 60 {\n                        process.terminate()\n                        return\n                    }\n                    try await Task.sleep(nanoseconds: 1_000_000_000)\n                }\n            }\n        } catch {\n            Logger.codeium.error(error.localizedDescription)\n            processTerminated(process)\n        }\n    }\n\n    deinit {\n        process.terminationHandler = nil\n        if process.isRunning {\n            process.terminate()\n        }\n        transport.close()\n    }\n\n    private func processTerminated(_: Process) {\n        transport.close()\n        terminationHandler?()\n    }\n\n    private func finishStarting(port: String) {\n        Logger.codeium.info(\"Language server started.\")\n        self.port = port\n        launchHandler?()\n    }\n\n    func terminate() {\n        process.terminationHandler = nil\n        if process.isRunning {\n            process.terminate()\n        }\n        transport.close()\n    }\n}\n\nextension CodeiumLanguageServer: CodeiumLSP {\n    func sendRequest<E>(_ request: E) async throws -> E.Response where E: CodeiumRequestType {\n        guard let port else { throw CancellationError() }\n\n        let request = request.makeURLRequest(server: \"http://127.0.0.1:\\(port)\")\n        let (data, response) = try await URLSession.shared.data(for: request)\n        if (response as? HTTPURLResponse)?.statusCode == 200 {\n            do {\n                let response = try JSONDecoder().decode(E.Response.self, from: data)\n                return response\n            } catch {\n                if UserDefaults.shared.value(for: \\.codeiumVerboseLog) {\n                    dump(error)\n                    Logger.codeium.error(error.localizedDescription)\n                }\n                throw error\n            }\n        } else {\n            do {\n                let error = try JSONDecoder().decode(CodeiumResponseError.self, from: data)\n                if error.code == \"aborted\" {\n                    if error.message.contains(\"is too old\") {\n                        throw CodeiumError.languageServerOutdated\n                    }\n                    throw error\n                }\n                throw CancellationError()\n            } catch {\n                if UserDefaults.shared.value(for: \\.codeiumVerboseLog) {\n                    Logger.codeium.error(error.localizedDescription)\n                }\n                throw error\n            }\n        }\n    }\n\n    func updateIndexing() async {\n        let indexEnabled = UserDefaults.shared.value(for: \\.codeiumIndexEnabled)\n        if !indexEnabled {\n            return\n        }\n\n        let currentProjectPaths = await getProjectPaths()\n\n        // Add all workspaces that are in the currentProjectPaths but not in the previous project\n        // paths\n        for currentProjectPath in currentProjectPaths {\n            if !projectPaths.contains(currentProjectPath) && FileManager.default\n                .fileExists(atPath: currentProjectPath)\n            {\n                _ = try? await sendRequest(CodeiumRequest.AddTrackedWorkspace(requestBody: .init(\n                    workspace: currentProjectPath\n                )))\n            }\n        }\n\n        // Remove all workspaces that are in previous project paths but not in the\n        // currentProjectPaths\n        for projectPath in projectPaths {\n            if !currentProjectPaths.contains(projectPath) && FileManager.default\n                .fileExists(atPath: projectPath)\n            {\n                _ = try? await sendRequest(CodeiumRequest.RemoveTrackedWorkspace(requestBody: .init(\n                    workspace: projectPath\n                )))\n            }\n        }\n        // These should be identical now\n        projectPaths = currentProjectPaths\n    }\n}\n\nfinal class IOTransport {\n    public let stdinPipe: Pipe\n    public let stdoutPipe: Pipe\n    public let stderrPipe: Pipe\n    private var closed: Bool\n    private var queue: DispatchQueue\n\n    public init() {\n        stdinPipe = Pipe()\n        stdoutPipe = Pipe()\n        stderrPipe = Pipe()\n        closed = false\n        queue = DispatchQueue(label: \"com.intii.CopilotForXcode.IOTransport\")\n\n        setupFileHandleHandlers()\n    }\n\n    public func write(_ data: Data) {\n        if closed {\n            return\n        }\n\n        let fileHandle = stdinPipe.fileHandleForWriting\n\n        queue.async {\n            fileHandle.write(data)\n        }\n    }\n\n    public func close() {\n        queue.sync {\n            if self.closed {\n                return\n            }\n\n            self.closed = true\n\n            [stdoutPipe, stderrPipe, stdinPipe].forEach { pipe in\n                pipe.fileHandleForWriting.closeFile()\n                pipe.fileHandleForReading.closeFile()\n            }\n        }\n    }\n\n    private func setupFileHandleHandlers() {\n        stdoutPipe.fileHandleForReading.readabilityHandler = { [weak self] handle in\n            let data = handle.availableData\n\n            guard !data.isEmpty else {\n                return\n            }\n\n            if UserDefaults.shared.value(for: \\.codeiumVerboseLog) {\n                self?.forwardDataToHandler(data)\n            }\n        }\n\n        stderrPipe.fileHandleForReading.readabilityHandler = { [weak self] handle in\n            let data = handle.availableData\n\n            guard !data.isEmpty else {\n                return\n            }\n\n            if UserDefaults.shared.value(for: \\.codeiumVerboseLog) {\n                self?.forwardErrorDataToHandler(data)\n            }\n        }\n    }\n\n    private func forwardDataToHandler(_ data: Data) {\n        queue.async { [weak self] in\n            guard let self = self else { return }\n\n            if self.closed {\n                return\n            }\n\n            if let string = String(bytes: data, encoding: .utf8) {\n                Logger.codeium.info(\"stdout: \\(string)\")\n            }\n        }\n    }\n\n    private func forwardErrorDataToHandler(_ data: Data) {\n        queue.async {\n            if let string = String(bytes: data, encoding: .utf8) {\n                Logger.codeium.error(\"stderr: \\(string)\")\n            }\n        }\n    }\n}\n\nclass WorkspaceParser: NSObject, XMLParserDelegate {\n    var projectPaths: [String] = []\n    var workspaceFileURL: URL\n    var workspaceBaseURL: URL\n\n    init(workspaceFileURL: URL, workspaceBaseURL: URL) {\n        self.workspaceFileURL = workspaceFileURL\n        self.workspaceBaseURL = workspaceBaseURL\n    }\n\n    func parse() -> [String] {\n        guard let parser = XMLParser(contentsOf: workspaceFileURL) else {\n            print(\"Failed to create XML parser for file: \\(workspaceFileURL.path)\")\n            return []\n        }\n        parser.delegate = self\n        parser.parse()\n        return projectPaths\n    }\n\n    // XMLParserDelegate methods\n    func parser(\n        _ parser: XMLParser,\n        didStartElement elementName: String,\n        namespaceURI: String?,\n        qualifiedName qName: String?,\n        attributes attributeDict: [String: String]\n    ) {\n        if elementName == \"FileRef\", let location = attributeDict[\"location\"] {\n            var project_path: String\n            if location.starts(with: \"group:\") && pathEndsWithXcodeproj(location) {\n                let curr_path = String(location.dropFirst(\"group:\".count))\n                guard let relative_project_url = URL(string: curr_path) else {\n                    return\n                }\n                let relative_base_path = relative_project_url.deletingLastPathComponent()\n                project_path = (\n                    workspaceBaseURL\n                        .appendingPathComponent(relative_base_path.relativePath)\n                ).standardized.path\n            } else if location.starts(with: \"absolute:\") && pathEndsWithXcodeproj(location) {\n                let abs_url = URL(fileURLWithPath: String(location.dropFirst(\"absolute:\".count)))\n                project_path = abs_url.deletingLastPathComponent().standardized.path\n            } else {\n                return\n            }\n            if FileManager.default.fileExists(atPath: project_path) {\n                projectPaths.append(project_path)\n            }\n        }\n    }\n\n    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {\n        print(\"Failed to parse XML: \\(parseError.localizedDescription)\")\n    }\n\n    func pathEndsWithXcodeproj(_ path: String) -> Bool {\n        return path.hasSuffix(\".xcodeproj\")\n    }\n}\n\npublic func getProjectPaths() async -> [String] {\n    guard let workspaceURL = XcodeInspector.shared.realtimeActiveWorkspaceURL else {\n        return []\n    }\n\n    let workspacebaseURL = workspaceURL.deletingLastPathComponent()\n\n    let workspaceContentsURL = workspaceURL.appendingPathComponent(\"contents.xcworkspacedata\")\n\n    let parser = WorkspaceParser(\n        workspaceFileURL: workspaceContentsURL,\n        workspaceBaseURL: workspacebaseURL\n    )\n    let absolutePaths = parser.parse()\n    return absolutePaths\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/CodeiumModels.swift",
    "content": "import Foundation\nimport JSONRPC\nimport LanguageServerProtocol\nimport SuggestionBasic\n\nstruct CodeiumCompletion: Codable {\n    var completionId: String\n    var text: String\n    var prefix: String?\n    var stop: String?\n//    var score: Double\n//    var tokens: [UInt64]\n//    var decodedTokens: [String]\n//    var probabilities: [Double]\n//    var adjustedProbabilities: [Double]\n//    var generatedLength: Int\n}\n\nstruct CodeiumCompletionItem: Codable {\n    var completion: CodeiumCompletion\n    var suffix: Suffix?\n    var range: Range\n    var source: CompletionSource\n    var completionParts: [CompletionPart]?\n}\n\nstruct Suffix: Codable {\n    /// Text to insert after the cursor when accepting the completion.\n    var text: String\n    /// Cursor position delta (as signed offset) from the end of the inserted\n    /// completion (including the suffix).\n    var deltaCursorOffset: String\n}\n\nstruct Range: Codable {\n    var startOffset: String?\n    var endOffset: String?\n    var startPosition: DocumentPosition?\n    var endPosition: DocumentPosition?\n}\n\nenum CompletionSource: String, Codable {\n    case unspecified = \"COMPLETION_SOURCE_UNSPECIFIED\"\n    case typingAsSuggested = \"COMPLETION_SOURCE_TYPING_AS_SUGGESTED\"\n    case cache = \"COMPLETION_SOURCE_CACHE\"\n    case network = \"COMPLETION_SOURCE_NETWORK\"\n}\n\n/// Represents a contiguous part of the completion text that is not\n/// already in the document.\nstruct CompletionPart: Codable {\n    enum CompletionPartType: String, Codable {\n        case unspecified = \"COMPLETION_PART_TYPE_UNSPECIFIED\"\n        /// Single-line completion parts that appear within an existing line of text.\n        case inline = \"COMPLETION_PART_TYPE_INLINE\"\n        /// Possibly multi-line completion parts that appear below an existing line of text.\n        case block = \"COMPLETION_PART_TYPE_BLOCK\"\n        /// Like COMPLETION_PART_TYPE_INLINE, but overwrites the existing text.\n        case inline_mask = \"COMPLETION_PART_TYPE_INLINE_MASK\"\n    }\n\n    var text: String\n    /// Offset in the original document where the part starts. For block\n    /// parts, this is always the end of the line before the block.\n    var offset: String\n    var type: CompletionPartType\n    /// The section of the original line that came before this part. Only valid for\n    /// COMPLETION_PART_TYPE_INLINE.\n    var prefix: String?\n    /// In the case of COMPLETION_PART_TYPE_BLOCK, represents the line it is below.\n    var line: String?\n}\n\nstruct CodeiumDocument: Codable {\n    var absolute_path_migrate_me_to_uri: String\n    var text: String\n    // Language ID provided by the editor.\n    var editor_language: String\n    // Language enum standardized across editors.\n    var language: CodeiumSupportedLanguage\n    // Measured in number of UTF-8 bytes.\n    //    var cursor_offset: UInt64?\n    // May be present instead of cursor_offset.\n    var cursor_position: DocumentCursorPosition?\n    // \\n or \\r\\n, if known.\n    var line_ending: String = \"\\n\"\n}\n\nstruct DocumentPosition: Codable {\n    /// 0-indexed. Measured in UTF-8 bytes.\n    var row: String?\n    /// 0-indexed. Measured in UTF-8 bytes.\n    var col: String?\n}\n\nstruct DocumentCursorPosition: Codable {\n    /// 0-indexed. Measured in UTF-8 bytes.\n    var row: Int\n    /// 0-indexed. Measured in UTF-8 bytes.\n    var col: Int\n}\n\nstruct CodeiumEditorOptions: Codable {\n    var tab_size: Int\n    var insert_spaces: Bool\n}\n\nstruct Metadata: Codable {\n    var ide_name: String\n    var ide_version: String\n//    var extension_name: String\n    var extension_version: String\n    var api_key: String\n\n    /// UID identifying a single session for the given user.\n    var session_id: String\n\n    /// Used purely in language server to cancel in flight requests.\n    /// If request_id is 0, then the request is not cancelable.\n    /// This should be a strictly monotonically increasing number\n    /// for the duration of a session.\n    var request_id: UInt64\n}\n\nenum CodeiumState: String, Codable {\n    case unspecified = \"CODEIUM_STATE_UNSPECIFIED\"\n    case inactive = \"CODEIUM_STATE_INACTIVE\"\n    case processing = \"CODEIUM_STATE_PROCESSING\"\n    case success = \"CODEIUM_STATE_SUCCESS\"\n    case warning = \"CODEIUM_STATE_WARNING\"\n    case error = \"CODEIUM_STATE_ERROR\"\n}\n\nstruct State: Codable {\n    var state: CodeiumState\n    var message: String\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/CodeiumRequest.swift",
    "content": "import Foundation\nimport JSONRPC\nimport LanguageServerProtocol\nimport SuggestionBasic\n\nprotocol CodeiumRequestType {\n    associatedtype Response: Codable\n    func makeURLRequest(server: String) -> URLRequest\n}\n\nextension CodeiumRequestType {\n    func assembleURLRequest(server: String, method: String, body: Data?) -> URLRequest {\n        var request = URLRequest(url: .init(\n            string: \"\\(server)/exa.language_server_pb.LanguageServerService/\\(method)\"\n        )!)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        request.httpMethod = \"POST\"\n        request.httpBody = body\n        return request\n    }\n}\n\nstruct CodeiumResponseError: Codable, Error, LocalizedError {\n    var code: String\n    var message: String\n    var errorDescription: String? { message }\n}\n\nenum CodeiumRequest {\n    struct GetProcesses: CodeiumRequestType {\n        struct Response: Codable {\n            var lspPort: UInt32\n            var chatWebServerPort: UInt32\n            var chatClientPort: UInt32\n        }\n\n        struct RequestBody: Codable {}\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(server: server, method: \"GetProcesses\", body: data)\n        }\n    }\n\n    struct GetCompletion: CodeiumRequestType {\n        struct Response: Codable {\n            var state: State\n            var completionItems: [CodeiumCompletionItem]?\n        }\n\n        struct RequestBody: Codable {\n            var metadata: Metadata\n            var document: CodeiumDocument\n            var editor_options: CodeiumEditorOptions\n            var other_documents: [CodeiumDocument]\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(server: server, method: \"GetCompletions\", body: data)\n        }\n    }\n\n    struct CancelRequest: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var request_id: UInt64\n            var session_id: String\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(server: server, method: \"CancelRequest\", body: data)\n        }\n    }\n\n    struct AcceptCompletion: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var metadata: Metadata\n            var completion_id: String\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(server: server, method: \"AcceptCompletion\", body: data)\n        }\n    }\n\n    struct RemoveTrackedWorkspace: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var workspace: String\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(\n                server: server,\n                method: \"RemoveTrackedWorkspace\",\n                body: data\n            )\n        }\n    }\n\n    struct AddTrackedWorkspace: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var workspace: String\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(\n                server: server,\n                method: \"AddTrackedWorkspace\",\n                body: data\n            )\n        }\n    }\n\n    struct RefreshContextForIdeAction: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var active_document: CodeiumDocument\n            var open_document_filepaths: [String]\n            var workspace_paths: [String]\n            var blocking: Bool = false\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(\n                server: server,\n                method: \"RefreshContextForIdeAction\",\n                body: data\n            )\n        }\n    }\n\n    struct Heartbeat: CodeiumRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var metadata: Metadata\n        }\n\n        var requestBody: RequestBody\n\n        func makeURLRequest(server: String) -> URLRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            return assembleURLRequest(server: server, method: \"Heartbeat\", body: data)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/CodeiumSupportedLanguage.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\nenum CodeiumSupportedLanguage: Int, Codable {\n    case unspecified = 0\n    case c = 1\n    case clojure = 2\n    case coffeescript = 3\n    case cpp = 4\n    case csharp = 5\n    case css = 6\n    case cudacpp = 7\n    case dockerfile = 8\n    case go = 9\n    case groovy = 10\n    case handlebars = 11\n    case haskell = 12\n    case hcl = 13\n    case html = 14\n    case ini = 15\n    case java = 16\n    case javascript = 17\n    case json = 18\n    case julia = 19\n    case kotlin = 20\n    case latex = 21\n    case less = 22\n    case lua = 23\n    case makefile = 24\n    case markdown = 25\n    case objectivec = 26\n    case objectivecpp = 27\n    case perl = 28\n    case php = 29\n    case plaintext = 30\n    case protobuf = 31\n    case pbtxt = 32\n    case python = 33\n    case r = 34\n    case ruby = 35\n    case rust = 36\n    case sass = 37\n    case scala = 38\n    case scss = 39\n    case shell = 40\n    case sql = 41\n    case starlark = 42\n    case swift = 43\n    case tsx = 44\n    case typescript = 45\n    case visualbasic = 46\n    case vue = 47\n    case xml = 48\n    case xsl = 49\n    case yaml = 50\n    case svelte = 51\n    case toml = 52\n    case dart = 53\n    case rst = 54\n    case ocaml = 55\n    case cmake = 56\n    case pascal = 57\n    case elixir = 58\n    case fsharp = 59\n    case lisp = 60\n    case matlab = 61\n    case powershell = 62\n    case solidity = 63\n    case ada = 64\n    case ocaml_interface = 65\n    \n    init(codeLanguage: CodeLanguage) {\n        switch codeLanguage {\n        case let .builtIn(language):\n            switch language {\n            case .abap:\n                self = .unspecified\n            case .windowsbat:\n                self = .unspecified\n            case .bibtex:\n                self = .unspecified\n            case .clojure:\n                self = .clojure\n            case .coffeescript:\n                self = .coffeescript\n            case .c:\n                self = .c\n            case .cpp:\n                self = .cpp\n            case .csharp:\n                self = .csharp\n            case .css:\n                self = .css\n            case .diff:\n                self = .unspecified\n            case .dart:\n                self = .dart\n            case .dockerfile:\n                self = .dockerfile\n            case .elixir:\n                self = .elixir\n            case .erlang:\n                self = .unspecified\n            case .fsharp:\n                self = .fsharp\n            case .gitcommit:\n                self = .unspecified\n            case .gitrebase:\n                self = .unspecified\n            case .go:\n                self = .go\n            case .groovy:\n                self = .groovy\n            case .handlebars:\n                self = .handlebars\n            case .html:\n                self = .html\n            case .ini:\n                self = .ini\n            case .java:\n                self = .java\n            case .javascript:\n                self = .javascript\n            case .javascriptreact:\n                self = .javascript\n            case .json:\n                self = .json\n            case .latex:\n                self = .latex\n            case .less:\n                self = .less\n            case .lua:\n                self = .lua\n            case .makefile:\n                self = .makefile\n            case .markdown:\n                self = .markdown\n            case .objc:\n                self = .objectivec\n            case .objcpp:\n                self = .objectivecpp\n            case .perl:\n                self = .perl\n            case .perl6:\n                self = .unspecified\n            case .php:\n                self = .php\n            case .powershell:\n                self = .powershell\n            case .pug:\n                self = .unspecified\n            case .python:\n                self = .python\n            case .r:\n                self = .r\n            case .razor:\n                self = .unspecified\n            case .ruby:\n                self = .ruby\n            case .rust:\n                self = .rust\n            case .scss:\n                self = .scss\n            case .sass:\n                self = .sass\n            case .scala:\n                self = .scala\n            case .shaderlab:\n                self = .unspecified\n            case .shellscript:\n                self = .shell\n            case .sql:\n                self = .sql\n            case .swift:\n                self = .swift\n            case .typescript:\n                self = .typescript\n            case .typescriptreact:\n                self = .tsx\n            case .tex:\n                self = .latex\n            case .vb:\n                self = .visualbasic\n            case .xml:\n                self = .xml\n            case .xsl:\n                self = .xsl\n            case .yaml:\n                self = .yaml\n            }\n        case .plaintext:\n            self = .plaintext\n        case let .other(name):\n            switch name {\n            case \"svelte\":\n                self = .svelte\n            case \"toml\":\n                self = .toml\n            case \"rst\":\n                self = .rst\n            case \"lisp\":\n                self = .lisp\n            case \"matlab\":\n                self = .matlab\n            default:\n                self = .unspecified\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/LanguageServer/OpendDocumentPool.swift",
    "content": "import Foundation\n\nprivate let maxSize: Int = 1_000_000 // Byte\n\nactor OpenedDocumentPool {\n    var openedDocuments = [URL: OpenedDocument]()\n\n    func getOtherDocuments(exceptURL: URL) -> [OpenedDocument] {\n        let ordered = openedDocuments.values.sorted { $0.updateTime > $1.updateTime }\n        var documents = [OpenedDocument]()\n        var size = 0\n        for document in ordered where document.url != exceptURL {\n            size += document.size\n            if size > maxSize {\n                break\n            }\n            documents.append(document)\n        }\n\n        return documents\n    }\n\n    func openDocument(url: URL, relativePath: String, content: String) {\n        let document = OpenedDocument(url: url, relativePath: relativePath, content: content)\n        openedDocuments[url] = document\n    }\n\n    func updateDocument(url: URL, relativePath: String, content: String) {\n        if let document = openedDocuments[url] {\n            document.update(content: content)\n        } else {\n            openDocument(url: url, relativePath: relativePath, content: content)\n        }\n    }\n\n    func closeDocument(url: URL) {\n        openedDocuments[url] = nil\n    }\n}\n\nfinal class OpenedDocument {\n    var url: URL\n    var relativePath: String\n    var updateTime: Date\n    var content: String\n    var size: Int\n\n    public init(url: URL, relativePath: String, content: String) {\n        self.url = url\n        self.relativePath = relativePath\n        updateTime = Date()\n        size = content.utf8.count\n        if size > maxSize {\n            self.content = \"\"\n        } else {\n            self.content = content\n        }\n    }\n\n    func update(content: String) {\n        updateTime = Date()\n        size = content.utf8.count\n        if size > maxSize {\n            self.content = \"\"\n        } else {\n            self.content = content\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/Services/CodeiumAuthService.swift",
    "content": "import Configs\nimport Foundation\nimport Keychain\n\npublic final class CodeiumAuthService {\n    public init() {}\n    let codeiumKeyKey = \"codeiumAuthKey\"\n    let keychain = Keychain()\n\n    var key: String? { try? keychain.get(codeiumKeyKey) }\n\n    public var isSignedIn: Bool { return key != nil }\n\n    public func signIn(token: String) async throws {\n        let key = try await generate(token: token)\n        try keychain.update(key, key: codeiumKeyKey)\n    }\n\n    public func signOut() async throws {\n        try keychain.remove(codeiumKeyKey)\n    }\n\n    struct GenerateKeyRequestBody: Codable {\n        var firebase_id_token: String\n    }\n\n    struct GenerateKeyResponseBody: Codable {\n        var api_key: String\n    }\n\n    struct GenerateKeyErrorResponseBody: Codable, Error, LocalizedError {\n        var detail: String\n        var errorDescription: String? { detail }\n    }\n\n    func generate(token: String) async throws -> String {\n        var registerUserUrl = URL(string: \"https://api.codeium.com/register_user/\")\n        let apiUrl = UserDefaults.shared.value(for: \\.codeiumApiUrl)\n        if UserDefaults.shared.value(for: \\.codeiumEnterpriseMode), apiUrl != \"\" {\n            registerUserUrl =\n                URL(string: apiUrl + \"/exa.seat_management_pb.SeatManagementService/RegisterUser\")\n        }\n\n        var request = URLRequest(url: registerUserUrl!)\n        request.httpMethod = \"POST\"\n        request.addValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        let requestBody = GenerateKeyRequestBody(firebase_id_token: token)\n        let requestData = try JSONEncoder().encode(requestBody)\n        request.httpBody = requestData\n        let (data, _) = try await URLSession.shared.data(for: request)\n        do {\n            let response = try JSONDecoder().decode(GenerateKeyResponseBody.self, from: data)\n            return response.api_key\n        } catch {\n            if let response = try? JSONDecoder()\n                .decode(GenerateKeyErrorResponseBody.self, from: data)\n            {\n                throw response\n            }\n            throw error\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/Services/CodeiumService.swift",
    "content": "import AppKit\nimport Foundation\nimport LanguageClient\nimport LanguageServerProtocol\nimport Logger\nimport SuggestionBasic\nimport XcodeInspector\n\npublic protocol CodeiumSuggestionServiceType {\n    func getCompletions(\n        fileURL: URL,\n        content: String,\n        cursorPosition: CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) async throws -> [CodeSuggestion]\n    func notifyAccepted(_ suggestion: CodeSuggestion) async\n    func getChatURL() async throws -> URL\n    func notifyOpenTextDocument(fileURL: URL, content: String) async throws\n    func notifyChangeTextDocument(fileURL: URL, content: String) async throws\n    func notifyCloseTextDocument(fileURL: URL) async throws\n    func cancelRequest() async\n    func terminate()\n}\n\nenum CodeiumError: Error, LocalizedError {\n    case languageServerNotInstalled\n    case languageServerOutdated\n    case languageServiceIsInstalling\n    case failedToConstructChatURL\n\n    var errorDescription: String? {\n        switch self {\n        case .languageServerNotInstalled:\n            return \"Language server is not installed. Please install it in the host app.\"\n        case .languageServerOutdated:\n            return \"Language server is outdated. Please update it in the host app or update the extension.\"\n        case .languageServiceIsInstalling:\n            return \"Language service is installing, please try again later.\"\n        case .failedToConstructChatURL:\n            return \"Failed to construct chat URL.\"\n        }\n    }\n}\n\npublic class CodeiumService {\n    static let sessionId = UUID().uuidString\n    let projectRootURL: URL\n    var server: CodeiumLSP?\n    var heartbeatTask: Task<Void, Error>?\n    var workspaceTask: Task<Void, Error>?\n    var requestCounter: UInt64 = 0\n    var cancellationCounter: UInt64 = 0\n    let openedDocumentPool = OpenedDocumentPool()\n    let onServiceLaunched: () -> Void\n    let onServiceTerminated: () -> Void\n\n    let languageServerURL: URL\n    let supportURL: URL\n\n    let authService = CodeiumAuthService()\n\n    var fallbackXcodeVersion = \"14.0.0\"\n    var languageServerVersion = CodeiumInstallationManager.latestSupportedVersion\n\n    private var ongoingTasks = Set<Task<[CodeSuggestion], Error>>()\n\n    init(designatedServer: CodeiumLSP) {\n        projectRootURL = URL(fileURLWithPath: \"/\")\n        server = designatedServer\n        onServiceLaunched = {}\n        onServiceTerminated = {}\n        languageServerURL = URL(fileURLWithPath: \"/\")\n        supportURL = URL(fileURLWithPath: \"/\")\n    }\n\n    public init(\n        projectRootURL: URL,\n        onServiceLaunched: @escaping () -> Void,\n        onServiceTerminated: @escaping () -> Void\n    ) throws {\n        self.projectRootURL = projectRootURL\n        self.onServiceLaunched = onServiceLaunched\n        self.onServiceTerminated = onServiceTerminated\n        let urls = try CodeiumService.createFoldersIfNeeded()\n        languageServerURL = urls.executableURL.appendingPathComponent(\"language_server\")\n        supportURL = urls.supportURL\n        Task {\n            try await setupServerIfNeeded()\n        }\n    }\n\n    @discardableResult\n    func setupServerIfNeeded() async throws -> CodeiumLSP {\n        if let server { return server }\n\n        let binaryManager = CodeiumInstallationManager()\n        let installationStatus = await binaryManager.checkInstallation()\n        switch installationStatus {\n        case let .installed(version), let .unsupported(version, _):\n            languageServerVersion = version\n        case .notInstalled:\n            throw CodeiumError.languageServerNotInstalled\n        case let .outdated(version, _, _):\n            languageServerVersion = version\n            throw CodeiumError.languageServerOutdated\n        }\n\n        let metadata = try await getMetadata()\n        let tempFolderURL = FileManager.default.temporaryDirectory\n        let managerDirectoryURL = tempFolderURL\n            .appendingPathComponent(\"com.intii.CopilotForXcode\")\n            .appendingPathComponent(UUID().uuidString)\n        if !FileManager.default.fileExists(atPath: managerDirectoryURL.path) {\n            try FileManager.default.createDirectory(\n                at: managerDirectoryURL,\n                withIntermediateDirectories: true\n            )\n        }\n\n        let server = CodeiumLanguageServer(\n            languageServerExecutableURL: languageServerURL,\n            managerDirectoryURL: managerDirectoryURL,\n            supportURL: supportURL\n        )\n\n        server.terminationHandler = { [weak self] in\n            self?.server = nil\n            self?.heartbeatTask?.cancel()\n            self?.workspaceTask?.cancel()\n            self?.requestCounter = 0\n            self?.cancellationCounter = 0\n            self?.onServiceTerminated()\n            Logger.codeium.info(\"Language server is terminated, will be restarted when needed.\")\n        }\n\n        server.launchHandler = { [weak self] in\n            guard let self else { return }\n            self.onServiceLaunched()\n            self.heartbeatTask = Task { [weak self, metadata] in\n                while true {\n                    try Task.checkCancellation()\n                    _ = try? await self?.server?.sendRequest(\n                        CodeiumRequest.Heartbeat(requestBody: .init(metadata: metadata))\n                    )\n                    try await Task.sleep(nanoseconds: 5_000_000_000)\n                }\n            }\n\n            self.workspaceTask = Task { [weak self] in\n                while true {\n                    try Task.checkCancellation()\n                    _ = await self?.server?.updateIndexing()\n                    try await Task.sleep(nanoseconds: 5_000_000_000)\n                }\n            }\n        }\n\n        self.server = server\n        server.start()\n        return server\n    }\n\n    public static func createFoldersIfNeeded() throws -> (\n        applicationSupportURL: URL,\n        gitHubCopilotURL: URL,\n        executableURL: URL,\n        supportURL: URL\n    ) {\n        let supportURL = FileManager.default.urls(\n            for: .applicationSupportDirectory,\n            in: .userDomainMask\n        ).first!.appendingPathComponent(\n            Bundle.main\n                .object(forInfoDictionaryKey: \"APPLICATION_SUPPORT_FOLDER\") as! String\n        )\n\n        if !FileManager.default.fileExists(atPath: supportURL.path) {\n            try? FileManager.default\n                .createDirectory(at: supportURL, withIntermediateDirectories: false)\n        }\n        let gitHubCopilotFolderURL = supportURL.appendingPathComponent(\"Codeium\")\n        if !FileManager.default.fileExists(atPath: gitHubCopilotFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: gitHubCopilotFolderURL, withIntermediateDirectories: false)\n        }\n        let supportFolderURL = gitHubCopilotFolderURL.appendingPathComponent(\"support\")\n        if !FileManager.default.fileExists(atPath: supportFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: supportFolderURL, withIntermediateDirectories: false)\n        }\n        let executableFolderURL = gitHubCopilotFolderURL.appendingPathComponent(\"executable\")\n        if !FileManager.default.fileExists(atPath: executableFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: executableFolderURL, withIntermediateDirectories: false)\n        }\n\n        return (supportURL, gitHubCopilotFolderURL, executableFolderURL, supportFolderURL)\n    }\n}\n\nextension CodeiumService {\n    func getMetadata() async throws -> Metadata {\n        guard let key = authService.key else {\n            struct E: Error, LocalizedError {\n                var errorDescription: String? { \"Codeium not signed in.\" }\n            }\n            throw E()\n        }\n        var ideVersion = await XcodeInspector.shared.latestActiveXcode?.version\n            ?? fallbackXcodeVersion\n        let versionNumberSegmentCount = ideVersion.split(separator: \".\").count\n        if versionNumberSegmentCount == 2 {\n            ideVersion += \".0\"\n        } else if versionNumberSegmentCount == 1 {\n            ideVersion += \".0.0\"\n        }\n        return Metadata(\n            ide_name: \"xcode\",\n            ide_version: ideVersion,\n            extension_version: languageServerVersion,\n            api_key: key,\n            session_id: CodeiumService.sessionId,\n            request_id: requestCounter\n        )\n    }\n\n    func getRelativePath(of fileURL: URL) -> String {\n        let filePath = fileURL.path\n        let rootPath = projectRootURL.path\n        if let range = filePath.range(of: rootPath),\n           range.lowerBound == filePath.startIndex\n        {\n            let relativePath = filePath.replacingCharacters(\n                in: filePath.startIndex..<range.upperBound,\n                with: \"\"\n            )\n            return relativePath\n        }\n        return filePath\n    }\n}\n\nextension CodeiumService: CodeiumSuggestionServiceType {\n    public func getCompletions(\n        fileURL: URL,\n        content: String,\n        cursorPosition: CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) async throws -> [CodeSuggestion] {\n        ongoingTasks.forEach { $0.cancel() }\n        ongoingTasks.removeAll()\n        await cancelRequest()\n\n        requestCounter += 1\n        let languageId = languageIdentifierFromFileURL(fileURL)\n\n        let task = Task {\n            let request = try await CodeiumRequest.GetCompletion(requestBody: .init(\n                metadata: getMetadata(),\n                document: .init(\n                    absolute_path_migrate_me_to_uri: fileURL.path,\n                    text: content,\n                    editor_language: languageId.rawValue,\n                    language: .init(codeLanguage: languageId),\n                    cursor_position: .init(\n                        row: cursorPosition.line,\n                        col: cursorPosition.character\n                    )\n                ),\n                editor_options: .init(tab_size: indentSize, insert_spaces: !usesTabsForIndentation),\n                other_documents: openedDocumentPool.getOtherDocuments(exceptURL: fileURL)\n                    .map { openedDocument in\n                        let languageId = languageIdentifierFromFileURL(openedDocument.url)\n                        return .init(\n                            absolute_path_migrate_me_to_uri: openedDocument.url.path,\n                            text: openedDocument.content,\n                            editor_language: languageId.rawValue,\n                            language: .init(codeLanguage: languageId)\n                        )\n                    }\n            ))\n\n            try Task.checkCancellation()\n\n            let result = try await (await setupServerIfNeeded()).sendRequest(request)\n\n            try Task.checkCancellation()\n\n            return result.completionItems?.map { item in\n                CodeSuggestion(\n                    id: item.completion.completionId,\n                    text: item.completion.text,\n                    position: cursorPosition,\n                    range: CursorRange(\n                        start: .init(\n                            line: item.range.startPosition?.row.flatMap(Int.init) ?? 0,\n                            character: item.range.startPosition?.col.flatMap(Int.init) ?? 0\n                        ),\n                        end: .init(\n                            line: item.range.endPosition?.row.flatMap(Int.init) ?? 0,\n                            character: item.range.endPosition?.col.flatMap(Int.init) ?? 0\n                        )\n                    )\n                )\n            } ?? []\n        }\n\n        ongoingTasks.insert(task)\n\n        return try await task.value\n    }\n\n    public func cancelRequest() async {\n        _ = try? await server?.sendRequest(\n            CodeiumRequest.CancelRequest(requestBody: .init(\n                request_id: requestCounter,\n                session_id: CodeiumService.sessionId\n            ))\n        )\n    }\n\n    public func getChatURL() async throws -> URL {\n        let metadata = try await getMetadata()\n        let ports = try await server?.sendRequest(\n            CodeiumRequest.GetProcesses(requestBody: .init())\n        )\n\n        guard let chatClientPort = ports?.chatClientPort,\n              let chatWebServerPort = ports?.chatWebServerPort\n        else { throw CodeiumError.failedToConstructChatURL }\n\n        let webServerUrl = \"ws://127.0.0.1:\\(chatWebServerPort)\"\n        var components = URLComponents()\n        components.scheme = \"http\"\n        components.host = \"127.0.0.1\"\n        components.port = Int(chatClientPort)\n        components.path = \"/\"\n        components.queryItems = [\n            URLQueryItem(name: \"api_key\", value: metadata.api_key),\n            URLQueryItem(name: \"locale\", value: \"en\"),\n            URLQueryItem(name: \"extension_name\", value: \"Copilot for XCode\"),\n            URLQueryItem(name: \"extension_version\", value: metadata.extension_version),\n            URLQueryItem(name: \"ide_name\", value: metadata.ide_name),\n            URLQueryItem(name: \"ide_version\", value: metadata.ide_version),\n            URLQueryItem(name: \"web_server_url\", value: webServerUrl),\n            URLQueryItem(name: \"ide_telemetry_enabled\", value: \"true\"),\n            URLQueryItem(name: \"has_enterprise_extension\", value: String(UserDefaults.shared.value(for: \\.codeiumEnterpriseMode))),\n            URLQueryItem(name: \"has_index_service\", value: String(UserDefaults.shared.value(for: \\.codeiumIndexEnabled)))\n        ]\n\n        if let url = components.url {\n            print(url)\n            return url\n        } else {\n            throw CodeiumError.failedToConstructChatURL\n        }\n    }\n\n    public func notifyAccepted(_ suggestion: CodeSuggestion) async {\n        _ = try? await (try setupServerIfNeeded())\n            .sendRequest(CodeiumRequest.AcceptCompletion(requestBody: .init(\n                metadata: getMetadata(),\n                completion_id: suggestion.id\n            )))\n    }\n\n    public func notifyOpenTextDocument(fileURL: URL, content: String) async throws {\n        let relativePath = getRelativePath(of: fileURL)\n        await openedDocumentPool.openDocument(\n            url: fileURL,\n            relativePath: relativePath,\n            content: content\n        )\n    }\n\n    public func notifyChangeTextDocument(fileURL: URL, content: String) async throws {\n        let relativePath = getRelativePath(of: fileURL)\n        await openedDocumentPool.updateDocument(\n            url: fileURL,\n            relativePath: relativePath,\n            content: content\n        )\n    }\n\n    public func notifyCloseTextDocument(fileURL: URL) async throws {\n        await openedDocumentPool.closeDocument(url: fileURL)\n    }\n\n    public func notifyOpenWorkspace(workspaceURL: URL) async throws {\n        _ = try await (setupServerIfNeeded()).sendRequest(\n            CodeiumRequest\n                .AddTrackedWorkspace(requestBody: .init(workspace: workspaceURL.path))\n        )\n    }\n\n    public func notifyCloseWorkspace(workspaceURL: URL) async throws {\n        _ = try await (setupServerIfNeeded()).sendRequest(\n            CodeiumRequest\n                .RemoveTrackedWorkspace(requestBody: .init(workspace: workspaceURL.path))\n        )\n    }\n\n    public func refreshIDEContext(\n        fileURL: URL,\n        content: String,\n        cursorPosition: CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool,\n        workspaceURL: URL\n    ) async throws {\n        let languageId = languageIdentifierFromFileURL(fileURL)\n        let request = await CodeiumRequest.RefreshContextForIdeAction(requestBody: .init(\n            active_document: .init(\n                absolute_path_migrate_me_to_uri: fileURL.path,\n                text: content,\n                editor_language: languageId.rawValue,\n                language: .init(codeLanguage: languageId),\n                cursor_position: .init(\n                    row: cursorPosition.line,\n                    col: cursorPosition.character\n                )\n            ),\n            open_document_filepaths: openedDocumentPool.getOtherDocuments(exceptURL: fileURL)\n                .map(\\.url.path),\n            workspace_paths: [workspaceURL.path]\n        ))\n        _ = try await (setupServerIfNeeded()).sendRequest(request)\n    }\n\n    public func terminate() {\n        server?.terminate()\n        server = nil\n    }\n}\n\nfunc getXcodeVersion() async throws -> String {\n    let task = Process()\n    task.launchPath = \"/usr/bin/xcodebuild\"\n    task.arguments = [\"-version\"]\n    let outpipe = Pipe()\n    task.standardOutput = outpipe\n    task.standardError = Pipe()\n    return try await withUnsafeThrowingContinuation { continuation in\n        do {\n            task.terminationHandler = { _ in\n                do {\n                    if let data = try outpipe.fileHandleForReading.readToEnd(),\n                       let content = String(data: data, encoding: .utf8)\n                    {\n                        let firstLine = content.split(whereSeparator: \\.isNewline).first ?? \"\"\n                        var version = firstLine.replacingOccurrences(of: \"Xcode \", with: \"\")\n                        if version.isEmpty {\n                            version = \"14.0\"\n                        }\n                        continuation.resume(returning: version)\n                        return\n                    }\n                    continuation.resume(returning: \"\")\n                } catch {\n                    continuation.resume(throwing: error)\n                }\n            }\n            try task.run()\n        } catch {\n            continuation.resume(throwing: error)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CodeiumService/Services/CodeiumSuggestionService.swift",
    "content": "import CopilotForXcodeKit\nimport Foundation\nimport SuggestionBasic\nimport Workspace\n\npublic final class CodeiumSuggestionService: SuggestionServiceType {\n    public var configuration: SuggestionServiceConfiguration {\n        .init(\n            acceptsRelevantCodeSnippets: true,\n            mixRelevantCodeSnippetsInSource: true,\n            acceptsRelevantSnippetsFromOpenedFiles: false\n        )\n    }\n\n    let serviceLocator: ServiceLocator\n\n    init(serviceLocator: ServiceLocator) {\n        self.serviceLocator = serviceLocator\n    }\n\n    public func getSuggestions(\n        _ request: SuggestionRequest,\n        workspace: WorkspaceInfo\n    ) async throws -> [CopilotForXcodeKit.CodeSuggestion] {\n        guard let service = await serviceLocator.getService(from: workspace) else { return [] }\n        return try await service.getCompletions(\n            fileURL: request.fileURL,\n            content: request.content,\n            cursorPosition: .init(\n                line: request.cursorPosition.line,\n                character: request.cursorPosition.character\n            ),\n            tabSize: request.tabSize,\n            indentSize: request.indentSize,\n            usesTabsForIndentation: request.usesTabsForIndentation\n        ).map(Self.convert)\n    }\n\n    public func notifyAccepted(\n        _ suggestion: CopilotForXcodeKit.CodeSuggestion,\n        workspace: WorkspaceInfo\n    ) async {\n        guard let service = await serviceLocator.getService(from: workspace) else { return }\n        await service.notifyAccepted(Self.convert(suggestion))\n    }\n\n    public func notifyRejected(\n        _ suggestions: [CopilotForXcodeKit.CodeSuggestion],\n        workspace: WorkspaceInfo\n    ) async {\n        // unimplemented\n    }\n\n    public func cancelRequest(workspace: WorkspaceInfo) async {\n        guard let service = await serviceLocator.getService(from: workspace) else { return }\n        await service.cancelRequest()\n    }\n\n    static func convert(\n        _ suggestion: SuggestionBasic.CodeSuggestion\n    ) -> CopilotForXcodeKit.CodeSuggestion {\n        .init(\n            id: suggestion.id,\n            text: suggestion.text,\n            position: .init(\n                line: suggestion.position.line,\n                character: suggestion.position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: suggestion.range.start.line,\n                    character: suggestion.range.start.character\n                ),\n                end: .init(\n                    line: suggestion.range.end.line,\n                    character: suggestion.range.end.character\n                )\n            )\n        )\n    }\n\n    static func convert(\n        _ suggestion: CopilotForXcodeKit.CodeSuggestion\n    ) -> SuggestionBasic.CodeSuggestion {\n        .init(\n            id: suggestion.id,\n            text: suggestion.text,\n            position: .init(\n                line: suggestion.position.line,\n                character: suggestion.position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: suggestion.range.start.line,\n                    character: suggestion.range.start.character\n                ),\n                end: .init(\n                    line: suggestion.range.end.line,\n                    character: suggestion.range.end.character\n                )\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CommandHandler/CommandHandler.swift",
    "content": "import ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport ModificationBasic\nimport Preferences\nimport SuggestionBasic\nimport Toast\nimport XcodeInspector\n\n/// Provides an interface to handle commands.\npublic protocol CommandHandler {\n    // MARK: Suggestion\n\n    func presentSuggestions(_ suggestions: [CodeSuggestion]) async\n    func presentPreviousSuggestion() async\n    func presentNextSuggestion() async\n    func rejectSuggestions() async\n    func acceptSuggestion() async\n    func acceptActiveSuggestionLineInGroup(atIndex index: Int?) async\n    func dismissSuggestion() async\n    func generateRealtimeSuggestions(sourceEditor: SourceEditor?) async\n\n    // MARK: Chat\n\n    func openChat(forceDetach: Bool, activateThisApp: Bool)\n    func sendChatMessage(_ message: String) async\n\n    // MARK: Modification\n\n    func acceptModification() async\n    func presentModification(state: Shared<ModificationState>) async\n\n    // MARK: Custom Command\n\n    func handleCustomCommand(_ command: CustomCommand) async\n\n    // MARK: Toast\n\n    func toast(_ string: String, as type: ToastType)\n\n    // MARK: Others\n\n    func presentFile(at fileURL: URL, line: Int?) async\n\n    func presentFile(at fileURL: URL) async\n}\n\npublic extension CommandHandler {\n    /// Default implementation for `presentFile(at:line:)`.\n    func presentFile(at fileURL: URL) async {\n        await presentFile(at: fileURL, line: nil)\n    }\n}\n\npublic struct CommandHandlerDependencyKey: DependencyKey {\n    public static var liveValue: CommandHandler = UniversalCommandHandler.shared\n    public static var testValue: CommandHandler = NOOPCommandHandler()\n}\n\npublic extension DependencyValues {\n    /// In production, you need to override the command handler globally by setting\n    /// ``UniversalCommandHandler.shared.commandHandler``.\n    ///\n    /// In tests, you can use ``withDependency`` to mock it.\n    var commandHandler: CommandHandler {\n        get { self[CommandHandlerDependencyKey.self] }\n        set { self[CommandHandlerDependencyKey.self] = newValue }\n    }\n}\n\npublic final class UniversalCommandHandler: CommandHandler {\n    public static let shared: UniversalCommandHandler = .init()\n\n    public var commandHandler: CommandHandler = NOOPCommandHandler()\n\n    private init() {}\n\n    public func presentSuggestions(_ suggestions: [SuggestionBasic.CodeSuggestion]) async {\n        await commandHandler.presentSuggestions(suggestions)\n    }\n\n    public func presentPreviousSuggestion() async {\n        await commandHandler.presentPreviousSuggestion()\n    }\n\n    public func presentNextSuggestion() async {\n        await commandHandler.presentNextSuggestion()\n    }\n\n    public func rejectSuggestions() async {\n        await commandHandler.rejectSuggestions()\n    }\n\n    public func acceptSuggestion() async {\n        await commandHandler.acceptSuggestion()\n    }\n    \n    public func acceptActiveSuggestionLineInGroup(atIndex index: Int?) async {\n        await commandHandler.acceptActiveSuggestionLineInGroup(atIndex: index)\n    }\n\n    public func dismissSuggestion() async {\n        await commandHandler.dismissSuggestion()\n    }\n\n    public func generateRealtimeSuggestions(sourceEditor: SourceEditor?) async {\n        await commandHandler.generateRealtimeSuggestions(sourceEditor: sourceEditor)\n    }\n\n    public func openChat(forceDetach: Bool, activateThisApp: Bool) {\n        commandHandler.openChat(forceDetach: forceDetach, activateThisApp: activateThisApp)\n    }\n\n    public func sendChatMessage(_ message: String) async {\n        await commandHandler.sendChatMessage(message)\n    }\n\n    public func acceptModification() async {\n        await commandHandler.acceptModification()\n    }\n\n    public func presentModification(state: Shared<ModificationState>) async {\n        await commandHandler.presentModification(state: state)\n    }\n\n    public func handleCustomCommand(_ command: CustomCommand) async {\n        await commandHandler.handleCustomCommand(command)\n    }\n\n    public func toast(_ string: String, as type: ToastType) {\n        commandHandler.toast(string, as: type)\n    }\n\n    public func presentFile(at fileURL: URL, line: Int?) async {\n        await commandHandler.presentFile(at: fileURL, line: line)\n    }\n}\n\nstruct NOOPCommandHandler: CommandHandler {\n    func presentSuggestions(_ suggestions: [CodeSuggestion]) async {\n        print(\"present \\(suggestions.count) suggestions\")\n    }\n\n    func presentPreviousSuggestion() async {\n        print(\"previous suggestion\")\n    }\n\n    func presentNextSuggestion() async {\n        print(\"next suggestion\")\n    }\n\n    func rejectSuggestions() async {\n        print(\"reject suggestions\")\n    }\n\n    func acceptSuggestion() async {\n        print(\"accept suggestion\")\n    }\n    \n    func acceptActiveSuggestionLineInGroup(atIndex index: Int?) async {\n        print(\"accept active suggestion line in group at index \\(String(describing: index))\")\n    }\n\n    func dismissSuggestion() async {\n        print(\"dismiss suggestion\")\n    }\n\n    func generateRealtimeSuggestions(sourceEditor: SourceEditor?) async {\n        print(\"generate realtime suggestions\")\n    }\n\n    func openChat(forceDetach: Bool, activateThisApp: Bool) {\n        print(\"open chat\")\n    }\n\n    func sendChatMessage(_: String) async {\n        print(\"send chat message\")\n    }\n\n    func acceptModification() async {\n        print(\"accept prompt to code\")\n    }\n\n    func presentModification(state: Shared<ModificationState>) {\n        print(\"present modification\")\n    }\n\n    func handleCustomCommand(_: CustomCommand) async {\n        print(\"handle custom command\")\n    }\n\n    func toast(_: String, as: ToastType) {\n        print(\"toast\")\n    }\n\n    func presentFile(at fileURL: URL, line: Int?) async {\n        print(\"present file\")\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Configs/Configurations.swift",
    "content": "import Foundation\n\nprivate var teamIDPrefix: String {\n    Bundle.main.infoDictionary?[\"TEAM_ID_PREFIX\"] as? String ?? \"\"\n}\n\nprivate var bundleIdentifierBase: String {\n    Bundle.main.infoDictionary?[\"BUNDLE_IDENTIFIER_BASE\"] as? String ?? \"\"\n}\n\npublic var userDefaultSuiteName: String {\n    \"\\(teamIDPrefix)group.\\(bundleIdentifierBase)\"\n}\n\npublic var keychainAccessGroup: String {\n    return \"\\(teamIDPrefix)\\(bundleIdentifierBase).Shared\"\n}\n\npublic var keychainService: String {\n    return bundleIdentifierBase\n}\n\n"
  },
  {
    "path": "Tool/Sources/CustomAsyncAlgorithms/TimedDebounce.swift",
    "content": "import Foundation\n\nprivate actor TimedDebounceFunction<Element> {\n    let duration: TimeInterval\n    let block: (Element) async -> Void\n\n    var task: Task<Void, Error>?\n    var lastValue: Element?\n    var lastFireTime: Date = .init(timeIntervalSince1970: 0)\n\n    init(duration: TimeInterval, block: @escaping (Element) async -> Void) {\n        self.duration = duration\n        self.block = block\n    }\n\n    func callAsFunction(_ value: Element) async {\n        task?.cancel()\n        if lastFireTime.timeIntervalSinceNow < -duration {\n            await fire(value)\n            task = nil\n        } else {\n            lastValue = value\n            task = Task.detached { [weak self, duration] in\n                try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                await self?.fire(value)\n            }\n        }\n    }\n\n    func finish() async {\n        task?.cancel()\n        if let lastValue {\n            await fire(lastValue)\n        }\n    }\n\n    private func fire(_ value: Element) async {\n        lastFireTime = Date()\n        lastValue = nil\n        await block(value)\n    }\n}\n\npublic extension AsyncSequence {\n    /// Debounce, but only if the value is received within a certain time frame.\n    ///\n    /// In the future when we drop macOS 12 support we should just use chunked from AsyncAlgorithms.\n    func timedDebounce(\n        for duration: TimeInterval,\n        reducer: @escaping @Sendable (Element, Element) -> Element\n    ) -> AsyncThrowingStream<Element, Error> {\n        return AsyncThrowingStream { continuation in\n            Task {\n                let storage = TimedDebounceStorage<Element>()\n                var lastTimeStamp = Date()\n                do {\n                    for try await value in self {\n                        await storage.reduce(value, reducer: reducer)\n                        let now = Date()\n                        if now.timeIntervalSince(lastTimeStamp) >= duration {\n                            lastTimeStamp = now\n                            if let value = await storage.consume() {\n                                continuation.yield(value)\n                            }\n                        }\n                    }\n                    if let value = await storage.consume() {\n                        continuation.yield(value)\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n    }\n}\n\nprivate actor TimedDebounceStorage<Element> {\n    var value: Element?\n    func reduce(_ value: Element, reducer: (Element, Element) -> Element) async {\n        if let existing = self.value {\n            self.value = reducer(existing, value)\n        } else {\n            self.value = value\n        }\n    }\n\n    func consume() -> Element? {\n        defer { value = nil }\n        return value\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/CustomCommandTemplateProcessor/CustomCommandTemplateProcessor.swift",
    "content": "import AppKit\nimport Foundation\nimport SuggestionBasic\nimport XcodeInspector\n\npublic struct CustomCommandTemplateProcessor {\n    public init() {}\n    \n    public func process(_ text: String) async -> String {\n        let info = await getEditorInformation()\n        let editorContent = info.editorContent\n        let updatedText = text\n            .replacingOccurrences(of: \"{{selected_code}}\", with: \"\"\"\n            \\(editorContent?.selectedContent.trimmingCharacters(in: .whitespacesAndNewlines) ?? \"\")\n            \"\"\")\n            .replacingOccurrences(\n                of: \"{{active_editor_language}}\",\n                with: info.language.rawValue\n            )\n            .replacingOccurrences(\n                of: \"{{active_editor_file_url}}\",\n                with: info.documentURL?.path ?? \"\"\n            )\n            .replacingOccurrences(\n                of: \"{{active_editor_file_name}}\",\n                with: info.documentURL?.lastPathComponent ?? \"\"\n            )\n            .replacingOccurrences(\n                of: \"{{clipboard}}\",\n                with: NSPasteboard.general.string(forType: .string) ?? \"\"\n            )\n        return updatedText\n    }\n\n    struct EditorInformation {\n        let editorContent: SourceEditor.Content?\n        let language: CodeLanguage\n        let documentURL: URL?\n    }\n\n    func getEditorInformation() async -> EditorInformation {\n        let editorContent = await XcodeInspector.shared.latestFocusedEditor?.getContent()\n        let documentURL = await XcodeInspector.shared.activeDocumentURL\n        let language = documentURL.map(languageIdentifierFromFileURL) ?? .plaintext\n\n        return .init(\n            editorContent: editorContent,\n            language: language,\n            documentURL: documentURL\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/DebounceFunction/DebounceFunction.swift",
    "content": "import Foundation\n\npublic actor DebounceFunction<T> {\n    let duration: TimeInterval\n    let block: (T) async -> Void\n\n    var task: Task<Void, Error>?\n\n    public init(duration: TimeInterval, block: @escaping (T) async -> Void) {\n        self.duration = duration\n        self.block = block\n    }\n\n    public func cancel() {\n        task?.cancel()\n    }\n\n    public func callAsFunction(_ t: T) async {\n        task?.cancel()\n        task = Task { [block, duration] in\n            try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n            await block(t)\n        }\n    }\n}\n\npublic actor DebounceRunner {\n    let duration: TimeInterval\n\n    var task: Task<Void, Error>?\n\n    public init(duration: TimeInterval) {\n        self.duration = duration\n    }\n\n    public func cancel() {\n        task?.cancel()\n    }\n\n    public func debounce(_ block: @escaping () async -> Void) {\n        task?.cancel()\n        task = Task { [duration] in\n            try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n            await block()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/DebounceFunction/ThrottleFunction.swift",
    "content": "import Foundation\n\npublic actor ThrottleFunction<T> {\n    let duration: TimeInterval\n    let block: (T) async -> Void\n\n    var task: Task<Void, Error>?\n    var lastFinishTime: Date = .init(timeIntervalSince1970: 0)\n    var now: () -> Date = { Date() }\n\n    public init(duration: TimeInterval, block: @escaping @Sendable (T) async -> Void) {\n        self.duration = duration\n        self.block = block\n    }\n\n    public func callAsFunction(_ t: T) async {\n        if task == nil {\n            scheduleTask(t, wait: now().timeIntervalSince(lastFinishTime) < duration)\n        }\n    }\n\n    func scheduleTask(_ t: T, wait: Bool) {\n        task = Task.detached { [weak self] in\n            guard let self else { return }\n            do {\n                if wait {\n                    try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                }\n                await block(t)\n                await finishTask()\n            } catch {\n                await finishTask()\n            }\n        }\n    }\n\n    func finishTask() {\n        task = nil\n        lastFinishTime = now()\n    }\n}\n\npublic actor ThrottleRunner {\n    let duration: TimeInterval\n    var lastFinishTime: Date = .init(timeIntervalSince1970: 0)\n    var now: () -> Date = { Date() }\n    var task: Task<Void, Error>?\n\n    public init(duration: TimeInterval) {\n        self.duration = duration\n    }\n\n    public func throttle(block: @escaping @Sendable () async -> Void) {\n        if task == nil {\n            scheduleTask(wait: now().timeIntervalSince(lastFinishTime) < duration, block: block)\n        }\n    }\n\n    func scheduleTask(wait: Bool, block: @escaping @Sendable () async -> Void) {\n        task = Task.detached { [weak self] in\n            guard let self else { return }\n            do {\n                if wait {\n                    try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                }\n                await block()\n                await finishTask()\n            } catch {\n                await finishTask()\n            }\n        }\n    }\n\n    func finishTask() {\n        task = nil\n        lastFinishTime = now()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FileSystem/ByteString.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n*/\n\nimport Foundation\n\n/// A `ByteString` represents a sequence of bytes.\n///\n/// This struct provides useful operations for working with buffers of\n/// bytes. Conceptually it is just a contiguous array of bytes (UInt8), but it\n/// contains methods and default behavior suitable for common operations done\n/// using bytes strings.\n///\n/// This struct *is not* intended to be used for significant mutation of byte\n/// strings, we wish to retain the flexibility to micro-optimize the memory\n/// allocation of the storage (for example, by inlining the storage for small\n/// strings or and by eliminating wasted space in growable arrays). For\n/// construction of byte arrays, clients should use the `WritableByteStream` class\n/// and then convert to a `ByteString` when complete.\npublic struct ByteString: ExpressibleByArrayLiteral, Hashable, Sendable {\n    /// The buffer contents.\n    @usableFromInline\n    internal var _bytes: [UInt8]\n\n    /// Create an empty byte string.\n    @inlinable\n    public init() {\n        _bytes = []\n    }\n\n    /// Create a byte string from a byte array literal.\n    @inlinable\n    public init(arrayLiteral contents: UInt8...) {\n        _bytes = contents\n    }\n\n    /// Create a byte string from an array of bytes.\n    @inlinable\n    public init(_ contents: [UInt8]) {\n        _bytes = contents\n    }\n\n    /// Create a byte string from an array slice.\n    @inlinable\n    public init(_ contents: ArraySlice<UInt8>) {\n        _bytes = Array(contents)\n    }\n\n    /// Create a byte string from an byte buffer.\n    @inlinable\n    public init<S: Sequence> (_ contents: S) where S.Iterator.Element == UInt8 {\n        _bytes = [UInt8](contents)\n    }\n\n    /// Create a byte string from the UTF8 encoding of a string.\n    @inlinable\n    public init(encodingAsUTF8 string: String) {\n        _bytes = [UInt8](string.utf8)\n    }\n\n    /// Access the byte string contents as an array.\n    @inlinable\n    public var contents: [UInt8] {\n        return _bytes\n    }\n\n    /// Return the byte string size.\n    @inlinable\n    public var count: Int {\n        return _bytes.count\n    }\n\n    /// Gives a non-escaping closure temporary access to an immutable `Data` instance wrapping the `ByteString` without\n    /// copying any memory around.\n    ///\n    /// - Parameters:\n    ///   - closure: The closure that will have access to a `Data` instance for the duration of its lifetime.\n    @inlinable\n    public func withData<T>(_ closure: (Data) throws -> T) rethrows -> T {\n        return try _bytes.withUnsafeBytes { pointer -> T in\n            let mutatingPointer = UnsafeMutableRawPointer(mutating: pointer.baseAddress!)\n            let data = Data(bytesNoCopy: mutatingPointer, count: pointer.count, deallocator: .none)\n            return try closure(data)\n        }\n    }\n\n    /// Returns a `String` lowercase hexadecimal representation of the contents of the `ByteString`.\n    @inlinable\n    public var hexadecimalRepresentation: String {\n        _bytes.reduce(\"\") {\n            var str = String($1, radix: 16)\n            // The above method does not do zero padding.\n            if str.count == 1 {\n                str = \"0\" + str\n            }\n            return $0 + str\n        }\n    }\n}\n\n/// Conform to CustomDebugStringConvertible.\nextension ByteString: CustomStringConvertible {\n    /// Return the string decoded as a UTF8 sequence, or traps if not possible.\n    public var description: String {\n        return cString\n    }\n\n    /// Return the string decoded as a UTF8 sequence, if possible.\n    @inlinable\n    public var validDescription: String? {\n        // FIXME: This is very inefficient, we need a way to pass a buffer. It\n        // is also wrong if the string contains embedded '\\0' characters.\n        let tmp = _bytes + [UInt8(0)]\n        return tmp.withUnsafeBufferPointer { ptr in\n            return String(validatingUTF8: unsafeBitCast(ptr.baseAddress, to: UnsafePointer<CChar>.self))\n        }\n    }\n\n    /// Return the string decoded as a UTF8 sequence, substituting replacement\n    /// characters for ill-formed UTF8 sequences.\n    @inlinable\n    public var cString: String {\n        return String(decoding: _bytes, as: Unicode.UTF8.self)\n    }\n\n    @available(*, deprecated, message: \"use description or validDescription instead\")\n    public var asString: String? {\n        return validDescription\n    }\n}\n\n/// ByteStreamable conformance for a ByteString.\nextension ByteString: ByteStreamable {\n    @inlinable\n    public func write(to stream: WritableByteStream) {\n        stream.write(_bytes)\n    }\n}\n\n/// StringLiteralConvertible conformance for a ByteString.\nextension ByteString: ExpressibleByStringLiteral {\n    public typealias UnicodeScalarLiteralType = StringLiteralType\n    public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType\n\n    public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {\n        _bytes = [UInt8](value.utf8)\n    }\n    public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) {\n        _bytes = [UInt8](value.utf8)\n    }\n    public init(stringLiteral value: StringLiteralType) {\n        _bytes = [UInt8](value.utf8)\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/FileSystem/FileInfo.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2023 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n */\n\nimport Foundation\n\n#if swift(<5.6)\nextension FileAttributeType: UnsafeSendable {}\nextension Date: UnsafeSendable {}\n#endif\n\n/// File system information for a particular file.\npublic struct FileInfo: Equatable, Codable, Sendable {\n\n    /// The device number.\n    public let device: UInt64\n\n    /// The inode number.\n    public let inode: UInt64\n\n    /// The size of the file.\n    public let size: UInt64\n\n    /// The modification time of the file.\n    public let modTime: Date\n\n    /// Kind of file system entity.\n    public let posixPermissions: Int16\n\n    /// Kind of file system entity.\n    public let fileType: FileAttributeType\n\n    public init(_ attrs: [FileAttributeKey : Any]) {\n        let device = (attrs[.systemNumber] as? NSNumber)?.uint64Value\n        assert(device != nil)\n        self.device = device!\n\n        let inode = attrs[.systemFileNumber] as? UInt64\n        assert(inode != nil)\n        self.inode = inode!\n\n        let posixPermissions = (attrs[.posixPermissions] as? NSNumber)?.int16Value\n        assert(posixPermissions != nil)\n        self.posixPermissions = posixPermissions!\n\n        let fileType = attrs[.type] as? FileAttributeType\n        assert(fileType != nil)\n        self.fileType = fileType!\n\n        let size = attrs[.size] as? UInt64\n        assert(size != nil)\n        self.size = size!\n\n        let modTime = attrs[.modificationDate] as? Date\n        assert(modTime != nil)\n        self.modTime = modTime!\n    }\n}\n\nextension FileAttributeType: Codable {}\n"
  },
  {
    "path": "Tool/Sources/FileSystem/FileSystem.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n */\n\nimport Dispatch\nimport Foundation\n\n#if canImport(Glibc)\n@_exported import Glibc\n#elseif canImport(Musl)\n@_exported import Musl\n#elseif os(Windows)\n@_exported import CRT\n@_exported import WinSDK\n#else\n@_exported import Darwin.C\n#endif\n\npublic struct FileSystemError: Error, Equatable, Sendable {\n    public enum Kind: Equatable, Sendable {\n        /// Access to the path is denied.\n        ///\n        /// This is used when an operation cannot be completed because a component of\n        /// the path cannot be accessed.\n        ///\n        /// Used in situations that correspond to the POSIX EACCES error code.\n        case invalidAccess\n\n        /// IO Error encoding\n        ///\n        /// This is used when an operation cannot be completed due to an otherwise\n        /// unspecified IO error.\n        case ioError(code: Int32)\n\n        /// Is a directory\n        ///\n        /// This is used when an operation cannot be completed because a component\n        /// of the path which was expected to be a file was not.\n        ///\n        /// Used in situations that correspond to the POSIX EISDIR error code.\n        case isDirectory\n\n        /// No such path exists.\n        ///\n        /// This is used when a path specified does not exist, but it was expected\n        /// to.\n        ///\n        /// Used in situations that correspond to the POSIX ENOENT error code.\n        case noEntry\n\n        /// Not a directory\n        ///\n        /// This is used when an operation cannot be completed because a component\n        /// of the path which was expected to be a directory was not.\n        ///\n        /// Used in situations that correspond to the POSIX ENOTDIR error code.\n        case notDirectory\n\n        /// Unsupported operation\n        ///\n        /// This is used when an operation is not supported by the concrete file\n        /// system implementation.\n        case unsupported\n\n        /// An unspecific operating system error at a given path.\n        case unknownOSError\n\n        /// File or folder already exists at destination.\n        ///\n        /// This is thrown when copying or moving a file or directory but the destination\n        /// path already contains a file or folder.\n        case alreadyExistsAtDestination\n\n        /// If an unspecified error occurs when trying to change directories.\n        case couldNotChangeDirectory\n\n        /// If a mismatch is detected in byte count when writing to a file.\n        case mismatchedByteCount(expected: Int, actual: Int)\n    }\n\n    /// The kind of the error being raised.\n    public let kind: Kind\n\n    /// The absolute path to the file associated with the error, if available.\n    public let path: AbsolutePath?\n\n    public init(_ kind: Kind, _ path: AbsolutePath? = nil) {\n        self.kind = kind\n        self.path = path\n    }\n}\n\nextension FileSystemError: CustomNSError {\n    public var errorUserInfo: [String: Any] {\n        return [NSLocalizedDescriptionKey: \"\\(self)\"]\n    }\n}\n\npublic extension FileSystemError {\n    init(errno: Int32, _ path: AbsolutePath) {\n        switch errno {\n        case EACCES:\n            self.init(.invalidAccess, path)\n        case EISDIR:\n            self.init(.isDirectory, path)\n        case ENOENT:\n            self.init(.noEntry, path)\n        case ENOTDIR:\n            self.init(.notDirectory, path)\n        case EEXIST:\n            self.init(.alreadyExistsAtDestination, path)\n        default:\n            self.init(.ioError(code: errno), path)\n        }\n    }\n}\n\n/// Defines the file modes.\npublic enum FileMode: Sendable {\n    public enum Option: Int, Sendable {\n        case recursive\n        case onlyFiles\n    }\n\n    case userUnWritable\n    case userWritable\n    case executable\n\n    public func setMode(_ originalMode: Int16) -> Int16 {\n        switch self {\n        case .userUnWritable:\n            // r-x rwx rwx\n            return originalMode & 0o577\n        case .userWritable:\n            // -w- --- ---\n            return originalMode | 0o200\n        case .executable:\n            // --x --x --x\n            return originalMode | 0o111\n        }\n    }\n}\n\n/// Extended file system attributes that can applied to a given file path. See also\n/// ``FileSystem/hasAttribute(_:_:)``.\npublic enum FileSystemAttribute: RawRepresentable {\n    #if canImport(Darwin)\n    case quarantine\n    #endif\n\n    public init?(rawValue: String) {\n        switch rawValue {\n        #if canImport(Darwin)\n        case \"com.apple.quarantine\":\n            self = .quarantine\n        #endif\n        default:\n            return nil\n        }\n    }\n\n    public var rawValue: String {\n        switch self {\n        #if canImport(Darwin)\n        case .quarantine:\n            return \"com.apple.quarantine\"\n        #endif\n        }\n    }\n}\n\n// FIXME: Design an asynchronous story?\n//\n/// Abstracted access to file system operations.\n///\n/// This protocol is used to allow most of the codebase to interact with a\n/// natural filesystem interface, while still allowing clients to transparently\n/// substitute a virtual file system or redirect file system operations.\n///\n/// - Note: All of these APIs are synchronous and can block.\npublic protocol FileSystem: Sendable {\n    /// Check whether the given path exists and is accessible.\n    @_disfavoredOverload\n    func exists(_ path: AbsolutePath, followSymlink: Bool) -> Bool\n\n    /// Check whether the given path is accessible and a directory.\n    func isDirectory(_ path: AbsolutePath) -> Bool\n\n    /// Check whether the given path is accessible and a file.\n    func isFile(_ path: AbsolutePath) -> Bool\n\n    /// Check whether the given path is an accessible and executable file.\n    func isExecutableFile(_ path: AbsolutePath) -> Bool\n\n    /// Check whether the given path is accessible and is a symbolic link.\n    func isSymlink(_ path: AbsolutePath) -> Bool\n\n    /// Check whether the given path is accessible and readable.\n    func isReadable(_ path: AbsolutePath) -> Bool\n\n    /// Check whether the given path is accessible and writable.\n    func isWritable(_ path: AbsolutePath) -> Bool\n\n    /// Returns any known item replacement directories for a given path. These may be used by\n    /// platform-specific\n    /// libraries to handle atomic file system operations, such as deletion.\n    func itemReplacementDirectories(for path: AbsolutePath) throws -> [AbsolutePath]\n\n    @available(*, deprecated, message: \"use `hasAttribute(_:_:)` instead\")\n    func hasQuarantineAttribute(_ path: AbsolutePath) -> Bool\n\n    /// Returns `true` if a given path has an attribute with a given name applied when file system\n    /// supports this\n    /// attribute. Returns `false` if such attribute is not applied or it isn't supported.\n    func hasAttribute(_ name: FileSystemAttribute, _ path: AbsolutePath) -> Bool\n\n    // FIXME: Actual file system interfaces will allow more efficient access to\n    // more data than just the name here.\n    //\n    /// Get the contents of the given directory, in an undefined order.\n    func _getDirectoryContents(\n        _ path: AbsolutePath,\n        includingPropertiesForKeys: [URLResourceKey]?,\n        options: FileManager.DirectoryEnumerationOptions\n    ) throws -> [AbsolutePath]\n\n    /// Get the current working directory (similar to `getcwd(3)`), which can be\n    /// different for different (virtualized) implementations of a FileSystem.\n    /// The current working directory can be empty if e.g. the directory became\n    /// unavailable while the current process was still working in it.\n    /// This follows the POSIX `getcwd(3)` semantics.\n    @_disfavoredOverload\n    var currentWorkingDirectory: AbsolutePath? { get }\n\n    /// Change the current working directory.\n    /// - Parameters:\n    ///   - path: The path to the directory to change the current working directory to.\n    func changeCurrentWorkingDirectory(to path: AbsolutePath) throws\n\n    /// Get the home directory of current user\n    @_disfavoredOverload\n    var homeDirectory: AbsolutePath { get throws }\n\n    /// Get the caches directory of current user\n    @_disfavoredOverload\n    var cachesDirectory: AbsolutePath? { get }\n\n    /// Get the temp directory\n    @_disfavoredOverload\n    var tempDirectory: AbsolutePath { get throws }\n\n    /// Create the given directory.\n    func createDirectory(_ path: AbsolutePath) throws\n\n    /// Create the given directory.\n    ///\n    /// - recursive: If true, create missing parent directories if possible.\n    func createDirectory(_ path: AbsolutePath, recursive: Bool) throws\n\n    /// Creates a symbolic link of the source path at the target path\n    /// - Parameters:\n    ///   - path: The path at which to create the link.\n    ///   - destination: The path to which the link points to.\n    ///   - relative: If `relative` is true, the symlink contents will be a relative path, otherwise\n    /// it will be absolute.\n    func createSymbolicLink(\n        _ path: AbsolutePath,\n        pointingAt destination: AbsolutePath,\n        relative: Bool\n    ) throws\n    \n    func data(_ path: AbsolutePath) throws -> Data\n    \n    // FIXME: This is obviously not a very efficient or flexible API.\n    //\n    /// Get the contents of a file.\n    ///\n    /// - Returns: The file contents as bytes, or nil if missing.\n    func readFileContents(_ path: AbsolutePath) throws -> ByteString\n\n    // FIXME: This is obviously not a very efficient or flexible API.\n    //\n    /// Write the contents of a file.\n    func writeFileContents(_ path: AbsolutePath, bytes: ByteString) throws\n\n    // FIXME: This is obviously not a very efficient or flexible API.\n    //\n    /// Write the contents of a file.\n    func writeFileContents(_ path: AbsolutePath, bytes: ByteString, atomically: Bool) throws\n\n    /// Recursively deletes the file system entity at `path`.\n    ///\n    /// If there is no file system entity at `path`, this function does nothing (in particular, this\n    /// is not considered\n    /// to be an error).\n    func removeFileTree(_ path: AbsolutePath) throws\n\n    /// Change file mode.\n    func chmod(_ mode: FileMode, path: AbsolutePath, options: Set<FileMode.Option>) throws\n\n    /// Returns the file info of the given path.\n    ///\n    /// The method throws if the underlying stat call fails.\n    func getFileInfo(_ path: AbsolutePath) throws -> FileInfo\n\n    /// Copy a file or directory.\n    func copy(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws\n\n    /// Move a file or directory.\n    func move(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws\n\n    /// Execute the given block while holding the lock.\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () throws -> T\n    ) throws -> T\n\n    /// Execute the given block while holding the lock.\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () async throws -> T\n    ) async throws -> T\n}\n\n/// Convenience implementations (default arguments aren't permitted in protocol\n/// methods).\npublic extension FileSystem {\n    /// exists override with default value.\n    @_disfavoredOverload\n    func exists(_ path: AbsolutePath) -> Bool {\n        return exists(path, followSymlink: true)\n    }\n\n    /// Default implementation of createDirectory(_:)\n    func createDirectory(_ path: AbsolutePath) throws {\n        try createDirectory(path, recursive: false)\n    }\n\n    // Change file mode.\n    func chmod(_ mode: FileMode, path: AbsolutePath) throws {\n        try chmod(mode, path: path, options: [])\n    }\n\n    // Unless the file system type provides an override for this method, throw\n    // if `atomically` is `true`, otherwise fall back to whatever implementation already exists.\n    @_disfavoredOverload\n    func writeFileContents(_ path: AbsolutePath, bytes: ByteString, atomically: Bool) throws {\n        guard !atomically else {\n            throw FileSystemError(.unsupported, path)\n        }\n        try writeFileContents(path, bytes: bytes)\n    }\n\n    /// Write to a file from a stream producer.\n    @_disfavoredOverload\n    func writeFileContents(_ path: AbsolutePath, body: (WritableByteStream) -> Void) throws {\n        let contents = BufferedOutputByteStream()\n        body(contents)\n        try createDirectory(path.parentDirectory, recursive: true)\n        try writeFileContents(path, bytes: contents.bytes)\n    }\n\n    func getFileInfo(_ path: AbsolutePath) throws -> FileInfo {\n        throw FileSystemError(.unsupported, path)\n    }\n\n    func withLock<T>(on path: AbsolutePath, _ body: () throws -> T) throws -> T {\n        return try withLock(on: path, type: .exclusive, body)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        _ body: () throws -> T\n    ) throws -> T {\n        return try withLock(on: path, type: type, blocking: true, body)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () throws -> T\n    ) throws -> T {\n        throw FileSystemError(.unsupported, path)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        _ body: () async throws -> T\n    ) async throws -> T {\n        return try await withLock(on: path, type: type, blocking: true, body)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () async throws -> T\n    ) async throws -> T {\n        throw FileSystemError(.unsupported, path)\n    }\n\n    func hasQuarantineAttribute(_: AbsolutePath) -> Bool { false }\n\n    func hasAttribute(_: FileSystemAttribute, _: AbsolutePath) -> Bool { false }\n\n    func itemReplacementDirectories(for path: AbsolutePath) throws -> [AbsolutePath] { [] }\n}\n\n/// Concrete FileSystem implementation which communicates with the local file system.\nprivate struct LocalFileSystem: FileSystem {\n    func isExecutableFile(_ path: AbsolutePath) -> Bool {\n        // Our semantics doesn't consider directories.\n        return (isFile(path) || isSymlink(path)) && FileManager.default\n            .isExecutableFile(atPath: path.pathString)\n    }\n\n    func exists(_ path: AbsolutePath, followSymlink: Bool) -> Bool {\n        if followSymlink {\n            return FileManager.default.fileExists(atPath: path.pathString)\n        }\n        return (try? FileManager.default.attributesOfItem(atPath: path.pathString)) != nil\n    }\n\n    func isDirectory(_ path: AbsolutePath) -> Bool {\n        var isDirectory: ObjCBool = false\n        let exists: Bool = FileManager.default.fileExists(\n            atPath: path.pathString,\n            isDirectory: &isDirectory\n        )\n        return exists && isDirectory.boolValue\n    }\n\n    func isFile(_ path: AbsolutePath) -> Bool {\n        guard let path = try? resolveSymlinks(path) else {\n            return false\n        }\n        let attrs = try? FileManager.default.attributesOfItem(atPath: path.pathString)\n        return attrs?[.type] as? FileAttributeType == .typeRegular\n    }\n\n    func isSymlink(_ path: AbsolutePath) -> Bool {\n        let url = NSURL(fileURLWithPath: path.pathString)\n        // We are intentionally using `NSURL.resourceValues(forKeys:)` here since it improves\n        // performance on Darwin platforms.\n        let result = try? url.resourceValues(forKeys: [.isSymbolicLinkKey])\n        return (result?[.isSymbolicLinkKey] as? Bool) == true\n    }\n\n    func isReadable(_ path: AbsolutePath) -> Bool {\n        FileManager.default.isReadableFile(atPath: path.pathString)\n    }\n\n    func isWritable(_ path: AbsolutePath) -> Bool {\n        FileManager.default.isWritableFile(atPath: path.pathString)\n    }\n\n    func getFileInfo(_ path: AbsolutePath) throws -> FileInfo {\n        let attrs = try FileManager.default.attributesOfItem(atPath: path.pathString)\n        return FileInfo(attrs)\n    }\n\n    func hasAttribute(_ name: FileSystemAttribute, _ path: AbsolutePath) -> Bool {\n        #if canImport(Darwin)\n        let bufLength = getxattr(path.pathString, name.rawValue, nil, 0, 0, 0)\n\n        return bufLength > 0\n        #else\n        return false\n        #endif\n    }\n\n    var currentWorkingDirectory: AbsolutePath? {\n        let cwdStr = FileManager.default.currentDirectoryPath\n\n        #if _runtime(_ObjC)\n        // The ObjC runtime indicates that the underlying Foundation has ObjC\n        // interoperability in which case the return type of\n        // `fileSystemRepresentation` is different from the Swift implementation\n        // of Foundation.\n        return try? AbsolutePath(validating: cwdStr)\n        #else\n        let fsr: UnsafePointer<Int8> = cwdStr.fileSystemRepresentation\n        defer { fsr.deallocate() }\n\n        return try? AbsolutePath(String(cString: fsr))\n        #endif\n    }\n\n    func changeCurrentWorkingDirectory(to path: AbsolutePath) throws {\n        guard isDirectory(path) else {\n            throw FileSystemError(.notDirectory, path)\n        }\n\n        guard FileManager.default.changeCurrentDirectoryPath(path.pathString) else {\n            throw FileSystemError(.couldNotChangeDirectory, path)\n        }\n    }\n\n    var homeDirectory: AbsolutePath {\n        get throws {\n            return try AbsolutePath(validating: NSHomeDirectory())\n        }\n    }\n\n    var cachesDirectory: AbsolutePath? {\n        return FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first\n            .flatMap { try? AbsolutePath(validating: $0.path) }\n    }\n\n    var tempDirectory: AbsolutePath {\n        get throws {\n            return try AbsolutePath(validating: NSTemporaryDirectory())\n        }\n    }\n\n    func _getDirectoryContents(\n        _ path: AbsolutePath,\n        includingPropertiesForKeys: [URLResourceKey]?,\n        options: FileManager.DirectoryEnumerationOptions\n    ) throws -> [AbsolutePath] {\n        return try FileManager.default.contentsOfDirectory(\n            at: URL(fileURLWithPath: path.pathString),\n            includingPropertiesForKeys: includingPropertiesForKeys,\n            options: options\n        ).compactMap { try? AbsolutePath(validating: $0.path) }\n    }\n\n    func createDirectory(_ path: AbsolutePath, recursive: Bool) throws {\n        // Don't fail if path is already a directory.\n        if isDirectory(path) { return }\n\n        try FileManager.default.createDirectory(\n            atPath: path.pathString,\n            withIntermediateDirectories: recursive,\n            attributes: [:]\n        )\n    }\n\n    func createSymbolicLink(\n        _ path: AbsolutePath,\n        pointingAt destination: AbsolutePath,\n        relative: Bool\n    ) throws {\n        let destString = relative ? destination.relative(to: path.parentDirectory)\n            .pathString : destination.pathString\n        try FileManager.default.createSymbolicLink(\n            atPath: path.pathString,\n            withDestinationPath: destString\n        )\n    }\n    \n    func data(_ path: AbsolutePath) throws -> Data {\n        try Data(contentsOf: URL(fileURLWithPath: path.pathString))\n    }\n\n    func readFileContents(_ path: AbsolutePath) throws -> ByteString {\n        // Open the file.\n        guard let fp = fopen(path.pathString, \"rb\") else {\n            throw FileSystemError(errno: errno, path)\n        }\n        defer { fclose(fp) }\n\n        // Read the data one block at a time.\n        let data = BufferedOutputByteStream()\n        var tmpBuffer = [UInt8](repeating: 0, count: 1 << 12)\n        while true {\n            let n = fread(&tmpBuffer, 1, tmpBuffer.count, fp)\n            if n < 0 {\n                if errno == EINTR { continue }\n                throw FileSystemError(.ioError(code: errno), path)\n            }\n            if n == 0 {\n                let errno = ferror(fp)\n                if errno != 0 {\n                    throw FileSystemError(.ioError(code: errno), path)\n                }\n                break\n            }\n            data.send(tmpBuffer[0..<n])\n        }\n\n        return data.bytes\n    }\n\n    func writeFileContents(_ path: AbsolutePath, bytes: ByteString) throws {\n        // Open the file.\n        guard let fp = fopen(path.pathString, \"wb\") else {\n            throw FileSystemError(errno: errno, path)\n        }\n        defer { fclose(fp) }\n\n        // Write the data in one chunk.\n        var contents = bytes.contents\n        while true {\n            let n = fwrite(&contents, 1, contents.count, fp)\n            if n < 0 {\n                if errno == EINTR { continue }\n                throw FileSystemError(.ioError(code: errno), path)\n            }\n            if n != contents.count {\n                throw FileSystemError(\n                    .mismatchedByteCount(expected: contents.count, actual: n),\n                    path\n                )\n            }\n            break\n        }\n    }\n\n    func writeFileContents(_ path: AbsolutePath, bytes: ByteString, atomically: Bool) throws {\n        // Perform non-atomic writes using the fast path.\n        if !atomically {\n            return try writeFileContents(path, bytes: bytes)\n        }\n\n        try bytes.withData {\n            try $0.write(to: URL(fileURLWithPath: path.pathString), options: .atomic)\n        }\n    }\n\n    func removeFileTree(_ path: AbsolutePath) throws {\n        do {\n            try FileManager.default.removeItem(atPath: path.pathString)\n        } catch let error as NSError {\n            // If we failed because the directory doesn't actually exist anymore, ignore the error.\n            if !(error.domain == NSCocoaErrorDomain && error.code == NSFileNoSuchFileError) {\n                throw error\n            }\n        }\n    }\n\n    func chmod(_ mode: FileMode, path: AbsolutePath, options: Set<FileMode.Option>) throws {\n        guard exists(path) else { return }\n        func setMode(path: String) throws {\n            let attrs = try FileManager.default.attributesOfItem(atPath: path)\n            // Skip if only files should be changed.\n            if options.contains(.onlyFiles) && attrs[.type] as? FileAttributeType != .typeRegular {\n                return\n            }\n\n            // Compute the new mode for this file.\n            let currentMode = attrs[.posixPermissions] as! Int16\n            let newMode = mode.setMode(currentMode)\n            guard newMode != currentMode else { return }\n            try FileManager.default.setAttributes(\n                [.posixPermissions: newMode],\n                ofItemAtPath: path\n            )\n        }\n\n        try setMode(path: path.pathString)\n        guard isDirectory(path) else { return }\n\n        guard let traverse = FileManager.default.enumerator(\n            at: URL(fileURLWithPath: path.pathString),\n            includingPropertiesForKeys: nil\n        ) else {\n            throw FileSystemError(.noEntry, path)\n        }\n\n        if !options.contains(.recursive) {\n            traverse.skipDescendants()\n        }\n\n        while let path = traverse.nextObject() {\n            try setMode(path: (path as! URL).path)\n        }\n    }\n\n    func copy(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws {\n        guard exists(sourcePath) else { throw FileSystemError(.noEntry, sourcePath) }\n        guard !exists(destinationPath)\n        else { throw FileSystemError(.alreadyExistsAtDestination, destinationPath) }\n        try FileManager.default.copyItem(at: sourcePath.asURL, to: destinationPath.asURL)\n    }\n\n    func move(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws {\n        guard exists(sourcePath) else { throw FileSystemError(.noEntry, sourcePath) }\n        guard !exists(destinationPath)\n        else { throw FileSystemError(.alreadyExistsAtDestination, destinationPath) }\n        try FileManager.default.moveItem(at: sourcePath.asURL, to: destinationPath.asURL)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () throws -> T\n    ) throws -> T {\n        try FileLock.withLock(fileToLock: path, type: type, blocking: blocking, body: body)\n    }\n\n    func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () async throws -> T\n    ) async throws -> T {\n        try await FileLock.withLock(fileToLock: path, type: type, blocking: blocking, body: body)\n    }\n\n    func itemReplacementDirectories(for path: AbsolutePath) throws -> [AbsolutePath] {\n        let result = try FileManager.default.url(\n            for: .itemReplacementDirectory,\n            in: .userDomainMask,\n            appropriateFor: path.asURL,\n            create: false\n        )\n        let path = try AbsolutePath(validating: result.path)\n        // Foundation returns a path that is unique every time, so we return both that path, as well\n        // as its parent.\n        return [path, path.parentDirectory]\n    }\n}\n\n/// Concrete FileSystem implementation which simulates an empty disk.\npublic final class InMemoryFileSystem: FileSystem {\n    /// Private internal representation of a file system node.\n    /// Not thread-safe.\n    private class Node {\n        /// The actual node data.\n        let contents: NodeContents\n\n        init(_ contents: NodeContents) {\n            self.contents = contents\n        }\n\n        /// Creates deep copy of the object.\n        func copy() -> Node {\n            return Node(contents.copy())\n        }\n    }\n\n    /// Private internal representation the contents of a file system node.\n    /// Not thread-safe.\n    private enum NodeContents {\n        case file(ByteString)\n        case directory(DirectoryContents)\n        case symlink(String)\n\n        /// Creates deep copy of the object.\n        func copy() -> NodeContents {\n            switch self {\n            case let .file(bytes):\n                return .file(bytes)\n            case let .directory(contents):\n                return .directory(contents.copy())\n            case let .symlink(path):\n                return .symlink(path)\n            }\n        }\n    }\n\n    /// Private internal representation the contents of a directory.\n    /// Not thread-safe.\n    private final class DirectoryContents {\n        var entries: [String: Node]\n\n        init(entries: [String: Node] = [:]) {\n            self.entries = entries\n        }\n\n        /// Creates deep copy of the object.\n        func copy() -> DirectoryContents {\n            let contents = DirectoryContents()\n            for (key, node) in entries {\n                contents.entries[key] = node.copy()\n            }\n            return contents\n        }\n    }\n\n    /// The root node of the filesystem.\n    private var root: Node\n\n    /// Protects `root` and everything underneath it.\n    /// FIXME: Using a single lock for this is a performance problem, but in\n    /// reality, the only practical use for InMemoryFileSystem is for unit\n    /// tests.\n    private let lock = NSLock()\n    /// A map that keeps weak references to all locked files.\n    private var lockFiles = [AbsolutePath: WeakReference<DispatchQueue>]()\n    /// Used to access lockFiles in a thread safe manner.\n    private let lockFilesLock = NSLock()\n\n    /// Exclusive file system lock vended to clients through `withLock()`.\n    /// Used to ensure that DispatchQueues are released when they are no longer in use.\n    private struct WeakReference<Value: AnyObject> {\n        weak var reference: Value?\n\n        init(_ value: Value?) {\n            reference = value\n        }\n    }\n\n    public init() {\n        root = Node(.directory(DirectoryContents()))\n    }\n\n    /// Creates deep copy of the object.\n    public func copy() -> InMemoryFileSystem {\n        return lock.withLock {\n            let fs = InMemoryFileSystem()\n            fs.root = root.copy()\n            return fs\n        }\n    }\n\n    /// Private function to look up the node corresponding to a path.\n    /// Not thread-safe.\n    private func getNode(_ path: AbsolutePath, followSymlink: Bool = true) throws -> Node? {\n        func getNodeInternal(_ path: AbsolutePath) throws -> Node? {\n            // If this is the root node, return it.\n            if path.isRoot {\n                return root\n            }\n\n            // Otherwise, get the parent node.\n            guard let parent = try getNodeInternal(path.parentDirectory) else {\n                return nil\n            }\n\n            // If we didn't find a directory, this is an error.\n            guard case let .directory(contents) = parent.contents else {\n                throw FileSystemError(.notDirectory, path.parentDirectory)\n            }\n\n            // Return the directory entry.\n            let node = contents.entries[path.basename]\n\n            switch node?.contents {\n            case .directory, .file:\n                return node\n            case let .symlink(destination):\n                let destination = try AbsolutePath(\n                    validating: destination,\n                    relativeTo: path.parentDirectory\n                )\n                return followSymlink ? try getNodeInternal(destination) : node\n            case .none:\n                return nil\n            }\n        }\n\n        // Get the node that corresponds to the path.\n        return try getNodeInternal(path)\n    }\n\n    // MARK: FileSystem Implementation\n\n    public func exists(_ path: AbsolutePath, followSymlink: Bool) -> Bool {\n        return lock.withLock {\n            do {\n                switch try getNode(path, followSymlink: followSymlink)?.contents {\n                case .file, .directory, .symlink: return true\n                case .none: return false\n                }\n            } catch {\n                return false\n            }\n        }\n    }\n\n    public func isDirectory(_ path: AbsolutePath) -> Bool {\n        return lock.withLock {\n            do {\n                if case .directory? = try getNode(path)?.contents {\n                    return true\n                }\n                return false\n            } catch {\n                return false\n            }\n        }\n    }\n\n    public func isFile(_ path: AbsolutePath) -> Bool {\n        return lock.withLock {\n            do {\n                if case .file? = try getNode(path)?.contents {\n                    return true\n                }\n                return false\n            } catch {\n                return false\n            }\n        }\n    }\n\n    public func isSymlink(_ path: AbsolutePath) -> Bool {\n        return lock.withLock {\n            do {\n                if case .symlink? = try getNode(path, followSymlink: false)?.contents {\n                    return true\n                }\n                return false\n            } catch {\n                return false\n            }\n        }\n    }\n\n    public func isReadable(_ path: AbsolutePath) -> Bool {\n        exists(path)\n    }\n\n    public func isWritable(_ path: AbsolutePath) -> Bool {\n        exists(path)\n    }\n\n    public func isExecutableFile(_: AbsolutePath) -> Bool {\n        // FIXME: Always return false until in-memory implementation\n        // gets permission semantics.\n        return false\n    }\n\n    /// Virtualized current working directory.\n    public var currentWorkingDirectory: AbsolutePath? {\n        return try? AbsolutePath(validating: \"/\")\n    }\n\n    public func changeCurrentWorkingDirectory(to path: AbsolutePath) throws {\n        throw FileSystemError(.unsupported, path)\n    }\n\n    public var homeDirectory: AbsolutePath {\n        get throws {\n            // FIXME: Maybe we should allow setting this when creating the fs.\n            return try AbsolutePath(validating: \"/home/user\")\n        }\n    }\n\n    public var cachesDirectory: AbsolutePath? {\n        return try? homeDirectory.appending(component: \"caches\")\n    }\n\n    public var tempDirectory: AbsolutePath {\n        get throws {\n            return try AbsolutePath(validating: \"/tmp\")\n        }\n    }\n\n    public func _getDirectoryContents(\n        _ path: AbsolutePath,\n        includingPropertiesForKeys: [URLResourceKey]?,\n        options: FileManager.DirectoryEnumerationOptions\n    ) throws -> [AbsolutePath] {\n        return try lock.withLock {\n            guard let node = try getNode(path) else {\n                throw FileSystemError(.noEntry, path)\n            }\n            guard case let .directory(contents) = node.contents else {\n                throw FileSystemError(.notDirectory, path)\n            }\n\n            // FIXME: Perhaps we should change the protocol to allow lazy behavior.\n            return [String](contents.entries.keys).map {\n                path.appending(component: $0)\n            }\n        }\n    }\n\n    /// Not thread-safe.\n    private func _createDirectory(_ path: AbsolutePath, recursive: Bool) throws {\n        // Ignore if client passes root.\n        guard !path.isRoot else {\n            return\n        }\n        // Get the parent directory node.\n        let parentPath = path.parentDirectory\n        guard let parent = try getNode(parentPath) else {\n            // If the parent doesn't exist, and we are recursive, then attempt\n            // to create the parent and retry.\n            if recursive && path != parentPath {\n                // Attempt to create the parent.\n                try _createDirectory(parentPath, recursive: true)\n\n                // Re-attempt creation, non-recursively.\n                return try _createDirectory(path, recursive: false)\n            } else {\n                // Otherwise, we failed.\n                throw FileSystemError(.noEntry, parentPath)\n            }\n        }\n\n        // Check that the parent is a directory.\n        guard case let .directory(contents) = parent.contents else {\n            // The parent isn't a directory, this is an error.\n            throw FileSystemError(.notDirectory, parentPath)\n        }\n\n        // Check if the node already exists.\n        if let node = contents.entries[path.basename] {\n            // Verify it is a directory.\n            guard case .directory = node.contents else {\n                // The path itself isn't a directory, this is an error.\n                throw FileSystemError(.notDirectory, path)\n            }\n\n            // We are done.\n            return\n        }\n\n        // Otherwise, the node does not exist, create it.\n        contents.entries[path.basename] = Node(.directory(DirectoryContents()))\n    }\n\n    public func createDirectory(_ path: AbsolutePath, recursive: Bool) throws {\n        return try lock.withLock {\n            try _createDirectory(path, recursive: recursive)\n        }\n    }\n\n    public func createSymbolicLink(\n        _ path: AbsolutePath,\n        pointingAt destination: AbsolutePath,\n        relative: Bool\n    ) throws {\n        return try lock.withLock {\n            // Create directory to destination parent.\n            guard let destinationParent = try getNode(path.parentDirectory) else {\n                throw FileSystemError(.noEntry, path.parentDirectory)\n            }\n\n            // Check that the parent is a directory.\n            guard case let .directory(contents) = destinationParent.contents else {\n                throw FileSystemError(.notDirectory, path.parentDirectory)\n            }\n\n            guard contents.entries[path.basename] == nil else {\n                throw FileSystemError(.alreadyExistsAtDestination, path)\n            }\n\n            let destination = relative ? destination.relative(to: path.parentDirectory)\n                .pathString : destination.pathString\n\n            contents.entries[path.basename] = Node(.symlink(destination))\n        }\n    }\n    \n    public func data(_ path: AbsolutePath) throws -> Data {\n        return try lock.withLock {\n            // Get the node.\n            guard let node = try getNode(path) else {\n                throw FileSystemError(.noEntry, path)\n            }\n\n            // Check that the node is a file.\n            guard case let .file(contents) = node.contents else {\n                // The path is a directory, this is an error.\n                throw FileSystemError(.isDirectory, path)\n            }\n\n            // Return the file contents.\n            return contents.withData { $0 }\n        }\n    }\n\n    public func readFileContents(_ path: AbsolutePath) throws -> ByteString {\n        return try lock.withLock {\n            // Get the node.\n            guard let node = try getNode(path) else {\n                throw FileSystemError(.noEntry, path)\n            }\n\n            // Check that the node is a file.\n            guard case let .file(contents) = node.contents else {\n                // The path is a directory, this is an error.\n                throw FileSystemError(.isDirectory, path)\n            }\n\n            // Return the file contents.\n            return contents\n        }\n    }\n\n    public func writeFileContents(_ path: AbsolutePath, bytes: ByteString) throws {\n        return try lock.withLock {\n            // It is an error if this is the root node.\n            let parentPath = path.parentDirectory\n            guard path != parentPath else {\n                throw FileSystemError(.isDirectory, path)\n            }\n\n            // Get the parent node.\n            guard let parent = try getNode(parentPath) else {\n                throw FileSystemError(.noEntry, parentPath)\n            }\n\n            // Check that the parent is a directory.\n            guard case let .directory(contents) = parent.contents else {\n                // The parent isn't a directory, this is an error.\n                throw FileSystemError(.notDirectory, parentPath)\n            }\n\n            // Check if the node exists.\n            if let node = contents.entries[path.basename] {\n                // Verify it is a file.\n                guard case .file = node.contents else {\n                    // The path is a directory, this is an error.\n                    throw FileSystemError(.isDirectory, path)\n                }\n            }\n\n            // Write the file.\n            contents.entries[path.basename] = Node(.file(bytes))\n        }\n    }\n\n    public func writeFileContents(\n        _ path: AbsolutePath,\n        bytes: ByteString,\n        atomically: Bool\n    ) throws {\n        // In memory file system's writeFileContents is already atomic, so ignore the parameter here\n        // and just call the base implementation.\n        try writeFileContents(path, bytes: bytes)\n    }\n\n    public func removeFileTree(_ path: AbsolutePath) throws {\n        return lock.withLock {\n            // Ignore root and get the parent node's content if its a directory.\n            guard !path.isRoot,\n                  let parent = try? getNode(path.parentDirectory),\n                  case let .directory(contents) = parent.contents\n            else {\n                return\n            }\n            // Set it to nil to release the contents.\n            contents.entries[path.basename] = nil\n        }\n    }\n\n    public func chmod(_ mode: FileMode, path: AbsolutePath, options: Set<FileMode.Option>) throws {\n        // FIXME: We don't have these semantics in InMemoryFileSystem.\n    }\n\n    /// Private implementation of core copying function.\n    /// Not thread-safe.\n    private func _copy(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws {\n        // Get the source node.\n        guard let source = try getNode(sourcePath) else {\n            throw FileSystemError(.noEntry, sourcePath)\n        }\n\n        // Create directory to destination parent.\n        guard let destinationParent = try getNode(destinationPath.parentDirectory) else {\n            throw FileSystemError(.noEntry, destinationPath.parentDirectory)\n        }\n\n        // Check that the parent is a directory.\n        guard case let .directory(contents) = destinationParent.contents else {\n            throw FileSystemError(.notDirectory, destinationPath.parentDirectory)\n        }\n\n        guard contents.entries[destinationPath.basename] == nil else {\n            throw FileSystemError(.alreadyExistsAtDestination, destinationPath)\n        }\n\n        contents.entries[destinationPath.basename] = source\n    }\n\n    public func copy(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws {\n        return try lock.withLock {\n            try _copy(from: sourcePath, to: destinationPath)\n        }\n    }\n\n    public func move(from sourcePath: AbsolutePath, to destinationPath: AbsolutePath) throws {\n        return try lock.withLock {\n            // Get the source parent node.\n            guard let sourceParent = try getNode(sourcePath.parentDirectory) else {\n                throw FileSystemError(.noEntry, sourcePath.parentDirectory)\n            }\n\n            // Check that the parent is a directory.\n            guard case let .directory(contents) = sourceParent.contents else {\n                throw FileSystemError(.notDirectory, sourcePath.parentDirectory)\n            }\n\n            try _copy(from: sourcePath, to: destinationPath)\n\n            contents.entries[sourcePath.basename] = nil\n        }\n    }\n\n    public func withLock<T>(\n        on path: AbsolutePath,\n        type: FileLock.LockType,\n        blocking: Bool,\n        _ body: () throws -> T\n    ) throws -> T {\n        if !blocking {\n            throw FileSystemError(.unsupported, path)\n        }\n\n        let resolvedPath: AbsolutePath = try lock.withLock {\n            if case let .symlink(destination) = try getNode(path)?.contents {\n                return try AbsolutePath(validating: destination, relativeTo: path.parentDirectory)\n            } else {\n                return path\n            }\n        }\n\n        let fileQueue: DispatchQueue = lockFilesLock.withLock {\n            if let queueReference = lockFiles[resolvedPath], let queue = queueReference.reference {\n                return queue\n            } else {\n                let queue = DispatchQueue(\n                    label: \"org.swift.swiftpm.in-memory-file-system.file-queue\",\n                    attributes: .concurrent\n                )\n                lockFiles[resolvedPath] = WeakReference(queue)\n                return queue\n            }\n        }\n\n        return try fileQueue.sync(flags: type == .exclusive ? .barrier : .init(), execute: body)\n    }\n}\n\n// Internal state of `InMemoryFileSystem` is protected with a lock in all of its `public` methods.\n#if compiler(>=5.7)\nextension InMemoryFileSystem: @unchecked Sendable {}\n#else\nextension InMemoryFileSystem: UnsafeSendable {}\n#endif\n\nprivate var _localFileSystem: FileSystem = LocalFileSystem()\n\n/// Public access to the local FS proxy.\npublic var localFileSystem: FileSystem {\n    return _localFileSystem\n}\n\npublic extension FileSystem {\n    /// Print the filesystem tree of the given path.\n    ///\n    /// For debugging only.\n    func dumpTree(at path: AbsolutePath = .root) {\n        print(\".\")\n        do {\n            try recurse(fs: self, path: path)\n        } catch {\n            print(\"\\(error)\")\n        }\n    }\n\n    /// Write bytes to the path if the given contents are different.\n    func writeIfChanged(path: AbsolutePath, bytes: ByteString) throws {\n        try createDirectory(path.parentDirectory, recursive: true)\n\n        // Return if the contents are same.\n        if isFile(path), try readFileContents(path) == bytes {\n            return\n        }\n\n        try writeFileContents(path, bytes: bytes)\n    }\n\n    func getDirectoryContents(\n        at path: AbsolutePath,\n        includingPropertiesForKeys: [URLResourceKey]? = nil,\n        options: FileManager.DirectoryEnumerationOptions = []\n    ) throws -> [AbsolutePath] {\n        return try _getDirectoryContents(\n            path,\n            includingPropertiesForKeys: includingPropertiesForKeys,\n            options: options\n        )\n    }\n\n    /// Helper method to recurse and print the tree.\n    private func recurse(fs: FileSystem, path: AbsolutePath, prefix: String = \"\") throws {\n        let contents = (try fs.getDirectoryContents(at: path)).map(\\.basename)\n\n        for (idx, entry) in contents.enumerated() {\n            let isLast = idx == contents.count - 1\n            let line = prefix + (isLast ? \"└── \" : \"├── \") + entry\n            print(line)\n\n            let entryPath = path.appending(component: entry)\n            if fs.isDirectory(entryPath) {\n                let childPrefix = prefix + (isLast ? \"    \" : \"│   \")\n                try recurse(fs: fs, path: entryPath, prefix: String(childPrefix))\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FileSystem/Lock.swift",
    "content": "import Foundation\n\npublic enum ProcessLockError: Error {\n    case unableToAcquireLock(errno: Int32)\n}\n\nextension ProcessLockError: CustomNSError {\n    public var errorUserInfo: [String : Any] {\n        return [NSLocalizedDescriptionKey: \"\\(self)\"]\n    }\n}\n\n/// Provides functionality to acquire a lock on a file via POSIX's flock() method.\n/// It can be used for things like serializing concurrent mutations on a shared resource\n/// by multiple instances of a process. The `FileLock` is not thread-safe.\npublic final class FileLock {\n\n    public enum LockType {\n        case exclusive\n        case shared\n    }\n\n    /// File descriptor to the lock file.\n  #if os(Windows)\n    private var handle: HANDLE?\n  #else\n    private var fileDescriptor: CInt?\n  #endif\n\n    /// Path to the lock file.\n    private let lockFile: AbsolutePath\n\n    /// Create an instance of FileLock at the path specified\n    ///\n    /// Note: The parent directory path should be a valid directory.\n    internal init(at lockFile: AbsolutePath) {\n        self.lockFile = lockFile\n    }\n\n    @available(*, deprecated, message: \"use init(at:) instead\")\n    public convenience init(name: String, cachePath: AbsolutePath) {\n        self.init(at: cachePath.appending(component: name + \".lock\"))\n    }\n\n    /// Try to acquire a lock. This method will block until lock the already acquired by other process.\n    ///\n    /// Note: This method can throw if underlying POSIX methods fail.\n    public func lock(type: LockType = .exclusive, blocking: Bool = true) throws {\n      #if os(Windows)\n        if handle == nil {\n            let h: HANDLE = lockFile.pathString.withCString(encodedAs: UTF16.self, {\n                CreateFileW(\n                    $0,\n                    UInt32(GENERIC_READ) | UInt32(GENERIC_WRITE),\n                    UInt32(FILE_SHARE_READ) | UInt32(FILE_SHARE_WRITE),\n                    nil,\n                    DWORD(OPEN_ALWAYS),\n                    DWORD(FILE_ATTRIBUTE_NORMAL),\n                    nil\n                )\n            })\n            if h == INVALID_HANDLE_VALUE {\n                throw FileSystemError(errno: Int32(GetLastError()), lockFile)\n            }\n            self.handle = h\n        }\n        var overlapped = OVERLAPPED()\n        overlapped.Offset = 0\n        overlapped.OffsetHigh = 0\n        overlapped.hEvent = nil\n        var dwFlags = Int32(0)\n        switch type {\n        case .exclusive: dwFlags |= LOCKFILE_EXCLUSIVE_LOCK\n        case .shared: break\n        }\n        if !blocking {\n            dwFlags |= LOCKFILE_FAIL_IMMEDIATELY\n        }\n        if !LockFileEx(handle, DWORD(dwFlags), 0,\n                       UInt32.max, UInt32.max, &overlapped) {\n            throw ProcessLockError.unableToAcquireLock(errno: Int32(GetLastError()))\n        }\n      #else\n        // Open the lock file.\n        if fileDescriptor == nil {\n            let fd = open(lockFile.pathString, O_WRONLY | O_CREAT | O_CLOEXEC, 0o666)\n            if fd == -1 {\n                throw FileSystemError(errno: errno, lockFile)\n            }\n            self.fileDescriptor = fd\n        }\n        var flags = Int32(0)\n        switch type {\n        case .exclusive: flags = LOCK_EX\n        case .shared: flags = LOCK_SH\n        }\n        if !blocking {\n            flags |= LOCK_NB\n        }\n        // Acquire lock on the file.\n        while true {\n            if flock(fileDescriptor!, flags) == 0 {\n                break\n            }\n            // Retry if interrupted.\n            if errno == EINTR { continue }\n            throw ProcessLockError.unableToAcquireLock(errno: errno)\n        }\n      #endif\n    }\n\n    /// Unlock the held lock.\n    public func unlock() {\n      #if os(Windows)\n        var overlapped = OVERLAPPED()\n        overlapped.Offset = 0\n        overlapped.OffsetHigh = 0\n        overlapped.hEvent = nil\n        UnlockFileEx(handle, 0, UInt32.max, UInt32.max, &overlapped)\n      #else\n        guard let fd = fileDescriptor else { return }\n        flock(fd, LOCK_UN)\n      #endif\n    }\n\n    deinit {\n      #if os(Windows)\n        guard let handle = handle else { return }\n        CloseHandle(handle)\n      #else\n        guard let fd = fileDescriptor else { return }\n        close(fd)\n      #endif\n    }\n\n    /// Execute the given block while holding the lock.\n    public func withLock<T>(type: LockType = .exclusive, blocking: Bool = true, _ body: () throws -> T) throws -> T {\n        try lock(type: type, blocking: blocking)\n        defer { unlock() }\n        return try body()\n    }\n\n    /// Execute the given block while holding the lock.\n    public func withLock<T>(type: LockType = .exclusive, blocking: Bool = true, _ body: () async throws -> T) async throws -> T {\n        try lock(type: type, blocking: blocking)\n        defer { unlock() }\n        return try await body()\n    }\n\n    public static func prepareLock(\n        fileToLock: AbsolutePath,\n        at lockFilesDirectory: AbsolutePath? = nil\n    ) throws -> FileLock {\n        // unless specified, we use the tempDirectory to store lock files\n        let lockFilesDirectory = try lockFilesDirectory ?? localFileSystem.tempDirectory\n        if !localFileSystem.exists(lockFilesDirectory) {\n            throw FileSystemError(.noEntry, lockFilesDirectory)\n        }\n        if !localFileSystem.isDirectory(lockFilesDirectory) {\n            throw FileSystemError(.notDirectory, lockFilesDirectory)\n        }\n        // use the parent path to generate unique filename in temp\n        var lockFileName = try (resolveSymlinks(fileToLock.parentDirectory)\n                                .appending(component: fileToLock.basename))\n                                .components.joined(separator: \"_\")\n                                .replacingOccurrences(of: \":\", with: \"_\") + \".lock\"\n#if os(Windows)\n        // NTFS has an ARC limit of 255 codepoints\n        var lockFileUTF16 = lockFileName.utf16.suffix(255)\n        while String(lockFileUTF16) == nil {\n            lockFileUTF16 = lockFileUTF16.dropFirst()\n        }\n        lockFileName = String(lockFileUTF16) ?? lockFileName\n#else\n        if lockFileName.hasPrefix(AbsolutePath.root.pathString) {\n            lockFileName = String(lockFileName.dropFirst(AbsolutePath.root.pathString.count))\n        }\n        // back off until it occupies at most `NAME_MAX` UTF-8 bytes but without splitting scalars\n        // (we might split clusters but it's not worth the effort to keep them together as long as we get a valid file name)\n        var lockFileUTF8 = lockFileName.utf8.suffix(Int(NAME_MAX))\n        while String(lockFileUTF8) == nil {\n            // in practice this will only be a few iterations\n            lockFileUTF8 = lockFileUTF8.dropFirst()\n        }\n        // we will never end up with nil since we have ASCII characters at the end\n        lockFileName = String(lockFileUTF8) ?? lockFileName\n#endif\n        let lockFilePath = lockFilesDirectory.appending(component: lockFileName)\n\n        return FileLock(at: lockFilePath)\n    }\n\n    public static func withLock<T>(\n        fileToLock: AbsolutePath,\n        lockFilesDirectory: AbsolutePath? = nil,\n        type: LockType = .exclusive,\n        blocking: Bool = true,\n        body: () throws -> T\n    ) throws -> T {\n        let lock = try Self.prepareLock(fileToLock: fileToLock, at: lockFilesDirectory)\n        return try lock.withLock(type: type, blocking: blocking, body)\n    }\n\n    public static func withLock<T>(\n        fileToLock: AbsolutePath,\n        lockFilesDirectory: AbsolutePath? = nil,\n        type: LockType = .exclusive,\n        blocking: Bool = true,\n        body: () async throws -> T\n    ) async throws -> T {\n        let lock = try Self.prepareLock(fileToLock: fileToLock, at: lockFilesDirectory)\n        return try await lock.withLock(type: type, blocking: blocking, body)\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/FileSystem/Misc.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n*/\n\n#if canImport(Glibc)\n@_exported import Glibc\n#elseif canImport(Musl)\n@_exported import Musl\n#elseif os(Windows)\n@_exported import CRT\n@_exported import WinSDK\n#else\n@_exported import Darwin.C\n#endif\n\n/// `CStringArray` represents a C null-terminated array of pointers to C strings.\n///\n/// The lifetime of the C strings will correspond to the lifetime of the `CStringArray`\n/// instance so be careful about copying the buffer as it may contain dangling pointers.\npublic final class CStringArray {\n    /// The null-terminated array of C string pointers.\n    public let cArray: [UnsafeMutablePointer<Int8>?]\n\n    /// Creates an instance from an array of strings.\n    public init(_ array: [String]) {\n#if os(Windows)\n        cArray = array.map({ $0.withCString({ _strdup($0) }) }) + [nil]\n#else\n        cArray = array.map({ $0.withCString({ strdup($0) }) }) + [nil]\n#endif\n    }\n\n    deinit {\n        for case let element? in cArray {\n            free(element)\n        }\n    }\n}\n\nimport Foundation\n#if os(Windows)\nimport WinSDK\n#endif\n\n#if os(Windows)\npublic let executableFileSuffix = \".exe\"\n#else\npublic let executableFileSuffix = \"\"\n#endif\n\n#if os(Windows)\nprivate func quote(_ arguments: [String]) -> String {\n    func quote(argument: String) -> String {\n        if !argument.contains(where: { \" \\t\\n\\\"\".contains($0) }) {\n            return argument\n        }\n\n        // To escape the command line, we surround the argument with quotes.\n        // However, the complication comes due to how the Windows command line\n        // parser treats backslashes (\\) and quotes (\").\n        //\n        // - \\ is normally treated as a literal backslash\n        //      e.g. alpha\\beta\\gamma => alpha\\beta\\gamma\n        // - The sequence \\\" is treated as a literal \"\n        //      e.g. alpha\\\"beta => alpha\"beta\n        //\n        // But then what if we are given a path that ends with a \\?\n        //\n        // Surrounding alpha\\beta\\ with \" would be \"alpha\\beta\\\" which would be\n        // an unterminated string since it ends on a literal quote. To allow\n        // this case the parser treats:\n        //\n        //  - \\\\\" as \\ followed by the \" metacharacter\n        //  - \\\\\\\" as \\ followed by a literal \"\n        //\n        // In general:\n        //  - 2n \\ followed by \" => n \\ followed by the \" metacharacter\n        //  - 2n + 1 \\ followed by \" => n \\ followed by a literal \"\n\n        var quoted = \"\\\"\"\n        var unquoted = argument.unicodeScalars\n\n        while !unquoted.isEmpty {\n            guard let firstNonBS = unquoted.firstIndex(where: { $0 != \"\\\\\" }) else {\n                // String ends with a backslash (e.g. first\\second\\), escape all\n                // the backslashes then add the metacharacter \".\n                let count = unquoted.count\n                quoted.append(String(repeating: \"\\\\\", count: 2 * count))\n                break\n            }\n\n            let count = unquoted.distance(from: unquoted.startIndex, to: firstNonBS)\n            if unquoted[firstNonBS] == \"\\\"\" {\n                // This is a string of \\ followed by a \" (e.g. first\\\"second).\n                // Escape the backslashes and the quote.\n                quoted.append(String(repeating: \"\\\\\", count: 2 * count + 1))\n            } else {\n                // These are just literal backslashes\n                quoted.append(String(repeating: \"\\\\\", count: count))\n            }\n\n            quoted.append(String(unquoted[firstNonBS]))\n\n            // Drop the backslashes and the following character\n            unquoted.removeFirst(count + 1)\n        }\n        quoted.append(\"\\\"\")\n\n        return quoted\n    }\n    return arguments.map(quote(argument:)).joined(separator: \" \")\n}\n#endif\n\n/// Replace the current process image with a new process image.\n///\n/// - Parameters:\n///   - path: Absolute path to the executable.\n///   - args: The executable arguments.\npublic func exec(path: String, args: [String]) throws -> Never {\n    let cArgs = CStringArray(args)\n  #if os(Windows)\n    var hJob: HANDLE\n\n    hJob = CreateJobObjectA(nil, nil)\n    if hJob == HANDLE(bitPattern: 0) {\n        throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n    }\n    defer { CloseHandle(hJob) }\n\n    let hPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, nil, 0, 1)\n    if hPort == HANDLE(bitPattern: 0) {\n        throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n    }\n\n    var acpAssociation: JOBOBJECT_ASSOCIATE_COMPLETION_PORT = JOBOBJECT_ASSOCIATE_COMPLETION_PORT()\n    acpAssociation.CompletionKey = hJob\n    acpAssociation.CompletionPort = hPort\n    if !SetInformationJobObject(hJob, JobObjectAssociateCompletionPortInformation,\n                                &acpAssociation, DWORD(MemoryLayout<JOBOBJECT_ASSOCIATE_COMPLETION_PORT>.size)) {\n        throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n    }\n\n    var eliLimits: JOBOBJECT_EXTENDED_LIMIT_INFORMATION = JOBOBJECT_EXTENDED_LIMIT_INFORMATION()\n    eliLimits.BasicLimitInformation.LimitFlags =\n            DWORD(JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE) | DWORD(JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK)\n    if !SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &eliLimits,\n                                DWORD(MemoryLayout<JOBOBJECT_EXTENDED_LIMIT_INFORMATION>.size)) {\n        throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n    }\n\n\n    var siInfo: STARTUPINFOW = STARTUPINFOW()\n    siInfo.cb = DWORD(MemoryLayout<STARTUPINFOW>.size)\n\n    var piInfo: PROCESS_INFORMATION = PROCESS_INFORMATION()\n\n    try quote(args).withCString(encodedAs: UTF16.self) { pwszCommandLine in\n        if !CreateProcessW(nil,\n                           UnsafeMutablePointer<WCHAR>(mutating: pwszCommandLine),\n                           nil, nil, false,\n                           DWORD(CREATE_SUSPENDED) | DWORD(CREATE_NEW_PROCESS_GROUP),\n                           nil, nil, &siInfo, &piInfo) {\n            throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n        }\n    }\n\n    defer { CloseHandle(piInfo.hThread) }\n    defer { CloseHandle(piInfo.hProcess) }\n\n    if !AssignProcessToJobObject(hJob, piInfo.hProcess) {\n        throw SystemError.exec(Int32(GetLastError()), path: path, args: args)\n    }\n\n    _ = ResumeThread(piInfo.hThread)\n\n    var dwCompletionCode: DWORD = 0\n    var ulCompletionKey: ULONG_PTR = 0\n    var lpOverlapped: LPOVERLAPPED?\n    repeat {\n    } while GetQueuedCompletionStatus(hPort, &dwCompletionCode, &ulCompletionKey,\n                                      &lpOverlapped, INFINITE) &&\n            !(ulCompletionKey == ULONG_PTR(UInt(bitPattern: hJob)) &&\n              dwCompletionCode == JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO)\n\n    var dwExitCode: DWORD = DWORD(bitPattern: -1)\n    _ = GetExitCodeProcess(piInfo.hProcess, &dwExitCode)\n    _exit(Int32(bitPattern: dwExitCode))\n  #elseif (!canImport(Darwin) || os(macOS))\n    guard execv(path, cArgs.cArray) != -1 else {\n        throw SystemError.exec(errno, path: path, args: args)\n    }\n    fatalError(\"unreachable\")\n  #else\n    fatalError(\"not implemented\")\n  #endif\n}\n\n@_disfavoredOverload\n@available(*, deprecated, message: \"Use the overload which returns Never\")\npublic func exec(path: String, args: [String]) throws {\n    try exec(path: path, args: args)\n}\n\n// MARK: TSCUtility function for searching for executables\n\n/// Create a list of AbsolutePath search paths from a string, such as the PATH environment variable.\n///\n/// - Parameters:\n///   - pathString: The path string to parse.\n///   - currentWorkingDirectory: The current working directory, the relative paths will be converted to absolute paths\n///     based on this path.\n/// - Returns: List of search paths.\npublic func getEnvSearchPaths(\n    pathString: String?,\n    currentWorkingDirectory: AbsolutePath?\n) -> [AbsolutePath] {\n    // Compute search paths from PATH variable.\n#if os(Windows)\n    let pathSeparator: Character = \";\"\n#else\n    let pathSeparator: Character = \":\"\n#endif\n    return (pathString ?? \"\").split(separator: pathSeparator).map(String.init).compactMap({ pathString in\n        if let cwd = currentWorkingDirectory {\n            return try? AbsolutePath(validating: pathString, relativeTo: cwd)\n        }\n        return try? AbsolutePath(validating: pathString)\n    })\n}\n\n/// Lookup an executable path from an environment variable value, current working\n/// directory or search paths. Only return a value that is both found and executable.\n///\n/// This method searches in the following order:\n/// * If env value is a valid absolute path, return it.\n/// * If env value is relative path, first try to locate it in current working directory.\n/// * Otherwise, in provided search paths.\n///\n/// - Parameters:\n///   - filename: The name of the file to find.\n///   - currentWorkingDirectory: The current working directory to look in.\n///   - searchPaths: The additional search paths to look in if not found in cwd.\n/// - Returns: Valid path to executable if present, otherwise nil.\npublic func lookupExecutablePath(\n    filename value: String?,\n    currentWorkingDirectory: AbsolutePath? = localFileSystem.currentWorkingDirectory,\n    searchPaths: [AbsolutePath] = []\n) -> AbsolutePath? {\n\n    // We should have a value to continue.\n    guard let value = value, !value.isEmpty else {\n        return nil\n    }\n\n    var paths: [AbsolutePath] = []\n\n    if let cwd = currentWorkingDirectory, let path = try? AbsolutePath(validating: value, relativeTo: cwd) {\n        // We have a value, but it could be an absolute or a relative path.\n        paths.append(path)\n    } else if let absPath = try? AbsolutePath(validating: value) {\n        // Current directory not being available is not a problem\n        // for the absolute-specified paths.\n        paths.append(absPath)\n    }\n\n    // Ensure the value is not a path.\n    if !value.contains(\"/\") {\n        // Try to locate in search paths.\n        paths.append(contentsOf: searchPaths.map({ $0.appending(component: value) }))\n    }\n\n    return paths.first(where: { localFileSystem.isExecutableFile($0) })\n}\n\n/// A wrapper for Range to make it Codable.\n///\n/// Technically, we can use conditional conformance and make\n/// stdlib's Range Codable but since extensions leak out, it\n/// is not a good idea to extend types that you don't own.\n///\n/// Range conformance will be added soon to stdlib so we can remove\n/// this type in the future.\npublic struct CodableRange<Bound> where Bound: Comparable & Codable {\n\n    /// The underlying range.\n    public let range: Range<Bound>\n\n    /// Create a CodableRange instance.\n    public init(_ range: Range<Bound>) {\n        self.range = range\n    }\n}\n\nextension CodableRange: Sendable where Bound: Sendable {}\n\nextension CodableRange: Codable {\n    private enum CodingKeys: String, CodingKey {\n        case lowerBound, upperBound\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(range.lowerBound, forKey: .lowerBound)\n        try container.encode(range.upperBound, forKey: .upperBound)\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let lowerBound = try container.decode(Bound.self, forKey: .lowerBound)\n        let upperBound = try container.decode(Bound.self, forKey: .upperBound)\n        self.init(Range(uncheckedBounds: (lowerBound, upperBound)))\n    }\n}\n\nextension AbsolutePath {\n    /// File URL created from the normalized string representation of the path.\n    public var asURL: Foundation.URL {\n         return URL(fileURLWithPath: pathString)\n    }\n    \n    public init(_ url: URL) throws {\n        try self.init(validating: url.path)\n    }\n}\n\n// FIXME: Eliminate or find a proper place for this.\npublic enum SystemError: Error {\n    case chdir(Int32, String)\n    case close(Int32)\n    case exec(Int32, path: String, args: [String])\n    case pipe(Int32)\n    case posix_spawn(Int32, [String])\n    case read(Int32)\n    case setenv(Int32, String)\n    case stat(Int32, String)\n    case symlink(Int32, String, dest: String)\n    case unsetenv(Int32, String)\n    case waitpid(Int32)\n}\n\nextension SystemError: CustomStringConvertible {\n    public var description: String {\n        func strerror(_ errno: Int32) -> String {\n          #if os(Windows)\n            let cap = 128\n            var buf = [Int8](repeating: 0, count: cap)\n            let _ = strerror_s(&buf, 128, errno)\n            return \"\\(String(cString: buf)) (\\(errno))\"\n          #else\n            var cap = 64\n            while cap <= 16 * 1024 {\n                var buf = [Int8](repeating: 0, count: cap)\n                let err = strerror_r(errno, &buf, buf.count)\n                if err == EINVAL {\n                    return \"Unknown error \\(errno)\"\n                }\n                if err == ERANGE {\n                    cap *= 2\n                    continue\n                }\n                if err != 0 {\n                    fatalError(\"strerror_r error: \\(err)\")\n                }\n                return \"\\(String(cString: buf)) (\\(errno))\"\n            }\n            fatalError(\"strerror_r error: \\(ERANGE)\")\n          #endif\n        }\n\n        switch self {\n        case .chdir(let errno, let path):\n            return \"chdir error: \\(strerror(errno)): \\(path)\"\n        case .close(let err):\n            let errorMessage: String\n            if err == -1 { // if the return code is -1, we need to consult the global `errno`\n                errorMessage = strerror(errno)\n            } else {\n                errorMessage = strerror(err)\n            }\n            return \"close error: \\(errorMessage)\"\n        case .exec(let errno, let path, let args):\n            let joinedArgs = args.joined(separator: \" \")\n            return \"exec error: \\(strerror(errno)): \\(path) \\(joinedArgs)\"\n        case .pipe(let errno):\n            return \"pipe error: \\(strerror(errno))\"\n        case .posix_spawn(let errno, let args):\n            return \"posix_spawn error: \\(strerror(errno)), `\\(args)`\"\n        case .read(let errno):\n            return \"read error: \\(strerror(errno))\"\n        case .setenv(let errno, let key):\n            return \"setenv error: \\(strerror(errno)): \\(key)\"\n        case .stat(let errno, _):\n            return \"stat error: \\(strerror(errno))\"\n        case .symlink(let errno, let path, let dest):\n            return \"symlink error: \\(strerror(errno)): \\(path) -> \\(dest)\"\n        case .unsetenv(let errno, let key):\n            return \"unsetenv error: \\(strerror(errno)): \\(key)\"\n        case .waitpid(let errno):\n            return \"waitpid error: \\(strerror(errno))\"\n        }\n    }\n}\n\nextension SystemError: CustomNSError {\n    public var errorUserInfo: [String : Any] {\n        return [NSLocalizedDescriptionKey: self.description]\n    }\n}\n\n/// Memoizes a costly computation to a cache variable.\nfunc memoize<T>(to cache: inout T?, build: () throws -> T) rethrows -> T {\n    if let value = cache {\n        return value\n    } else {\n        let value = try build()\n        cache = value\n        return value\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/FileSystem/Path.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n*/\n#if os(Windows)\nimport Foundation\nimport WinSDK\n#endif\n\n#if os(Windows)\nprivate typealias PathImpl = WindowsPath\n#else\nprivate typealias PathImpl = UNIXPath\n#endif\n\nimport protocol Foundation.CustomNSError\nimport var Foundation.NSLocalizedDescriptionKey\n\n/// Represents an absolute file system path, independently of what (or whether\n/// anything at all) exists at that path in the file system at any given time.\n/// An absolute path always starts with a `/` character, and holds a normalized\n/// string representation.  This normalization is strictly syntactic, and does\n/// not access the file system in any way.\n///\n/// The absolute path string is normalized by:\n/// - Collapsing `..` path components\n/// - Removing `.` path components\n/// - Removing any trailing path separator\n/// - Removing any redundant path separators\n///\n/// This string manipulation may change the meaning of a path if any of the\n/// path components are symbolic links on disk.  However, the file system is\n/// never accessed in any way when initializing an AbsolutePath.\n///\n/// Note that `~` (home directory resolution) is *not* done as part of path\n/// normalization, because it is normally the responsibility of the shell and\n/// not the program being invoked (e.g. when invoking `cd ~`, it is the shell\n/// that evaluates the tilde; the `cd` command receives an absolute path).\npublic struct AbsolutePath: Hashable, Sendable {\n    /// Check if the given name is a valid individual path component.\n    ///\n    /// This only checks with regard to the semantics enforced by `AbsolutePath`\n    /// and `RelativePath`; particular file systems may have their own\n    /// additional requirements.\n    static func isValidComponent(_ name: String) -> Bool {\n        return PathImpl.isValidComponent(name)\n    }\n\n    /// Private implementation details, shared with the RelativePath struct.\n    private let _impl: PathImpl\n\n    /// Private initializer when the backing storage is known.\n    private init(_ impl: PathImpl) {\n        _impl = impl\n    }\n\n    /// Initializes an AbsolutePath from a string that may be either absolute\n    /// or relative; if relative, `basePath` is used as the anchor; if absolute,\n    /// it is used as is, and in this case `basePath` is ignored.\n    public init(validating str: String, relativeTo basePath: AbsolutePath) throws {\n        if PathImpl(string: str).isAbsolute {\n            try self.init(validating: str)\n        } else {\n#if os(Windows)\n            assert(!basePath.pathString.isEmpty)\n            guard !str.isEmpty else {\n                self.init(basePath._impl)\n                return\n            }\n\n            let base: UnsafePointer<Int8> =\n                basePath.pathString.fileSystemRepresentation\n            defer { base.deallocate() }\n\n            let path: UnsafePointer<Int8> = str.fileSystemRepresentation\n            defer { path.deallocate() }\n\n            var pwszResult: PWSTR!\n            _ = String(cString: base).withCString(encodedAs: UTF16.self) { pwszBase in\n                String(cString: path).withCString(encodedAs: UTF16.self) { pwszPath in\n                    PathAllocCombine(pwszBase, pwszPath, ULONG(PATHCCH_ALLOW_LONG_PATHS.rawValue), &pwszResult)\n                }\n            }\n            defer { LocalFree(pwszResult) }\n\n            self.init(String(decodingCString: pwszResult, as: UTF16.self))\n#else\n            try self.init(basePath, RelativePath(validating: str))\n#endif\n        }\n    }\n\n    /// Initializes the AbsolutePath by concatenating a relative path to an\n    /// existing absolute path, and renormalizing if necessary.\n    public init(_ absPath: AbsolutePath, _ relPath: RelativePath) {\n        self.init(absPath._impl.appending(relativePath: relPath._impl))\n    }\n\n    /// Convenience initializer that appends a string to a relative path.\n    public init(_ absPath: AbsolutePath, validating relStr: String) throws {\n        try self.init(absPath, RelativePath(validating: relStr))\n    }\n\n    /// Initializes the AbsolutePath from `absStr`, which must be an absolute\n    /// path (i.e. it must begin with a path separator; this initializer does\n    /// not interpret leading `~` characters as home directory specifiers).\n    /// The input string will be normalized if needed, as described in the\n    /// documentation for AbsolutePath.\n    public init(validating path: String) throws {\n        try self.init(PathImpl(validatingAbsolutePath: path))\n    }\n\n    /// Directory component.  An absolute path always has a non-empty directory\n    /// component (the directory component of the root path is the root itself).\n    public var dirname: String {\n        return _impl.dirname\n    }\n\n    /// Last path component (including the suffix, if any).  it is never empty.\n    public var basename: String {\n        return _impl.basename\n    }\n\n    /// Returns the basename without the extension.\n    public var basenameWithoutExt: String {\n        if let ext = self.extension {\n            return String(basename.dropLast(ext.count + 1))\n        }\n        return basename\n    }\n\n    /// Suffix (including leading `.` character) if any.  Note that a basename\n    /// that starts with a `.` character is not considered a suffix, nor is a\n    /// trailing `.` character.\n    public var suffix: String? {\n        return _impl.suffix\n    }\n\n    /// Extension of the give path's basename. This follow same rules as\n    /// suffix except that it doesn't include leading `.` character.\n    public var `extension`: String? {\n        return _impl.extension\n    }\n\n    /// Absolute path of parent directory.  This always returns a path, because\n    /// every directory has a parent (the parent directory of the root directory\n    /// is considered to be the root directory itself).\n    public var parentDirectory: AbsolutePath {\n        return AbsolutePath(_impl.parentDirectory)\n    }\n\n    /// True if the path is the root directory.\n    public var isRoot: Bool {\n        return _impl.isRoot\n    }\n\n    /// Returns the absolute path with the relative path applied.\n    public func appending(_ subpath: RelativePath) -> AbsolutePath {\n        return AbsolutePath(self, subpath)\n    }\n\n    /// Returns the absolute path with an additional literal component appended.\n    ///\n    /// This method accepts pseudo-path like '.' or '..', but should not contain \"/\".\n    public func appending(component: String) -> AbsolutePath {\n        return AbsolutePath(_impl.appending(component: component))\n    }\n\n    /// Returns the absolute path with additional literal components appended.\n    ///\n    /// This method should only be used in cases where the input is guaranteed\n    /// to be a valid path component (i.e., it cannot be empty, contain a path\n    /// separator, or be a pseudo-path like '.' or '..').\n    public func appending(components names: [String]) -> AbsolutePath {\n        // FIXME: This doesn't seem a particularly efficient way to do this.\n        return names.reduce(self, { path, name in\n            path.appending(component: name)\n        })\n    }\n\n    public func appending(components names: String...) -> AbsolutePath {\n        appending(components: names)\n    }\n\n    /// NOTE: We will most likely want to add other `appending()` methods, such\n    ///       as `appending(suffix:)`, and also perhaps `replacing()` methods,\n    ///       such as `replacing(suffix:)` or `replacing(basename:)` for some\n    ///       of the more common path operations.\n\n    /// NOTE: We may want to consider adding operators such as `+` for appending\n    ///       a path component.\n\n    /// NOTE: We will want to add a method to return the lowest common ancestor\n    ///       path.\n\n    /// Root directory (whose string representation is just a path separator).\n    public static let root = AbsolutePath(PathImpl.root)\n\n    /// Normalized string representation (the normalization rules are described\n    /// in the documentation of the initializer).  This string is never empty.\n    public var pathString: String {\n        return _impl.string\n    }\n\n    /// Returns an array of strings that make up the path components of the\n    /// absolute path.  This is the same sequence of strings as the basenames\n    /// of each successive path component, starting from the root.  Therefore\n    /// the first path component of an absolute path is always `/`.\n    public var components: [String] {\n        return _impl.components\n    }\n}\n\n/// Represents a relative file system path.  A relative path never starts with\n/// a `/` character, and holds a normalized string representation.  As with\n/// AbsolutePath, the normalization is strictly syntactic, and does not access\n/// the file system in any way.\n///\n/// The relative path string is normalized by:\n/// - Collapsing `..` path components that aren't at the beginning\n/// - Removing extraneous `.` path components\n/// - Removing any trailing path separator\n/// - Removing any redundant path separators\n/// - Replacing a completely empty path with a `.`\n///\n/// This string manipulation may change the meaning of a path if any of the\n/// path components are symbolic links on disk.  However, the file system is\n/// never accessed in any way when initializing a RelativePath.\npublic struct RelativePath: Hashable, Sendable {\n    /// Private implementation details, shared with the AbsolutePath struct.\n    fileprivate let _impl: PathImpl\n\n    /// Private initializer when the backing storage is known.\n    private init(_ impl: PathImpl) {\n        _impl = impl\n    }\n\n    /// Convenience initializer that verifies that the path is relative.\n    public init(validating path: String) throws {\n        try self.init(PathImpl(validatingRelativePath: path))\n    }\n\n    /// Directory component.  For a relative path without any path separators,\n    /// this is the `.` string instead of the empty string.\n    public var dirname: String {\n        return _impl.dirname\n    }\n\n    /// Last path component (including the suffix, if any).  It is never empty.\n    public var basename: String {\n        return _impl.basename\n    }\n\n    /// Returns the basename without the extension.\n    public var basenameWithoutExt: String {\n        if let ext = self.extension {\n            return String(basename.dropLast(ext.count + 1))\n        }\n        return basename\n    }\n\n    /// Suffix (including leading `.` character) if any.  Note that a basename\n    /// that starts with a `.` character is not considered a suffix, nor is a\n    /// trailing `.` character.\n    public var suffix: String? {\n        return _impl.suffix\n    }\n\n    /// Extension of the give path's basename. This follow same rules as\n    /// suffix except that it doesn't include leading `.` character.\n    public var `extension`: String? {\n        return _impl.extension\n    }\n\n    /// Normalized string representation (the normalization rules are described\n    /// in the documentation of the initializer).  This string is never empty.\n    public var pathString: String {\n        return _impl.string\n    }\n\n    /// Returns an array of strings that make up the path components of the\n    /// relative path.  This is the same sequence of strings as the basenames\n    /// of each successive path component.  Therefore the returned array of\n    /// path components is never empty; even an empty path has a single path\n    /// component: the `.` string.\n    public var components: [String] {\n        return _impl.components\n    }\n\n    /// Returns the relative path with the given relative path applied.\n    public func appending(_ subpath: RelativePath) -> RelativePath {\n        return RelativePath(_impl.appending(relativePath: subpath._impl))\n    }\n\n    /// Returns the relative path with an additional literal component appended.\n    ///\n    /// This method accepts pseudo-path like '.' or '..', but should not contain \"/\".\n    public func appending(component: String) -> RelativePath {\n        return RelativePath(_impl.appending(component: component))\n    }\n\n    /// Returns the relative path with additional literal components appended.\n    ///\n    /// This method should only be used in cases where the input is guaranteed\n    /// to be a valid path component (i.e., it cannot be empty, contain a path\n    /// separator, or be a pseudo-path like '.' or '..').\n    public func appending(components names: [String]) -> RelativePath {\n        // FIXME: This doesn't seem a particularly efficient way to do this.\n        return names.reduce(self, { path, name in\n            path.appending(component: name)\n        })\n    }\n\n    public func appending(components names: String...) -> RelativePath {\n        appending(components: names)\n    }\n}\n\nextension AbsolutePath: Codable {\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        try container.encode(pathString)\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.singleValueContainer()\n        try self.init(validating: container.decode(String.self))\n    }\n}\n\nextension RelativePath: Codable {\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        try container.encode(pathString)\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.singleValueContainer()\n        try self.init(validating: container.decode(String.self))\n    }\n}\n\n// Make absolute paths Comparable.\nextension AbsolutePath: Comparable {\n    public static func < (lhs: AbsolutePath, rhs: AbsolutePath) -> Bool {\n        return lhs.pathString < rhs.pathString\n    }\n}\n\n/// Make absolute paths CustomStringConvertible and CustomDebugStringConvertible.\nextension AbsolutePath: CustomStringConvertible, CustomDebugStringConvertible {\n    public var description: String {\n        return pathString\n    }\n\n    public var debugDescription: String {\n        // FIXME: We should really be escaping backslashes and quotes here.\n        return \"<AbsolutePath:\\\"\\(pathString)\\\">\"\n    }\n}\n\n/// Make relative paths CustomStringConvertible and CustomDebugStringConvertible.\nextension RelativePath: CustomStringConvertible {\n    public var description: String {\n        return _impl.string\n    }\n\n    public var debugDescription: String {\n        // FIXME: We should really be escaping backslashes and quotes here.\n        return \"<RelativePath:\\\"\\(_impl.string)\\\">\"\n    }\n}\n\n/// Private implementation shared between AbsolutePath and RelativePath.\nprotocol Path: Hashable {\n\n    /// Root directory.\n    static var root: Self { get }\n\n    /// Checks if a string is a valid component.\n    static func isValidComponent(_ name: String) -> Bool\n\n    /// Normalized string of the (absolute or relative) path. Never empty.\n    var string: String { get }\n\n    /// Returns whether the path is the root path.\n    var isRoot: Bool { get }\n\n    /// Returns whether the path is an absolute path.\n    var isAbsolute: Bool { get }\n\n    /// Returns the directory part of the stored path (relying on the fact that it has been normalized). Returns a\n    /// string consisting of just `.` if there is no directory part (which is the case if and only if there is no path\n    /// separator).\n    var dirname: String { get }\n\n    /// Returns the last past component.\n    var basename: String { get }\n\n    /// Returns the components of the path between each path separator.\n    var components: [String] { get }\n\n    /// Path of parent directory. This always returns a path, because every directory has a parent (the parent\n    /// directory of the root directory is considered to be the root directory itself).\n    var parentDirectory: Self { get }\n\n    /// Creates a path from its normalized string representation.\n    init(string: String)\n\n    /// Creates a path from a string representation, validates that it is a valid absolute path and normalizes it.\n    init(validatingAbsolutePath: String) throws\n\n    /// Creates a path from a string representation, validates that it is a valid relative path and normalizes it.\n    init(validatingRelativePath: String) throws\n\n    /// Returns suffix with leading `.` if withDot is true otherwise without it.\n    func suffix(withDot: Bool) -> String?\n\n    /// Returns a new Path by appending the path component.\n    func appending(component: String) -> Self\n\n    /// Returns a path by concatenating a relative path and renormalizing if necessary.\n    func appending(relativePath: Self) -> Self\n}\n\nextension Path {\n    var suffix: String? {\n        return suffix(withDot: true)\n    }\n\n    var `extension`: String? {\n        return suffix(withDot: false)\n    }\n}\n\n#if os(Windows)\nprivate struct WindowsPath: Path, Sendable {\n    let string: String\n\n    // NOTE: this is *NOT* a root path.  It is a drive-relative path that needs\n    // to be specified due to assumptions in the APIs.  Use the platform\n    // specific path separator as we should be normalizing the path normally.\n    // This is required to make the `InMemoryFileSystem` correctly iterate\n    // paths.\n    static let root = Self(string: \"\\\\\")\n\n    static func isValidComponent(_ name: String) -> Bool {\n        return name != \"\" && name != \".\" && name != \"..\" && !name.contains(\"/\")\n    }\n\n    static func isAbsolutePath(_ path: String) -> Bool {\n        return !path.withCString(encodedAs: UTF16.self, PathIsRelativeW)\n    }\n\n    var dirname: String {\n        let fsr: UnsafePointer<Int8> = self.string.fileSystemRepresentation\n        defer { fsr.deallocate() }\n\n        let path: String = String(cString: fsr)\n        return path.withCString(encodedAs: UTF16.self) {\n            let data = UnsafeMutablePointer(mutating: $0)\n            PathCchRemoveFileSpec(data, path.count)\n            return String(decodingCString: data, as: UTF16.self)\n        }\n    }\n\n    var isAbsolute: Bool {\n        return Self.isAbsolutePath(self.string)\n    }\n\n    public var isRoot: Bool {\n        return self.string.withCString(encodedAs: UTF16.self, PathCchIsRoot)\n    }\n\n    var basename: String {\n        let path: String = self.string\n        return path.withCString(encodedAs: UTF16.self) {\n            PathStripPathW(UnsafeMutablePointer(mutating: $0))\n            return String(decodingCString: $0, as: UTF16.self)\n        }\n    }\n\n    // FIXME: We should investigate if it would be more efficient to instead\n    // return a path component iterator that does all its work lazily, moving\n    // from one path separator to the next on-demand.\n    //\n    var components: [String] {\n        let normalized: UnsafePointer<Int8> = string.fileSystemRepresentation\n        defer { normalized.deallocate() }\n\n        return String(cString: normalized).components(separatedBy: \"\\\\\").filter { !$0.isEmpty }\n    }\n\n    var parentDirectory: Self {\n        return self == .root ? self : Self(string: dirname)\n    }\n\n    init(string: String) {\n        if string.first?.isASCII ?? false, string.first?.isLetter ?? false, string.first?.isLowercase ?? false,\n           string.count > 1, string[string.index(string.startIndex, offsetBy: 1)] == \":\"\n        {\n            self.string = \"\\(string.first!.uppercased())\\(string.dropFirst(1))\"\n        } else {\n            self.string = string\n        }\n    }\n\n    private static func repr(_ path: String) -> String {\n        guard !path.isEmpty else { return \"\" }\n        let representation: UnsafePointer<Int8> = path.fileSystemRepresentation\n        defer { representation.deallocate() }\n        return String(cString: representation)\n    }\n\n    init(validatingAbsolutePath path: String) throws {\n        let realpath = Self.repr(path)\n        if !Self.isAbsolutePath(realpath) {\n            throw PathValidationError.invalidAbsolutePath(path)\n        }\n        self.init(string: realpath)\n    }\n\n    init(validatingRelativePath path: String) throws {\n        if path.isEmpty || path == \".\" {\n            self.init(string: \".\")\n        } else {\n            let realpath: String = Self.repr(path)\n            // Treat a relative path as an invalid relative path...\n            if Self.isAbsolutePath(realpath) || realpath.first == \"\\\\\" {\n                throw PathValidationError.invalidRelativePath(path)\n            }\n            self.init(string: realpath)\n        }\n    }\n\n    func suffix(withDot: Bool) -> String? {\n        return self.string.withCString(encodedAs: UTF16.self) {\n          if let pointer = PathFindExtensionW($0) {\n            let substring = String(decodingCString: pointer, as: UTF16.self)\n            guard substring.length > 0 else { return nil }\n            return withDot ? substring : String(substring.dropFirst(1))\n          }\n          return nil\n        }\n    }\n\n    func appending(component name: String) -> Self {\n        var result: PWSTR?\n        _ = string.withCString(encodedAs: UTF16.self) { root in\n            name.withCString(encodedAs: UTF16.self) { path in\n                PathAllocCombine(root, path, ULONG(PATHCCH_ALLOW_LONG_PATHS.rawValue), &result)\n            }\n        }\n        defer { LocalFree(result) }\n        return Self(string: String(decodingCString: result!, as: UTF16.self))\n    }\n\n    func appending(relativePath: Self) -> Self {\n        var result: PWSTR?\n        _ = string.withCString(encodedAs: UTF16.self) { root in\n            relativePath.string.withCString(encodedAs: UTF16.self) { path in\n                PathAllocCombine(root, path, ULONG(PATHCCH_ALLOW_LONG_PATHS.rawValue), &result)\n            }\n        }\n        defer { LocalFree(result) }\n        return Self(string: String(decodingCString: result!, as: UTF16.self))\n    }\n}\n#else\nprivate struct UNIXPath: Path, Sendable {\n    let string: String\n\n    static let root = Self(string: \"/\")\n\n    static func isValidComponent(_ name: String) -> Bool {\n        return name != \"\" && name != \".\" && name != \"..\" && !name.contains(\"/\")\n    }\n\n    var dirname: String {\n        // FIXME: This method seems too complicated; it should be simplified,\n        //        if possible, and certainly optimized (using UTF8View).\n        // Find the last path separator.\n        guard let idx = string.lastIndex(of: \"/\") else {\n            // No path separators, so the directory name is `.`.\n            return \".\"\n        }\n        // Check if it's the only one in the string.\n        if idx == string.startIndex {\n            // Just one path separator, so the directory name is `/`.\n            return \"/\"\n        }\n        // Otherwise, it's the string up to (but not including) the last path\n        // separator.\n        return String(string.prefix(upTo: idx))\n    }\n\n    var isAbsolute: Bool {\n        return string.hasPrefix(\"/\")\n    }\n\n    var isRoot: Bool {\n        return self == Self.root\n    }\n\n    var basename: String {\n        // Find the last path separator.\n        guard let idx = string.lastIndex(of: \"/\") else {\n            // No path separators, so the basename is the whole string.\n            return string\n        }\n        // Otherwise, it's the string from (but not including) the last path\n        // separator.\n        return String(string.suffix(from: string.index(after: idx)))\n    }\n\n    // FIXME: We should investigate if it would be more efficient to instead\n    // return a path component iterator that does all its work lazily, moving\n    // from one path separator to the next on-demand.\n    //\n    var components: [String] {\n        // FIXME: This isn't particularly efficient; needs optimization, and\n        // in fact, it might well be best to return a custom iterator so we\n        // don't have to allocate everything up-front.  It would be backed by\n        // the path string and just return a slice at a time.\n        let components = string.components(separatedBy: \"/\").filter({ !$0.isEmpty })\n\n        if string.hasPrefix(\"/\") {\n            return [\"/\"] + components\n        } else {\n            return components\n        }\n    }\n\n    var parentDirectory: Self {\n        return self == .root ? self : Self(string: dirname)\n    }\n\n    init(string: String) {\n        self.string = string\n    }\n\n    init(normalizingAbsolutePath path: String) {\n        precondition(path.first == \"/\", \"Failure normalizing \\(path), absolute paths should start with '/'\")\n\n        // At this point we expect to have a path separator as first character.\n        assert(path.first == \"/\")\n        // Fast path.\n        if !mayNeedNormalization(absolute: path) {\n            self.init(string: path)\n        }\n\n        // Split the character array into parts, folding components as we go.\n        // As we do so, we count the number of characters we'll end up with in\n        // the normalized string representation.\n        var parts: [String] = []\n        var capacity = 0\n        for part in path.split(separator: \"/\") {\n            switch part.count {\n              case 0:\n                // Ignore empty path components.\n                continue\n              case 1 where part.first == \".\":\n                // Ignore `.` path components.\n                continue\n              case 2 where part.first == \".\" && part.last == \".\":\n                // If there's a previous part, drop it; otherwise, do nothing.\n                if let prev = parts.last {\n                    parts.removeLast()\n                    capacity -= prev.count\n                }\n              default:\n                // Any other component gets appended.\n                parts.append(String(part))\n                capacity += part.count\n            }\n        }\n        capacity += max(parts.count, 1)\n\n        // Create an output buffer using the capacity we've calculated.\n        // FIXME: Determine the most efficient way to reassemble a string.\n        var result = \"\"\n        result.reserveCapacity(capacity)\n\n        // Put the normalized parts back together again.\n        var iter = parts.makeIterator()\n        result.append(\"/\")\n        if let first = iter.next() {\n            result.append(contentsOf: first)\n            while let next = iter.next() {\n                result.append(\"/\")\n                result.append(contentsOf: next)\n            }\n        }\n\n        // Sanity-check the result (including the capacity we reserved).\n        assert(!result.isEmpty, \"unexpected empty string\")\n        assert(result.count == capacity, \"count: \" +\n            \"\\(result.count), cap: \\(capacity)\")\n\n        // Use the result as our stored string.\n        self.init(string: result)\n    }\n\n    init(normalizingRelativePath path: String) {\n        precondition(path.first != \"/\")\n\n        // FIXME: Here we should also keep track of whether anything actually has\n        // to be changed in the string, and if not, just return the existing one.\n\n        // Split the character array into parts, folding components as we go.\n        // As we do so, we count the number of characters we'll end up with in\n        // the normalized string representation.\n        var parts: [String] = []\n        var capacity = 0\n        for part in path.split(separator: \"/\") {\n            switch part.count {\n            case 0:\n                // Ignore empty path components.\n                continue\n            case 1 where part.first == \".\":\n                // Ignore `.` path components.\n                continue\n            case 2 where part.first == \".\" && part.last == \".\":\n                // If at beginning, fall through to treat the `..` literally.\n                guard let prev = parts.last else {\n                    fallthrough\n                }\n                // If previous component is anything other than `..`, drop it.\n                if !(prev.count == 2 && prev.first == \".\" && prev.last == \".\") {\n                    parts.removeLast()\n                    capacity -= prev.count\n                    continue\n                }\n                // Otherwise, fall through to treat the `..` literally.\n                fallthrough\n            default:\n                // Any other component gets appended.\n                parts.append(String(part))\n                capacity += part.count\n            }\n        }\n        capacity += max(parts.count - 1, 0)\n\n        // Create an output buffer using the capacity we've calculated.\n        // FIXME: Determine the most efficient way to reassemble a string.\n        var result = \"\"\n        result.reserveCapacity(capacity)\n\n        // Put the normalized parts back together again.\n        var iter = parts.makeIterator()\n        if let first = iter.next() {\n            result.append(contentsOf: first)\n            while let next = iter.next() {\n                result.append(\"/\")\n                result.append(contentsOf: next)\n            }\n        }\n\n        // Sanity-check the result (including the capacity we reserved).\n        assert(result.count == capacity, \"count: \" +\n            \"\\(result.count), cap: \\(capacity)\")\n\n        // If the result is empty, return `.`, otherwise we return it as a string.\n        self.init(string: result.isEmpty ? \".\" : result)\n    }\n\n    init(validatingAbsolutePath path: String) throws {\n        switch path.first {\n        case \"/\":\n            self.init(normalizingAbsolutePath: path)\n        case \"~\":\n            throw PathValidationError.startsWithTilde(path)\n        default:\n            throw PathValidationError.invalidAbsolutePath(path)\n        }\n    }\n\n    init(validatingRelativePath path: String) throws {\n        switch path.first {\n        case \"/\":\n            throw PathValidationError.invalidRelativePath(path)\n        default:\n            self.init(normalizingRelativePath: path)\n        }\n    }\n\n    func suffix(withDot: Bool) -> String? {\n        // FIXME: This method seems too complicated; it should be simplified,\n        //        if possible, and certainly optimized (using UTF8View).\n        // Find the last path separator, if any.\n        let sIdx = string.lastIndex(of: \"/\")\n        // Find the start of the basename.\n        let bIdx = (sIdx != nil) ? string.index(after: sIdx!) : string.startIndex\n        // Find the last `.` (if any), starting from the second character of\n        // the basename (a leading `.` does not make the whole path component\n        // a suffix).\n        let fIdx = string.index(bIdx, offsetBy: 1, limitedBy: string.endIndex) ?? string.startIndex\n        if let idx = string[fIdx...].lastIndex(of: \".\") {\n            // Unless it's just a `.` at the end, we have found a suffix.\n            if string.distance(from: idx, to: string.endIndex) > 1 {\n                let fromIndex = withDot ? idx : string.index(idx, offsetBy: 1)\n                return String(string.suffix(from: fromIndex))\n            } else {\n                return nil\n            }\n        }\n        // If we get this far, there is no suffix.\n        return nil\n    }\n\n    func appending(component name: String) -> Self {\n        assert(!name.contains(\"/\"), \"\\(name) is invalid path component\")\n\n        // Handle pseudo paths.\n        switch name {\n        case \"\", \".\":\n            return self\n        case \"..\":\n            return self.parentDirectory\n        default:\n            break\n        }\n\n        if self == Self.root {\n            return Self(string: \"/\" + name)\n        } else {\n            return Self(string: string + \"/\" + name)\n        }\n    }\n\n    func appending(relativePath: Self) -> Self {\n        // Both paths are already normalized.  The only case in which we have\n        // to renormalize their concatenation is if the relative path starts\n        // with a `..` path component.\n        var newPathString = string\n        if self != .root {\n            newPathString.append(\"/\")\n        }\n\n        let relativePathString = relativePath.string\n        newPathString.append(relativePathString)\n\n        // If the relative string starts with `.` or `..`, we need to normalize\n        // the resulting string.\n        // FIXME: We can actually optimize that case, since we know that the\n        // normalization of a relative path can leave `..` path components at\n        // the beginning of the path only.\n        if relativePathString.hasPrefix(\".\") {\n            if newPathString.hasPrefix(\"/\") {\n                return Self(normalizingAbsolutePath: newPathString)\n            } else {\n                return Self(normalizingRelativePath: newPathString)\n            }\n        } else {\n            return Self(string: newPathString)\n        }\n    }\n}\n#endif\n\n/// Describes the way in which a path is invalid.\npublic enum PathValidationError: Error {\n    case startsWithTilde(String)\n    case invalidAbsolutePath(String)\n    case invalidRelativePath(String)\n}\n\nextension PathValidationError: CustomStringConvertible {\n    public var description: String {\n        switch self {\n        case .startsWithTilde(let path):\n            return \"invalid absolute path '\\(path)'; absolute path must begin with '/'\"\n        case .invalidAbsolutePath(let path):\n            return \"invalid absolute path '\\(path)'\"\n        case .invalidRelativePath(let path):\n            return \"invalid relative path '\\(path)'; relative path should not begin with '\\(AbsolutePath.root.pathString)'\"\n        }\n    }\n}\n\nextension AbsolutePath {\n    /// Returns a relative path that, when concatenated to `base`, yields the\n    /// callee path itself.  If `base` is not an ancestor of the callee, the\n    /// returned path will begin with one or more `..` path components.\n    ///\n    /// Because both paths are absolute, they always have a common ancestor\n    /// (the root path, if nothing else).  Therefore, any path can be made\n    /// relative to any other path by using a sufficient number of `..` path\n    /// components.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.  Therefore, it does not take symbolic links into account.\n    public func relative(to base: AbsolutePath) -> RelativePath {\n        let result: RelativePath\n        // Split the two paths into their components.\n        // FIXME: The is needs to be optimized to avoid unnecessary copying.\n        let pathComps = self.components\n        let baseComps = base.components\n\n        // It's common for the base to be an ancestor, so try that first.\n        if pathComps.starts(with: baseComps) {\n            // Special case, which is a plain path without `..` components.  It\n            // might be an empty path (when self and the base are equal).\n            let relComps = pathComps.dropFirst(baseComps.count)\n#if os(Windows)\n            let pathString = relComps.joined(separator: \"\\\\\")\n#else\n            let pathString = relComps.joined(separator: \"/\")\n#endif\n            do {\n                result = try RelativePath(validating: pathString)\n            } catch {\n                preconditionFailure(\"invalid relative path computed from \\(pathString)\")\n            }\n\n        } else {\n            // General case, in which we might well need `..` components to go\n            // \"up\" before we can go \"down\" the directory tree.\n            var newPathComps = ArraySlice(pathComps)\n            var newBaseComps = ArraySlice(baseComps)\n            while newPathComps.prefix(1) == newBaseComps.prefix(1) {\n                // First component matches, so drop it.\n                newPathComps = newPathComps.dropFirst()\n                newBaseComps = newBaseComps.dropFirst()\n            }\n            // Now construct a path consisting of as many `..`s as are in the\n            // `newBaseComps` followed by what remains in `newPathComps`.\n            var relComps = Array(repeating: \"..\", count: newBaseComps.count)\n            relComps.append(contentsOf: newPathComps)\n#if os(Windows)\n            let pathString = relComps.joined(separator: \"\\\\\")\n#else\n            let pathString = relComps.joined(separator: \"/\")\n#endif\n            do {\n                result = try RelativePath(validating: pathString)\n            } catch {\n                preconditionFailure(\"invalid relative path computed from \\(pathString)\")\n            }\n        }\n\n        assert(AbsolutePath(base, result) == self)\n        return result\n    }\n\n    /// Returns true if the path contains the given path.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.\n    @available(*, deprecated, renamed: \"isDescendantOfOrEqual(to:)\")\n    public func contains(_ other: AbsolutePath) -> Bool {\n        return isDescendantOfOrEqual(to: other)\n    }\n\n    /// Returns true if the path is an ancestor of the given path.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.\n    public func isAncestor(of descendant: AbsolutePath) -> Bool {\n        return descendant.components.dropLast().starts(with: self.components)\n    }\n\n    /// Returns true if the path is an ancestor of or equal to the given path.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.\n    public func isAncestorOfOrEqual(to descendant: AbsolutePath) -> Bool {\n        return descendant.components.starts(with: self.components)\n    }\n\n    /// Returns true if the path is a descendant of the given path.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.\n    public func isDescendant(of ancestor: AbsolutePath) -> Bool {\n        return self.components.dropLast().starts(with: ancestor.components)\n    }\n\n    /// Returns true if the path is a descendant of or equal to the given path.\n    ///\n    /// This method is strictly syntactic and does not access the file system\n    /// in any way.\n    public func isDescendantOfOrEqual(to ancestor: AbsolutePath) -> Bool {\n        return self.components.starts(with: ancestor.components)\n    }\n}\n\nextension PathValidationError: CustomNSError {\n    public var errorUserInfo: [String : Any] {\n        return [NSLocalizedDescriptionKey: self.description]\n    }\n}\n\n// FIXME: We should consider whether to merge the two `normalize()` functions.\n// The argument for doing so is that some of the code is repeated; the argument\n// against doing so is that some of the details are different, and since any\n// given path is either absolute or relative, it's wasteful to keep checking\n// for whether it's relative or absolute.  Possibly we can do both by clever\n// use of generics that abstract away the differences.\n\n/// Fast check for if a string might need normalization.\n///\n/// This assumes that paths containing dotfiles are rare:\nprivate func mayNeedNormalization(absolute string: String) -> Bool {\n    var last = UInt8(ascii: \"0\")\n    for c in string.utf8 {\n        switch c {\n        case UInt8(ascii: \"/\") where last == UInt8(ascii: \"/\"):\n            return true\n        case UInt8(ascii: \".\") where last == UInt8(ascii: \"/\"):\n            return true\n        default:\n            break\n        }\n        last = c\n    }\n    if last == UInt8(ascii: \"/\") {\n        return true\n    }\n    return false\n}\n\n// MARK: - `AbsolutePath` backwards compatibility, delete after deprecation period.\n\nextension AbsolutePath {\n    @_disfavoredOverload\n    @available(*, deprecated, message: \"use throwing `init(validating:)` variant instead\")\n    public init(_ absStr: String) {\n        try! self.init(validating: absStr)\n    }\n\n    @_disfavoredOverload\n    @available(*, deprecated, message: \"use throwing `init(validating:relativeTo:)` variant instead\")\n    public init(_ str: String, relativeTo basePath: AbsolutePath) {\n        try! self.init(validating: str, relativeTo: basePath)\n    }\n\n    @_disfavoredOverload\n    @available(*, deprecated, message: \"use throwing variant instead\")\n    public init(_ absPath: AbsolutePath, _ relStr: String) {\n        try! self.init(absPath, validating: relStr)\n    }\n}\n\n// MARK: - `AbsolutePath` backwards compatibility, delete after deprecation period.\n\nextension RelativePath {\n    @_disfavoredOverload\n    @available(*, deprecated, message: \"use throwing variant instead\")\n    public init(_ string: String) {\n        try! self.init(validating: string)\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/FileSystem/PathShim.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n -------------------------------------------------------------------------\n\n This file contains temporary shim functions for use during the adoption of\n AbsolutePath and RelativePath.  The eventual plan is to use the FileSystem\n API for all of this, at which time this file will go way.  But since it is\n important to have a quality FileSystem API, we will evolve it slowly.\n\n Meanwhile this file bridges the gap to let call sites be as clean as possible,\n while making it fairly easy to find those calls later.\n */\n\nimport Foundation\n\n#if canImport(Glibc)\n@_exported import Glibc\n#elseif canImport(Musl)\n@_exported import Musl\n#elseif os(Windows)\n@_exported import CRT\n@_exported import WinSDK\n#else\n@_exported import Darwin.C\n#endif\n\n/// Returns the \"real path\" corresponding to `path` by resolving any symbolic links.\npublic func resolveSymlinks(_ path: AbsolutePath) throws -> AbsolutePath {\n    #if os(Windows)\n    let handle: HANDLE = path.pathString.withCString(encodedAs: UTF16.self) {\n        CreateFileW(\n            $0,\n            GENERIC_READ,\n            DWORD(FILE_SHARE_READ),\n            nil,\n            DWORD(OPEN_EXISTING),\n            DWORD(FILE_FLAG_BACKUP_SEMANTICS),\n            nil\n        )\n    }\n    if handle == INVALID_HANDLE_VALUE { return path }\n    defer { CloseHandle(handle) }\n    return try withUnsafeTemporaryAllocation(of: WCHAR.self, capacity: 261) {\n        let dwLength: DWORD =\n            GetFinalPathNameByHandleW(\n                handle,\n                $0.baseAddress!,\n                DWORD($0.count),\n                DWORD(FILE_NAME_NORMALIZED)\n            )\n        let path = String(decodingCString: $0.baseAddress!, as: UTF16.self)\n        return try AbsolutePath(path)\n    }\n    #else\n    let pathStr = path.pathString\n\n    // FIXME: We can't use FileManager's destinationOfSymbolicLink because\n    // that implements readlink and not realpath.\n    if let resultPtr = realpath(pathStr, nil) {\n        let result = String(cString: resultPtr)\n        // If `resolved_path` is specified as NULL, then `realpath` uses\n        // malloc(3) to allocate a buffer [...].  The caller should deallocate\n        // this buffer using free(3).\n        //\n        // String.init(cString:) creates a new string by copying the\n        // null-terminated UTF-8 data referenced by the given pointer.\n        resultPtr.deallocate()\n        // FIXME: We should measure if it's really more efficient to compare the strings first.\n        return result == pathStr ? path : try AbsolutePath(validating: result)\n    }\n\n    return path\n    #endif\n}\n\n/// Creates a new, empty directory at `path`.  If needed, any non-existent ancestor paths are also\n/// created.  If there is\n/// already a directory at `path`, this function does nothing (in particular, this is not considered\n/// to be an error).\npublic func makeDirectories(_ path: AbsolutePath) throws {\n    try FileManager.default.createDirectory(\n        atPath: path.pathString,\n        withIntermediateDirectories: true,\n        attributes: [:]\n    )\n}\n\n/// Creates a symbolic link at `path` whose content points to `dest`.  If `relative` is true, the\n/// symlink contents will\n/// be a relative path, otherwise it will be absolute.\n@available(*, deprecated, renamed: \"localFileSystem.createSymbolicLink\")\npublic func createSymlink(\n    _ path: AbsolutePath,\n    pointingAt dest: AbsolutePath,\n    relative: Bool = true\n) throws {\n    let destString = relative ? dest.relative(to: path.parentDirectory).pathString : dest.pathString\n    try FileManager.default.createSymbolicLink(\n        atPath: path.pathString,\n        withDestinationPath: destString\n    )\n}\n\n/**\n - Returns: a generator that walks the specified directory producing all\n files therein. If recursively is true will enter any directories\n encountered recursively.\n\n - Warning: directories that cannot be entered due to permission problems\n are silently ignored. So keep that in mind.\n\n - Warning: Symbolic links that point to directories are *not* followed.\n\n - Note: setting recursively to `false` still causes the generator to feed\n you the directory; just not its contents.\n */\npublic func walk(\n    _ path: AbsolutePath,\n    fileSystem: FileSystem = localFileSystem,\n    recursively: Bool = true\n) throws -> RecursibleDirectoryContentsGenerator {\n    return try RecursibleDirectoryContentsGenerator(\n        path: path,\n        fileSystem: fileSystem,\n        recursionFilter: { _ in recursively }\n    )\n}\n\n/**\n - Returns: a generator that walks the specified directory producing all\n files therein. Directories are recursed based on the return value of\n `recursing`.\n\n - Warning: directories that cannot be entered due to permissions problems\n are silently ignored. So keep that in mind.\n\n - Warning: Symbolic links that point to directories are *not* followed.\n\n - Note: returning `false` from `recursing` still produces that directory\n from the generator; just not its contents.\n */\npublic func walk(\n    _ path: AbsolutePath,\n    fileSystem: FileSystem = localFileSystem,\n    recursing: @escaping (AbsolutePath) -> Bool\n) throws -> RecursibleDirectoryContentsGenerator {\n    return try RecursibleDirectoryContentsGenerator(\n        path: path,\n        fileSystem: fileSystem,\n        recursionFilter: recursing\n    )\n}\n\n/**\n Produced by `walk`.\n */\npublic class RecursibleDirectoryContentsGenerator: IteratorProtocol, Sequence {\n    private var current: (path: AbsolutePath, iterator: IndexingIterator<[String]>)\n    private var towalk = [AbsolutePath]()\n\n    private let shouldRecurse: (AbsolutePath) -> Bool\n    private let fileSystem: FileSystem\n\n    fileprivate init(\n        path: AbsolutePath,\n        fileSystem: FileSystem,\n        recursionFilter: @escaping (AbsolutePath) -> Bool\n    ) throws {\n        self.fileSystem = fileSystem\n        // FIXME: getDirectoryContents should have an iterator version.\n        current = try (\n            path,\n            fileSystem.getDirectoryContents(at: path).map(\\.basename).makeIterator()\n        )\n        shouldRecurse = recursionFilter\n    }\n\n    public func next() -> AbsolutePath? {\n        outer: while true {\n            guard let entry = current.iterator.next() else {\n                while !towalk.isEmpty {\n                    // FIXME: This looks inefficient.\n                    let path = towalk.removeFirst()\n                    guard shouldRecurse(path) else { continue }\n                    // Ignore if we can't get content for this path.\n                    guard let current = try? fileSystem.getDirectoryContents(at: path)\n                        .map(\\.basename)\n                        .makeIterator() else { continue }\n                    self.current = (path, current)\n                    continue outer\n                }\n                return nil\n            }\n\n            let path = current.path.appending(component: entry)\n            if fileSystem.isDirectory(path) && !fileSystem.isSymlink(path) {\n                towalk.append(path)\n            }\n            return path\n        }\n    }\n}\n\npublic extension AbsolutePath {\n    /// Returns a path suitable for display to the user (if possible, it is made\n    /// to be relative to the current working directory).\n    func prettyPath(cwd: AbsolutePath? = localFileSystem.currentWorkingDirectory) -> String {\n        guard let dir = cwd else {\n            // No current directory, display as is.\n            return pathString\n        }\n        // FIXME: Instead of string prefix comparison we should add a proper API\n        // to AbsolutePath to determine ancestry.\n        if self == dir {\n            return \".\"\n        } else if pathString.hasPrefix(dir.pathString + \"/\") {\n            return \"./\" + relative(to: dir).pathString\n        } else {\n            return pathString\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FileSystem/WritableByteStream.swift",
    "content": "/*\n This source file is part of the Swift.org open source project\n\n Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors\n Licensed under Apache License v2.0 with Runtime Library Exception\n\n See http://swift.org/LICENSE.txt for license information\n See http://swift.org/CONTRIBUTORS.txt for Swift project authors\n*/\n\n/// Closable entity is one that manages underlying resources and needs to be closed for cleanup\n/// The intent of this method is for the sole owner of the refernece/handle of the resource to close it completely, compared to releasing a shared resource.\npublic protocol Closable {\n    func close() throws\n}\n\nimport Dispatch\n\n#if canImport(Glibc)\n@_exported import Glibc\n#elseif canImport(Musl)\n@_exported import Musl\n#elseif os(Windows)\n@_exported import CRT\n@_exported import WinSDK\n#else\n@_exported import Darwin.C\n#endif\n\n/// Convert an integer in 0..<16 to its hexadecimal ASCII character.\nprivate func hexdigit(_ value: UInt8) -> UInt8 {\n    return value < 10 ? (0x30 + value) : (0x41 + value - 10)\n}\n\n/// Describes a type which can be written to a byte stream.\npublic protocol ByteStreamable {\n    func write(to stream: WritableByteStream)\n}\n\n/// An output byte stream.\n///\n/// This protocol is designed to be able to support efficient streaming to\n/// different output destinations, e.g., a file or an in memory buffer. This is\n/// loosely modeled on LLVM's llvm::raw_ostream class.\n///\n/// The stream is generally used in conjunction with the `appending` function.\n/// For example:\n///\n///   let stream = BufferedOutputByteStream()\n///   stream.appending(\"Hello, world!\")\n///\n/// would write the UTF8 encoding of \"Hello, world!\" to the stream.\n///\n/// The stream accepts a number of custom formatting operators which are defined\n/// in the `Format` struct (used for namespacing purposes). For example:\n///\n///   let items = [\"hello\", \"world\"]\n///   stream.appending(Format.asSeparatedList(items, separator: \" \"))\n///\n/// would write each item in the list to the stream, separating them with a\n/// space.\npublic protocol WritableByteStream: AnyObject, TextOutputStream, Closable {\n    /// The current offset within the output stream.\n    var position: Int { get }\n\n    /// Write an individual byte to the buffer.\n    func write(_ byte: UInt8)\n\n    /// Write a collection of bytes to the buffer.\n    func write<C: Collection>(_ bytes: C) where C.Element == UInt8\n\n    /// Flush the stream's buffer.\n    func flush()\n}\n\n// Default noop implementation of close to avoid source-breaking downstream dependents with the addition of the close\n// API.\npublic extension WritableByteStream {\n    func close() throws { }\n}\n\n// Public alias to the old name to not introduce API compatibility.\npublic typealias OutputByteStream = WritableByteStream\n\n#if os(Android) || canImport(Musl)\npublic typealias FILEPointer = OpaquePointer\n#else\npublic typealias FILEPointer = UnsafeMutablePointer<FILE>\n#endif\n\nextension WritableByteStream {\n    /// Write a sequence of bytes to the buffer.\n    public func write<S: Sequence>(sequence: S) where S.Iterator.Element == UInt8 {\n        // Iterate the sequence and append byte by byte since sequence's append\n        // is not performant anyway.\n        for byte in sequence {\n            write(byte)\n        }\n    }\n\n    /// Write a string to the buffer (as UTF8).\n    public func write(_ string: String) {\n        // FIXME(performance): Use `string.utf8._copyContents(initializing:)`.\n        write(string.utf8)\n    }\n\n    /// Write a string (as UTF8) to the buffer, with escaping appropriate for\n    /// embedding within a JSON document.\n    ///\n    /// - Note: This writes the literal data applying JSON string escaping, but\n    ///         does not write any other characters (like the quotes that would surround\n    ///         a JSON string).\n    public func writeJSONEscaped(_ string: String) {\n        // See RFC7159 for reference: https://tools.ietf.org/html/rfc7159\n        for character in string.utf8 {\n            // Handle string escapes; we use constants here to directly match the RFC.\n            switch character {\n            // Literal characters.\n            case 0x20...0x21, 0x23...0x5B, 0x5D...0xFF:\n                write(character)\n\n            // Single-character escaped characters.\n            case 0x22: // '\"'\n                write(0x5C) // '\\'\n                write(0x22) // '\"'\n            case 0x5C: // '\\\\'\n                write(0x5C) // '\\'\n                write(0x5C) // '\\'\n            case 0x08: // '\\b'\n                write(0x5C) // '\\'\n                write(0x62) // 'b'\n            case 0x0C: // '\\f'\n                write(0x5C) // '\\'\n                write(0x66) // 'b'\n            case 0x0A: // '\\n'\n                write(0x5C) // '\\'\n                write(0x6E) // 'n'\n            case 0x0D: // '\\r'\n                write(0x5C) // '\\'\n                write(0x72) // 'r'\n            case 0x09: // '\\t'\n                write(0x5C) // '\\'\n                write(0x74) // 't'\n\n            // Multi-character escaped characters.\n            default:\n                write(0x5C) // '\\'\n                write(0x75) // 'u'\n                write(hexdigit(0))\n                write(hexdigit(0))\n                write(hexdigit(character >> 4))\n                write(hexdigit(character & 0xF))\n            }\n        }\n    }\n\n    // MARK: helpers that return `self`\n\n    // FIXME: This override shouldn't be necessary but removing it causes a 30% performance regression. This problem is\n    // tracked by the following bug: https://bugs.swift.org/browse/SR-8535\n    @discardableResult\n    public func send(_ value: ArraySlice<UInt8>) -> WritableByteStream {\n        value.write(to: self)\n        return self\n    }\n\n    @discardableResult\n    public func send(_ value: ByteStreamable) -> WritableByteStream {\n        value.write(to: self)\n        return self\n    }\n\n    @discardableResult\n    public func send(_ value: CustomStringConvertible) -> WritableByteStream {\n        value.description.write(to: self)\n        return self\n    }\n\n    @discardableResult\n    public func send(_ value: ByteStreamable & CustomStringConvertible) -> WritableByteStream {\n        value.write(to: self)\n        return self\n    }\n}\n\n/// The `WritableByteStream` base class.\n///\n/// This class provides a base and efficient implementation of the `WritableByteStream`\n/// protocol. It can not be used as is-as subclasses as several functions need to be\n/// implemented in subclasses.\npublic class _WritableByteStreamBase: WritableByteStream {\n    /// If buffering is enabled\n    @usableFromInline let _buffered : Bool\n\n    /// The data buffer.\n    /// - Note: Minimum Buffer size should be one.\n    @usableFromInline var _buffer: [UInt8]\n\n    /// Default buffer size of the data buffer.\n    private static let bufferSize = 1024\n\n    /// Queue to protect mutating operation.\n    fileprivate let queue = DispatchQueue(label: \"org.swift.swiftpm.basic.stream\")\n\n    init(buffered: Bool) {\n        self._buffered = buffered\n        self._buffer = []\n\n        // When not buffered we still reserve 1 byte, as it is used by the\n        // by the single byte write() variant.\n        self._buffer.reserveCapacity(buffered ? _WritableByteStreamBase.bufferSize : 1)\n    }\n\n    // MARK: Data Access API\n\n    /// The current offset within the output stream.\n    public var position: Int {\n        return _buffer.count\n    }\n\n    /// Currently available buffer size.\n    @usableFromInline var _availableBufferSize: Int {\n        return _buffer.capacity - _buffer.count\n    }\n\n    /// Clears the buffer maintaining current capacity.\n    @usableFromInline func _clearBuffer() {\n        _buffer.removeAll(keepingCapacity: true)\n    }\n\n    // MARK: Data Output API\n\n    public final func flush() {\n        writeImpl(ArraySlice(_buffer))\n        _clearBuffer()\n        flushImpl()\n    }\n\n    @usableFromInline func flushImpl() {\n        // Do nothing.\n    }\n\n    public final func close() throws {\n        try closeImpl()\n    }\n\n    @usableFromInline func closeImpl() throws {\n        fatalError(\"Subclasses must implement this\")\n    }\n\n    @usableFromInline func writeImpl<C: Collection>(_ bytes: C) where C.Iterator.Element == UInt8 {\n        fatalError(\"Subclasses must implement this\")\n    }\n\n    @usableFromInline func writeImpl(_ bytes: ArraySlice<UInt8>) {\n        fatalError(\"Subclasses must implement this\")\n    }\n\n    /// Write an individual byte to the buffer.\n    public final func write(_ byte: UInt8) {\n        guard _buffered else {\n            _buffer.append(byte)\n            writeImpl(ArraySlice(_buffer))\n            flushImpl()\n            _clearBuffer()\n            return\n        }\n\n        // If buffer is full, write and clear it.\n        if _availableBufferSize == 0 {\n            writeImpl(ArraySlice(_buffer))\n            _clearBuffer()\n        }\n\n        // This will need to change change if we ever have unbuffered stream.\n        precondition(_availableBufferSize > 0)\n        _buffer.append(byte)\n    }\n\n    /// Write a collection of bytes to the buffer.\n    @inlinable public final func write<C: Collection>(_ bytes: C) where C.Element == UInt8 {\n        guard _buffered else {\n            if let b = bytes as? ArraySlice<UInt8> {\n                // Fast path for unbuffered ArraySlice\n                writeImpl(b)\n            } else if let b = bytes as? Array<UInt8> {\n                // Fast path for unbuffered Array\n                writeImpl(ArraySlice(b))\n            } else {\n                // generic collection unfortunately must be temporarily buffered\n                writeImpl(bytes)\n            }\n            flushImpl()\n            return\n        }\n\n        // This is based on LLVM's raw_ostream.\n        let availableBufferSize = self._availableBufferSize\n        let byteCount = Int(bytes.count)\n\n        // If we have to insert more than the available space in buffer.\n        if byteCount > availableBufferSize {\n            // If buffer is empty, start writing and keep the last chunk in buffer.\n            if _buffer.isEmpty {\n                let bytesToWrite = byteCount - (byteCount % availableBufferSize)\n                let writeUptoIndex = bytes.index(bytes.startIndex, offsetBy: numericCast(bytesToWrite))\n                writeImpl(bytes.prefix(upTo: writeUptoIndex))\n\n                // If remaining bytes is more than buffer size write everything.\n                let bytesRemaining = byteCount - bytesToWrite\n                if bytesRemaining > availableBufferSize {\n                    writeImpl(bytes.suffix(from: writeUptoIndex))\n                    return\n                }\n                // Otherwise keep remaining in buffer.\n                _buffer += bytes.suffix(from: writeUptoIndex)\n                return\n            }\n\n            let writeUptoIndex = bytes.index(bytes.startIndex, offsetBy: numericCast(availableBufferSize))\n            // Append whatever we can accommodate.\n            _buffer += bytes.prefix(upTo: writeUptoIndex)\n\n            writeImpl(ArraySlice(_buffer))\n            _clearBuffer()\n\n            // FIXME: We should start again with remaining chunk but this doesn't work. Write everything for now.\n            //write(collection: bytes.suffix(from: writeUptoIndex))\n            writeImpl(bytes.suffix(from: writeUptoIndex))\n            return\n        }\n        _buffer += bytes\n    }\n}\n\n/// The thread-safe wrapper around output byte streams.\n///\n/// This class wraps any `WritableByteStream` conforming type to provide a type-safe\n/// access to its operations. If the provided stream inherits from `_WritableByteStreamBase`,\n/// it will also ensure it is type-safe will all other `ThreadSafeOutputByteStream` instances\n/// around the same stream.\npublic final class ThreadSafeOutputByteStream: WritableByteStream {\n    private static let defaultQueue = DispatchQueue(label: \"org.swift.swiftpm.basic.thread-safe-output-byte-stream\")\n    public let stream: WritableByteStream\n    private let queue: DispatchQueue\n\n    public var position: Int {\n        return queue.sync {\n            stream.position\n        }\n    }\n\n    public init(_ stream: WritableByteStream) {\n        self.stream = stream\n        self.queue = (stream as? _WritableByteStreamBase)?.queue ?? ThreadSafeOutputByteStream.defaultQueue\n    }\n\n    public func write(_ byte: UInt8) {\n        queue.sync {\n            stream.write(byte)\n        }\n    }\n\n    public func write<C: Collection>(_ bytes: C) where C.Element == UInt8 {\n        queue.sync {\n            stream.write(bytes)\n        }\n    }\n\n    public func flush() {\n        queue.sync {\n            stream.flush()\n        }\n    }\n\n    public func write<S: Sequence>(sequence: S) where S.Iterator.Element == UInt8 {\n        queue.sync {\n            stream.write(sequence: sequence)\n        }\n    }\n\n    public func writeJSONEscaped(_ string: String) {\n        queue.sync {\n            stream.writeJSONEscaped(string)\n        }\n    }\n\n    public func close() throws {\n        try queue.sync {\n            try stream.close()\n        }\n    }\n}\n\n\n#if swift(<5.6)\nextension ThreadSafeOutputByteStream: UnsafeSendable {}\n#else\nextension ThreadSafeOutputByteStream: @unchecked Sendable {}\n#endif\n\n/// Define an output stream operator. We need it to be left associative, so we\n/// use `<<<`.\ninfix operator <<< : StreamingPrecedence\nprecedencegroup StreamingPrecedence {\n  associativity: left\n}\n\n// MARK: Output Operator Implementations\n\n// FIXME: This override shouldn't be necessary but removing it causes a 30% performance regression. This problem is\n// tracked by the following bug: https://bugs.swift.org/browse/SR-8535\n\n@available(*, deprecated, message: \"use send(_:) function on WritableByteStream instead\")\n@discardableResult\npublic func <<< (stream: WritableByteStream, value: ArraySlice<UInt8>) -> WritableByteStream {\n    value.write(to: stream)\n    return stream\n}\n\n@available(*, deprecated, message: \"use send(_:) function on WritableByteStream instead\")\n@discardableResult\npublic func <<< (stream: WritableByteStream, value: ByteStreamable) -> WritableByteStream {\n    value.write(to: stream)\n    return stream\n}\n\n@available(*, deprecated, message: \"use send(_:) function on WritableByteStream instead\")\n@discardableResult\npublic func <<< (stream: WritableByteStream, value: CustomStringConvertible) -> WritableByteStream {\n    value.description.write(to: stream)\n    return stream\n}\n\n@available(*, deprecated, message: \"use send(_:) function on WritableByteStream instead\")\n@discardableResult\npublic func <<< (stream: WritableByteStream, value: ByteStreamable & CustomStringConvertible) -> WritableByteStream {\n    value.write(to: stream)\n    return stream\n}\n\nextension UInt8: ByteStreamable {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self)\n    }\n}\n\nextension Character: ByteStreamable {\n    public func write(to stream: WritableByteStream) {\n        stream.write(String(self))\n    }\n}\n\nextension String: ByteStreamable {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self.utf8)\n    }\n}\n\nextension Substring: ByteStreamable {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self.utf8)\n    }\n}\n\nextension StaticString: ByteStreamable {\n    public func write(to stream: WritableByteStream) {\n        withUTF8Buffer { stream.write($0) }\n    }\n}\n\nextension Array: ByteStreamable where Element == UInt8 {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self)\n    }\n}\n\nextension ArraySlice: ByteStreamable where Element == UInt8 {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self)\n    }\n}\n\nextension ContiguousArray: ByteStreamable where Element == UInt8 {\n    public func write(to stream: WritableByteStream) {\n        stream.write(self)\n    }\n}\n\n// MARK: Formatted Streaming Output\n\n/// Provides operations for returning derived streamable objects to implement various forms of formatted output.\npublic struct Format {\n    /// Write the input boolean encoded as a JSON object.\n    static public func asJSON(_ value: Bool) -> ByteStreamable {\n        return JSONEscapedBoolStreamable(value: value)\n    }\n    private struct JSONEscapedBoolStreamable: ByteStreamable {\n        let value: Bool\n\n        func write(to stream: WritableByteStream) {\n            stream.send(value ? \"true\" : \"false\")\n        }\n    }\n\n    /// Write the input integer encoded as a JSON object.\n    static public func asJSON(_ value: Int) -> ByteStreamable {\n        return JSONEscapedIntStreamable(value: value)\n    }\n    private struct JSONEscapedIntStreamable: ByteStreamable {\n        let value: Int\n\n        func write(to stream: WritableByteStream) {\n            // FIXME: Diagnose integers which cannot be represented in JSON.\n            stream.send(value.description)\n        }\n    }\n\n    /// Write the input double encoded as a JSON object.\n    static public func asJSON(_ value: Double) -> ByteStreamable {\n        return JSONEscapedDoubleStreamable(value: value)\n    }\n    private struct JSONEscapedDoubleStreamable: ByteStreamable {\n        let value: Double\n\n        func write(to stream: WritableByteStream) {\n            // FIXME: What should we do about NaN, etc.?\n            //\n            // FIXME: Is Double.debugDescription the best representation?\n            stream.send(value.debugDescription)\n        }\n    }\n\n    /// Write the input CustomStringConvertible encoded as a JSON object.\n    static public func asJSON<T: CustomStringConvertible>(_ value: T) -> ByteStreamable {\n        return JSONEscapedStringStreamable(value: value.description)\n    }\n    /// Write the input string encoded as a JSON object.\n    static public func asJSON(_ string: String) -> ByteStreamable {\n        return JSONEscapedStringStreamable(value: string)\n    }\n    private struct JSONEscapedStringStreamable: ByteStreamable {\n        let value: String\n\n        func write(to stream: WritableByteStream) {\n            stream.send(UInt8(ascii: \"\\\"\"))\n            stream.writeJSONEscaped(value)\n            stream.send(UInt8(ascii: \"\\\"\"))\n        }\n    }\n\n    /// Write the input string list encoded as a JSON object.\n    static public func asJSON<T: CustomStringConvertible>(_ items: [T]) -> ByteStreamable {\n        return JSONEscapedStringListStreamable(items: items.map({ $0.description }))\n    }\n    /// Write the input string list encoded as a JSON object.\n    //\n    // FIXME: We might be able to make this more generic through the use of a \"JSONEncodable\" protocol.\n    static public func asJSON(_ items: [String]) -> ByteStreamable {\n        return JSONEscapedStringListStreamable(items: items)\n    }\n    private struct JSONEscapedStringListStreamable: ByteStreamable {\n        let items: [String]\n\n        func write(to stream: WritableByteStream) {\n            stream.send(UInt8(ascii: \"[\"))\n            for (i, item) in items.enumerated() {\n                if i != 0 { stream.send(\",\") }\n                stream.send(Format.asJSON(item))\n            }\n            stream.send(UInt8(ascii: \"]\"))\n        }\n    }\n\n    /// Write the input dictionary encoded as a JSON object.\n    static public func asJSON(_ items: [String: String]) -> ByteStreamable {\n        return JSONEscapedDictionaryStreamable(items: items)\n    }\n    private struct JSONEscapedDictionaryStreamable: ByteStreamable {\n        let items: [String: String]\n\n        func write(to stream: WritableByteStream) {\n            stream.send(UInt8(ascii: \"{\"))\n            for (offset: i, element: (key: key, value: value)) in items.enumerated() {\n                if i != 0 { stream.send(\",\") }\n                stream.send(Format.asJSON(key)).send(\":\").send(Format.asJSON(value))\n            }\n            stream.send(UInt8(ascii: \"}\"))\n        }\n    }\n\n    /// Write the input list (after applying a transform to each item) encoded as a JSON object.\n    //\n    // FIXME: We might be able to make this more generic through the use of a \"JSONEncodable\" protocol.\n    static public func asJSON<T>(_ items: [T], transform: @escaping (T) -> String) -> ByteStreamable {\n        return JSONEscapedTransformedStringListStreamable(items: items, transform: transform)\n    }\n    private struct JSONEscapedTransformedStringListStreamable<T>: ByteStreamable {\n        let items: [T]\n        let transform: (T) -> String\n\n        func write(to stream: WritableByteStream) {\n            stream.send(UInt8(ascii: \"[\"))\n            for (i, item) in items.enumerated() {\n                if i != 0 { stream.send(\",\") }\n                stream.send(Format.asJSON(transform(item)))\n            }\n            stream.send(UInt8(ascii: \"]\"))\n        }\n    }\n\n    /// Write the input list to the stream with the given separator between items.\n    static public func asSeparatedList<T: ByteStreamable>(_ items: [T], separator: String) -> ByteStreamable {\n        return SeparatedListStreamable(items: items, separator: separator)\n    }\n    private struct SeparatedListStreamable<T: ByteStreamable>: ByteStreamable {\n        let items: [T]\n        let separator: String\n\n        func write(to stream: WritableByteStream) {\n            for (i, item) in items.enumerated() {\n                // Add the separator, if necessary.\n                if i != 0 {\n                    stream.send(separator)\n                }\n\n                stream.send(item)\n            }\n        }\n    }\n\n    /// Write the input list to the stream (after applying a transform to each item) with the given separator between\n    /// items.\n    static public func asSeparatedList<T>(\n        _ items: [T],\n        transform: @escaping (T) -> ByteStreamable,\n        separator: String\n    ) -> ByteStreamable {\n        return TransformedSeparatedListStreamable(items: items, transform: transform, separator: separator)\n    }\n    private struct TransformedSeparatedListStreamable<T>: ByteStreamable {\n        let items: [T]\n        let transform: (T) -> ByteStreamable\n        let separator: String\n\n        func write(to stream: WritableByteStream) {\n            for (i, item) in items.enumerated() {\n                if i != 0 { stream.send(separator) }\n                stream.send(transform(item))\n            }\n        }\n    }\n\n    static public func asRepeating(string: String, count: Int) -> ByteStreamable {\n        return RepeatingStringStreamable(string: string, count: count)\n    }\n    private struct RepeatingStringStreamable: ByteStreamable {\n        let string: String\n        let count: Int\n\n        init(string: String, count: Int) {\n            precondition(count >= 0, \"Count should be >= zero\")\n            self.string = string\n            self.count = count\n        }\n\n        func write(to stream: WritableByteStream) {\n            for _ in 0..<count {\n                stream.send(string)\n            }\n        }\n    }\n}\n\n/// In memory implementation of WritableByteStream.\npublic final class BufferedOutputByteStream: _WritableByteStreamBase {\n\n    /// Contents of the stream.\n    private var contents = [UInt8]()\n\n    public init() {\n        // We disable the buffering of the underlying _WritableByteStreamBase as\n        // we are explicitly buffering the whole stream in memory\n        super.init(buffered: false)\n    }\n\n    /// The contents of the output stream.\n    ///\n    /// - Note: This implicitly flushes the stream.\n    public var bytes: ByteString {\n        flush()\n        return ByteString(contents)\n    }\n\n    /// The current offset within the output stream.\n    override public final var position: Int {\n        return contents.count\n    }\n\n    override final func flushImpl() {\n        // Do nothing.\n    }\n\n    override final func writeImpl<C: Collection>(_ bytes: C) where C.Iterator.Element == UInt8 {\n        contents += bytes\n    }\n    override final func writeImpl(_ bytes: ArraySlice<UInt8>) {\n        contents += bytes\n    }\n\n    override final func closeImpl() throws {\n        // Do nothing. The protocol does not require to stop receiving writes, close only signals that resources could\n        // be released at this point should we need to.\n    }\n}\n\n/// Represents a stream which is backed to a file. Not for instantiating.\npublic class FileOutputByteStream: _WritableByteStreamBase {\n\n    public override final func closeImpl() throws {\n        flush()\n        try fileCloseImpl()\n    }\n\n    /// Closes the file flushing any buffered data.\n    func fileCloseImpl() throws {\n        fatalError(\"fileCloseImpl() should be implemented by a subclass\")\n    }\n}\n\n/// Implements file output stream for local file system.\npublic final class LocalFileOutputByteStream: FileOutputByteStream {\n\n    /// The pointer to the file.\n    let filePointer: FILEPointer\n\n    /// Set to an error value if there were any IO error during writing.\n    private var error: FileSystemError?\n\n    /// Closes the file on deinit if true.\n    private var closeOnDeinit: Bool\n\n    /// Path to the file this stream should operate on.\n    private let path: AbsolutePath?\n\n    /// Instantiate using the file pointer.\n    public init(filePointer: FILEPointer, closeOnDeinit: Bool = true, buffered: Bool = true) throws {\n        self.filePointer = filePointer\n        self.closeOnDeinit = closeOnDeinit\n        self.path = nil\n        super.init(buffered: buffered)\n    }\n\n    /// Opens the file for writing at the provided path.\n    ///\n    /// - Parameters:\n    ///     - path: Path to the file this stream should operate on.\n    ///     - closeOnDeinit: If true closes the file on deinit. clients can use\n    ///                      close() if they want to close themselves or catch\n    ///                      errors encountered during writing to the file.\n    ///                      Default value is true.\n    ///     - buffered: If true buffers writes in memory until full or flush().\n    ///                 Otherwise, writes are processed and flushed immediately.\n    ///                 Default value is true.\n    ///\n    /// - Throws: FileSystemError\n    public init(_ path: AbsolutePath, closeOnDeinit: Bool = true, buffered: Bool = true) throws {\n        guard let filePointer = fopen(path.pathString, \"wb\") else {\n            throw FileSystemError(errno: errno, path)\n        }\n        self.path = path\n        self.filePointer = filePointer\n        self.closeOnDeinit = closeOnDeinit\n        super.init(buffered: buffered)\n    }\n\n    deinit {\n        if closeOnDeinit {\n            fclose(filePointer)\n        }\n    }\n\n    func errorDetected(code: Int32?) {\n        if let code = code {\n            error = .init(.ioError(code: code), path)\n        } else {\n            error = .init(.unknownOSError, path)\n        }\n    }\n\n    override final func writeImpl<C: Collection>(_ bytes: C) where C.Iterator.Element == UInt8 {\n        // FIXME: This will be copying bytes but we don't have option currently.\n        var contents = [UInt8](bytes)\n        while true {\n            let n = fwrite(&contents, 1, contents.count, filePointer)\n            if n < 0 {\n                if errno == EINTR { continue }\n                errorDetected(code: errno)\n            } else if n != contents.count {\n                errorDetected(code: nil)\n            }\n            break\n        }\n    }\n\n    override final func writeImpl(_ bytes: ArraySlice<UInt8>) {\n        bytes.withUnsafeBytes { bytesPtr in\n            while true {\n                let n = fwrite(bytesPtr.baseAddress!, 1, bytesPtr.count, filePointer)\n                if n < 0 {\n                    if errno == EINTR { continue }\n                    errorDetected(code: errno)\n                } else if n != bytesPtr.count {\n                    errorDetected(code: nil)\n                }\n                break\n            }\n        }\n    }\n\n    override final func flushImpl() {\n        fflush(filePointer)\n    }\n\n    override final func fileCloseImpl() throws {\n        defer {\n            fclose(filePointer)\n            // If clients called close we shouldn't call fclose again in deinit.\n            closeOnDeinit = false\n        }\n        // Throw if errors were found during writing.\n        if let error = error {\n            throw error\n        }\n    }\n}\n\n/// Public stdout stream instance.\npublic var stdoutStream: ThreadSafeOutputByteStream = try! ThreadSafeOutputByteStream(LocalFileOutputByteStream(\n    filePointer: stdout,\n    closeOnDeinit: false))\n\n/// Public stderr stream instance.\npublic var stderrStream: ThreadSafeOutputByteStream = try! ThreadSafeOutputByteStream(LocalFileOutputByteStream(\n    filePointer: stderr,\n    closeOnDeinit: false))\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/ActiveDocumentContext.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\npublic struct ActiveDocumentContext: Sendable {\n    public var documentURL: URL\n    public var relativePath: String\n    public var language: CodeLanguage\n    public var fileContent: String\n    public var lines: [String]\n    public var selectedCode: String\n    public var selectionRange: CursorRange\n    public var lineAnnotations: [EditorInformation.LineAnnotation]\n    public var imports: [String]\n    public var includes: [String]\n\n    public struct FocusedContext: Sendable {\n        public struct Context: Equatable, Sendable {\n            public var signature: String\n            public var name: String\n            public var range: CursorRange\n\n            public init(signature: String, name: String, range: CursorRange) {\n                self.signature = signature\n                self.name = name\n                self.range = range\n            }\n        }\n\n        public var context: [Context]\n        public var contextRange: CursorRange\n        public var smallestContextRange: CursorRange\n        public var codeRange: CursorRange\n        public var code: String\n        public var lineAnnotations: [EditorInformation.LineAnnotation]\n        public var otherLineAnnotations: [EditorInformation.LineAnnotation]\n\n        public init(\n            context: [Context],\n            contextRange: CursorRange,\n            smallestContextRange: CursorRange,\n            codeRange: CursorRange,\n            code: String,\n            lineAnnotations: [EditorInformation.LineAnnotation],\n            otherLineAnnotations: [EditorInformation.LineAnnotation]\n        ) {\n            self.context = context\n            self.contextRange = contextRange\n            self.smallestContextRange = smallestContextRange\n            self.codeRange = codeRange\n            self.code = code\n            self.lineAnnotations = lineAnnotations\n            self.otherLineAnnotations = otherLineAnnotations\n        }\n    }\n\n    public var focusedContext: FocusedContext?\n\n    public init(\n        documentURL: URL,\n        relativePath: String,\n        language: CodeLanguage,\n        fileContent: String,\n        lines: [String],\n        selectedCode: String,\n        selectionRange: CursorRange,\n        lineAnnotations: [EditorInformation.LineAnnotation],\n        imports: [String],\n        includes: [String],\n        focusedContext: FocusedContext? = nil\n    ) {\n        self.documentURL = documentURL\n        self.relativePath = relativePath\n        self.language = language\n        self.fileContent = fileContent\n        self.lines = lines\n        self.selectedCode = selectedCode\n        self.selectionRange = selectionRange\n        self.lineAnnotations = lineAnnotations\n        self.imports = imports\n        self.includes = includes\n        self.focusedContext = focusedContext\n    }\n    \n    public static func empty() -> ActiveDocumentContext {\n        .init(\n            documentURL: .init(fileURLWithPath: \"/\"),\n            relativePath: \"\",\n            language: .builtIn(.swift),\n            fileContent: \"\",\n            lines: [],\n            selectedCode: \"\",\n            selectionRange: .outOfScope,\n            lineAnnotations: [],\n            imports: [],\n            includes: []\n        )\n    }\n\n    public mutating func moveToFocusedCode() {\n        moveToCodeContainingRange(selectionRange)\n    }\n\n    public mutating func moveToCodeAroundLine(_ line: Int) {\n        moveToCodeContainingRange(.init(\n            start: .init(line: line, character: 0),\n            end: .init(line: line, character: 0)\n        ))\n    }\n\n    public mutating func expandFocusedRangeToContextRange() {\n        guard let focusedContext else { return }\n        moveToCodeContainingRange(focusedContext.contextRange)\n    }\n\n    public mutating func moveToCodeContainingRange(_ range: CursorRange) {\n        let finder = FocusedCodeFinder(\n            maxFocusedCodeLineCount: UserDefaults.shared.value(for: \\.maxFocusedCodeLineCount)\n        )\n\n        let codeContext = finder.findFocusedCode(\n            in: .init(documentURL: documentURL, content: fileContent, lines: lines),\n            containingRange: range,\n            language: language\n        )\n\n        imports = codeContext.imports\n        includes = codeContext.includes\n\n        let startLine = codeContext.focusedRange.start.line\n        let endLine = codeContext.focusedRange.end.line\n        var matchedAnnotations = [EditorInformation.LineAnnotation]()\n        var otherAnnotations = [EditorInformation.LineAnnotation]()\n        for annotation in lineAnnotations {\n            if annotation.line >= startLine, annotation.line <= endLine {\n                matchedAnnotations.append(annotation)\n            } else {\n                otherAnnotations.append(annotation)\n            }\n        }\n\n        focusedContext = .init(\n            context: codeContext.scopeContexts,\n            contextRange: codeContext.contextRange,\n            smallestContextRange: codeContext.smallestContextRange,\n            codeRange: codeContext.focusedRange,\n            code: codeContext.focusedCode,\n            lineAnnotations: matchedAnnotations,\n            otherLineAnnotations: otherAnnotations\n        )\n    }\n\n    public mutating func update(_ info: EditorInformation) {\n        /// Whenever the file content, relative path, or selection range changes,\n        /// we should reset the context.\n        let changed: Bool = {\n            if info.relativePath != relativePath { return true }\n            if info.editorContent?.content != fileContent { return true }\n            if let range = info.editorContent?.selections.first,\n               range != selectionRange { return true }\n            return false\n        }()\n\n        documentURL = info.documentURL\n        relativePath = info.relativePath\n        language = info.language\n        fileContent = info.editorContent?.content ?? \"\"\n        lines = info.editorContent?.lines ?? []\n        selectedCode = info.selectedContent\n        selectionRange = info.editorContent?.selections.first ?? .zero\n        lineAnnotations = info.editorContent?.lineAnnotations ?? []\n        imports = []\n        includes = []\n\n        if changed {\n            moveToFocusedCode()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/FocusedCodeFinder.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\npublic struct CodeContext: Equatable {\n    public typealias ScopeContext = ActiveDocumentContext.FocusedContext.Context\n\n    public enum Scope: Equatable {\n        case file\n        case top\n        case scope(signature: [ScopeContext])\n    }\n\n    public var scopeContexts: [ScopeContext] {\n        switch scope {\n        case .file:\n            return []\n        case .top:\n            return []\n        case let .scope(contexts):\n            return contexts\n        }\n    }\n\n    public var scope: Scope\n    public var contextRange: CursorRange\n    public var smallestContextRange: CursorRange\n    public var focusedRange: CursorRange\n    public var focusedCode: String\n    public var imports: [String]\n    public var includes: [String]\n\n    public static var empty: CodeContext {\n        .init(\n            scope: .file,\n            contextRange: .zero,\n            smallestContextRange: .zero,\n            focusedRange: .zero,\n            focusedCode: \"\",\n            imports: [],\n            includes: []\n        )\n    }\n\n    public init(\n        scope: Scope,\n        contextRange: CursorRange,\n        smallestContextRange: CursorRange,\n        focusedRange: CursorRange,\n        focusedCode: String,\n        imports: [String],\n        includes: [String]\n    ) {\n        self.scope = scope\n        self.contextRange = contextRange\n        self.smallestContextRange = smallestContextRange\n        self.focusedRange = focusedRange\n        self.focusedCode = focusedCode\n        self.imports = imports\n        self.includes = includes\n    }\n}\n\npublic struct FocusedCodeFinder {\n    public let maxFocusedCodeLineCount: Int\n\n    public init(maxFocusedCodeLineCount: Int) {\n        self.maxFocusedCodeLineCount = maxFocusedCodeLineCount\n    }\n\n    public struct Document {\n        var documentURL: URL\n        var content: String\n        var lines: [String]\n\n        public init(documentURL: URL, content: String, lines: [String]) {\n            self.documentURL = documentURL\n            self.content = content\n            self.lines = lines\n        }\n    }\n\n    public func findFocusedCode(\n        in document: Document,\n        containingRange: CursorRange,\n        language: CodeLanguage\n    ) -> CodeContext {\n        let finder: FocusedCodeFinderType = {\n            switch language {\n            case .builtIn(.swift):\n                return SwiftFocusedCodeFinder(maxFocusedCodeLineCount: maxFocusedCodeLineCount)\n            case .builtIn(.objc), .builtIn(.objcpp), .builtIn(.c):\n                #warning(\n                    \"TODO: Implement C++ focused code finder, use it for C and metal shading language\"\n                )\n                return ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: maxFocusedCodeLineCount)\n            default:\n                return UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            }\n        }()\n\n        return finder.findFocusedCode(in: document, containingRange: containingRange)\n    }\n}\n\npublic protocol FocusedCodeFinderType {\n    typealias Document = FocusedCodeFinder.Document\n\n    func findFocusedCode(\n        in document: Document,\n        containingRange: CursorRange\n    ) -> CodeContext\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/KnownLanguageFocusedCodeFinder.swift",
    "content": "import Foundation\nimport Preferences\nimport SuggestionBasic\n\npublic typealias KnownLanguageFocusedCodeFinder<Tree, Node, TextPosition> =\n    BaseKnownLanguageFocusedCodeFinder<Tree, Node, TextPosition> &\n    KnownLanguageFocusedCodeFinderType\n\npublic class BaseKnownLanguageFocusedCodeFinder<Tree, Node, TextPosition> {\n    public typealias TextProvider = (TextPosition) -> String\n    public typealias RangeConverter = (Node) -> CursorRange\n\n    public struct NodeInfo {\n        var node: Node\n        var signature: String\n        var name: String\n        var canBeUsedAsCodeRange: Bool = true\n    }\n\n    public struct ContextInfo {\n        var nodes: [Node]\n        var includes: [String]\n        var imports: [String]\n    }\n\n    public let maxFocusedCodeLineCount: Int\n\n    init(\n        maxFocusedCodeLineCount: Int = UserDefaults.shared.value(for: \\.maxFocusedCodeLineCount)\n    ) {\n        self.maxFocusedCodeLineCount = maxFocusedCodeLineCount\n    }\n}\n\npublic protocol KnownLanguageFocusedCodeFinderType: FocusedCodeFinderType {\n    associatedtype Tree\n    associatedtype Node\n    associatedtype TextPosition\n    typealias Document = FocusedCodeFinder.Document\n    typealias Finder = BaseKnownLanguageFocusedCodeFinder<Tree, Node, TextPosition>\n    typealias NodeInfo = Finder.NodeInfo\n    typealias ContextInfo = Finder.ContextInfo\n    typealias TextProvider = Finder.TextProvider\n    typealias RangeConverter = Finder.RangeConverter\n\n    var maxFocusedCodeLineCount: Int { get }\n\n    func parseSyntaxTree(from document: Document) -> Tree?\n\n    func collectContextNodes(\n        in document: Document,\n        tree: Tree,\n        containingRange: SuggestionBasic.CursorRange,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> ContextInfo\n\n    func contextContainingNode(\n        _ node: Node,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> NodeInfo?\n\n    func createTextProviderAndRangeConverter(\n        for document: Document,\n        tree: Tree\n    ) -> (TextProvider, RangeConverter)\n}\n\npublic extension KnownLanguageFocusedCodeFinderType {\n    func findFocusedCode(\n        in document: Document,\n        containingRange range: SuggestionBasic.CursorRange\n    ) -> CodeContext {\n        guard let tree = parseSyntaxTree(from: document) else { return .empty }\n\n        let (textProvider, rangeConverter) = createTextProviderAndRangeConverter(\n            for: document,\n            tree: tree\n        )\n        var contextInfo = collectContextNodes(\n            in: document,\n            tree: tree,\n            containingRange: range,\n            textProvider: textProvider,\n            rangeConverter: rangeConverter\n        )\n        var codeRange: CursorRange\n\n        let noSelection = range.isEmpty\n        if noSelection {\n            // use the first scope as code, the second as context\n            var focusedNode: Node?\n            while let node = contextInfo.nodes.first {\n                contextInfo.nodes.removeFirst()\n                let nodeInfo = contextContainingNode(\n                    node,\n                    textProvider: textProvider,\n                    rangeConverter: rangeConverter\n                )\n                if nodeInfo?.canBeUsedAsCodeRange ?? false {\n                    focusedNode = node\n                    break\n                }\n            }\n            guard let focusedNode else {\n                // fallback to unknown language focused code finder when no scope found\n                var result = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 8)\n                    .findFocusedCode(in: document, containingRange: range)\n                result.imports = contextInfo.imports\n                result.includes = contextInfo.includes\n                return result\n            }\n            codeRange = rangeConverter(focusedNode)\n        } else {\n            // use the selection as code, the first scope as context\n            codeRange = range\n        }\n\n        let (code, _, focusedRange) = extractFocusedCode(\n            in: codeRange,\n            in: document,\n            containingRange: range\n        )\n\n        let (contextRange, scopeContexts) = extractScopeContext(\n            contextNodes: contextInfo.nodes,\n            textProvider: textProvider,\n            rangeConverter: rangeConverter\n        )\n\n        return .init(\n            scope: scopeContexts.isEmpty ? .file : .scope(signature: scopeContexts),\n            contextRange: contextRange,\n            smallestContextRange: codeRange,\n            focusedRange: focusedRange,\n            focusedCode: code,\n            imports: contextInfo.imports,\n            includes: contextInfo.includes\n        )\n    }\n}\n\nextension KnownLanguageFocusedCodeFinderType {\n    func extractFocusedCode(\n        in codeRange: CursorRange,\n        in document: Document,\n        containingRange range: SuggestionBasic.CursorRange\n    ) -> (code: String, lines: [String], codeRange: CursorRange) {\n        var codeRange = codeRange\n        let codeInCodeRange = EditorInformation.code(\n            in: document.lines,\n            inside: codeRange,\n            ignoreColumns: true\n        )\n\n        var code = codeInCodeRange.code\n        var lines = codeInCodeRange.lines\n\n        if range.isEmpty, codeInCodeRange.lines.count > maxFocusedCodeLineCount {\n            // if the focused code is too long, truncate it to be shorter\n            let centerLine = range.start.line\n            let relativeCenterLine = centerLine - codeRange.start.line\n            let startLine = max(0, relativeCenterLine - maxFocusedCodeLineCount / 2)\n            let endLine = max(\n                startLine,\n                min(codeInCodeRange.lines.count - 1, startLine + maxFocusedCodeLineCount - 1)\n            )\n\n            lines = Array(codeInCodeRange.lines[startLine...endLine])\n            code = lines.joined()\n            codeRange = .init(\n                start: .init(line: startLine + codeRange.start.line, character: 0),\n                end: .init(\n                    line: endLine + codeRange.start.line,\n                    character: codeInCodeRange.lines[endLine].count\n                )\n            )\n        }\n\n        return (code, lines, codeRange)\n    }\n\n    func extractScopeContext(\n        contextNodes: [Node],\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> (contextRange: CursorRange, scopeContexts: [CodeContext.ScopeContext]) {\n        var nodes = contextNodes\n        var contextRange = CursorRange.zero\n        var signature = [CodeContext.ScopeContext]()\n\n        while let node = nodes.first {\n            nodes.removeFirst()\n            let context = contextContainingNode(\n                node,\n                textProvider: textProvider,\n                rangeConverter: rangeConverter\n            )\n\n            if let context {\n                contextRange = rangeConverter(context.node)\n                signature.insert(.init(\n                    signature: context.signature,\n                    name: context.name,\n                    range: contextRange\n                ), at: 0)\n            }\n        }\n\n        return (contextRange, signature)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/ObjectiveC/ObjectiveCCodeFinder.swift",
    "content": "import ASTParser\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport SwiftTreeSitter\n\npublic enum TreeSitterTextPosition {\n    case node(ASTNode)\n    case range(range: NSRange, pointRange: Range<Point>)\n}\n\npublic class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<\n    ASTTree,\n    ASTNode,\n    TreeSitterTextPosition\n> {\n    override public init(maxFocusedCodeLineCount: Int) {\n        super.init(maxFocusedCodeLineCount: maxFocusedCodeLineCount)\n    }\n\n    public func parseSyntaxTree(from document: Document) -> ASTTree? {\n        let parser = ASTParser(language: .objectiveC)\n        return parser.parse(document.content)\n    }\n\n    public func collectContextNodes(\n        in document: Document,\n        tree: ASTTree,\n        containingRange range: CursorRange,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> ContextInfo {\n        let visitor = ObjectiveCScopeHierarchySyntaxVisitor(\n            tree: tree,\n            code: document.content,\n            textProvider: { node in\n                textProvider(.node(node))\n            },\n            range: range\n        )\n\n        let nodes = visitor.findScopeHierarchy()\n\n        return .init(nodes: nodes, includes: visitor.includes, imports: visitor.imports)\n    }\n\n    public func createTextProviderAndRangeConverter(\n        for document: Document,\n        tree: ASTTree\n    ) -> (TextProvider, RangeConverter) {\n        (\n            { position in\n                switch position {\n                case let .node(node):\n                    return document.content.cursorTextProvider(node.range, node.pointRange) ?? \"\"\n                case let .range(range, pointRange):\n                    return document.content.cursorTextProvider(range, pointRange) ?? \"\"\n                }\n            },\n            { node in\n                CursorRange(pointRange: node.pointRange)\n            }\n        )\n    }\n\n    public func contextContainingNode(\n        _ node: Node,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> NodeInfo? {\n        switch ObjectiveCNodeType(rawValue: node.nodeType ?? \"\") {\n        case .classInterface, .categoryInterface:\n            return parseDeclarationInterfaceNode(node, textProvider: textProvider)\n        case .classImplementation, .categoryImplementation:\n            return parseDeclarationInterfaceNode(node, textProvider: textProvider)\n        case .protocolDeclaration:\n            return parseDeclarationInterfaceNode(node, textProvider: textProvider)\n        case .methodDefinition:\n            return parseMethodDefinitionNode(node, textProvider: textProvider)\n        case .functionDefinition:\n            return parseFunctionDefinitionNode(node, textProvider: textProvider)\n        case .structSpecifier, .enumSpecifier, .nsEnumSpecifier:\n            return parseTypeSpecifierNode(node, textProvider: textProvider)\n        case .typeDefinition:\n            return parseTypedefNode(node, textProvider: textProvider)\n        default:\n            return nil\n        }\n    }\n\n    func parseDeclarationInterfaceNode(\n        _ node: ASTNode,\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        var name = \"\"\n        var category = \"\"\n        /// Attributes, declaration kind, and name.\n        var prefix = \"\"\n        /// Generics, super class, etc.\n        var extra = \"\"\n\n        if let nameNode = node.child(byFieldName: \"name\") {\n            name = textProvider(.node(nameNode))\n            prefix = textProvider(.range(\n                range: node.range.notSurpassing(nameNode.range),\n                pointRange: node.pointRange.notSurpassing(nameNode.pointRange)\n            ))\n        }\n        if let categoryNode = node.child(byFieldName: \"category\") {\n            category = textProvider(.node(categoryNode))\n        }\n\n        for i in 0..<node.childCount {\n            guard let childNode = node.child(at: i) else { continue }\n            switch ObjectiveCNodeType(rawValue: childNode.nodeType) {\n            case .superclassReference,\n                 .protocolQualifiers,\n                 .parameterizedClassTypeArguments:\n                extra.append(textProvider(.node(childNode)))\n            case .genericsTypeReference:\n                // When it's a category of a generic type, e.g.\n                // @interface __GENERICS(NSArray, ObjectType) (BlocksKit)\n                if let nameNode = childNode.child(byFieldName: \"name\") {\n                    name = textProvider(.node(nameNode))\n                }\n                prefix = textProvider(.range(\n                    range: node.range.notSurpassing(childNode.range),\n                    pointRange: node.pointRange.notSurpassing(childNode.pointRange)\n                ))\n            default: continue\n            }\n        }\n\n        prefix = prefix.split(whereSeparator: \\.isNewline)\n            .joined(separator: \" \")\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n\n        extra = extra.split(whereSeparator: \\.isNewline)\n            .joined(separator: \" \")\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n\n        var signature = \"\\(prefix)\\(extra)\"\n        if !category.isEmpty {\n            signature += \" (\\(category))\"\n        }\n\n        return .init(\n            node: node,\n            signature: signature,\n            name: name,\n            canBeUsedAsCodeRange: true\n        )\n    }\n\n    func parseMethodDefinitionNode(\n        _ node: ASTNode,\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        parseSignatureBeforeBody(node, fieldNameForName: \"selector\", textProvider: textProvider)\n    }\n\n    func parseTypeSpecifierNode(\n        _ node: ASTNode,\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        parseSignatureBeforeBody(node, textProvider: textProvider)\n    }\n\n    func parseTypedefNode(\n        _ node: ASTNode,\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        guard let typeNode = node.child(byFieldName: \"type\") else { return nil }\n        guard var result = parseSignatureBeforeBody(typeNode, textProvider: textProvider)\n        else { return nil }\n        result.signature = \"typedef \\(result.signature)\"\n        result.node = node\n        return result\n    }\n\n    func parseFunctionDefinitionNode(\n        _ node: ASTNode,\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        let declaratorNode = node.child(byFieldName: \"declarator\")\n        let name = declaratorNode?.contentOfChild(\n            withFieldName: \"declarator\",\n            textProvider: textProvider\n        )\n        let (\n            _,\n            signatureRange,\n            signaturePointRange\n        ) = node.extractInformationBeforeNode(withFieldName: \"body\")\n        let signature = textProvider(.range(range: signatureRange, pointRange: signaturePointRange))\n            .breakLines(proposedLineEnding: \" \", appendLineBreakToLastLine: false)\n            .joined()\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        if signature.isEmpty { return nil }\n        return .init(\n            node: node,\n            signature: signature,\n            name: name ?? \"N/A\",\n            canBeUsedAsCodeRange: true\n        )\n    }\n}\n\n// MARK: - Shared Parser\n\nextension ObjectiveCFocusedCodeFinder {\n    func parseSignatureBeforeBody(\n        _ node: ASTNode,\n        fieldNameForName: String = \"name\",\n        textProvider: @escaping TextProvider\n    ) -> NodeInfo? {\n        let name = node.contentOfChild(withFieldName: fieldNameForName, textProvider: textProvider)\n        let (\n            _,\n            signatureRange,\n            signaturePointRange\n        ) = node.extractInformationBeforeNode(withFieldName: \"body\")\n        let signature = textProvider(.range(range: signatureRange, pointRange: signaturePointRange))\n            .breakLines(proposedLineEnding: \" \", appendLineBreakToLastLine: false)\n            .joined()\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        if signature.isEmpty { return nil }\n        return .init(\n            node: node,\n            signature: signature,\n            name: name ?? \"N/A\",\n            canBeUsedAsCodeRange: true\n        )\n    }\n}\n\nextension ASTNode {\n    func contentOfChild(\n        withFieldName name: String,\n        textProvider: (TreeSitterTextPosition) -> String\n    ) -> String? {\n        guard let child = child(byFieldName: name) else { return nil }\n        return textProvider(.node(child))\n    }\n\n    func extractInformationBeforeNode(withFieldName name: String) -> (\n        postfixNode: ASTNode?,\n        range: NSRange,\n        pointRange: Range<Point>\n    ) {\n        guard let postfixNode = child(byFieldName: name) else {\n            return (nil, range, pointRange)\n        }\n\n        let range = self.range.subtracting(postfixNode.range)\n        let pointRange = self.pointRange.subtracting(postfixNode.pointRange)\n        return (postfixNode, range, pointRange)\n    }\n}\n\nextension NSRange {\n    func subtracting(_ range: NSRange) -> NSRange {\n        let start = lowerBound\n        let end = Swift.max(lowerBound, Swift.min(upperBound, range.lowerBound))\n        return NSRange(location: start, length: end - start)\n    }\n\n    func notSurpassing(_ range: NSRange) -> NSRange {\n        let start = lowerBound\n        let end = Swift.max(lowerBound, Swift.min(upperBound, range.upperBound))\n        return NSRange(location: start, length: end - start)\n    }\n}\n\nextension Range where Bound == Point {\n    func subtracting(_ range: Range<Bound>) -> Range<Bound> {\n        let start = lowerBound\n        let end = if range.lowerBound >= upperBound {\n            upperBound\n        } else {\n            Swift.max(range.lowerBound, lowerBound)\n        }\n        return Range(uncheckedBounds: (start, end))\n    }\n\n    func notSurpassing(_ range: Range<Bound>) -> Range<Bound> {\n        let start = lowerBound\n        let end = if range.lowerBound >= upperBound {\n            upperBound\n        } else {\n            Swift.max(range.upperBound, lowerBound)\n        }\n        return Range(uncheckedBounds: (start, end))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/ObjectiveC/ObjectiveCScopeHierarchySyntaxVisitor.swift",
    "content": "import ASTParser\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport SwiftTreeSitter\n\nfinal class ObjectiveCScopeHierarchySyntaxVisitor: ASTTreeVisitor {\n    let range: CursorRange\n    let code: String\n    let textProvider: (ASTNode) -> String\n    var includes: [String] = []\n    var imports: [String] = []\n    private var _scopeHierarchy: [ASTNode] = []\n\n    init(\n        tree: ASTTree,\n        code: String,\n        textProvider: @escaping (ASTNode) -> String,\n        range: CursorRange\n    ) {\n        self.range = range\n        self.code = code\n        self.textProvider = textProvider\n        super.init(tree: tree)\n    }\n\n    /// The nodes containing the current range, sorted from inner to outer.\n    func findScopeHierarchy(_ node: ASTNode) -> [ASTNode] {\n        walk(node)\n        return _scopeHierarchy.sorted { $0.range.location > $1.range.location }\n    }\n\n    /// The nodes containing the current range, sorted from inner to outer.\n    func findScopeHierarchy() -> [ASTNode] {\n        walk()\n        return _scopeHierarchy.sorted { $0.range.location > $1.range.location }\n    }\n\n    override func visit(_ node: ASTNode) -> ASTTreeVisitorContinueKind {\n        let cursorRange = CursorRange(pointRange: node.pointRange)\n\n        switch ObjectiveCNodeType(rawValue: node.nodeType ?? \"\") {\n        case .translationUnit:\n            return .visitChildren\n        case .preprocInclude:\n            handlePreprocInclude(node)\n            return .skipChildren\n        case .preprocImport:\n            handlePreprocImport(node)\n            return .skipChildren\n        case .moduleImport:\n            handleModuleImport(node)\n            return .skipChildren\n        case .classInterface, .categoryInterface, .protocolDeclaration:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .visitChildren\n        case .classImplementation, .categoryImplementation:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .visitChildren\n        case .methodDefinition:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .skipChildren\n        case .typeDefinition:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .skipChildren\n        case .structSpecifier, .enumSpecifier, .nsEnumSpecifier:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .skipChildren\n        case .functionDefinition:\n            guard cursorRange.strictlyContains(range) else { return .skipChildren }\n            _scopeHierarchy.append(node)\n            return .skipChildren\n        default:\n            return .skipChildren\n        }\n    }\n\n    override func visitPost(_: ASTNode) {}\n\n    // MARK: Imports\n\n    func handlePreprocInclude(_ node: ASTNode) {\n        if let pathNode = node.child(byFieldName: \"path\") {\n            let path = textProvider(pathNode)\n            if !path.isEmpty {\n                includes.append(path)\n            }\n        }\n    }\n\n    func handlePreprocImport(_ node: ASTNode) {\n        if let pathNode = node.child(byFieldName: \"path\") {\n            let path = textProvider(pathNode)\n            if !path.isEmpty {\n                imports.append(path)\n            }\n        }\n    }\n\n    func handleModuleImport(_ node: ASTNode) {\n        if let pathNode = node.child(byFieldName: \"module\") {\n            let path = textProvider(pathNode)\n            if !path.isEmpty {\n                imports.append(path)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/ObjectiveC/ObjectiveCSyntax.swift",
    "content": "import Foundation\n\n/// https://github.com/lukepistrol/tree-sitter-objc/blob/feature/spm/test/corpus/imports.txt\n/// https://github.com/lukepistrol/tree-sitter-objc/blob/feature/spm/test/corpus/expressions.txt\n/// https://github.com/lukepistrol/tree-sitter-objc/blob/feature/spm/test/corpus/declarations.txt\n/// https://github.com/lukepistrol/tree-sitter-objc/blob/feature/spm/node-types.json\n/// Some of the test cases are actually incorrect?\nenum ObjectiveCNodeType: String {\n    /// The top most item\n    case translationUnit = \"translation_unit\"\n    /// `#include`\n    case preprocInclude = \"preproc_include\"\n    /// `#import \"bar.h\"`\n    case preprocImport = \"preproc_import\"\n    /// `@import foo.bar`\n    case moduleImport = \"module_import\"\n    /// ```objc\n    /// @interface ClassName(Category)<Protocol1, Protocol2>: SuperClass {\n    ///   type1 iv1;\n    ///   type2 iv2;\n    /// }\n    /// @property (readwrite, copy) float value;\n    /// + (tr)k1:(t1)a1 : (t2)a2 k2: a3;\n    /// @end\n    /// ```\n    case classInterface = \"class_interface\"\n    /// `@implementation`\n    case classImplementation = \"class_implementation\"\n    /// Similar to class interface.\n    case categoryInterface = \"category_interface\"\n    /// Similar to class implementation.\n    case categoryImplementation = \"category_implementation\"\n    /// Similar to class interface.\n    case protocolDeclaration = \"protocol_declaration\"\n    /// `@protocol <P1, P2>`\n    case protocolDeclarationList = \"protocol_declaration_list\"\n    /// ```objc\n    /// @class C1, C2;\n    /// ```\n    case classDeclarationList = \"class_declaration_list\"\n    /// ```\n    /// + (tr)k1: (t1)a1 : (t2)a2 k2: a3;\n    /// ```\n    case propertyDeclaration = \"property_declaration\"\n    /// ```objc\n    /// + (tr)k1: (t1)a1 : (t2)a2 k2: a3;\n    /// ```\n    case methodDeclaration = \"method_declaration\"\n    /// `- (rt)sel {}`\n    case methodDefinition = \"method_definition\"\n    /// function definitions\n    case functionDefinition = \"function_definition\"\n    /// Names of symbols\n    case identifier = \"identifier\"\n    /// Type identifiers\n    case typeIdentifier = \"type_identifier\"\n    /// Compound statements, such as `{ ... }`\n    case compoundStatement = \"compound_statement\"\n    /// Typedef.\n    case typeDefinition = \"type_definition\"\n    /// `struct {}`.\n    case structSpecifier = \"struct_specifier\"\n    /// `enum {}`.\n    case enumSpecifier = \"enum_specifier\"\n    /// `NS_ENUM {}` and `NS_OPTIONS {}`.\n    case nsEnumSpecifier = \"ns_enum_specifier\"\n    /// Fields inside a type definition.\n    case fieldDeclarationList = \"field_declaration_list\"\n    /// Protocols that a type conforms.\n    case protocolQualifiers = \"protocol_qualifiers\"\n    /// Superclass of a type.\n    case superclassReference = \"superclass_reference\"\n    /// The generic type arguments.\n    case parameterizedClassTypeArguments = \"parameterized_class_type_arguments\"\n    /// `__GENERICS` in category interface and implementation.\n    case genericsTypeReference = \"generics_type_reference\"\n    /// `IB_DESIGNABLE`, etc. The typo is from the original source.\n    case classInterfaceAttributeSpecifier = \"class_interface_attribute_specifier\"\n}\n\nextension ObjectiveCNodeType {\n    init?(rawValue: String?) {\n        self.init(rawValue: rawValue ?? \"\")\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/Swift/SwiftFocusedCodeFinder.swift",
    "content": "import ASTParser\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport SwiftParser\nimport SwiftSyntax\n\npublic class SwiftFocusedCodeFinder: KnownLanguageFocusedCodeFinder<\n    SourceFileSyntax,\n    SyntaxProtocol,\n    SyntaxProtocol\n> {\n    override public init(maxFocusedCodeLineCount: Int) {\n        super.init(maxFocusedCodeLineCount: maxFocusedCodeLineCount)\n    }\n\n    public func parseSyntaxTree(from document: Document) -> SourceFileSyntax? {\n        Parser.parse(source: document.content)\n    }\n\n    public func collectContextNodes(\n        in document: Document,\n        tree: SourceFileSyntax,\n        containingRange range: CursorRange,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> ContextInfo {\n        let visitor = SwiftScopeHierarchySyntaxVisitor(\n            tree: tree,\n            code: document.content,\n            range: range,\n            rangeConverter: rangeConverter\n        )\n\n        let nodes = visitor.findScopeHierarchy()\n        return .init(\n            nodes: nodes,\n            includes: [],\n            imports: visitor.imports\n        )\n    }\n\n    public func createTextProviderAndRangeConverter(\n        for document: Document,\n        tree: SourceFileSyntax\n    ) -> (TextProvider, RangeConverter) {\n        let locationConverter = SourceLocationConverter(\n            fileName: document.documentURL.path,\n            tree: tree\n        )\n        return (\n            { node in\n                let range = CursorRange(sourceRange: node.sourceRange(converter: locationConverter))\n                return EditorInformation.code(in: document.lines, inside: range).code\n            },\n            { node in\n                let range = CursorRange(sourceRange: node.sourceRange(converter: locationConverter))\n                return range\n            }\n        )\n    }\n\n    public func contextContainingNode(\n        _ node: SyntaxProtocol,\n        textProvider: @escaping TextProvider,\n        rangeConverter: @escaping RangeConverter\n    ) -> NodeInfo? {\n        func extractText(_ node: SyntaxProtocol) -> String {\n            textProvider(node)\n        }\n\n        switch node {\n        case let node as StructDeclSyntax:\n            let type = node.structKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as ClassDeclSyntax:\n            let type = node.classKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as EnumDeclSyntax:\n            let type = node.enumKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as ActorDeclSyntax:\n            let type = node.actorKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as MacroDeclSyntax:\n            let type = node.macroKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as ProtocolDeclSyntax:\n            let type = node.protocolKeyword.text\n            let name = node.name.text\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as ExtensionDeclSyntax:\n            let type = node.extensionKeyword.text\n            let name = node.extendedType.trimmedDescription\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .suffixedInheritance(node.inheritanceClauseTexts(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name\n            )\n\n        case let node as FunctionDeclSyntax:\n            let type = node.funcKeyword.text\n            let name = node.name.text\n            let signature = node.signature.trimmedDescription\n                .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }\n                .joined(separator: \" \")\n\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\\(signature)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText)),\n                name: name\n            )\n\n        case let node as VariableDeclSyntax:\n            let type = node.bindingSpecifier.trimmedDescription\n            let name = node.bindings.first?.pattern.trimmedDescription ?? \"\"\n            let signature = node.bindings.first?.typeAnnotation?.trimmedDescription ?? \"\"\n\n            return .init(\n                node: node,\n                signature: \"\\(type) \\(name)\\(signature.isEmpty ? \"\" : \"\\(signature)\")\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: name,\n                canBeUsedAsCodeRange: node.bindings.first?.accessorBlock != nil\n            )\n\n        case let node as AccessorDeclSyntax:\n            let keyword = node.accessorSpecifier.text\n            let signature = keyword\n\n            return .init(\n                node: node,\n                signature: signature\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: keyword\n            )\n\n        case let node as SubscriptDeclSyntax:\n            let genericPClause = node.genericWhereClause?.trimmedDescription ?? \"\"\n            let pClause = node.parameterClause.trimmedDescription\n            let whereClause = node.genericWhereClause?.trimmedDescription ?? \"\"\n            let signature = \"subscript\\(genericPClause)(\\(pClause))\\(whereClause)\"\n\n            return .init(\n                node: node,\n                signature: signature\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"subscript\"\n            )\n\n        case let node as InitializerDeclSyntax:\n            let signature = \"init\"\n\n            return .init(\n                node: node,\n                signature: \"\\(signature)\"\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"init\"\n            )\n\n        case let node as DeinitializerDeclSyntax:\n            let signature = \"deinit\"\n\n            return .init(\n                node: node,\n                signature: signature\n                    .prefixedModifiers(node.modifierAndAttributeText(extractText))\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"deinit\"\n            )\n\n        case let node as ClosureExprSyntax:\n            let signature = \"closure\"\n            let range = rangeConverter(node)\n\n            return .init(\n                node: node,\n                signature: signature\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"closure\",\n                canBeUsedAsCodeRange: range.lineCount > 80\n            )\n\n        case let node as FunctionCallExprSyntax:\n            let signature = \"function call\"\n            return .init(\n                node: node,\n                signature: signature\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"function call\",\n                canBeUsedAsCodeRange: false\n            )\n\n        case let node as SwitchCaseSyntax:\n            let range = rangeConverter(node)\n            \n            return .init(\n                node: node,\n                signature: node.trimmedDescription\n                    .split(omittingEmptySubsequences: false, whereSeparator: \\.isNewline)\n                    .joined(separator: \" \"),\n                name: \"switch\",\n                canBeUsedAsCodeRange: range.lineCount > 80\n            )\n\n        default:\n            return nil\n        }\n    }\n\n    func findAssigningToVariable(_ node: SyntaxProtocol)\n        -> (type: String, name: String, signature: String)?\n    {\n        if let node = node as? VariableDeclSyntax {\n            let type = node.bindingSpecifier.trimmedDescription\n            let name = node.bindings.first?.pattern.trimmedDescription ?? \"\"\n            let sig = node.bindings.first?.initializer?.value.trimmedDescription ?? \"\"\n            return (type, name, sig)\n        }\n        return nil\n    }\n\n    func findTypeNameFromNode(_ node: SyntaxProtocol) -> String? {\n        switch node {\n        case let node as ClassDeclSyntax:\n            return node.name.text\n        case let node as StructDeclSyntax:\n            return node.name.text\n        case let node as EnumDeclSyntax:\n            return node.name.text\n        case let node as ActorDeclSyntax:\n            return node.name.text\n        case let node as ProtocolDeclSyntax:\n            return node.name.text\n        case let node as ExtensionDeclSyntax:\n            return node.extendedType.trimmedDescription\n        default:\n            return nil\n        }\n    }\n}\n\nextension CursorRange {\n    init(sourceRange: SourceRange) {\n        self.init(\n            start: .init(line: sourceRange.start.line - 1, character: sourceRange.start.column - 1),\n            end: .init(line: sourceRange.end.line - 1, character: sourceRange.end.column - 1)\n        )\n    }\n}\n\n// MARK: - Helper Types\n\nprotocol AttributeAndModifierApplicableSyntax {\n    var attributes: AttributeListSyntax { get }\n    var modifiers: DeclModifierListSyntax { get }\n}\n\nextension AttributeAndModifierApplicableSyntax {\n    func modifierAndAttributeText(_ extractText: (SyntaxProtocol) -> String) -> String {\n        let attributeTexts = attributes.map { attribute in\n            extractText(attribute)\n        }\n        let modifierTexts = modifiers.map { modifier in\n            extractText(modifier)\n        }\n        let prefix = (attributeTexts + modifierTexts).joined(separator: \" \")\n        return prefix\n    }\n}\n\nextension StructDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension ClassDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension EnumDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension ActorDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension MacroDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension MacroExpansionDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension ProtocolDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension ExtensionDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension FunctionDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension VariableDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension InitializerDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension DeinitializerDeclSyntax: AttributeAndModifierApplicableSyntax {}\nextension AccessorDeclSyntax: AttributeAndModifierApplicableSyntax {\n    var modifiers: SwiftSyntax.DeclModifierListSyntax { [] }\n}\n\nextension SubscriptDeclSyntax: AttributeAndModifierApplicableSyntax {}\n\nprotocol InheritanceClauseApplicableSyntax {\n    var inheritanceClause: InheritanceClauseSyntax? { get }\n}\n\nextension StructDeclSyntax: InheritanceClauseApplicableSyntax {}\nextension ClassDeclSyntax: InheritanceClauseApplicableSyntax {}\nextension EnumDeclSyntax: InheritanceClauseApplicableSyntax {}\nextension ActorDeclSyntax: InheritanceClauseApplicableSyntax {}\nextension ProtocolDeclSyntax: InheritanceClauseApplicableSyntax {}\nextension ExtensionDeclSyntax: InheritanceClauseApplicableSyntax {}\n\nextension InheritanceClauseApplicableSyntax {\n    func inheritanceClauseTexts(_ extractText: (SyntaxProtocol) -> String) -> String {\n        inheritanceClause?.inheritedTypes.map { clause in\n            extractText(clause).trimmingCharacters(in: [\",\"])\n        }.joined(separator: \", \") ?? \"\"\n    }\n}\n\nextension String {\n    func prefixedModifiers(_ text: String) -> String {\n        if text.isEmpty {\n            return self\n        }\n        return \"\\(text) \\(self)\"\n    }\n\n    func suffixedInheritance(_ text: String) -> String {\n        if text.isEmpty {\n            return self\n        }\n        return \"\\(self): \\(text)\"\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/Swift/SwiftScopeHierarchySyntaxVisitor.swift",
    "content": "import ASTParser\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport SwiftParser\nimport SwiftSyntax\n\nfinal class SwiftScopeHierarchySyntaxVisitor: SyntaxVisitor {\n    let tree: SyntaxProtocol\n    let code: String\n    let range: CursorRange\n    let rangeConverter: (SyntaxProtocol) -> CursorRange\n\n    var imports: [String] = []\n    private var _scopeHierarchy: [SyntaxProtocol] = []\n\n    /// The nodes containing the current range, sorted from inner to outer.\n    func findScopeHierarchy(_ node: some SyntaxProtocol) -> [SyntaxProtocol] {\n        walk(node)\n        return _scopeHierarchy.sorted { $0.position.utf8Offset > $1.position.utf8Offset }\n    }\n\n    /// The nodes containing the current range, sorted from inner to outer.\n    func findScopeHierarchy() -> [SyntaxProtocol] {\n        walk(tree)\n        return _scopeHierarchy.sorted { $0.position.utf8Offset > $1.position.utf8Offset }\n    }\n\n    init(\n        tree: SyntaxProtocol,\n        code: String,\n        range: CursorRange,\n        rangeConverter: @escaping (SyntaxProtocol) -> CursorRange\n    ) {\n        self.tree = tree\n        self.code = code\n        self.range = range\n        self.rangeConverter = rangeConverter\n        super.init(viewMode: .sourceAccurate)\n    }\n\n    func skipChildrenIfPossible(_ node: SyntaxProtocol) -> SyntaxVisitorContinueKind {\n        if _scopeHierarchy.count > 5 { return .skipChildren }\n        if !nodeContainsRange(node) { return .skipChildren }\n        return .visitChildren\n    }\n\n    func captureNodeIfPossible(_ node: SyntaxProtocol) -> SyntaxVisitorContinueKind {\n        if _scopeHierarchy.count > 5 { return .skipChildren }\n        if !nodeContainsRange(node) { return .skipChildren }\n        _scopeHierarchy.append(node)\n        return .visitChildren\n    }\n\n    func nodeContainsRange(_ node: SyntaxProtocol) -> Bool {\n        let cursorRange = rangeConverter(node)\n        return cursorRange.strictlyContains(range)\n    }\n\n    // skip if possible\n\n    override func visit(_ node: MemberBlockSyntax) -> SyntaxVisitorContinueKind {\n        skipChildrenIfPossible(node)\n    }\n\n    override func visit(_ node: MemberBlockItemSyntax) -> SyntaxVisitorContinueKind {\n        skipChildrenIfPossible(node)\n    }\n\n    // capture if possible\n\n    override func visit(_ node: ImportDeclSyntax) -> SyntaxVisitorContinueKind {\n        imports.append(node.path.trimmedDescription)\n        return .skipChildren\n    }\n\n    override func visit(_ node: StructDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: ClassDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: EnumDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: ActorDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: MacroDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: ProtocolDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: ExtensionDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: FunctionDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: SubscriptDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: ClosureExprSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: VariableDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: AccessorDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: InitializerDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: DeinitializerDeclSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: FunctionCallExprSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n\n    override func visit(_ node: SwitchCaseSyntax) -> SyntaxVisitorContinueKind {\n        captureNodeIfPossible(node)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/FocusedCodeFinder/UnknownLanguageFocusCodeFinder.swift",
    "content": "import Foundation\nimport Preferences\nimport SuggestionBasic\n\n/// Used when the language is not supported by the app\n/// or that the code is too long to be returned by a focused code finder.\npublic struct UnknownLanguageFocusedCodeFinder: FocusedCodeFinderType {\n    let proposedSearchRange: Int\n\n    public init(proposedSearchRange: Int) {\n        self.proposedSearchRange = proposedSearchRange\n    }\n\n    public func findFocusedCode(\n        in document: Document,\n        containingRange: CursorRange\n    ) -> CodeContext {\n        guard !document.lines.isEmpty else { return .empty }\n\n        // when user is not selecting any code.\n        if containingRange.start == containingRange.end {\n            // search up and down for up to `proposedSearchRange * 2 + 1` lines.\n            let lines = document.lines\n            let proposedLineCount = proposedSearchRange * 2 + 1\n            let startLineIndex = max(containingRange.start.line - proposedSearchRange, 0)\n            let endLineIndex = max(\n                startLineIndex,\n                min(startLineIndex + proposedLineCount - 1, lines.count - 1)\n            )\n\n            if lines.endIndex <= endLineIndex { return .empty }\n            \n            let focusedLines = lines[startLineIndex...endLineIndex]\n\n            let contextStartLine = max(startLineIndex - 5, 0)\n            let contextEndLine = min(endLineIndex + 5, lines.count - 1)\n            \n            let contextRange = CursorRange(\n                start: .init(line: contextStartLine, character: 0),\n                end: .init(line: contextEndLine, character: lines[contextEndLine].count)\n            )\n\n            return .init(\n                scope: .top,\n                contextRange: contextRange,\n                smallestContextRange: contextRange,\n                focusedRange: .init(\n                    start: .init(line: startLineIndex, character: 0),\n                    end: .init(line: endLineIndex, character: lines[endLineIndex].count)\n                ),\n                focusedCode: focusedLines.joined(),\n                imports: [],\n                includes: []\n            )\n        }\n\n        let startLine = max(containingRange.start.line, 0)\n        let endLine = min(containingRange.end.line, document.lines.count - 1)\n\n        if endLine < startLine { return .empty }\n\n        let focusedLines = document.lines[startLine...endLine]\n        let contextStartLine = max(startLine - 3, 0)\n        let contextEndLine = min(endLine + 3, document.lines.count - 1)\n        \n        let contextRange = CursorRange(\n            start: .init(line: contextStartLine, character: 0),\n            end: .init(\n                line: contextEndLine,\n                character: document.lines[contextEndLine].count\n            )\n        )\n\n        return CodeContext(\n            scope: .top,\n            contextRange: contextRange,\n            smallestContextRange: contextRange,\n            focusedRange: containingRange,\n            focusedCode: focusedLines.joined(),\n            imports: [],\n            includes: []\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/GitHubCopilotExtension.swift",
    "content": "import BuiltinExtension\nimport CopilotForXcodeKit\nimport Dependencies\nimport Foundation\nimport LanguageServerProtocol\nimport Logger\nimport Preferences\nimport Toast\nimport Workspace\n\npublic final class GitHubCopilotExtension: BuiltinExtension {\n    public var extensionIdentifier: String { \"com.github.copilot\" }\n\n    public let suggestionService: GitHubCopilotSuggestionService\n    public let chatService: GitHubCopilotChatService\n\n    private var extensionUsage = ExtensionUsage(\n        isSuggestionServiceInUse: false,\n        isChatServiceInUse: false\n    )\n    private var isLanguageServerInUse: Bool {\n        extensionUsage.isSuggestionServiceInUse || extensionUsage.isChatServiceInUse\n    }\n\n    @Dependency(\\.toastController) var toast\n\n    let workspacePool: WorkspacePool\n\n    let serviceLocator: ServiceLocatorType\n\n    public init(workspacePool: WorkspacePool) {\n        self.workspacePool = workspacePool\n        serviceLocator = ServiceLocator(workspacePool: workspacePool)\n        suggestionService = .init(serviceLocator: serviceLocator)\n        chatService = .init(serviceLocator: serviceLocator)\n    }\n\n    public func workspaceDidOpen(_: WorkspaceInfo) {}\n\n    public func workspaceDidClose(_: WorkspaceInfo) {}\n\n    public func workspace(_ workspace: WorkspaceInfo, didOpenDocumentAt documentURL: URL) {\n        guard isLanguageServerInUse else { return }\n        // check if file size is larger than 15MB, if so, return immediately\n        if let attrs = try? FileManager.default\n            .attributesOfItem(atPath: documentURL.path),\n            let fileSize = attrs[FileAttributeKey.size] as? UInt64,\n            fileSize > 15 * 1024 * 1024\n        { return }\n\n        Task {\n            do {\n                let content = try String(contentsOf: documentURL, encoding: .utf8)\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyOpenTextDocument(fileURL: documentURL, content: content)\n            } catch let error as ServerError {\n                let e = GitHubCopilotError.languageServerError(error)\n                Logger.gitHubCopilot.error(e.localizedDescription)\n                \n                switch error {\n                case .serverUnavailable, .serverError:\n                    toast.toast(content: e.localizedDescription, type: .error, duration: 10.0)\n                default:\n                    break\n                }\n            } catch {\n                Logger.gitHubCopilot.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(_ workspace: WorkspaceInfo, didSaveDocumentAt documentURL: URL) {\n        guard isLanguageServerInUse else { return }\n        Task {\n            do {\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifySaveTextDocument(fileURL: documentURL)\n            } catch {\n                Logger.gitHubCopilot.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(_ workspace: WorkspaceInfo, didCloseDocumentAt documentURL: URL) {\n        guard isLanguageServerInUse else { return }\n        Task {\n            do {\n                guard let service = await serviceLocator.getService(from: workspace) else { return }\n                try await service.notifyCloseTextDocument(fileURL: documentURL)\n            } catch {\n                Logger.gitHubCopilot.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func workspace(\n        _ workspace: WorkspaceInfo,\n        didUpdateDocumentAt documentURL: URL,\n        content: String?\n    ) {\n        guard isLanguageServerInUse else { return }\n        // check if file size is larger than 15MB, if so, return immediately\n        if let attrs = try? FileManager.default\n            .attributesOfItem(atPath: documentURL.path),\n            let fileSize = attrs[FileAttributeKey.size] as? UInt64,\n            fileSize > 15 * 1024 * 1024\n        { return }\n\n        Task {\n            guard let content else { return }\n            guard let service = await serviceLocator.getService(from: workspace) else { return }\n            do {\n                try await service.notifyChangeTextDocument(\n                    fileURL: documentURL,\n                    content: content,\n                    version: 0\n                )\n            } catch let error as ServerError {\n                switch error {\n                case .serverError(-32602, _, _): // parameter incorrect\n                    Logger.gitHubCopilot.error(error.localizedDescription)\n                    // Reopen document if it's not found in the language server\n                    self.workspace(workspace, didOpenDocumentAt: documentURL)\n                default:\n                    Logger.gitHubCopilot.error(error.localizedDescription)\n                }\n            } catch {\n                Logger.gitHubCopilot.error(error.localizedDescription)\n            }\n        }\n    }\n\n    public func extensionUsageDidChange(_ usage: ExtensionUsage) {\n        extensionUsage = usage\n        if !usage.isChatServiceInUse && !usage.isSuggestionServiceInUse {\n            terminate()\n        }\n    }\n\n    public func terminate() {\n        for workspace in workspacePool.workspaces.values {\n            guard let plugin = workspace.plugin(for: GitHubCopilotWorkspacePlugin.self)\n            else { continue }\n            plugin.terminate()\n        }\n    }\n}\n\nprotocol ServiceLocatorType {\n    func getService(from workspace: WorkspaceInfo) async -> GitHubCopilotService?\n}\n\nclass ServiceLocator: ServiceLocatorType {\n    let workspacePool: WorkspacePool\n\n    init(workspacePool: WorkspacePool) {\n        self.workspacePool = workspacePool\n    }\n\n    func getService(from workspace: WorkspaceInfo) async -> GitHubCopilotService? {\n        guard let workspace = workspacePool.workspaces[workspace.workspaceURL],\n              let plugin = workspace.plugin(for: GitHubCopilotWorkspacePlugin.self)\n        else { return nil }\n        return await plugin.gitHubCopilotService\n    }\n}\n\nextension GitHubCopilotExtension {\n    public struct Token: Codable {\n//        let codesearch: Bool\n        public let individual: Bool\n        public let endpoints: Endpoints\n        public let chat_enabled: Bool\n//        public let sku: String\n//        public  let copilotignore_enabled: Bool\n//        public  let limited_user_quotas: String?\n//        public let tracking_id: String\n//        public  let xcode: Bool\n//        public  let limited_user_reset_date: String?\n//        public  let telemetry: String\n//        public  let prompt_8k: Bool\n        public let token: String\n//        public  let nes_enabled: Bool\n//        public  let vsc_electron_fetcher_v2: Bool\n//        public  let code_review_enabled: Bool\n//        public  let annotations_enabled: Bool\n//        public  let chat_jetbrains_enabled: Bool\n//        public  let xcode_chat: Bool\n//        public  let refresh_in: Int\n//        public  let snippy_load_test_enabled: Bool\n//        public  let trigger_completion_after_accept: Bool\n        public let expires_at: Int\n//        public  let public_suggestions: String\n//        public  let code_quote_enabled: Bool\n\n        public struct Endpoints: Codable {\n            public let api: String\n            public let proxy: String\n            public let telemetry: String\n//            public let origin-tracker: String\n        }\n    }\n\n    struct AuthInfo: Codable {\n        public let user: String\n        public let oauth_token: String\n        public let githubAppId: String\n    }\n\n    static var authInfo: AuthInfo? {\n        guard let urls = try? GitHubCopilotBaseService.createFoldersIfNeeded()\n        else { return nil }\n        let path = urls.supportURL\n            .appendingPathComponent(\"undefined\")\n            .appendingPathComponent(\".config\")\n            .appendingPathComponent(\"github-copilot\")\n            .appendingPathComponent(\"apps.json\").path\n        guard FileManager.default.fileExists(atPath: path) else { return nil }\n\n        do {\n            let data = try Data(contentsOf: URL(fileURLWithPath: path))\n            let json = try JSONSerialization\n                .jsonObject(with: data, options: []) as? [String: [String: String]]\n            guard let firstEntry = json?.values.first else { return nil }\n            let jsonData = try JSONSerialization.data(withJSONObject: firstEntry, options: [])\n            return try JSONDecoder().decode(AuthInfo.self, from: jsonData)\n        } catch {\n            Logger.gitHubCopilot.error(error.localizedDescription)\n            return nil\n        }\n    }\n\n    @MainActor\n    static var cachedToken: Token?\n\n    public static func fetchToken() async throws -> Token {\n        guard let authToken = authInfo?.oauth_token\n        else { throw GitHubCopilotError.notLoggedIn }\n\n        let oldToken = await MainActor.run { cachedToken }\n        if let oldToken {\n            let expiresAt = Date(timeIntervalSince1970: TimeInterval(oldToken.expires_at))\n            if expiresAt > Date() {\n                return oldToken\n            }\n        }\n\n        let url = URL(string: \"https://api.github.com/copilot_internal/v2/token\")!\n        var request = URLRequest(url: url)\n        request.httpMethod = \"GET\"\n        request.setValue(\"token \\(authToken)\", forHTTPHeaderField: \"authorization\")\n        request.setValue(\"unknown-editor/0\", forHTTPHeaderField: \"editor-version\")\n        request.setValue(\"unknown-editor-plugin/0\", forHTTPHeaderField: \"editor-plugin-version\")\n        request.setValue(\"1.236.0\", forHTTPHeaderField: \"copilot-language-server-version\")\n        request.setValue(\"GithubCopilot/1.236.0\", forHTTPHeaderField: \"user-agent\")\n        request.setValue(\"*/*\", forHTTPHeaderField: \"accept\")\n        request.setValue(\"gzip,deflate,br\", forHTTPHeaderField: \"accept-encoding\")\n\n        do {\n            let (data, _) = try await URLSession.shared.data(for: request)\n            if let jsonString = String(data: data, encoding: .utf8) {\n                print(jsonString)\n            }\n            let newToken = try JSONDecoder().decode(Token.self, from: data)\n            await MainActor.run { cachedToken = newToken }\n            return newToken\n        } catch {\n            Logger.service.error(error.localizedDescription)\n            throw error\n        }\n    }\n\n    public static func fetchLLMModels() async throws -> [GitHubCopilotLLMModel] {\n        let token = try await GitHubCopilotExtension.fetchToken()\n        guard let endpoint = URL(string: token.endpoints.api + \"/models\") else {\n            throw CancellationError()\n        }\n        var request = URLRequest(url: endpoint)\n        request.setValue(\n            \"Copilot for Xcode/\\(Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"unknown\")\",\n            forHTTPHeaderField: \"Editor-Version\"\n        )\n        request.setValue(\"Bearer \\(token.token)\", forHTTPHeaderField: \"Authorization\")\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        request.setValue(\"vscode-chat\", forHTTPHeaderField: \"Copilot-Integration-Id\")\n        request.setValue(\"2023-07-07\", forHTTPHeaderField: \"X-Github-Api-Version\")\n\n        let (data, response) = try await URLSession.shared.data(for: request)\n\n        guard let response = response as? HTTPURLResponse else {\n            throw CancellationError()\n        }\n\n        guard response.statusCode == 200 else {\n            throw CancellationError()\n        }\n\n        struct Model: Decodable {\n            struct Limit: Decodable {\n                var max_context_window_tokens: Int\n            }\n\n            struct Capability: Decodable {\n                var type: String?\n                var family: String?\n                var limit: Limit?\n            }\n\n            var id: String\n            var capabilities: Capability\n        }\n\n        struct Body: Decodable {\n            var data: [Model]\n        }\n\n        let models = try JSONDecoder().decode(Body.self, from: data)\n            .data\n            .filter {\n                $0.capabilities.type == \"chat\"\n            }\n            .map {\n                GitHubCopilotLLMModel(\n                    modelId: $0.id,\n                    familyName: $0.capabilities.family ?? \"\",\n                    contextWindow: $0.capabilities.limit?.max_context_window_tokens ?? 0\n                )\n            }\n        return models\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/GitHubCopilotWorkspacePlugin.swift",
    "content": "import Dependencies\nimport Foundation\nimport Logger\nimport Toast\nimport Workspace\n\npublic final class GitHubCopilotWorkspacePlugin: WorkspacePlugin {\n    enum Error: Swift.Error, LocalizedError {\n        case gitHubCopilotLanguageServerMustBeUpdated\n        var errorDescription: String? {\n            switch self {\n            case .gitHubCopilotLanguageServerMustBeUpdated:\n                return \"GitHub Copilot language server must be updated. Update will start immediately. \\nIf it fails, please go to Host app > Service > GitHub Copilot and check if there is an update available.\"\n            }\n        }\n    }\n\n    @Dependency(\\.toast) var toast\n\n    let installationManager = GitHubCopilotInstallationManager()\n    private var _gitHubCopilotService: GitHubCopilotService?\n    @GitHubCopilotSuggestionActor\n    var gitHubCopilotService: GitHubCopilotService? {\n        if let service = _gitHubCopilotService { return service }\n        do {\n            return try createGitHubCopilotService()\n        } catch let error as Error {\n            toast(error.localizedDescription, .warning)\n            Task {\n                await updateLanguageServerIfPossible()\n            }\n            return nil\n        } catch {\n            Logger.gitHubCopilot.error(\"Failed to create GitHub Copilot service: \\(error)\")\n            toast(\n                \"Failed to start GitHub Copilot language server: \\(error.localizedDescription)\",\n                .error\n            )\n            return nil\n        }\n    }\n\n    deinit {\n        if let _gitHubCopilotService {\n            Task { await _gitHubCopilotService.terminate() }\n        }\n    }\n\n    @GitHubCopilotSuggestionActor\n    func createGitHubCopilotService() throws -> GitHubCopilotService {\n        if case .outdated(_, _, true) = installationManager.checkInstallation() {\n            throw Error.gitHubCopilotLanguageServerMustBeUpdated\n        }\n        let newService = try GitHubCopilotService(projectRootURL: projectRootURL)\n        _gitHubCopilotService = newService\n        newService.localProcessServer?.terminationHandler = { [weak self] in\n            Logger.gitHubCopilot.error(\"GitHub Copilot language server terminated\")\n            self?.terminate()\n        }\n        Task {\n            try await Task.sleep(nanoseconds: 1_000_000_000)\n            finishLaunchingService()\n        }\n        return newService\n    }\n\n    @GitHubCopilotSuggestionActor\n    func finishLaunchingService() {\n        guard let workspace, let _gitHubCopilotService else { return }\n        Task {\n            for (_, filespace) in workspace.filespaces {\n                let documentURL = filespace.fileURL\n                guard let content = try? String(contentsOf: documentURL) else { continue }\n                try? await _gitHubCopilotService.notifyOpenTextDocument(\n                    fileURL: documentURL,\n                    content: content\n                )\n            }\n        }\n    }\n\n    @GitHubCopilotSuggestionActor\n    func updateLanguageServerIfPossible() async {\n        guard !GitHubCopilotInstallationManager.isInstalling else { return }\n        let events = installationManager.installLatestVersion()\n        do {\n            for try await event in events {\n                switch event {\n                case .downloading:\n                    toast(\"Updating GitHub Copilot language server\", .info)\n                case .uninstalling:\n                    break\n                case .decompressing:\n                    break\n                case .done:\n                    toast(\"Finished updating GitHub Copilot language server\", .info)\n                }\n            }\n        } catch GitHubCopilotInstallationManager.Error.isInstalling {\n            return\n        } catch {\n            toast(error.localizedDescription, .error)\n        }\n    }\n\n    func terminate() {\n        _gitHubCopilotService = nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/CopilotLocalProcessServer.swift",
    "content": "import Foundation\nimport JSONRPC\nimport LanguageClient\nimport LanguageServerProtocol\nimport Logger\nimport ProcessEnv\n\n/// A clone of the `LocalProcessServer`.\n/// We need it because the original one does not allow us to handle custom notifications.\nclass CopilotLocalProcessServer {\n    private let transport: StdioDataTransport\n    private let customTransport: CustomDataTransport\n    private let process: Process\n    private var wrappedServer: CustomJSONRPCLanguageServer?\n    var terminationHandler: (() -> Void)?\n    @MainActor var ongoingCompletionRequestIDs: [JSONId] = []\n    @MainActor var ongoingConversationRequestIDs: [String: JSONId] = [:]\n\n    public convenience init(\n        path: String,\n        arguments: [String],\n        environment: [String: String]? = nil,\n        serverNotificationHandler: ServerNotificationHandler\n    ) {\n        let params = Process.ExecutionParameters(\n            path: path,\n            arguments: arguments,\n            environment: environment\n        )\n\n        self.init(executionParameters: params, serverNotificationHandler: serverNotificationHandler)\n    }\n\n    init(\n        executionParameters parameters: Process.ExecutionParameters,\n        serverNotificationHandler: ServerNotificationHandler\n    ) {\n        transport = StdioDataTransport()\n        let framing = SeperatedHTTPHeaderMessageFraming()\n        let messageTransport = MessageTransport(\n            dataTransport: transport,\n            messageProtocol: framing\n        )\n        customTransport = CustomDataTransport(nextTransport: messageTransport)\n        wrappedServer = CustomJSONRPCLanguageServer(\n            dataTransport: customTransport,\n            serverNotificationHandler: serverNotificationHandler\n        )\n\n        process = Process()\n\n        // Because the implementation of LanguageClient is so closed,\n        // we need to get the request IDs from a custom transport before the data\n        // is written to the language server.\n        customTransport.onWriteRequest = { [weak self] request in\n            if request.method == \"getCompletionsCycling\"\n                || request.method == \"textDocument/inlineCompletion\"\n            {\n                Task { @MainActor [weak self] in\n                    self?.ongoingCompletionRequestIDs.append(request.id)\n                }\n            } else if request.method == \"conversation/create\" {\n                Task { @MainActor [weak self] in\n                    if let paramsData = try? JSONEncoder().encode(request.params) {\n                        do {\n                            let params = try JSONDecoder().decode(\n                                GitHubCopilotRequest.ConversationCreate.RequestBody.self,\n                                from: paramsData\n                            )\n                            self?.ongoingConversationRequestIDs[params.workDoneToken] = request.id\n                        } catch {\n                            // Handle decoding error\n                            print(\"Error decoding ConversationCreateParams: \\(error)\")\n                        }\n                    }\n                }\n            }\n        }\n\n        process.standardInput = transport.stdinPipe\n        process.standardOutput = transport.stdoutPipe\n        process.standardError = transport.stderrPipe\n\n        process.parameters = parameters\n\n        process.terminationHandler = { [unowned self] task in\n            self.processTerminated(task)\n        }\n\n        process.launch()\n    }\n\n    deinit {\n        process.terminationHandler = nil\n        process.terminate()\n        transport.close()\n    }\n\n    private func processTerminated(_: Process) {\n        transport.close()\n\n        // releasing the server here will short-circuit any pending requests,\n        // which might otherwise take a while to time out, if ever.\n        wrappedServer = nil\n        terminationHandler?()\n    }\n\n    var logMessages: Bool {\n        get { return wrappedServer?.logMessages ?? false }\n        set { wrappedServer?.logMessages = newValue }\n    }\n\n    func terminate() {\n        process.terminate()\n    }\n}\n\nextension CopilotLocalProcessServer: LanguageServerProtocol.Server {\n    public var requestHandler: RequestHandler? {\n        get { return wrappedServer?.requestHandler }\n        set { wrappedServer?.requestHandler = newValue }\n    }\n\n    @available(*, deprecated, message: \"Use `ServerNotificationHandler` instead\")\n    public var notificationHandler: NotificationHandler? {\n        get { wrappedServer?.notificationHandler }\n        set { wrappedServer?.notificationHandler = newValue }\n    }\n\n    public func sendNotification(\n        _ notif: ClientNotification,\n        completionHandler: @escaping (ServerError?) -> Void\n    ) {\n        guard let server = wrappedServer, process.isRunning else {\n            completionHandler(.serverUnavailable)\n            return\n        }\n\n        server.sendNotification(notif, completionHandler: completionHandler)\n    }\n\n    /// Cancel ongoing completion requests.\n    public func cancelOngoingTasks() async {\n        guard let _ = wrappedServer, process.isRunning else {\n            return\n        }\n\n        let task = Task { @MainActor in\n            for id in self.ongoingCompletionRequestIDs {\n                await cancelTask(id)\n            }\n            self.ongoingCompletionRequestIDs = []\n        }\n\n        await task.value\n    }\n\n    public func cancelOngoingTask(workDoneToken: String) async {\n        let task = Task { @MainActor in\n            guard let id = ongoingConversationRequestIDs[workDoneToken] else { return }\n            await cancelTask(id)\n        }\n        await task.value\n    }\n\n    public func cancelTask(_ id: JSONId) async {\n        guard let server = wrappedServer, process.isRunning else {\n            return\n        }\n\n        switch id {\n        case let .numericId(id):\n            try? await server.sendNotification(.protocolCancelRequest(.init(id: id)))\n        case let .stringId(id):\n            try? await server.sendNotification(.protocolCancelRequest(.init(id: id)))\n        }\n    }\n\n    public func sendRequest<Response: Codable>(\n        _ request: ClientRequest,\n        completionHandler: @escaping (ServerResult<Response>) -> Void\n    ) {\n        guard let server = wrappedServer, process.isRunning else {\n            completionHandler(.failure(.serverUnavailable))\n            return\n        }\n\n        server.sendRequest(request, completionHandler: completionHandler)\n    }\n}\n\nfinal class CustomJSONRPCLanguageServer: Server {\n    let internalServer: JSONRPCLanguageServer\n\n    typealias ProtocolResponse<T: Codable> = ProtocolTransport.ResponseResult<T>\n\n    private let protocolTransport: ProtocolTransport\n\n    var requestHandler: RequestHandler?\n    var serverNotificationHandler: ServerNotificationHandler\n\n    @available(*, deprecated, message: \"Use `serverNotificationHandler` instead.\")\n    var notificationHandler: NotificationHandler? {\n        get { nil }\n        set {}\n    }\n\n    private var outOfBandError: Error?\n\n    init(\n        protocolTransport: ProtocolTransport,\n        serverNotificationHandler: ServerNotificationHandler\n    ) {\n        self.serverNotificationHandler = serverNotificationHandler\n        self.protocolTransport = protocolTransport\n        internalServer = JSONRPCLanguageServer(protocolTransport: protocolTransport)\n\n        let previousRequestHandler = protocolTransport.requestHandler\n\n        protocolTransport.requestHandler = { [weak self] in\n            guard let self else { return }\n            if !self.handleRequest($0, data: $1, callback: $2) {\n                previousRequestHandler?($0, $1, $2)\n            }\n        }\n        protocolTransport.notificationHandler = { [weak self] in\n            guard let self else { return }\n            self.handleNotification($0, data: $1, block: $2)\n        }\n    }\n\n    convenience init(\n        dataTransport: DataTransport,\n        serverNotificationHandler: ServerNotificationHandler\n    ) {\n        self.init(\n            protocolTransport: ProtocolTransport(dataTransport: dataTransport),\n            serverNotificationHandler: serverNotificationHandler\n        )\n    }\n\n    deinit {\n        protocolTransport.requestHandler = nil\n        protocolTransport.notificationHandler = nil\n    }\n\n    var logMessages: Bool {\n        get { return internalServer.logMessages }\n        set { internalServer.logMessages = newValue }\n    }\n}\n\nextension CustomJSONRPCLanguageServer {\n    private func handleNotification(\n        _ anyNotification: AnyJSONRPCNotification,\n        data: Data,\n        block: @escaping (Error?) -> Void\n    ) {\n        Task {\n            do {\n                try await serverNotificationHandler.handleNotification(\n                    anyNotification,\n                    data: data\n                )\n                block(nil)\n            } catch {\n                block(error)\n            }\n        }\n    }\n\n    func sendNotification(\n        _ notif: ClientNotification,\n        completionHandler: @escaping (ServerError?) -> Void\n    ) {\n        internalServer.sendNotification(notif, completionHandler: completionHandler)\n    }\n}\n\nextension CustomJSONRPCLanguageServer {\n    private func handleRequest(\n        _ request: AnyJSONRPCRequest,\n        data: Data,\n        callback: @escaping (AnyJSONRPCResponse) -> Void\n    ) -> Bool {\n        return false\n    }\n}\n\nextension CustomJSONRPCLanguageServer {\n    public func sendRequest<Response: Codable>(\n        _ request: ClientRequest,\n        completionHandler: @escaping (ServerResult<Response>) -> Void\n    ) {\n        internalServer.sendRequest(request, completionHandler: completionHandler)\n    }\n}\n\n@GitHubCopilotSuggestionActor\nfinal class ServerNotificationHandler {\n    typealias Handler = (\n        _ anyNotification: AnyJSONRPCNotification,\n        _ data: Data\n    ) async throws -> Bool\n\n    var handlers = [AnyHashable: Handler]()\n    nonisolated init() {}\n\n    func handleNotification(\n        _ anyNotification: AnyJSONRPCNotification,\n        data: Data\n    ) async throws {\n        for handler in handlers.values {\n            do {\n                let handled = try await handler(anyNotification, data)\n                if handled {\n                    return\n                }\n            } catch {\n                throw ServerError.notificationDispatchFailed(error)\n            }\n        }\n\n        let methodName = anyNotification.method\n        let debugDescription = {\n            if let params = anyNotification.params {\n                let encoder = JSONEncoder()\n                encoder.outputFormatting = .prettyPrinted\n                if let jsonData = try? encoder.encode(params),\n                   let text = String(data: jsonData, encoding: .utf8)\n                {\n                    return text\n                }\n            }\n            return \"N/A\"\n        }()\n        switch methodName {\n        case \"window/logMessage\":\n            if UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog) {\n                Logger.gitHubCopilot\n                    .info(\"\\(anyNotification.method): \\(debugDescription)\")\n            }\n        case \"LogMessage\":\n            if UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog) {\n                Logger.gitHubCopilot\n                    .info(\"\\(anyNotification.method): \\(debugDescription)\")\n            }\n        case \"statusNotification\":\n            if UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog) {\n                Logger.gitHubCopilot\n                    .info(\"\\(anyNotification.method): \\(debugDescription)\")\n            }\n        case \"featureFlagsNotification\":\n            if UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog) {\n                Logger.gitHubCopilot\n                    .info(\"\\(anyNotification.method): \\(debugDescription)\")\n            }\n        case \"conversation/preconditionsNotification\":\n            if UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog) {\n                Logger.gitHubCopilot\n                    .info(\"\\(anyNotification.method): \\(debugDescription)\")\n            }\n        case \"didChangeStatus\":\n            Logger.gitHubCopilot.info(\"Did change status: \\(debugDescription)\")\n        default:\n            throw ServerError.handlerUnavailable(methodName)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/CustomStdioTransport.swift",
    "content": "import Foundation\nimport JSONRPC\nimport os.log\n\npublic class CustomDataTransport: DataTransport {\n    let nextTransport: DataTransport\n    \n    var onWriteRequest: (JSONRPCRequest<JSONValue>) -> Void = { _ in }\n    \n    init(nextTransport: DataTransport) {\n        self.nextTransport = nextTransport\n    }\n    \n    public func write(_ data: Data) {\n        if let request = try? JSONDecoder().decode(JSONRPCRequest<JSONValue>.self, from: data) {\n            onWriteRequest(request)\n        }\n        \n        nextTransport.write(data)\n    }\n    \n    public func setReaderHandler(_ handler: @escaping ReadHandler) {\n        nextTransport.setReaderHandler(handler)\n    }\n    \n    public func close() {\n        nextTransport.close()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotAccountStatus.swift",
    "content": "import Foundation\n\npublic enum GitHubCopilotAccountStatus: String, Codable, CustomStringConvertible {\n    case alreadySignedIn = \"AlreadySignedIn\"\n    case maybeOk = \"MaybeOk\"\n    case notAuthorized = \"NotAuthorized\"\n    case notSignedIn = \"NotSignedIn\"\n    case ok = \"OK\"\n\n    public var description: String {\n        switch self {\n        case .alreadySignedIn:\n            return \"Already Signed In\"\n        case .maybeOk:\n            return \"Maybe OK\"\n        case .notAuthorized:\n            return \"Not Authorized\"\n        case .notSignedIn:\n            return \"Not Signed In\"\n        case .ok:\n            return \"OK\"\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotInstallationManager.swift",
    "content": "import Foundation\nimport Terminal\n\npublic struct GitHubCopilotInstallationManager {\n    @GitHubCopilotSuggestionActor\n    public private(set) static var isInstalling = false\n\n    static var downloadURL: URL {\n        let commitHash = \"f89e977c87180519ba3b942200e3d05b17b1e2fc\"\n        let link = \"https://github.com/github/copilot.vim/archive/\\(commitHash).zip\"\n        return URL(string: link)!\n    }\n\n    /// The GitHub's version has quite a lot of changes about `watchedFiles` since the following\n    /// commit.\n    /// https://github.com/github/CopilotForXcode/commit/a50045aa3ab3b7d532cadf40c4c10bed32f81169#diff-678798cf677bcd1ce276809cfccd33da9ff594b1b0c557180210a4ed2bd27ffa\n    static let latestSupportedVersion = \"1.57.0\"\n    static let minimumSupportedVersion = \"1.32.0\"\n\n    public init() {}\n\n    public enum InstallationStatus {\n        case notInstalled\n        case installed(String)\n        case outdated(current: String, latest: String, mandatory: Bool)\n        case unsupported(current: String, latest: String)\n    }\n\n    public func checkInstallation() -> InstallationStatus {\n        guard let urls = try? GitHubCopilotBaseService.createFoldersIfNeeded()\n        else { return .notInstalled }\n        let executableFolderURL = urls.executableURL\n        let binaryURL = executableFolderURL.appendingPathComponent(\"copilot\")\n        let versionFileURL = executableFolderURL.appendingPathComponent(\"version\")\n\n        if !FileManager.default.fileExists(atPath: binaryURL.path) {\n            return .notInstalled\n        }\n\n        if FileManager.default.fileExists(atPath: versionFileURL.path),\n           let versionData = try? Data(contentsOf: versionFileURL),\n           let version = String(data: versionData, encoding: .utf8)\n        {\n            switch version.compare(Self.latestSupportedVersion, options: .numeric) {\n            case .orderedAscending:\n                switch version.compare(Self.minimumSupportedVersion) {\n                case .orderedAscending:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: true\n                    )\n                case .orderedSame:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: false\n                    )\n                case .orderedDescending:\n                    return .outdated(\n                        current: version,\n                        latest: Self.latestSupportedVersion,\n                        mandatory: false\n                    )\n                }\n            case .orderedSame:\n                return .installed(version)\n            case .orderedDescending:\n                return .unsupported(current: version, latest: Self.latestSupportedVersion)\n            }\n        }\n\n        return .outdated(current: \"Unknown\", latest: Self.latestSupportedVersion, mandatory: false)\n    }\n\n    public enum InstallationStep {\n        case downloading\n        case uninstalling\n        case decompressing\n        case done\n    }\n\n    public enum Error: Swift.Error, LocalizedError {\n        case isInstalling\n        case failedToFindLanguageServer\n        case failedToInstallLanguageServer\n\n        public var errorDescription: String? {\n            switch self {\n            case .isInstalling:\n                return \"Language server is installing.\"\n            case .failedToFindLanguageServer:\n                return \"Failed to find language server. Please open an issue on GitHub.\"\n            case .failedToInstallLanguageServer:\n                return \"Failed to install language server. Please open an issue on GitHub.\"\n            }\n        }\n    }\n\n    public func installLatestVersion() -> AsyncThrowingStream<InstallationStep, Swift.Error> {\n        AsyncThrowingStream<InstallationStep, Swift.Error> { continuation in\n            Task { @GitHubCopilotSuggestionActor in\n                guard !GitHubCopilotInstallationManager.isInstalling else {\n                    continuation.finish(throwing: Error.isInstalling)\n                    return\n                }\n                GitHubCopilotInstallationManager.isInstalling = true\n                defer { GitHubCopilotInstallationManager.isInstalling = false }\n                do {\n                    continuation.yield(.downloading)\n                    let urls = try GitHubCopilotBaseService.createFoldersIfNeeded()\n\n                    // download\n                    let (fileURL, _) = try await URLSession.shared.download(from: Self.downloadURL)\n                    let targetURL = urls.executableURL.appendingPathComponent(\"archive\")\n                        .appendingPathExtension(\"zip\")\n                    try FileManager.default.copyItem(at: fileURL, to: targetURL)\n                    defer { try? FileManager.default.removeItem(at: targetURL) }\n\n                    // uninstall\n                    continuation.yield(.uninstalling)\n                    try await uninstall()\n\n                    // decompress\n                    continuation.yield(.decompressing)\n                    let terminal = Terminal()\n\n                    _ = try await terminal.runCommand(\n                        \"/usr/bin/unzip\",\n                        arguments: [targetURL.path],\n                        currentDirectoryURL: urls.executableURL,\n                        environment: [:]\n                    )\n\n                    let contentURLs = try FileManager.default.contentsOfDirectory(\n                        at: urls.executableURL,\n                        includingPropertiesForKeys: nil,\n                        options: []\n                    )\n\n                    defer {\n                        for url in contentURLs {\n                            try? FileManager.default.removeItem(at: url)\n                        }\n                    }\n\n                    guard let gitFolderURL = contentURLs\n                        .first(where: { $0.lastPathComponent.hasPrefix(\"copilot.vim\") })\n                    else {\n                        continuation.finish(throwing: Error.failedToInstallLanguageServer)\n                        return\n                    }\n\n                    let lspURL = {\n                        let caseA = gitFolderURL.appendingPathComponent(\"dist\")\n                        if FileManager.default.fileExists(atPath: caseA.path) {\n                            return caseA\n                        }\n                        return gitFolderURL\n                            .appendingPathComponent(\"copilot-language-server\")\n                            .appendingPathComponent(\"dist\")\n                    }()\n                    let copilotURL = urls.executableURL.appendingPathComponent(\"copilot\")\n\n                    if !FileManager.default.fileExists(atPath: copilotURL.path) {\n                        try FileManager.default.createDirectory(\n                            at: copilotURL,\n                            withIntermediateDirectories: true,\n                            attributes: nil\n                        )\n                    }\n\n                    let installationURL = copilotURL.appendingPathComponent(\"dist\")\n                    try FileManager.default.copyItem(at: lspURL, to: installationURL)\n\n                    // update permission 755\n                    try FileManager.default.setAttributes(\n                        [.posixPermissions: 0o755],\n                        ofItemAtPath: installationURL.path\n                    )\n\n                    // create version file\n                    let data = Self.latestSupportedVersion.data(using: .utf8)\n                    FileManager.default.createFile(\n                        atPath: urls.executableURL.appendingPathComponent(\"version\").path,\n                        contents: data\n                    )\n\n                    continuation.yield(.done)\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n    }\n\n    public func uninstall() async throws {\n        guard let urls = try? GitHubCopilotBaseService.createFoldersIfNeeded()\n        else { return }\n        let executableFolderURL = urls.executableURL\n        let binaryURL = executableFolderURL.appendingPathComponent(\"copilot\")\n        let versionFileURL = executableFolderURL.appendingPathComponent(\"version\")\n        if FileManager.default.fileExists(atPath: binaryURL.path) {\n            try FileManager.default.removeItem(at: binaryURL)\n        }\n        if FileManager.default.fileExists(atPath: versionFileURL.path) {\n            try FileManager.default.removeItem(at: versionFileURL)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotRequest.swift",
    "content": "import Foundation\nimport JSONRPC\nimport LanguageServerProtocol\nimport SuggestionBasic\nimport XcodeInspector\n\nstruct GitHubCopilotDoc: Codable {\n    var source: String\n    var tabSize: Int\n    var indentSize: Int\n    var insertSpaces: Bool\n    var path: String\n    var uri: String\n    var relativePath: String\n    var languageId: CodeLanguage\n    var position: Position\n    var version: Int = 0\n}\n\nprotocol GitHubCopilotRequestType {\n    associatedtype Response: Codable\n    var request: ClientRequest { get }\n}\n\npublic struct GitHubCopilotCodeSuggestion: Codable, Equatable {\n    public init(\n        text: String,\n        position: CursorPosition,\n        uuid: String,\n        range: CursorRange,\n        displayText: String\n    ) {\n        self.text = text\n        self.position = position\n        self.uuid = uuid\n        self.range = range\n        self.displayText = displayText\n    }\n\n    /// The new code to be inserted and the original code on the first line.\n    public var text: String\n    /// The position of the cursor before generating the completion.\n    public var position: CursorPosition\n    /// An id.\n    public var uuid: String\n    /// The range of the original code that should be replaced.\n    public var range: CursorRange\n    /// The new code to be inserted.\n    public var displayText: String\n}\n\nenum GitHubCopilotChatSource: String, Codable {\n    case panel\n    case inline\n}\n\nenum GitHubCopilotRequest {\n    struct SetEditorInfo: GitHubCopilotRequestType {\n        let xcodeVersion: String\n\n        struct Response: Codable {}\n\n        var networkProxy: JSONValue? {\n            let host = UserDefaults.shared.value(for: \\.gitHubCopilotProxyHost)\n            if host.isEmpty { return nil }\n            var port = UserDefaults.shared.value(for: \\.gitHubCopilotProxyPort)\n            if port.isEmpty { port = \"80\" }\n            let username = UserDefaults.shared.value(for: \\.gitHubCopilotProxyUsername)\n            if username.isEmpty {\n                return .hash([\n                    \"host\": .string(host),\n                    \"port\": .number(Double(Int(port) ?? 80)),\n                    \"rejectUnauthorized\": .bool(UserDefaults.shared\n                        .value(for: \\.gitHubCopilotUseStrictSSL)),\n                ])\n            } else {\n                return .hash([\n                    \"host\": .string(host),\n                    \"port\": .number(Double(Int(port) ?? 80)),\n                    \"rejectUnauthorized\": .bool(UserDefaults.shared\n                        .value(for: \\.gitHubCopilotUseStrictSSL)),\n                    \"username\": .string(username),\n                    \"password\": .string(UserDefaults.shared\n                        .value(for: \\.gitHubCopilotProxyPassword)),\n\n                ])\n            }\n        }\n\n        var http: JSONValue? {\n            var dict: [String: JSONValue] = [:]\n            let host = UserDefaults.shared.value(for: \\.gitHubCopilotProxyHost)\n            if host.isEmpty { return nil }\n            var port = UserDefaults.shared.value(for: \\.gitHubCopilotProxyPort)\n            if port.isEmpty { port = \"80\" }\n            let username = UserDefaults.shared.value(for: \\.gitHubCopilotProxyUsername)\n            let password = UserDefaults.shared.value(for: \\.gitHubCopilotProxyPassword)\n            let strictSSL = UserDefaults.shared.value(for: \\.gitHubCopilotUseStrictSSL)\n\n            let url = if !username.isEmpty {\n                \"http://\\(username):\\(password)@\\(host):\\(port)\"\n            } else {\n                \"http://\\(host):\\(port)\"\n            }\n\n            dict[\"proxy\"] = .string(url)\n            dict[\"proxyStrictSSL\"] = .bool(strictSSL)\n\n            if dict.isEmpty { return nil }\n\n            return .hash(dict)\n        }\n\n        var editorConfiguration: JSONValue? {\n            var dict: [String: JSONValue] = [:]\n            dict[\"http\"] = http\n\n            let enterpriseURI = UserDefaults.shared.value(for: \\.gitHubCopilotEnterpriseURI)\n            if !enterpriseURI.isEmpty {\n                dict[\"github-enterprise\"] = .hash([\n                    \"uri\": .string(enterpriseURI),\n                ])\n            }\n\n            if dict.isEmpty { return nil }\n            return .hash(dict)\n        }\n\n        var authProvider: JSONValue? {\n            var dict: [String: JSONValue] = [:]\n            let enterpriseURI = UserDefaults.shared.value(for: \\.gitHubCopilotEnterpriseURI)\n            if !enterpriseURI.isEmpty {\n                dict[\"url\"] = .string(enterpriseURI)\n            }\n\n            if dict.isEmpty { return nil }\n            return .hash(dict)\n        }\n\n        var request: ClientRequest {\n            let pretendToBeVSCode = UserDefaults.shared\n                .value(for: \\.gitHubCopilotPretendIDEToBeVSCode)\n            var dict: [String: JSONValue] = [\n                \"editorInfo\": pretendToBeVSCode ? .hash([\n                    \"name\": \"vscode\",\n                    \"version\": \"1.99.3\",\n                ]) : .hash([\n                    \"name\": \"Xcode\",\n                    \"version\": .string(xcodeVersion),\n                ]),\n                \"editorPluginInfo\": .hash([\n                    \"name\": \"Copilot for Xcode\",\n                    \"version\": .string(Bundle.main\n                        .infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"\"),\n                ]),\n            ]\n\n            dict[\"editorConfiguration\"] = editorConfiguration\n            dict[\"authProvider\"] = authProvider\n            dict[\"networkProxy\"] = networkProxy\n\n            return .custom(\"setEditorInfo\", .hash(dict))\n        }\n    }\n\n    struct GetVersion: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var version: String\n        }\n\n        var request: ClientRequest {\n            .custom(\"getVersion\", .hash([:]))\n        }\n    }\n\n    struct CheckStatus: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var status: GitHubCopilotAccountStatus\n        }\n\n        var request: ClientRequest {\n            .custom(\"checkStatus\", .hash([:]))\n        }\n    }\n\n    struct SignInInitiate: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var verificationUri: String\n            var status: String\n            var userCode: String\n            var expiresIn: Int\n            var interval: Int\n        }\n\n        var request: ClientRequest {\n            .custom(\"signInInitiate\", .hash([:]))\n        }\n    }\n\n    struct SignInConfirm: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var status: GitHubCopilotAccountStatus\n            var user: String\n        }\n\n        var userCode: String\n\n        var request: ClientRequest {\n            .custom(\"signInConfirm\", .hash([\n                \"userCode\": .string(userCode),\n            ]))\n        }\n    }\n\n    struct SignOut: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var status: GitHubCopilotAccountStatus\n        }\n\n        var request: ClientRequest {\n            .custom(\"signOut\", .hash([:]))\n        }\n    }\n\n    struct GetCompletions: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var completions: [GitHubCopilotCodeSuggestion]\n        }\n\n        var doc: GitHubCopilotDoc\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(doc)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"getCompletions\", .hash([\n                \"doc\": dict,\n            ]))\n        }\n    }\n\n    struct GetCompletionsCycling: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var completions: [GitHubCopilotCodeSuggestion]\n        }\n\n        var doc: GitHubCopilotDoc\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(doc)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"getCompletionsCycling\", .hash([\n                \"doc\": dict,\n            ]))\n        }\n    }\n\n    struct InlineCompletion: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var items: [InlineCompletionItem]\n        }\n\n        struct InlineCompletionItem: Codable {\n            var insertText: String\n            var filterText: String?\n            var range: Range?\n            var command: Command?\n\n            struct Range: Codable {\n                var start: Position\n                var end: Position\n            }\n\n            struct Command: Codable {\n                var title: String\n                var command: String\n                var arguments: [String]?\n            }\n        }\n\n        var doc: Input\n\n        struct Input: Codable {\n            var textDocument: _TextDocument; struct _TextDocument: Codable {\n                var uri: String\n                var version: Int\n            }\n\n            var position: Position\n            var formattingOptions: FormattingOptions\n            var context: _Context; struct _Context: Codable {\n                enum TriggerKind: Int, Codable {\n                    case invoked = 1\n                    case automatic = 2\n                }\n\n                var triggerKind: TriggerKind\n            }\n        }\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(doc)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"textDocument/inlineCompletion\", dict)\n        }\n    }\n\n    struct GetPanelCompletions: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var completions: [GitHubCopilotCodeSuggestion]\n        }\n\n        var doc: GitHubCopilotDoc\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(doc)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"getPanelCompletions\", .hash([\n                \"doc\": dict,\n            ]))\n        }\n    }\n\n    struct NotifyAccepted: GitHubCopilotRequestType {\n        struct Response: Codable {}\n\n        var completionUUID: String\n\n        var request: ClientRequest {\n            .custom(\"notifyAccepted\", .hash([\n                \"uuid\": .string(completionUUID),\n            ]))\n        }\n    }\n\n    struct NotifyRejected: GitHubCopilotRequestType {\n        struct Response: Codable {}\n\n        var completionUUIDs: [String]\n\n        var request: ClientRequest {\n            .custom(\"notifyRejected\", .hash([\n                \"uuids\": .array(completionUUIDs.map(JSONValue.string)),\n            ]))\n        }\n    }\n\n    struct ConversationCreate: GitHubCopilotRequestType {\n        struct Response: Codable {\n            var conversationId: String\n            var turnId: String\n        }\n\n        struct RequestBody: Codable {\n            public struct Reference: Codable, Equatable, Hashable {\n                public var type: String = \"file\"\n                public let uri: String\n                public let position: Position?\n                public let visibleRange: SuggestionBasic.CursorRange?\n                public let selection: SuggestionBasic.CursorRange?\n                public let openedAt: String?\n                public let activeAt: String?\n            }\n\n            enum ConversationSource: String, Codable {\n                case panel, inline\n            }\n\n            enum ConversationMode: String, Codable {\n                case agent = \"Agent\"\n            }\n\n            struct ConversationTurn: Codable {\n                var request: String\n                var response: String?\n                var turnId: String?\n            }\n\n            var workDoneToken: String\n            var turns: [ConversationTurn]\n            var capabilities: Capabilities\n            var textDocument: GitHubCopilotDoc?\n            var references: [Reference]?\n            var computeSuggestions: Bool?\n            var source: ConversationSource?\n            var workspaceFolder: String?\n            var workspaceFolders: [WorkspaceFolder]?\n            var ignoredSkills: [String]?\n            var model: String?\n            var chatMode: ConversationMode?\n            var userLanguage: String?\n\n            struct Capabilities: Codable {\n                var skills: [String]\n                var allSkills: Bool?\n            }\n        }\n\n        let requestBody: RequestBody\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"conversation/create\", dict)\n        }\n    }\n\n    struct ConversationTurn: GitHubCopilotRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var workDoneToken: String\n            var conversationId: String\n            var message: String\n            var textDocument: GitHubCopilotDoc?\n            var ignoredSkills: [String]?\n            var references: [ConversationCreate.RequestBody.Reference]?\n            var model: String?\n            var workspaceFolder: String?\n            var workspaceFolders: [WorkspaceFolder]?\n            var chatMode: String?\n        }\n\n        let requestBody: RequestBody\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"conversation/turn\", dict)\n        }\n    }\n\n    struct ConversationTurnDelete: GitHubCopilotRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var conversationId: String\n            var turnId: String\n            var options: [String: String]?\n            var source: GitHubCopilotChatSource?\n        }\n\n        let requestBody: RequestBody\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"conversation/turnDelete\", dict)\n        }\n    }\n\n    struct ConversationDestroy: GitHubCopilotRequestType {\n        struct Response: Codable {}\n\n        struct RequestBody: Codable {\n            var conversationId: String\n            var options: [String: String]?\n        }\n\n        let requestBody: RequestBody\n\n        var request: ClientRequest {\n            let data = (try? JSONEncoder().encode(requestBody)) ?? Data()\n            let dict = (try? JSONDecoder().decode(JSONValue.self, from: data)) ?? .hash([:])\n            return .custom(\"conversation/destroy\", dict)\n        }\n    }\n\n    struct CopilotModels: GitHubCopilotRequestType {\n        typealias Response = [GitHubCopilotModel]\n\n        var request: ClientRequest {\n            .custom(\"copilot/models\", .hash([:]))\n        }\n    }\n}\n\npublic struct GitHubCopilotModel: Codable, Equatable {\n    public let modelFamily: String\n    public let modelName: String\n    public let id: String\n//            public let modelPolicy: CopilotModelPolicy?\n    public let scopes: [GitHubCopilotPromptTemplateScope]\n    public let preview: Bool\n    public let isChatDefault: Bool\n    public let isChatFallback: Bool\n//            public let capabilities: CopilotModelCapabilities\n//            public let billing: CopilotModelBilling?\n}\n\npublic struct GitHubCopilotLLMModel: Equatable, Decodable, Identifiable {\n    public var id: String { modelId }\n    public var modelId: String\n    public var familyName: String\n    public var contextWindow: Int\n}\n\npublic enum GitHubCopilotPromptTemplateScope: String, Codable, Equatable {\n    case chatPanel = \"chat-panel\"\n    case editPanel = \"edit-panel\"\n    case agentPanel = \"agent-panel\"\n    case editor\n    case inline\n    case completion\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotService.swift",
    "content": "import AppKit\nimport enum CopilotForXcodeKit.SuggestionServiceError\nimport Foundation\nimport JSONRPC\nimport LanguageClient\nimport LanguageServerProtocol\nimport Logger\nimport Preferences\nimport SuggestionBasic\nimport XcodeInspector\n\npublic protocol GitHubCopilotAuthServiceType {\n    func checkStatus() async throws -> GitHubCopilotAccountStatus\n    func signInInitiate() async throws -> (verificationUri: String, userCode: String)\n    func signInConfirm(userCode: String) async throws\n        -> (username: String, status: GitHubCopilotAccountStatus)\n    func signOut() async throws -> GitHubCopilotAccountStatus\n    func version() async throws -> String\n}\n\npublic protocol GitHubCopilotSuggestionServiceType {\n    func getCompletions(\n        fileURL: URL,\n        content: String,\n        originalContent: String,\n        cursorPosition: CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) async throws -> [CodeSuggestion]\n    func notifyAccepted(_ completion: CodeSuggestion) async\n    func notifyRejected(_ completions: [CodeSuggestion]) async\n    func notifyOpenTextDocument(fileURL: URL, content: String) async throws\n    func notifyChangeTextDocument(fileURL: URL, content: String, version: Int) async throws\n    func notifyCloseTextDocument(fileURL: URL) async throws\n    func notifySaveTextDocument(fileURL: URL) async throws\n    func cancelRequest() async\n    func terminate() async\n    func cancelOngoingTask(workDoneToken: String) async\n}\n\nprotocol GitHubCopilotLSP {\n    func sendRequest<E: GitHubCopilotRequestType>(\n        _ endpoint: E,\n        timeout: TimeInterval?\n    ) async throws -> E.Response\n    func sendNotification(_ notif: ClientNotification) async throws\n}\n\nextension GitHubCopilotLSP {\n    func sendRequest<E: GitHubCopilotRequestType>(_ endpoint: E) async throws -> E.Response {\n        try await sendRequest(endpoint, timeout: nil)\n    }\n}\n\nenum GitHubCopilotError: Error, LocalizedError {\n    case notLoggedIn\n    case languageServerNotInstalled\n    case languageServerError(ServerError)\n    case failedToInstallStartScript\n    case chatEndsWithError(String)\n\n    var errorDescription: String? {\n        switch self {\n        case .notLoggedIn:\n            return \"Not logged in.\"\n        case .languageServerNotInstalled:\n            return \"Language server is not installed.\"\n        case .failedToInstallStartScript:\n            return \"Failed to install start script.\"\n        case let .chatEndsWithError(errorMessage):\n            return \"Chat ended with error message: \\(errorMessage)\"\n        case let .languageServerError(error):\n            switch error {\n            case let .handlerUnavailable(handler):\n                return \"Language server error: Handler \\(handler) unavailable\"\n            case let .unhandledMethod(method):\n                return \"Language server error: Unhandled method \\(method)\"\n            case let .notificationDispatchFailed(error):\n                return \"Language server error: Notification dispatch failed: \\(error)\"\n            case let .requestDispatchFailed(error):\n                return \"Language server error: Request dispatch failed: \\(error)\"\n            case let .clientDataUnavailable(error):\n                return \"Language server error: Client data unavailable: \\(error)\"\n            case .serverUnavailable:\n                return \"Language server error: Server unavailable, please make sure that:\\n1. The path to node is correctly set.\\n2. The node is not a shim executable.\\n3. the node version is high enough (v22.0+).\"\n            case .missingExpectedParameter:\n                return \"Language server error: Missing expected parameter\"\n            case .missingExpectedResult:\n                return \"Language server error: Missing expected result\"\n            case let .unableToDecodeRequest(error):\n                return \"Language server error: Unable to decode request: \\(error)\"\n            case let .unableToSendRequest(error):\n                return \"Language server error: Unable to send request: \\(error)\"\n            case let .unableToSendNotification(error):\n                return \"Language server error: Unable to send notification: \\(error)\"\n            case let .serverError(code: code, message: message, data: data):\n                return \"Language server error: Server error: \\(code) \\(message) \\(String(describing: data))\"\n            case .invalidRequest:\n                return \"Language server error: Invalid request\"\n            case .timeout:\n                return \"Language server error: Timeout, please try again later\"\n            }\n        }\n    }\n}\n\npublic extension Notification.Name {\n    static let gitHubCopilotShouldRefreshEditorInformation = Notification\n        .Name(\"com.intii.CopilotForXcode.GitHubCopilotShouldRefreshEditorInformation\")\n}\n\npublic class GitHubCopilotBaseService {\n    let projectRootURL: URL\n    var server: GitHubCopilotLSP\n    var localProcessServer: CopilotLocalProcessServer?\n    let notificationHandler: ServerNotificationHandler\n\n    deinit {\n        localProcessServer?.terminate()\n    }\n\n    init(designatedServer: GitHubCopilotLSP) {\n        projectRootURL = URL(fileURLWithPath: \"/\")\n        server = designatedServer\n        notificationHandler = .init()\n    }\n\n    init(projectRootURL: URL) throws {\n        self.projectRootURL = projectRootURL\n        let notificationHandler = ServerNotificationHandler()\n        self.notificationHandler = notificationHandler\n        let (server, localServer) = try { [notificationHandler] in\n            let urls = try GitHubCopilotBaseService.createFoldersIfNeeded()\n            let executionParams: Process.ExecutionParameters\n            let runner = UserDefaults.shared.value(for: \\.runNodeWith)\n//            let watchedFiles = JSONValue(\n//                booleanLiteral: projectRootURL.path == \"/\" ? false : true\n//            )\n\n            guard let agentJSURL = { () -> URL? in\n                let languageServerDotJS = urls.executableURL\n                    .appendingPathComponent(\"copilot/dist/language-server.js\")\n                if FileManager.default.fileExists(atPath: languageServerDotJS.path) {\n                    return languageServerDotJS\n                }\n                let agentsDotJS = urls.executableURL.appendingPathComponent(\"copilot/dist/agent.js\")\n                if FileManager.default.fileExists(atPath: agentsDotJS.path) {\n                    return agentsDotJS\n                }\n                return nil\n            }() else {\n                throw GitHubCopilotError.languageServerNotInstalled\n            }\n\n            let indexJSURL: URL = try {\n                if UserDefaults.shared.value(for: \\.gitHubCopilotLoadKeyChainCertificates) {\n                    let url = urls.executableURL\n                        .appendingPathComponent(\"load-self-signed-cert-1.34.0.js\")\n                    if !FileManager.default.fileExists(atPath: url.path) {\n                        let file = Bundle.module.url(\n                            forResource: \"load-self-signed-cert-1.34.0\",\n                            withExtension: \"js\"\n                        )!\n                        do {\n                            try FileManager.default.copyItem(at: file, to: url)\n                        } catch {\n                            throw GitHubCopilotError.failedToInstallStartScript\n                        }\n                    }\n                    return url\n                } else {\n                    return agentJSURL\n                }\n            }()\n\n            #if DEBUG\n            let environment: [String: String] = [\n                \"GH_COPILOT_DEBUG_UI_PORT\": \"8080\",\n                \"GH_COPILOT_VERBOSE\": UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog)\n                    ? \"true\" : \"false\",\n            ]\n            #else\n            let environment = [String: String]()\n            #endif\n\n            switch runner {\n            case .bash:\n                let nodePath = UserDefaults.shared.value(for: \\.nodePath)\n                let command = [\n                    nodePath.isEmpty ? \"node\" : nodePath,\n                    \"\\\"\\(indexJSURL.path)\\\"\",\n                    \"--stdio\",\n                ].joined(separator: \" \")\n                executionParams = Process.ExecutionParameters(\n                    path: \"/bin/bash\",\n                    arguments: [\"-i\", \"-l\", \"-c\", command],\n                    environment: environment,\n                    currentDirectoryURL: urls.supportURL\n                )\n            case .shell:\n                let shell = ProcessInfo.processInfo.shellExecutablePath\n                let nodePath = UserDefaults.shared.value(for: \\.nodePath)\n                let command = [\n                    nodePath.isEmpty ? \"node\" : nodePath,\n                    \"\\\"\\(indexJSURL.path)\\\"\",\n                    \"--stdio\",\n                ].joined(separator: \" \")\n                executionParams = Process.ExecutionParameters(\n                    path: shell,\n                    arguments: [\"-i\", \"-l\", \"-c\", command],\n                    environment: environment,\n                    currentDirectoryURL: urls.supportURL\n                )\n            case .env:\n                let userEnvPath =\n                    \"/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin\"\n                executionParams = {\n                    let nodePath = UserDefaults.shared.value(for: \\.nodePath)\n                    return Process.ExecutionParameters(\n                        path: \"/usr/bin/env\",\n                        arguments: [\n                            nodePath.isEmpty ? \"node\" : nodePath,\n                            indexJSURL.path,\n                            \"--stdio\",\n                        ],\n                        environment: [\n                            \"PATH\": userEnvPath,\n                        ],\n                        currentDirectoryURL: urls.supportURL\n                    )\n                }()\n            }\n            let localServer = CopilotLocalProcessServer(\n                executionParameters: executionParams,\n                serverNotificationHandler: notificationHandler\n            )\n\n            localServer.logMessages = UserDefaults.shared.value(for: \\.gitHubCopilotVerboseLog)\n            let server = InitializingServer(server: localServer)\n\n            server.initializeParamsProvider = {\n                let capabilities = ClientCapabilities(\n                    workspace: nil,\n                    textDocument: nil,\n                    window: nil,\n                    general: nil,\n                    experimental: nil\n                )\n\n                let pretendToBeVSCode = UserDefaults.shared\n                    .value(for: \\.gitHubCopilotPretendIDEToBeVSCode)\n                return InitializeParams(\n                    processId: Int(ProcessInfo.processInfo.processIdentifier),\n                    clientInfo: .init(\n                        name: Bundle.main\n                            .object(forInfoDictionaryKey: \"HOST_APP_NAME\") as? String\n                            ?? \"Copilot for Xcode\"\n                    ),\n                    locale: nil,\n                    rootPath: projectRootURL.path,\n                    rootUri: projectRootURL.path,\n                    initializationOptions: [\n                        \"editorInfo\": pretendToBeVSCode ? .hash([\n                            \"name\": \"vscode\",\n                            \"version\": \"1.99.3\",\n                        ]) : .hash([\n                            \"name\": \"Xcode\",\n                            \"version\": .string(xcodeVersion() ?? \"16.0\"),\n                        ]),\n                        \"editorPluginInfo\": .hash([\n                            \"name\": \"Copilot for Xcode\",\n                            \"version\": .string(Bundle.main\n                                .infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"\"),\n                        ]),\n//                        \"copilotCapabilities\": [\n//                            /// The editor has support for watching files over LSP\n//                            \"watchedFiles\": watchedFiles,\n//                        ],\n                    ],\n                    capabilities: capabilities,\n                    trace: .off,\n                    workspaceFolders: [WorkspaceFolder(\n                        uri: projectRootURL.absoluteString,\n                        name: projectRootURL.lastPathComponent\n                    )]\n                )\n            }\n\n            return (server, localServer)\n        }()\n\n        self.server = server\n        localProcessServer = localServer\n\n        let notifications = NotificationCenter.default\n            .notifications(named: .gitHubCopilotShouldRefreshEditorInformation)\n        Task { [weak self] in\n            _ = try? await server.sendRequest(\n                GitHubCopilotRequest.SetEditorInfo(xcodeVersion: xcodeVersion() ?? \"16.0\")\n            )\n\n            for await _ in notifications {\n                guard self != nil else { return }\n                _ = try? await server.sendRequest(\n                    GitHubCopilotRequest.SetEditorInfo(xcodeVersion: xcodeVersion() ?? \"16.0\")\n                )\n            }\n        }\n    }\n\n    public static func createFoldersIfNeeded() throws -> (\n        applicationSupportURL: URL,\n        gitHubCopilotURL: URL,\n        executableURL: URL,\n        supportURL: URL\n    ) {\n        guard let supportURL = FileManager.default.urls(\n            for: .applicationSupportDirectory,\n            in: .userDomainMask\n        ).first?.appendingPathComponent(\n            Bundle.main\n                .object(forInfoDictionaryKey: \"APPLICATION_SUPPORT_FOLDER\") as! String\n        ) else {\n            throw CancellationError()\n        }\n\n        if !FileManager.default.fileExists(atPath: supportURL.path) {\n            try? FileManager.default\n                .createDirectory(at: supportURL, withIntermediateDirectories: false)\n        }\n        let gitHubCopilotFolderURL = supportURL.appendingPathComponent(\"GitHub Copilot\")\n        if !FileManager.default.fileExists(atPath: gitHubCopilotFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: gitHubCopilotFolderURL, withIntermediateDirectories: false)\n        }\n        let supportFolderURL = gitHubCopilotFolderURL.appendingPathComponent(\"support\")\n        if !FileManager.default.fileExists(atPath: supportFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: supportFolderURL, withIntermediateDirectories: false)\n        }\n        let executableFolderURL = gitHubCopilotFolderURL.appendingPathComponent(\"executable\")\n        if !FileManager.default.fileExists(atPath: executableFolderURL.path) {\n            try? FileManager.default\n                .createDirectory(at: executableFolderURL, withIntermediateDirectories: false)\n        }\n\n        return (supportURL, gitHubCopilotFolderURL, executableFolderURL, supportFolderURL)\n    }\n\n    func registerNotificationHandler(\n        id: AnyHashable,\n        _ block: @escaping ServerNotificationHandler.Handler\n    ) {\n        Task { @GitHubCopilotSuggestionActor in\n            self.notificationHandler.handlers[id] = block\n        }\n    }\n\n    func unregisterNotificationHandler(id: AnyHashable) {\n        Task { @GitHubCopilotSuggestionActor in\n            self.notificationHandler.handlers[id] = nil\n        }\n    }\n}\n\npublic final class GitHubCopilotAuthService: GitHubCopilotBaseService,\n    GitHubCopilotAuthServiceType\n{\n    public init() throws {\n        let home = FileManager.default.homeDirectoryForCurrentUser\n        try super.init(projectRootURL: home)\n    }\n\n    public func checkStatus() async throws -> GitHubCopilotAccountStatus {\n        do {\n            return try await server.sendRequest(GitHubCopilotRequest.CheckStatus()).status\n        } catch let error as ServerError {\n            throw GitHubCopilotError.languageServerError(error)\n        } catch {\n            throw error\n        }\n    }\n\n    public func signInInitiate() async throws -> (verificationUri: String, userCode: String) {\n        do {\n            let result = try await server.sendRequest(GitHubCopilotRequest.SignInInitiate())\n            return (result.verificationUri, result.userCode)\n        } catch let error as ServerError {\n            throw GitHubCopilotError.languageServerError(error)\n        } catch {\n            throw error\n        }\n    }\n\n    public func signInConfirm(userCode: String) async throws\n        -> (username: String, status: GitHubCopilotAccountStatus)\n    {\n        do {\n            let result = try await server\n                .sendRequest(GitHubCopilotRequest.SignInConfirm(userCode: userCode))\n            return (result.user, result.status)\n        } catch let error as ServerError {\n            throw GitHubCopilotError.languageServerError(error)\n        } catch {\n            throw error\n        }\n    }\n\n    public func signOut() async throws -> GitHubCopilotAccountStatus {\n        do {\n            return try await server.sendRequest(GitHubCopilotRequest.SignOut()).status\n        } catch let error as ServerError {\n            throw GitHubCopilotError.languageServerError(error)\n        } catch {\n            throw error\n        }\n    }\n\n    public func version() async throws -> String {\n        do {\n            return try await server.sendRequest(GitHubCopilotRequest.GetVersion()).version\n        } catch let error as ServerError {\n            throw GitHubCopilotError.languageServerError(error)\n        } catch {\n            throw error\n        }\n    }\n}\n\n@globalActor public enum GitHubCopilotSuggestionActor {\n    public actor TheActor {}\n    public static let shared = TheActor()\n}\n\npublic final class GitHubCopilotService: GitHubCopilotBaseService,\n    GitHubCopilotSuggestionServiceType\n{\n    private var ongoingTasks = Set<Task<[CodeSuggestion], Error>>()\n\n    override public init(projectRootURL: URL = URL(fileURLWithPath: \"/\")) throws {\n        try super.init(projectRootURL: projectRootURL)\n    }\n\n    override init(designatedServer: GitHubCopilotLSP) {\n        super.init(designatedServer: designatedServer)\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func getCompletions(\n        fileURL: URL,\n        content: String,\n        originalContent: String,\n        cursorPosition: CursorPosition,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) async throws -> [CodeSuggestion] {\n        ongoingTasks.forEach { $0.cancel() }\n        ongoingTasks.removeAll()\n        await localProcessServer?.cancelOngoingTasks()\n\n        func sendRequest(maxTry: Int = 5) async throws -> [CodeSuggestion] {\n            do {\n                let completions = try await server\n                    .sendRequest(GitHubCopilotRequest.InlineCompletion(doc: .init(\n                        textDocument: .init(uri: fileURL.absoluteString, version: 1),\n                        position: cursorPosition,\n                        formattingOptions: .init(\n                            tabSize: tabSize,\n                            insertSpaces: !usesTabsForIndentation\n                        ),\n                        context: .init(triggerKind: .invoked)\n                    )))\n                    .items\n                    .compactMap { (item: _) -> CodeSuggestion? in\n                        guard let range = item.range else { return nil }\n                        let suggestion = CodeSuggestion(\n                            id: item.command?.arguments?.first ?? UUID().uuidString,\n                            text: item.insertText,\n                            position: cursorPosition,\n                            range: .init(start: range.start, end: range.end)\n                        )\n                        return suggestion\n                    }\n                try Task.checkCancellation()\n                return completions\n            } catch let error as ServerError {\n                switch error {\n                case .serverError(1000, _, _): // not logged-in error\n                    throw SuggestionServiceError\n                        .notice(GitHubCopilotError.languageServerError(error))\n                case .serverError:\n                    // sometimes the content inside language server is not new enough, which can\n                    // lead to an version mismatch error. We can try a few times until the content\n                    // is up to date.\n                    if maxTry <= 0 { break }\n                    Logger.gitHubCopilot.error(\n                        \"Try getting suggestions again: \\(GitHubCopilotError.languageServerError(error).localizedDescription)\"\n                    )\n                    try await Task.sleep(nanoseconds: 200_000_000)\n                    return try await sendRequest(maxTry: maxTry - 1)\n                default:\n                    break\n                }\n                throw GitHubCopilotError.languageServerError(error)\n            } catch {\n                throw error\n            }\n        }\n\n        func recoverContent() async {\n            try? await notifyChangeTextDocument(\n                fileURL: fileURL,\n                content: originalContent,\n                version: 0\n            )\n        }\n\n        // since when the language server is no longer using the passed in content to generate\n        // suggestions, we will need to update the content to the file before we do any request.\n        //\n        // And sometimes the language server's content was not up to date and may generate\n        // weird result when the cursor position exceeds the line.\n        let task = Task { @GitHubCopilotSuggestionActor in\n            do {\n                try await notifyChangeTextDocument(\n                    fileURL: fileURL,\n                    content: content,\n                    version: 1\n                )\n            } catch let error as ServerError {\n                switch error {\n                case .serverUnavailable:\n                    throw SuggestionServiceError\n                        .notice(GitHubCopilotError.languageServerError(error))\n                default:\n                    throw error\n                }\n            } catch {\n                throw error\n            }\n\n            do {\n                try Task.checkCancellation()\n                return try await sendRequest()\n            } catch let error as CancellationError {\n                if ongoingTasks.isEmpty {\n                    await recoverContent()\n                }\n                throw error\n            } catch {\n                await recoverContent()\n                throw error\n            }\n        }\n\n        ongoingTasks.insert(task)\n\n        return try await task.value\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func cancelRequest() async {\n        ongoingTasks.forEach { $0.cancel() }\n        ongoingTasks.removeAll()\n        await localProcessServer?.cancelOngoingTasks()\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifyAccepted(_ completion: CodeSuggestion) async {\n        _ = try? await server.sendRequest(\n            GitHubCopilotRequest.NotifyAccepted(completionUUID: completion.id)\n        )\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifyRejected(_ completions: [CodeSuggestion]) async {\n        _ = try? await server.sendRequest(\n            GitHubCopilotRequest.NotifyRejected(completionUUIDs: completions.map(\\.id))\n        )\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifyOpenTextDocument(\n        fileURL: URL,\n        content: String\n    ) async throws {\n        let languageId = languageIdentifierFromFileURL(fileURL)\n        let uri = \"file://\\(fileURL.path)\"\n//        Logger.service.debug(\"Open \\(uri), \\(content.count)\")\n        try await server.sendNotification(\n            .didOpenTextDocument(\n                DidOpenTextDocumentParams(\n                    textDocument: .init(\n                        uri: uri,\n                        languageId: languageId.rawValue,\n                        version: 0,\n                        text: content\n                    )\n                )\n            )\n        )\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifyChangeTextDocument(\n        fileURL: URL,\n        content: String,\n        version: Int\n    ) async throws {\n        let uri = \"file://\\(fileURL.path)\"\n//        Logger.service.debug(\"Change \\(uri), \\(content.count)\")\n        try await server.sendNotification(\n            .didChangeTextDocument(\n                DidChangeTextDocumentParams(\n                    uri: uri,\n                    version: version,\n                    contentChange: .init(\n                        range: nil,\n                        rangeLength: nil,\n                        text: content\n                    )\n                )\n            )\n        )\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifySaveTextDocument(fileURL: URL) async throws {\n        let uri = \"file://\\(fileURL.path)\"\n//        Logger.service.debug(\"Save \\(uri)\")\n        try await server.sendNotification(.didSaveTextDocument(.init(uri: uri)))\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func notifyCloseTextDocument(fileURL: URL) async throws {\n        let uri = \"file://\\(fileURL.path)\"\n//        Logger.service.debug(\"Close \\(uri)\")\n        try await server.sendNotification(.didCloseTextDocument(.init(uri: uri)))\n    }\n\n    @GitHubCopilotSuggestionActor\n    public func terminate() async {\n        // automatically handled\n    }\n\n    public func cancelOngoingTask(workDoneToken: String) async {\n        await localProcessServer?.cancelOngoingTask(workDoneToken: workDoneToken)\n    }\n}\n\nextension InitializingServer: GitHubCopilotLSP {\n    func sendRequest<E: GitHubCopilotRequestType>(\n        _ endpoint: E,\n        timeout: TimeInterval? = nil\n    ) async throws -> E.Response {\n        if let timeout {\n            return try await withCheckedThrowingContinuation { continuation in\n                self.sendRequest(endpoint.request, timeout: timeout) { result in\n                    continuation.resume(with: result)\n                }\n            }\n        } else {\n            return try await sendRequest(endpoint.request)\n        }\n    }\n}\n\nprivate func xcodeVersion() -> String? {\n    let process = Process()\n    process.executableURL = URL(fileURLWithPath: \"/usr/bin/xcrun\")\n    process.arguments = [\"xcodebuild\", \"-version\"]\n\n    let pipe = Pipe()\n    process.standardOutput = pipe\n\n    do {\n        try process.run()\n    } catch {\n        print(\"Error running xcrun xcodebuild: \\(error)\")\n        return nil\n    }\n\n    let data = pipe.fileHandleForReading.readDataToEndOfFile()\n    guard let output = String(data: data, encoding: .utf8) else {\n        return nil\n    }\n\n    let lines = output.split(separator: \"\\n\")\n    return lines.first?.split(separator: \" \").last.map(String.init)\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/Resources/load-self-signed-cert-1.34.0.js",
    "content": "function initialize() {\n  if (process.platform !== \"darwin\") {\n    return;\n  }\n\n  const splitPattern = /(?=-----BEGIN\\sCERTIFICATE-----)/g;\n  const systemRootCertsPath =\n    \"/System/Library/Keychains/SystemRootCertificates.keychain\";\n  const args = [\"find-certificate\", \"-a\", \"-p\"];\n\n  const childProcess = require(\"child_process\");\n  const allTrusted = childProcess\n    .spawnSync(\"/usr/bin/security\", args)\n    .stdout.toString()\n    .split(splitPattern);\n\n  const allRoot = childProcess\n    .spawnSync(\"/usr/bin/security\", args.concat(systemRootCertsPath))\n    .stdout.toString()\n    .split(splitPattern);\n  const all = allTrusted.concat(allRoot);\n\n  const tls = require(\"tls\");\n  const origCreateSecureContext = tls.createSecureContext;\n  tls.createSecureContext = (options) => {\n    const ctx = origCreateSecureContext(options);\n    all.filter(duplicated).forEach((cert) => {\n      ctx.context.addCACert(cert.trim());\n    });\n    return ctx;\n  };\n}\n\nfunction duplicated(cert, index, arr) {\n  return arr.indexOf(cert) === index;\n}\n\ninitialize();\n\nrequire(\"./copilot/dist/language-server.js\");\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/Services/GitHubCopilotChatService.swift",
    "content": "import BuiltinExtension\nimport ChatBasic\nimport CopilotForXcodeKit\nimport Foundation\nimport LanguageServerProtocol\nimport XcodeInspector\n\npublic final class GitHubCopilotChatService: BuiltinExtensionChatServiceType {\n    let serviceLocator: any ServiceLocatorType\n\n    init(serviceLocator: any ServiceLocatorType) {\n        self.serviceLocator = serviceLocator\n    }\n\n    /// - note: Let's do it in a naive way for proof of concept. We will create a new chat for each\n    /// message in this version.\n    public func sendMessage(\n        _ message: String,\n        history: [Message],\n        references: [RetrievedContent],\n        workspace: WorkspaceInfo\n    ) async -> AsyncThrowingStream<String, Error> {\n        guard let service = await serviceLocator.getService(from: workspace)\n        else { return .finished(throwing: CancellationError()) }\n        let id = UUID().uuidString\n        let editorContent = await XcodeInspector.shared.getFocusedEditorContent()\n        let workDoneToken = UUID().uuidString\n        let turns = convertHistory(history: history, message: message)\n        let doc = GitHubCopilotDoc(\n            source: editorContent?.editorContent?.content ?? \"\",\n            tabSize: 1,\n            indentSize: 4,\n            insertSpaces: true,\n            path: editorContent?.documentURL.absoluteString ?? \"\",\n            uri: editorContent?.documentURL.absoluteString ?? \"\",\n            relativePath: editorContent?.relativePath ?? \"\",\n            languageId: editorContent?.language ?? .plaintext,\n            position: editorContent?.editorContent?.cursorPosition ?? .zero\n        )\n        let request = GitHubCopilotRequest.ConversationCreate(requestBody: .init(\n            workDoneToken: workDoneToken,\n            turns: turns,\n            capabilities: .init(skills: [], allSkills: false),\n            textDocument: doc,\n            source: .panel,\n            workspaceFolder: workspace.projectURL.absoluteString,\n            model: {\n                let selectedModel = UserDefaults.shared.value(for: \\.gitHubCopilotModelId)\n                if selectedModel.isEmpty {\n                    return nil\n                }\n                return selectedModel\n            }(),\n            userLanguage: {\n                let language = UserDefaults.shared.value(for: \\.chatGPTLanguage)\n                if language.isEmpty {\n                    return \"Auto Detected\"\n                }\n                return language\n            }()\n        ))\n\n        let stream = AsyncThrowingStream<String, Error> { continuation in\n            let startTimestamp = Date()\n\n            continuation.onTermination = { _ in\n                Task {\n                    service.unregisterNotificationHandler(id: id)\n                    await service.cancelOngoingTask(workDoneToken: workDoneToken)\n                }\n            }\n\n            service.registerNotificationHandler(id: id) { notification, data in\n                // just incase the conversation is stuck, we will cancel it after timeout\n                if Date().timeIntervalSince(startTimestamp) > 60 * 30 {\n                    continuation.finish(throwing: CancellationError())\n                    return false\n                }\n\n                switch notification.method {\n                case \"$/progress\":\n                    do {\n                        let progress = try JSONDecoder().decode(\n                            JSONRPC<StreamProgressParams>.self,\n                            from: data\n                        ).params\n                        guard progress.token == workDoneToken else { return false }\n                        if let reply = progress.value.reply, progress.value.kind == \"report\" {\n                            continuation.yield(reply)\n                        } else if progress.value.kind == \"end\" {\n                            if let error = progress.value.error?.message,\n                               progress.value.cancellationReason == nil\n                            {\n                                if error.contains(\"400\") {\n                                    continuation.finish(\n                                        throwing: GitHubCopilotError.chatEndsWithError(\n                                            \"\\(error). Please try enabling pretend IDE to be VSCode and click refresh configuration.\"\n                                        )\n                                    )\n                                } else if error.contains(\"No model configuration found\") {\n                                    continuation.finish(\n                                        throwing: GitHubCopilotError.chatEndsWithError(\n                                            \"\\(error). Please try enabling pretend IDE to be VSCode and click refresh configuration.\"\n                                        )\n                                    )\n                                } else {\n                                    continuation.finish(\n                                        throwing: GitHubCopilotError.chatEndsWithError(error)\n                                    )\n                                }\n                            } else {\n                                continuation.finish()\n                            }\n                        }\n                        return true\n                    } catch {\n                        return false\n                    }\n                case \"conversation/context\":\n                    do {\n                        _ = try JSONDecoder().decode(\n                            JSONRPC<ConversationContextParams>.self,\n                            from: data\n                        )\n                        throw ServerError.clientDataUnavailable(CancellationError())\n                    } catch {\n                        return false\n                    }\n\n                default:\n                    return false\n                }\n            }\n\n            Task {\n                do {\n                    // this will return when the response is generated.\n                    let createResponse = try await service.server.sendRequest(request, timeout: 120)\n                    _ = try await service.server.sendRequest(\n                        GitHubCopilotRequest.ConversationDestroy(requestBody: .init(\n                            conversationId: createResponse.conversationId\n                        ))\n                    )\n                } catch let error as ServerError {\n                    continuation.finish(throwing: GitHubCopilotError.languageServerError(error))\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n\n        return stream\n    }\n}\n\nextension GitHubCopilotChatService {\n    typealias Turn = GitHubCopilotRequest.ConversationCreate.RequestBody.ConversationTurn\n    func convertHistory(history: [Message], message: String) -> [Turn] {\n        guard let firstIndexOfUserMessage = history.firstIndex(where: { $0.role == .user })\n        else { return [.init(request: message, response: nil)] }\n\n        var currentTurn = Turn(request: \"\", response: nil)\n        var turns: [Turn] = []\n        let systemPrompt = history\n            .filter { $0.role == .system }.compactMap(\\.content)\n            .joined(separator: \"\\n\\n\")\n\n        if !systemPrompt.isEmpty {\n            turns.append(.init(request: \"[System Prompt]\\n\\(systemPrompt)\", response: \"OK!\"))\n        }\n\n        for i in firstIndexOfUserMessage..<history.endIndex {\n            let message = history[i]\n            let text = message.content ?? \"\"\n            switch message.role {\n            case .user:\n                if currentTurn.response == nil {\n                    if currentTurn.request.isEmpty {\n                        currentTurn.request = text\n                    } else {\n                        currentTurn.request += \"\\n\\n\\(text)\"\n                    }\n                } else { // a valid turn is created\n                    turns.append(currentTurn)\n                    currentTurn = Turn(request: text, response: nil)\n                }\n            case .assistant:\n                if let response = currentTurn.response {\n                    currentTurn.response = \"\\(response)\\n\\n\\(text)\"\n                } else {\n                    currentTurn.response = text\n                }\n            default:\n                break\n            }\n        }\n\n        if currentTurn.response == nil {\n            currentTurn.response = \"OK\"\n        }\n\n        turns.append(currentTurn)\n        turns.append(.init(request: message, response: nil))\n\n        return turns\n    }\n\n    func createNewMessage(references: [RetrievedContent], message: String) -> String {\n        return message\n    }\n\n    struct JSONRPC<Params: Decodable>: Decodable {\n        var jsonrpc: String\n        var method: String\n        var params: Params\n    }\n\n    struct StreamProgressParams: Decodable {\n        struct Value: Decodable {\n            struct Step: Decodable {\n                var id: String\n                var title: String\n                var status: String\n            }\n\n            struct FollowUp: Decodable {\n                var id: String\n                var type: String\n                var message: String\n            }\n\n            struct Error: Decodable {\n                var responseIsIncomplete: Bool?\n                var message: String?\n            }\n\n            struct Annotation: Decodable {\n                var id: Int\n            }\n\n            var kind: String\n            var title: String?\n            var conversationId: String\n            var turnId: String\n            var steps: [Step]?\n            var followUp: FollowUp?\n            var suggestedTitle: String?\n            var reply: String?\n            var annotations: [Annotation]?\n            var hideText: Bool?\n            var cancellationReason: String?\n            var error: Error?\n        }\n\n        var token: String\n        var value: Value\n    }\n\n    struct ConversationContextParams: Decodable {\n        enum SkillID: String, Decodable {\n            case currentEditor = \"current-editor\"\n            case projectLabels = \"project-labels\"\n            case recentFiles = \"recent-files\"\n            case references\n            case problemsInActiveDocument = \"problems-in-active-document\"\n        }\n\n        var conversationId: String\n        var turnId: String\n        var skillId: String\n    }\n\n    struct ConversationContextResponseBody: Encodable {}\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitHubCopilotService/Services/GitHubCopilotSuggestionService.swift",
    "content": "import CopilotForXcodeKit\nimport Foundation\nimport SuggestionBasic\nimport Workspace\n\npublic final class GitHubCopilotSuggestionService: SuggestionServiceType {\n    public var configuration: SuggestionServiceConfiguration {\n        .init(\n            acceptsRelevantCodeSnippets: true,\n            mixRelevantCodeSnippetsInSource: true,\n            acceptsRelevantSnippetsFromOpenedFiles: false\n        )\n    }\n\n    let serviceLocator: ServiceLocatorType\n\n    init(serviceLocator: ServiceLocatorType) {\n        self.serviceLocator = serviceLocator\n    }\n\n    public func getSuggestions(\n        _ request: SuggestionRequest,\n        workspace: WorkspaceInfo\n    ) async throws -> [CopilotForXcodeKit.CodeSuggestion] {\n        guard let service = await serviceLocator.getService(from: workspace) else { return [] }\n        return try await service.getCompletions(\n            fileURL: request.fileURL,\n            content: request.content,\n            originalContent: request.originalContent,\n            cursorPosition: .init(\n                line: request.cursorPosition.line,\n                character: request.cursorPosition.character\n            ),\n            tabSize: request.tabSize,\n            indentSize: request.indentSize,\n            usesTabsForIndentation: request.usesTabsForIndentation\n        ).map(Self.convert)\n    }\n\n    public func notifyAccepted(\n        _ suggestion: CopilotForXcodeKit.CodeSuggestion,\n        workspace: WorkspaceInfo\n    ) async {\n        guard let service = await serviceLocator.getService(from: workspace) else { return }\n        await service.notifyAccepted(Self.convert(suggestion))\n    }\n\n    public func notifyRejected(\n        _ suggestions: [CopilotForXcodeKit.CodeSuggestion],\n        workspace: WorkspaceInfo\n    ) async {\n        guard let service = await serviceLocator.getService(from: workspace) else { return }\n        await service.notifyRejected(suggestions.map(Self.convert))\n    }\n\n    public func cancelRequest(workspace: WorkspaceInfo) async {\n        guard let service = await serviceLocator.getService(from: workspace) else { return }\n        await service.cancelRequest()\n    }\n\n    static func convert(\n        _ suggestion: SuggestionBasic.CodeSuggestion\n    ) -> CopilotForXcodeKit.CodeSuggestion {\n        .init(\n            id: suggestion.id,\n            text: suggestion.text,\n            position: .init(\n                line: suggestion.position.line,\n                character: suggestion.position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: suggestion.range.start.line,\n                    character: suggestion.range.start.character\n                ),\n                end: .init(\n                    line: suggestion.range.end.line,\n                    character: suggestion.range.end.character\n                )\n            )\n        )\n    }\n\n    static func convert(\n        _ suggestion: CopilotForXcodeKit.CodeSuggestion\n    ) -> SuggestionBasic.CodeSuggestion {\n        .init(\n            id: suggestion.id,\n            text: suggestion.text,\n            position: .init(\n                line: suggestion.position.line,\n                character: suggestion.position.character\n            ),\n            range: .init(\n                start: .init(\n                    line: suggestion.range.start.line,\n                    character: suggestion.range.start.character\n                ),\n                end: .init(\n                    line: suggestion.range.end.line,\n                    character: suggestion.range.end.character\n                )\n            )\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/GitIgnoreCheck/GitIgnoreCheck.swift",
    "content": "import Dependencies\nimport Foundation\nimport Terminal\nimport Preferences\n\npublic struct CheckIfGitIgnoredDependencyKey: DependencyKey {\n    public static var liveValue: GitIgnoredChecker = DefaultGitIgnoredChecker()\n    public static var testValue: GitIgnoredChecker = DefaultGitIgnoredChecker(isTest: true)\n}\n\npublic extension DependencyValues {\n    var gitIgnoredChecker: GitIgnoredChecker {\n        get { self[CheckIfGitIgnoredDependencyKey.self] }\n        set { self[CheckIfGitIgnoredDependencyKey.self] = newValue }\n    }\n}\n\npublic protocol GitIgnoredChecker {\n    func checkIfGitIgnored(fileURL: URL) async -> Bool\n    func checkIfGitIgnored(fileURLs: [URL]) async -> [URL]\n}\n\npublic extension GitIgnoredChecker {\n    func checkIfGitIgnored(filePath: String) async -> Bool {\n        await checkIfGitIgnored(fileURL: URL(fileURLWithPath: filePath))\n    }\n    \n    func checkIfGitIgnored(filePaths: [String]) async -> [String] {\n        await checkIfGitIgnored(fileURLs: filePaths.map { URL(fileURLWithPath: $0) })\n            .map(\\.path)\n    }\n}\n\npublic struct DefaultGitIgnoredChecker: GitIgnoredChecker {\n    var isTest = false\n    \n    var noCheck: Bool {\n        if isTest { return true }\n        return UserDefaults.shared.value(for: \\.disableGitIgnoreCheck)\n    }\n    \n    public init() {}\n    \n    init(isTest: Bool) {\n        self.isTest = isTest\n    }\n    \n    public func checkIfGitIgnored(fileURL: URL) async -> Bool {\n        if noCheck { return false }\n        let terminal = Terminal()\n        guard let gitFolderURL = gitFolderURL(forFileURL: fileURL) else {\n            return false\n        }\n        do {\n            let result = try await terminal.runCommand(\n                \"/bin/bash\",\n                arguments: [\"-c\", \"git check-ignore ${TARGET_FILE}\"],\n                currentDirectoryURL: gitFolderURL,\n                environment: [\"TARGET_FILE\": fileURL.path]\n            )\n            if result.isEmpty { return false }\n            return true\n        } catch {\n            return false\n        }\n    }\n    \n    public func checkIfGitIgnored(fileURLs: [URL]) async -> [URL] {\n        if noCheck { return [] }\n        let filePaths = fileURLs.map { \"\\\"\\($0.path)\\\"\" }.joined(separator: \" \")\n        guard let firstFileURL = fileURLs.first else { return [] }\n        let terminal = Terminal()\n        guard let gitFolderURL = gitFolderURL(forFileURL: firstFileURL) else {\n            return []\n        }\n        do {\n            let result = try await terminal.runCommand(\n                \"/bin/bash\",\n                arguments: [\"-c\", \"git check-ignore ${TARGET_FILE}\"],\n                currentDirectoryURL: gitFolderURL,\n                environment: [\"TARGET_FILE\": filePaths]\n            )\n            return result\n                .split(whereSeparator: \\.isNewline)\n                .map(String.init)\n                .compactMap(URL.init(fileURLWithPath:))\n        } catch {\n            return []\n        }\n    }\n}\n\nfunc gitFolderURL(forFileURL fileURL: URL) -> URL? {\n    var currentURL = fileURL\n    let fileManager = FileManager.default\n    while currentURL.path != \"/\" {\n        let gitFolderURL = currentURL.appendingPathComponent(\".git\")\n        if fileManager.fileExists(atPath: gitFolderURL.path) {\n            return currentURL\n        }\n        currentURL = currentURL.deletingLastPathComponent()\n    }\n    return nil\n}\n\n"
  },
  {
    "path": "Tool/Sources/JoinJSON/JoinJSON.swift",
    "content": "import Foundation\n\npublic struct JoinJSON {\n    public init() {}\n\n    public func join(_ a: String, with b: String) -> Data {\n        return join(a.data(using: .utf8) ?? Data(), with: b.data(using: .utf8) ?? Data())\n    }\n\n    public func join(_ a: Data, with b: String) -> Data {\n        return join(a, with: b.data(using: .utf8) ?? Data())\n    }\n\n    public func join(_ a: Data, with b: Data) -> Data {\n        guard let firstDict = try? JSONSerialization.jsonObject(with: a) as? [String: Any],\n              let secondDict = try? JSONSerialization.jsonObject(with: b) as? [String: Any]\n        else {\n            return a\n        }\n\n        var merged = firstDict\n        for (key, value) in secondDict {\n            merged[key] = value\n        }\n\n        return (try? JSONSerialization.data(withJSONObject: merged)) ?? a\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Keychain/Keychain.swift",
    "content": "import Configs\nimport Foundation\nimport Preferences\nimport Security\n\npublic protocol KeychainType {\n    func getAll() throws -> [String: String]\n    func update(_ value: String, key: String) throws\n    func get(_ key: String) throws -> String?\n    func remove(_ key: String) throws\n}\n\npublic final class FakeKeyChain: KeychainType {\n    var values: [String: String] = [:]\n\n    public init() {}\n\n    public func getAll() throws -> [String: String] {\n        values\n    }\n\n    public func update(_ value: String, key: String) throws {\n        values[key] = value\n    }\n\n    public func get(_ key: String) throws -> String? {\n        values[key]\n    }\n\n    public func remove(_ key: String) throws {\n        values[key] = nil\n    }\n}\n\npublic final class UserDefaultsBaseAPIKeychain: KeychainType {\n    let defaults = UserDefaults.shared\n    let scope: String\n    var key: String {\n        \"UserDefaultsBaseAPIKeychain-\\(scope)\"\n    }\n    \n    init(scope: String) {\n        self.scope = scope\n    }\n    \n    public func getAll() throws -> [String : String] {\n        defaults.dictionary(forKey: key) as? [String: String] ?? [:]\n    }\n    \n    public func update(_ value: String, key: String) throws {\n        var dict = try getAll()\n        dict[key] = value\n        defaults.set(dict, forKey: self.key)\n    }\n    \n    public func get(_ key: String) throws -> String? {\n        try getAll()[key]\n    }\n    \n    public func remove(_ key: String) throws {\n        var dict = try getAll()\n        dict[key] = nil\n        defaults.set(dict, forKey: self.key)\n    }\n}\n\npublic struct Keychain: KeychainType {\n    let service = keychainService\n    let accessGroup = keychainAccessGroup\n    let scope: String\n\n    public static var apiKey: KeychainType {\n        if UserDefaults.shared.value(for: \\.useUserDefaultsBaseAPIKeychain) {\n            return UserDefaultsBaseAPIKeychain(scope: \"apiKey\")\n        }\n        return Keychain(scope: \"apiKey\")\n    }\n\n    public enum Error: Swift.Error {\n        case failedToDeleteFromKeyChain\n        case failedToUpdateOrSetItem\n    }\n\n    public init(scope: String = \"\") {\n        self.scope = scope\n    }\n\n    func query(_ key: String) -> [String: Any] {\n        let key = scopeKey(key)\n        return [\n            kSecClass as String: kSecClassGenericPassword as String,\n            kSecAttrService as String: service,\n            kSecAttrAccessGroup as String: accessGroup,\n            kSecAttrAccount as String: key,\n            kSecUseDataProtectionKeychain as String: true,\n        ]\n    }\n\n    func set(_ value: String, key: String) throws {\n        let query = query(key).merging([\n            kSecValueData as String: value.data(using: .utf8) ?? Data(),\n        ], uniquingKeysWith: { _, b in b })\n\n        let result = SecItemAdd(query as CFDictionary, nil)\n\n        switch result {\n        case noErr:\n            return\n        default:\n            throw Error.failedToUpdateOrSetItem\n        }\n    }\n\n    func scopeKey(_ key: String) -> String {\n        if scope.isEmpty {\n            return key\n        }\n        return \"\\(scope)::\\(key)\"\n    }\n\n    func escapeScope(_ key: String) -> String? {\n        if scope.isEmpty {\n            return key\n        }\n        if !key.hasPrefix(\"\\(scope)::\") { return nil }\n        return key.replacingOccurrences(of: \"\\(scope)::\", with: \"\")\n    }\n\n    public func getAll() throws -> [String: String] {\n        let query = [\n            kSecClass as String: kSecClassGenericPassword as String,\n            kSecAttrService as String: service,\n            kSecAttrAccessGroup as String: accessGroup,\n            kSecReturnAttributes as String: true,\n            kSecReturnData as String: true,\n            kSecMatchLimit as String: kSecMatchLimitAll,\n        ] as [String: Any]\n\n        var result: AnyObject?\n        if SecItemCopyMatching(query as CFDictionary, &result) == noErr {\n            guard let items = result as? [[String: Any]] else {\n                return [:]\n            }\n\n            var dict = [String: String]()\n            for item in items {\n                guard let key = item[kSecAttrAccount as String] as? String,\n                      let escapedKey = escapeScope(key)\n                else { continue }\n                guard let valueData = item[kSecValueData as String] as? Data,\n                      let value = String(data: valueData, encoding: .utf8)\n                else { continue }\n                dict[escapedKey] = value\n            }\n            return dict\n        }\n\n        return [:]\n    }\n\n    public func update(_ value: String, key: String) throws {\n        let query = query(key).merging([\n            kSecMatchLimit as String: kSecMatchLimitOne,\n            kSecReturnData as String: true,\n        ], uniquingKeysWith: { _, b in b })\n\n        let attributes: [String: Any] =\n            [kSecValueData as String: value.data(using: .utf8) ?? Data()]\n\n        let result = SecItemUpdate(query as CFDictionary, attributes as CFDictionary)\n\n        switch result {\n        case noErr:\n            return\n        case errSecItemNotFound:\n            try set(value, key: key)\n        default:\n            throw Error.failedToUpdateOrSetItem\n        }\n    }\n\n    public func get(_ key: String) throws -> String? {\n        let query = query(key).merging([\n            kSecMatchLimit as String: kSecMatchLimitOne,\n            kSecReturnData as String: true,\n            kSecReturnAttributes as String: true,\n        ], uniquingKeysWith: { _, b in b })\n\n        var item: CFTypeRef?\n        if SecItemCopyMatching(query as CFDictionary, &item) == noErr {\n            if let existingItem = item as? [String: Any],\n               let passwordData = existingItem[kSecValueData as String] as? Data,\n               let password = String(data: passwordData, encoding: .utf8)\n            {\n                return password\n            }\n            return nil\n        } else {\n            return nil\n        }\n    }\n\n    public func remove(_ key: String) throws {\n        if SecItemDelete(query(key) as CFDictionary) == noErr {\n            return\n        }\n        throw Error.failedToDeleteFromKeyChain\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Agent.swift",
    "content": "import Foundation\n\npublic struct AgentAction: Equatable {\n    public var toolName: String\n    public var toolInput: String\n    public var log: String\n    public var observation: String?\n\n    public init(toolName: String, toolInput: String, log: String, observation: String? = nil) {\n        self.toolName = toolName\n        self.toolInput = toolInput\n        self.log = log\n        self.observation = observation\n    }\n\n    public func observationAvailable(_ observation: String) -> AgentAction {\n        var newAction = self\n        newAction.observation = observation\n        return newAction\n    }\n}\n\npublic extension CallbackEvents {\n    struct AgentDidFinish<Output: AgentOutputParsable>: CallbackEvent {\n        public let info: AgentFinish<Output>\n    }\n\n    static func agentDidFinish<Output: AgentOutputParsable>() -> AgentDidFinish<Output>.Type {\n        AgentDidFinish<Output>.self\n    }\n\n    struct AgentActionDidStart: CallbackEvent {\n        public let info: AgentAction\n    }\n\n    var agentActionDidStart: AgentActionDidStart.Type {\n        AgentActionDidStart.self\n    }\n\n    struct AgentActionDidEnd: CallbackEvent {\n        public let info: AgentAction\n    }\n\n    var agentActionDidEnd: AgentActionDidEnd.Type {\n        AgentActionDidEnd.self\n    }\n    \n    struct AgentFunctionCallingToolReportProgress: CallbackEvent {\n        public struct Info {\n            public let functionName: String\n            public let progress: String\n        }\n        \n        public let info: Info\n    }\n    \n    var agentFunctionCallingToolReportProgress: AgentFunctionCallingToolReportProgress.Type {\n        AgentFunctionCallingToolReportProgress.self\n    }\n}\n\npublic struct AgentFinish<Output: AgentOutputParsable> {\n    public enum ReturnValue {\n        case structured(Output)\n        case unstructured(String)\n    }\n\n    public var returnValue: ReturnValue\n    public var log: String\n\n    public init(returnValue: ReturnValue, log: String) {\n        self.returnValue = returnValue\n        self.log = log\n    }\n}\n\nextension AgentFinish.ReturnValue: Equatable where Output: Equatable {}\n\nextension AgentFinish: Equatable where Output: Equatable {}\n\npublic enum AgentNextStep<Output: AgentOutputParsable> {\n    case actions([AgentAction])\n    case finish(AgentFinish<Output>)\n}\n\nextension AgentNextStep: Equatable where Output: Equatable {}\n\npublic struct AgentScratchPad<Content: Equatable>: Equatable {\n    public var content: Content\n\n    public init(content: Content) {\n        self.content = content\n    }\n}\n\npublic struct AgentInput<T, ScratchPadContent: Equatable> {\n    public var input: T\n    public var thoughts: AgentScratchPad<ScratchPadContent>\n\n    public init(input: T, thoughts: AgentScratchPad<ScratchPadContent>) {\n        self.input = input\n        self.thoughts = thoughts\n    }\n}\n\nextension AgentInput: Equatable where T: Equatable {}\n\npublic enum AgentEarlyStopHandleType: Equatable {\n    case force\n    case generate\n}\n\npublic protocol Agent {\n    associatedtype Input\n    associatedtype Output: AgentOutputParsable\n    associatedtype ScratchPadContent: Equatable\n    var chatModelChain: ChatModelChain<AgentInput<Input, ScratchPadContent>> { get }\n\n    func validateTools(tools: [AgentTool]) throws\n    func constructScratchpad(intermediateSteps: [AgentAction]) -> AgentScratchPad<ScratchPadContent>\n    func constructFinalScratchpad(intermediateSteps: [AgentAction])\n        -> AgentScratchPad<ScratchPadContent>\n    func extraPlan(input: AgentInput<Input, ScratchPadContent>)\n    func parseOutput(_ output: ChatModelChain<AgentInput<Input, ScratchPadContent>>.Output) async\n        -> AgentNextStep<Output>\n}\n\npublic extension Agent {\n    func getFullInputs(\n        input: Input,\n        intermediateSteps: [AgentAction]\n    ) -> AgentInput<Input, ScratchPadContent> {\n        let thoughts = constructScratchpad(intermediateSteps: intermediateSteps)\n        return AgentInput(input: input, thoughts: thoughts)\n    }\n\n    func plan(\n        input: Input,\n        intermediateSteps: [AgentAction],\n        callbackManagers: [CallbackManager]\n    ) async throws -> AgentNextStep<Output> {\n        let input = getFullInputs(input: input, intermediateSteps: intermediateSteps)\n        extraPlan(input: input)\n        let output = try await chatModelChain.call(input, callbackManagers: callbackManagers)\n        return await parseOutput(output)\n    }\n\n    func returnStoppedResponse(\n        input: Input,\n        earlyStoppedHandleType: AgentEarlyStopHandleType,\n        intermediateSteps: [AgentAction],\n        callbackManagers: [CallbackManager]\n    ) async throws -> AgentFinish<Output> {\n        switch earlyStoppedHandleType {\n        case .force:\n            return AgentFinish(\n                returnValue: .unstructured(\"Agent stopped due to iteration limit or time limit.\"),\n                log: \"\"\n            )\n        case .generate:\n            let thoughts = constructFinalScratchpad(intermediateSteps: intermediateSteps)\n            let input = AgentInput(input: input, thoughts: thoughts)\n            let output = try await chatModelChain.call(input, callbackManagers: callbackManagers)\n            let nextAction = await parseOutput(output)\n            switch nextAction {\n            case let .finish(finish):\n                return finish\n            case .actions:\n                return .init(\n                    returnValue: .unstructured(output.content ?? \"\"),\n                    log: output.content ?? \"\"\n                )\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/AgentExecutor.swift",
    "content": "import Foundation\n\npublic actor AgentExecutor<InnerAgent: Agent>: Chain\n    where InnerAgent.Input == String, InnerAgent.Output: AgentOutputParsable\n{\n    public typealias Input = String\n    public struct Output {\n        public typealias FinalOutput = AgentFinish<InnerAgent.Output>.ReturnValue\n\n        public let finalOutput: FinalOutput\n        let intermediateSteps: [AgentAction]\n    }\n\n    let agent: InnerAgent\n    let tools: [String: AgentTool]\n    let maxIteration: Int?\n    let maxExecutionTime: Double?\n    var earlyStopHandleType: AgentEarlyStopHandleType\n    var now: () -> Date = { Date() }\n    var isCancelled = false\n    var initialSteps: [AgentAction]\n\n    public init(\n        agent: InnerAgent,\n        tools: [AgentTool],\n        maxIteration: Int? = 10,\n        maxExecutionTime: Double? = nil,\n        earlyStopHandleType: AgentEarlyStopHandleType = .generate,\n        initialSteps: [AgentAction] = []\n    ) {\n        self.agent = agent\n        self.tools = tools.reduce(into: [:]) { $0[$1.name] = $1 }\n        self.maxIteration = maxIteration\n        self.maxExecutionTime = maxExecutionTime\n        self.earlyStopHandleType = earlyStopHandleType\n        self.initialSteps = initialSteps\n    }\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        try agent.validateTools(tools: Array(tools.values))\n\n        let startTime = now().timeIntervalSince1970\n        var iterations = 0\n        var intermediateSteps: [AgentAction] = initialSteps\n\n        func shouldContinue() -> Bool {\n            if isCancelled { return false }\n            if let maxIteration = maxIteration, iterations >= maxIteration {\n                return false\n            }\n            if let maxExecutionTime = maxExecutionTime,\n               now().timeIntervalSince1970 - startTime > maxExecutionTime\n            {\n                return false\n            }\n            return true\n        }\n\n        while shouldContinue() {\n            try Task.checkCancellation()\n            let nextStepOutput = try await takeNextStep(\n                input: input,\n                intermediateSteps: intermediateSteps,\n                callbackManagers: callbackManagers\n            )\n\n            try Task.checkCancellation()\n            switch nextStepOutput {\n            case let .finish(finish):\n                return end(\n                    output: finish,\n                    intermediateSteps: intermediateSteps,\n                    callbackManagers: callbackManagers\n                )\n            case let .actions(actions):\n                intermediateSteps.append(contentsOf: actions)\n                if actions.count == 1,\n                   let action = actions.first,\n                   let toolFinish = getToolFinish(action: action)\n                {\n                    return end(\n                        output: toolFinish,\n                        intermediateSteps: intermediateSteps,\n                        callbackManagers: callbackManagers\n                    )\n                }\n            }\n            iterations += 1\n        }\n\n        let output = try await agent.returnStoppedResponse(\n            input: input,\n            earlyStoppedHandleType: earlyStopHandleType,\n            intermediateSteps: intermediateSteps,\n            callbackManagers: callbackManagers\n        )\n        return end(\n            output: output,\n            intermediateSteps: intermediateSteps,\n            callbackManagers: callbackManagers\n        )\n    }\n\n    public nonisolated func parseOutput(_ output: Output) -> String {\n        switch output.finalOutput {\n        case let .unstructured(error): return error\n        case let .structured(output): return output.botReadableContent\n        }\n    }\n\n    public func cancel() {\n        isCancelled = true\n        earlyStopHandleType = .force\n    }\n}\n\nstruct InvalidToolError: Error {}\n\nextension AgentExecutor {\n    func end(\n        output: AgentFinish<InnerAgent.Output>,\n        intermediateSteps: [AgentAction],\n        callbackManagers: [CallbackManager]\n    ) -> Output {\n        for callbackManager in callbackManagers {\n            callbackManager.send(CallbackEvents.AgentDidFinish(info: output))\n        }\n        let finalOutput = output.returnValue\n        return .init(finalOutput: finalOutput, intermediateSteps: intermediateSteps)\n    }\n\n    /// Plan the scratch pad and let the agent decide what to do next\n    func takeNextStep(\n        input: Input,\n        intermediateSteps: [AgentAction],\n        callbackManagers: [CallbackManager]\n    ) async throws -> AgentNextStep<InnerAgent.Output> {\n        let output = try await agent.plan(\n            input: input,\n            intermediateSteps: intermediateSteps,\n            callbackManagers: callbackManagers\n        )\n        switch output {\n        // If the output says finish, then return the output immediately.\n        case .finish: return output\n        // If the output contains actions, run them, and append the results to the scratch pad.\n        case let .actions(actions):\n            let completedActions = try await withThrowingTaskGroup(of: AgentAction.self) {\n                taskGroup in\n                for action in actions {\n                    callbackManagers.send(CallbackEvents.AgentActionDidStart(info: action))\n                    if action.observation != nil {\n                        taskGroup.addTask { action }\n                        continue\n                    }\n                    guard let tool = tools[action.toolName] else { throw InvalidToolError() }\n                    taskGroup.addTask {\n                        do {\n                            let observation = try await tool.run(input: action.toolInput)\n                            return action.observationAvailable(observation)\n                        } catch {\n                            let observation = error.localizedDescription\n                            return action.observationAvailable(observation)\n                        }\n                    }\n                }\n                var completedActions = [AgentAction]()\n                for try await action in taskGroup {\n                    try Task.checkCancellation()\n                    completedActions.append(action)\n                    callbackManagers.send(CallbackEvents.AgentActionDidEnd(info: action))\n                }\n                return completedActions\n            }\n\n            return .actions(completedActions)\n        }\n    }\n\n    func getToolFinish(action: AgentAction) -> AgentFinish<InnerAgent.Output>? {\n        guard let tool = tools[action.toolName] else { return nil }\n        guard tool.returnDirectly else { return nil }\n\n        do {\n            let result = try InnerAgent.Output.parse(action.observation ?? \"\")\n            return .init(returnValue: .structured(result), log: action.observation ?? \"\")\n        } catch {\n            return .init(\n                returnValue: .unstructured(action.observation ?? \"no observation\"),\n                log: action.observation ?? \"\"\n            )\n        }\n    }\n}\n\n// MARK: - AgentOutputParsable\n\npublic protocol AgentOutputParsable {\n    static func parse(_ string: String) throws -> Self\n    var botReadableContent: String { get }\n}\n\nextension String: AgentOutputParsable {\n    public static func parse(_ string: String) throws -> String { string }\n    public var botReadableContent: String { self }\n}\n\nextension Int: AgentOutputParsable {\n    public static func parse(_ string: String) throws -> Int {\n        guard let int = Int(string) else { return 0 }\n        return int\n    }\n\n    public var botReadableContent: String { String(self) }\n}\n\nextension Double: AgentOutputParsable {\n    public static func parse(_ string: String) throws -> Double {\n        guard let double = Double(string) else { return 0 }\n        return double\n    }\n\n    public var botReadableContent: String { String(self) }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/AgentTool.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\n\npublic protocol AgentTool {\n    var name: String { get }\n    var description: String { get }\n    var returnDirectly: Bool { get }\n    func run(input: String) async throws -> String\n}\n\npublic struct SimpleAgentTool: AgentTool {\n    public let name: String\n    public let description: String\n    public let returnDirectly: Bool\n    public let run: (String) async throws -> String\n\n    public init(\n        name: String,\n        description: String,\n        returnDirectly: Bool = false,\n        run: @escaping (String) async throws -> String\n    ) {\n        self.name = name\n        self.description = description\n        self.returnDirectly = returnDirectly\n        self.run = run\n    }\n\n    public func run(input: String) async throws -> String {\n        try await run(input)\n    }\n}\n\npublic class FunctionCallingAgentTool<F: ChatGPTFunction>: AgentTool, ChatGPTFunction {\n    public func call(arguments: F.Arguments) async throws -> F.Result {\n        try await function.call(arguments: arguments, reportProgress: reportProgress)\n    }\n\n    public var argumentSchema: ChatBasic.JSONSchemaValue { function.argumentSchema }\n\n    public typealias Arguments = F.Arguments\n    public typealias Result = F.Result\n\n    public var function: F\n    public var name: String\n    public var description: String\n    public var returnDirectly: Bool\n\n    let callbackManagers: [CallbackManager]\n\n    public init(\n        function: F,\n        returnDirectly: Bool = false,\n        callbackManagers: [CallbackManager] = []\n    ) {\n        self.function = function\n        self.callbackManagers = callbackManagers\n        name = function.name\n        description = function.description\n        self.returnDirectly = returnDirectly\n    }\n\n    func reportProgress(_ progress: String) {\n        callbackManagers.send(\n            CallbackEvents.AgentFunctionCallingToolReportProgress(info: .init(\n                functionName: name,\n                progress: progress\n            ))\n        )\n    }\n\n    public func run(input: String) async throws -> String {\n        await prepare(reportProgress: { [weak self] p in\n            self?.reportProgress(p)\n        })\n        return try await call(\n            argumentsJsonString: input,\n            reportProgress: { [weak self] p in\n                self?.reportProgress(p)\n            }\n        )\n        .botReadableContent\n    }\n\n    public func prepare(reportProgress: @escaping ReportProgress) async {\n        await function.prepare(reportProgress: { [weak self] p in\n            self?.reportProgress(p)\n        })\n    }\n\n    public func call(\n        arguments: F.Arguments,\n        reportProgress: @escaping ReportProgress\n    ) async throws -> F.Result {\n        try await function.call(arguments: arguments, reportProgress: reportProgress)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Agents/ChatAgent.swift",
    "content": "import Foundation\nimport Logger\nimport Parsing\n\nprivate func formatInstruction(toolsNames: String, preferredLanguage: String) -> String {\n    \"\"\"\n    The way you use the tools is by specifying a json blob.\n    Specifically, this json should have a `action` key (with the name of the tool to use) and a `action_input` key (with the input to the tool going here).\n\n    The only values that should be in the \"action\" field are: \\(toolsNames)\n\n    The $JSON_BLOB should only contain a SINGLE action, do NOT return a list of multiple actions. Here is an example of a valid $JSON_BLOB:\n\n    ```\n    {\n      \"action\": $TOOL_NAME,\n      \"action_input\": $INPUT\n    }\n    ```\n\n    ALWAYS use the following format:\n\n    Question: the input question you must answer\n    Thought: you should always think about what to do\n    Action:\n    ```\n    $JSON_BLOB\n    ```\n    Observation: the result of the action\n    ... (this Thought/Action/Observation can repeat N times)\n    Thought: I now know the final answer\n    Final Answer: the final answer to the original input question \\(preferredLanguage)\n    \"\"\"\n}\n\npublic class ChatAgent: Agent {\n    public typealias Input = String\n    public typealias Output = String\n    public typealias ScratchPadContent = String\n    public var observationPrefix: String { \"Observation: \" }\n    public var llmPrefix: String { \"Thought: \" }\n    public let chatModelChain: ChatModelChain<AgentInput<String, String>>\n    let tools: [AgentTool]\n\n    public init(chatModel: ChatModel, tools: [AgentTool], preferredLanguage: String) {\n        self.tools = tools\n        chatModelChain = .init(\n            chatModel: chatModel,\n            stops: [\"Observation:\"],\n            promptTemplate: { agentInput in\n                [\n                    .init(\n                        role: .system,\n                        content: \"\"\"\n                        Respond to the human as helpfully and accurately as possible. \\\n                        Wrap any code block in thought in <code></code>. \\\n                        Format final answer to be more readable, in a ordered list if possible. \\\n                        You have access to the following tools:\n\n                        \\(tools.map { \"\\($0.name): \\($0.description)\" }.joined(separator: \"\\n\"))\n\n                        \\(formatInstruction(\n                            toolsNames: tools.map(\\.name).joined(separator: \",\"),\n                            preferredLanguage: preferredLanguage.isEmpty\n                                ? \"\"\n                                : \"(in \\(preferredLanguage)\"\n                        ))\n\n                        Begin! Reminder to always use the exact characters `Final Answer` when responding.\n                        \"\"\"\n                    ),\n                    agentInput.thoughts.content.isEmpty\n                        ? .init(role: .user, content: agentInput.input)\n                        : .init(\n                            role: .user,\n                            content: \"\"\"\n                            \\(agentInput.input)\n\n                            \\(agentInput.thoughts.content)\n                            \"\"\"\n                        ),\n                ]\n            }\n        )\n    }\n    \n    func constructBaseScratchpad(intermediateSteps: [AgentAction]) -> String {\n        var thoughts = \"\"\n        for step in intermediateSteps {\n            thoughts += \"\"\"\n            \\(step.log)\n            \\(observationPrefix)\\(step.observation ?? \"\")\n            \"\"\"\n        }\n        return thoughts\n    }\n\n    public func constructScratchpad(intermediateSteps: [AgentAction]) -> AgentScratchPad<String> {\n        let baseScratchpad = constructBaseScratchpad(intermediateSteps: intermediateSteps)\n        if baseScratchpad.isEmpty { return .init(content: \"\") }\n        return .init(content: \"\"\"\n        This was your previous work (but I haven't seen any of it! I only see what you return as `Final Answer`):\n        \\(baseScratchpad)\n        (Please continue with `Thought:` or `Final Answer:`)\n        \"\"\")\n    }\n    \n    public func constructFinalScratchpad(intermediateSteps: [AgentAction]) -> AgentScratchPad<String> {\n        let baseScratchpad = constructBaseScratchpad(intermediateSteps: intermediateSteps)\n        if baseScratchpad.isEmpty { return .init(content: \"\") }\n        return .init(content: \"\"\"\n        This was your previous work (but I haven't seen any of it! I only see what you return as `Final Answer`):\n        \\(baseScratchpad)\n        \\(llmPrefix)I now need to return a final answer based on the previous steps:\n        \"(Please continue with `Final Answer:`)\"\n        \"\"\")\n    }\n\n    public func validateTools(tools: [AgentTool]) throws {\n        // no validation\n    }\n\n    public func extraPlan(input: AgentInput<String, String>) {\n        // do nothing\n    }\n\n    public func parseOutput(_ output: ChatMessage) async -> AgentNextStep<Output> {\n        let text = output.content ?? \"\"\n\n        func parseFinalAnswerIfPossible() -> AgentNextStep<Output>? {\n            let throughAnswerParser = PrefixThrough(\"Final Answer:\")\n            var parsableContent = text[...]\n            do {\n                _ = try throughAnswerParser.parse(&parsableContent)\n                let answer = String(parsableContent)\n                let output = answer.trimmingCharacters(in: .whitespacesAndNewlines)\n                return .finish(AgentFinish(returnValue: .structured(output), log: text))\n            } catch {\n                Logger.langchain.info(\"Could not parse LLM output final answer: \\(error)\")\n                return nil\n            }\n        }\n\n        func parseNextActionIfPossible() -> AgentNextStep<Output>? {\n            let throughActionBlockParser = PrefixThrough(\"\"\"\n            Action:\n            ```\n            \"\"\")\n            let throughActionBlockSimplifiedParser = PrefixThrough(\"```\")\n            let jsonBlobParser = PrefixUpTo(\"```\")\n            var parsableContent = text[...]\n            do {\n                let actionBlockPrefix = try? throughActionBlockParser.parse(&parsableContent)\n                if actionBlockPrefix == nil {\n                    _ = try throughActionBlockSimplifiedParser.parse(&parsableContent)\n                }\n                let jsonBlob = try jsonBlobParser.parse(&parsableContent)\n\n                struct Action: Codable {\n                    let action: String\n                    let action_input: String\n                }\n                let response = try JSONDecoder()\n                    .decode(Action.self, from: jsonBlob.data(using: .utf8) ?? Data())\n                return .actions([\n                    AgentAction(\n                        toolName: response.action,\n                        toolInput: response.action_input,\n                        log: text\n                    ),\n                ])\n            } catch {\n                Logger.langchain.info(\"Could not parse LLM output next action: \\(error)\")\n                return nil\n            }\n        }\n\n        if let step = parseFinalAnswerIfPossible() { return step }\n        if let step = parseNextActionIfPossible() { return step }\n\n        let forceParser = PrefixUpTo(\"Action:\")\n        var parsableContent = text[...]\n        let finalAnswer = try? forceParser.parse(&parsableContent)\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n\n        var answer = finalAnswer ?? text\n        if answer.isEmpty {\n            answer = \"Sorry, I don't know.\"\n        }\n\n        return .finish(AgentFinish(returnValue: .structured(String(answer)), log: text))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Callback.swift",
    "content": "import Foundation\n\npublic protocol CallbackEvent {\n    associatedtype Info\n    var info: Info { get }\n}\n\npublic struct CallbackEvents {\n    public struct UnTypedEvent: CallbackEvent {\n        public var info: String\n        public init(info: String) {\n            self.info = info\n        }\n    }\n    \n    public var untyped: UnTypedEvent.Type { UnTypedEvent.self }\n    \n    private init() {}\n}\n\npublic struct CallbackManager {\n    struct Observer<Event: CallbackEvent> {\n        let handler: (Event.Info) -> Void\n    }\n    \n    fileprivate var observers = [Any]()\n\n    public init() {}\n\n    public init(observers: (inout CallbackManager) -> Void) {\n        var manager = CallbackManager()\n        observers(&manager)\n        self = manager\n    }\n\n    public mutating func on<Event: CallbackEvent>(\n        _: Event.Type = Event.self,\n        _ handler: @escaping (Event.Info) -> Void\n    ) {\n        observers.append(Observer<Event>(handler: handler))\n    }\n\n    public mutating func on<Event: CallbackEvent>(\n        _: KeyPath<CallbackEvents, Event.Type>,\n        _ handler: @escaping (Event.Info) -> Void\n    ) {\n        observers.append(Observer<Event>(handler: handler))\n    }\n\n    public func send<Event: CallbackEvent>(_ event: Event) {\n        for case let observer as Observer<Event> in observers {\n            observer.handler(event.info)\n        }\n    }\n\n    func send<Event: CallbackEvent>(\n        _: KeyPath<CallbackEvents, Event.Type>,\n        _ info: Event.Info\n    ) {\n        for case let observer as Observer<Event> in observers {\n            observer.handler(info)\n        }\n    }\n    \n    public func send(_ string: String) {\n        for case let observer as Observer<CallbackEvents.UnTypedEvent> in observers {\n            observer.handler(string)\n        }\n    }\n}\n\npublic extension [CallbackManager] {\n    func send<Event: CallbackEvent>(_ event: Event) {\n        for cb in self { cb.send(event) }\n    }\n\n    func send<Event: CallbackEvent>(\n        _ keyPath: KeyPath<CallbackEvents, Event.Type>,\n        _ info: Event.Info\n    ) {\n        for cb in self { cb.send(keyPath, info) }\n    }\n    \n    func send(_ event: String) {\n        for cb in self { cb.send(event) }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chain.swift",
    "content": "import Foundation\n\npublic protocol Chain {\n    associatedtype Input\n    associatedtype Output\n    func callLogic(_ input: Input, callbackManagers: [CallbackManager]) async throws -> Output\n    func parseOutput(_ output: Output) -> String\n}\n\npublic extension Chain {\n    typealias ChainDidStart = CallbackEvents.ChainDidStart<Self>\n    typealias ChainDidEnd = CallbackEvents.ChainDidEnd<Self>\n\n    func run(_ input: Input, callbackManagers: [CallbackManager] = []) async throws -> String {\n        let output = try await call(input, callbackManagers: callbackManagers)\n        return parseOutput(output)\n    }\n\n    func call(_ input: Input, callbackManagers: [CallbackManager] = []) async throws -> Output {\n        callbackManagers\n            .send(CallbackEvents.ChainDidStart(info: (type: Self.self, input: input)))\n        defer {\n            callbackManagers\n                .send(CallbackEvents.ChainDidEnd(info: (type: Self.self, input: input)))\n        }\n        return try await callLogic(input, callbackManagers: callbackManagers)\n    }\n}\n\npublic extension CallbackEvents {\n    struct ChainDidStart<T: Chain>: CallbackEvent {\n        public let info: (type: T.Type, input: T.Input)\n    }\n\n    struct ChainDidEnd<T: Chain>: CallbackEvent {\n        public let info: (type: T.Type, input: T.Input)\n    }\n}\n\npublic struct SimpleChain<Input, Output>: Chain {\n    let block: (Input) async throws -> Output\n    let parseOutputBlock: (Output) -> String\n\n    public init(\n        block: @escaping (Input) async throws -> Output,\n        parseOutput: @escaping (Output) -> String = { String(describing: $0) }\n    ) {\n        self.block = block\n        parseOutputBlock = parseOutput\n    }\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        return try await block(input)\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        return parseOutputBlock(output)\n    }\n}\n\npublic struct ConnectedChain<A: Chain, B: Chain>: Chain where B.Input == A.Output {\n    public typealias Input = A.Input\n    public typealias Output = (B.Output, A.Output)\n\n    public let chainA: A\n    public let chainB: B\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager] = []\n    ) async throws -> Output {\n        let a = try await chainA.call(input, callbackManagers: callbackManagers)\n        let b = try await chainB.call(a, callbackManagers: callbackManagers)\n        return (b, a)\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        chainB.parseOutput(output.0)\n    }\n}\n\npublic struct PairedChain<A: Chain, B: Chain>: Chain {\n    public typealias Input = (A.Input, B.Input)\n    public typealias Output = (A.Output, B.Output)\n\n    public let chainA: A\n    public let chainB: B\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager] = []\n    ) async throws -> Output {\n        async let a = chainA.call(input.0, callbackManagers: callbackManagers)\n        async let b = chainB.call(input.1, callbackManagers: callbackManagers)\n        return try await (a, b)\n    }\n\n    public func parseOutput(_ output: (A.Output, B.Output)) -> String {\n        [chainA.parseOutput(output.0), chainB.parseOutput(output.1)].joined(separator: \"\\n\")\n    }\n}\n\npublic struct MappedChain<A: Chain, NewOutput>: Chain {\n    public typealias Input = A.Input\n    public typealias Output = NewOutput\n\n    public let chain: A\n    public let map: (A.Output) -> NewOutput\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        let output = try await chain.call(input, callbackManagers: callbackManagers)\n        return map(output)\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        String(describing: output)\n    }\n}\n\npublic extension Chain {\n    func pair<C: Chain>(with another: C) -> PairedChain<Self, C> {\n        PairedChain(chainA: self, chainB: another)\n    }\n\n    func chain<C: Chain>(to another: C) -> ConnectedChain<Self, C> {\n        ConnectedChain(chainA: self, chainB: another)\n    }\n\n    func map<NewOutput>(_ map: @escaping (Output) -> NewOutput) -> MappedChain<Self, NewOutput> {\n        MappedChain(chain: self, map: map)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/CombineAnswersChain.swift",
    "content": "import Foundation\nimport Logger\nimport OpenAIService\nimport Preferences\n\npublic class CombineAnswersChain: Chain {\n    public struct Input: Decodable {\n        public var question: String\n        public var answers: [String]\n        public init(question: String, answers: [String]) {\n            self.question = question\n            self.answers = answers\n        }\n    }\n\n    public typealias Output = String\n    public let chatModelChain: ChatModelChain<Input>\n\n    public init(\n        configuration: ChatGPTConfiguration =\n            UserPreferenceChatGPTConfiguration(chatModelKey: \\.preferredChatModelIdForUtilities),\n        extraInstructions: String = \"\"\n    ) {\n        chatModelChain = .init(\n            chatModel: OpenAIChat(\n                configuration: configuration.overriding {\n                    $0.runFunctionsAutomatically = false\n                },\n                memory: nil,\n                stream: false\n            ),\n            stops: [\"Observation:\"],\n            promptTemplate: { input in\n                [\n                    .init(\n                        role: .system,\n                        content: \"\"\"\n                        You are a helpful assistant.\n                        Your job is to combine multiple answers from different sources to one question.\n                        \\(extraInstructions)\n                        \"\"\"\n                    ),\n                    .init(role: .user, content: \"\"\"\n                    Question: \\(input.question)\n\n                    Answers:\n                    \\(input.answers.joined(separator: \"\\n\\(String(repeating: \"-\", count: 32))\\n\"))\n\n                    What is the combined answer?\n                    \"\"\"),\n                ]\n            }\n        )\n    }\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> String {\n        let output = try await chatModelChain.call(input, callbackManagers: callbackManagers)\n        return await parseOutput(output)\n    }\n\n    public func parseOutput(_ message: ChatMessage) async -> String {\n        return message.content ?? \"No answer.\"\n    }\n\n    public func parseOutput(_ output: String) -> String {\n        output\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/LLMChain.swift",
    "content": "import Foundation\n\npublic class ChatModelChain<Input>: Chain {\n    public typealias Output = ChatMessage\n\n    public internal(set) var chatModel: ChatModel\n    public internal(set) var promptTemplate: (Input) -> [ChatMessage]\n    public internal(set) var stops: [String]\n\n    public init(\n        chatModel: ChatModel,\n        stops: [String] = [],\n        promptTemplate: @escaping (Input) -> [ChatMessage]\n    ) {\n        self.chatModel = chatModel\n        self.promptTemplate = promptTemplate\n        self.stops = stops\n    }\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        let prompt = promptTemplate(input)\n        let output = try await chatModel.generate(\n            prompt: prompt,\n            stops: stops,\n            callbackManagers: callbackManagers\n        )\n        return output\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        if let content = output.content {\n            return content\n        } else if let toolCalls = output.toolCalls {\n            return toolCalls.map { \"[\\($0.id)] \\($0.function.name): \\($0.function.arguments)\" }\n                .joined(separator: \"\\n\")\n        }\n\n        return \"\"\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/QAInformationRetrievalChain.swift",
    "content": "import Foundation\nimport OpenAIService\n\npublic final class QAInformationRetrievalChain: Chain {\n    let vectorStores: [VectorStore]\n    let embedding: Embeddings\n    let maxCount: Int\n    let filterMetadata: (String) -> Bool\n    let hint: String\n\n    public struct Output {\n        public var information: String\n        public var sourceDocuments: [Document]\n        public var distance: [Float]\n    }\n\n    public init(\n        vectorStore: VectorStore,\n        embedding: Embeddings,\n        maxCount: Int = 5,\n        filterMetadata: @escaping (String) -> Bool = { _ in true },\n        hint: String = \"\"\n    ) {\n        vectorStores = [vectorStore]\n        self.embedding = embedding\n        self.maxCount = maxCount\n        self.filterMetadata = filterMetadata\n        self.hint = hint\n    }\n\n    public init(\n        vectorStores: [VectorStore],\n        embedding: Embeddings,\n        maxCount: Int = 5,\n        filterMetadata: @escaping (String) -> Bool = { _ in true },\n        hint: String = \"\"\n    ) {\n        self.vectorStores = vectorStores\n        self.embedding = embedding\n        self.maxCount = maxCount\n        self.filterMetadata = filterMetadata\n        self.hint = hint\n    }\n\n    public func callLogic(\n        _ input: String,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        let embeddedQuestion = try await embedding.embed(query: input)\n        let documentsSlice = await withTaskGroup(\n            of: [(document: Document, distance: Float)].self\n        ) { group in\n            for vectorStore in vectorStores {\n                group.addTask {\n                    (try? await vectorStore.searchWithDistance(\n                        embeddings: embeddedQuestion,\n                        count: 5\n                    ).filter { item in\n                        item.distance < 0.31\n                    }) ?? []\n                }\n            }\n            var result = [(document: Document, distance: Float)]()\n            for await items in group {\n                result.append(contentsOf: items)\n            }\n            return result\n        }.sorted { $0.distance < $1.distance }.prefix(maxCount)\n\n        let documents = Array(documentsSlice)\n\n        callbackManagers.send(CallbackEvents.RetrievalQADidExtractRelevantContent(info: documents))\n\n        let relevantInformationChain = RelevantInformationExtractionChain(\n            filterMetadata: filterMetadata,\n            hint: hint\n        )\n        let relevantInformation = try await relevantInformationChain.run(\n            .init(question: input, documents: documents),\n            callbackManagers: callbackManagers\n        )\n\n        return .init(\n            information: relevantInformation,\n            sourceDocuments: documents.map(\\.document),\n            distance: documents.map(\\.distance)\n        )\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        return output.information\n    }\n}\n\npublic extension CallbackEvents {\n    struct RetrievalQADidExtractRelevantContent: CallbackEvent {\n        public let info: [(document: Document, distance: Float)]\n    }\n\n    var retrievalQADidExtractRelevantContent: RetrievalQADidExtractRelevantContent.Type {\n        RetrievalQADidExtractRelevantContent.self\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/RefineDocumentChain.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\nimport Preferences\n\npublic final class RefineDocumentChain: Chain {\n    public struct Input {\n        var question: String\n        var documents: [(document: Document, distance: Float)]\n    }\n\n    struct RefinementInput {\n        var index: Int\n        var totalCount: Int\n        var question: String\n        var previousAnswer: String?\n        var document: String\n        var distance: Float\n    }\n\n    public struct IntermediateAnswer: Decodable {\n        public var answer: String\n        public var usefulness: Double\n        public var more: Bool\n\n        public enum CodingKeys: String, CodingKey {\n            case answer\n            case usefulness\n            case more\n        }\n\n        init(answer: String, usefulness: Double, more: Bool) {\n            self.answer = answer\n            self.usefulness = usefulness\n            self.more = more\n        }\n\n        public init(from decoder: Decoder) throws {\n            let container = try decoder.container(keyedBy: CodingKeys.self)\n            answer = try container.decode(String.self, forKey: .answer)\n            usefulness = (try? container.decode(Double.self, forKey: .usefulness)) ?? 0\n            more = (try? container.decode(Bool.self, forKey: .more)) ?? true\n        }\n    }\n\n    class FunctionProvider: ChatGPTFunctionProvider {\n        var functionCallStrategy: FunctionCallStrategy? = .function(name: \"respond\")\n        var functions: [any ChatGPTFunction] = [RespondFunction()]\n    }\n\n    struct RespondFunction: ChatGPTArgumentsCollectingFunction {\n        typealias Arguments = IntermediateAnswer\n        var name: String = \"respond\"\n        var description: String = \"Respond with the refined answer\"\n        var argumentSchema: JSONSchemaValue {\n            return [\n                .type: \"object\",\n                .properties: [\n                    \"answer\": [\n                        .type: \"string\",\n                        .description: \"The refined answer\",\n                    ],\n                    \"usefulness\": [\n                        .type: \"number\",\n                        .description: \"How useful the page of document is in generating the answer, the higher the better. 0 to 10\",\n                    ],\n                    \"more\": [\n                        .type: \"boolean\",\n                        .description: \"Whether you want to read the next page. The next page maybe less relevant to the question\",\n                    ],\n                ],\n                .required: [\"answer\", \"more\", \"usefulness\"],\n            ]\n        }\n    }\n\n    func buildChatModel() -> ChatModelChain<RefinementInput> {\n        .init(\n            chatModel: OpenAIChat(\n                configuration: UserPreferenceChatGPTConfiguration(\n                    chatModelKey: \\.preferredChatModelIdForUtilities\n                )\n                .overriding {\n                    $0.temperature = 0\n                    $0.runFunctionsAutomatically = false\n                },\n                memory: EmptyChatGPTMemory(),\n                functionProvider: FunctionProvider(),\n                stream: false\n            ),\n            promptTemplate: { input in [\n                .init(\n                    role: .system,\n                    content: {\n                        if let previousAnswer = input.previousAnswer {\n                            return \"\"\"\n                            I will send you a question about a document, you must refine your previous answer to it only according to the document.\n                            Previous answer:###\n                            \\(previousAnswer)\n                            ###\n                            Page \\(input.index) of \\(input.totalCount) of the document:###\n                            \\(input.document)\n                            ###\n                            \"\"\"\n                        } else {\n                            return \"\"\"\n                            I will send you a question about a document, you must answer it only according to the document.\n                            Page \\(input.index) of \\(input.totalCount) of the document:###\n                            \\(input.document)\n                            ###\n                            \"\"\"\n                        }\n                    }()\n\n                ),\n                .init(role: .user, content: input.question),\n            ] }\n        )\n    }\n\n    public init() {}\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> String {\n        var intermediateAnswer: IntermediateAnswer?\n\n        for (index, document) in input.documents.enumerated() {\n            if let intermediateAnswer, !intermediateAnswer.more { break }\n\n            let output = try await buildChatModel().call(\n                .init(\n                    index: index,\n                    totalCount: input.documents.count,\n                    question: input.question,\n                    previousAnswer: intermediateAnswer?.answer,\n                    document: document.document.pageContent,\n                    distance: document.distance\n                ),\n                callbackManagers: callbackManagers\n            )\n            intermediateAnswer = extractAnswer(output)\n\n            if let intermediateAnswer {\n                callbackManagers.send(\n                    \\.refineDocumentChainDidGenerateIntermediateAnswer,\n                    intermediateAnswer\n                )\n            }\n        }\n\n        return intermediateAnswer?.answer ?? \"None\"\n    }\n\n    public func parseOutput(_ output: String) -> String {\n        return output\n    }\n\n    func extractAnswer(_ chatMessage: ChatMessage) -> IntermediateAnswer {\n        for functionCall in chatMessage.toolCalls?.map(\\.function) ?? [] {\n            do {\n                let intermediateAnswer = try JSONDecoder().decode(\n                    IntermediateAnswer.self,\n                    from: functionCall.arguments.data(using: .utf8) ?? Data()\n                )\n                return intermediateAnswer\n            } catch {\n                let intermediateAnswer = IntermediateAnswer(\n                    answer: functionCall.arguments,\n                    usefulness: 0,\n                    more: true\n                )\n                return intermediateAnswer\n            }\n        }\n        return .init(answer: chatMessage.content ?? \"\", usefulness: 0, more: true)\n    }\n}\n\npublic extension CallbackEvents {\n    struct RefineDocumentChainDidGenerateIntermediateAnswer: CallbackEvent {\n        public let info: RefineDocumentChain.IntermediateAnswer\n    }\n\n    var refineDocumentChainDidGenerateIntermediateAnswer:\n        RefineDocumentChainDidGenerateIntermediateAnswer.Type\n    {\n        RefineDocumentChainDidGenerateIntermediateAnswer.self\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/RelevantInformationExtractionChain.swift",
    "content": "import ChatBasic\nimport Foundation\nimport OpenAIService\nimport Preferences\n\npublic final class RelevantInformationExtractionChain: Chain {\n    public struct Input {\n        var question: String\n        var documents: [(document: Document, distance: Float)]\n    }\n\n    struct TaskInput {\n        var question: String\n        var document: Document\n    }\n\n    public typealias Output = String\n\n    class FunctionProvider: ChatGPTFunctionProvider {\n        var functionCallStrategy: FunctionCallStrategy? = .function(name: \"saveFinalAnswer\")\n        var functions: [any ChatGPTFunction] = [FinalAnswer()]\n    }\n\n    struct FinalAnswer: ChatGPTArgumentsCollectingFunction {\n        struct Arguments: Decodable {\n            var relevantInformation: String\n            var noRelevantInformationFound: Bool?\n        }\n\n        var name: String = \"saveFinalAnswer\"\n        var description: String =\n            \"save the relevant information\"\n        var argumentSchema: JSONSchemaValue {\n            [\n                .type: \"object\",\n                .properties: [\n                    \"relevantInformation\": [.type: \"string\"],\n                    \"noRelevantInformationFound\": [.type: \"boolean\"],\n                ],\n                .required: [\"relevantInformation\", \"noRelevantInformationFound\"],\n            ]\n        }\n    }\n\n    let filterMetadata: (String) -> Bool\n    let hint: String\n\n    init(filterMetadata: @escaping (String) -> Bool = { _ in true }, hint: String) {\n        self.filterMetadata = filterMetadata\n        self.hint = hint\n    }\n\n    func buildChatModel() -> ChatModelChain<TaskInput> {\n        .init(\n            chatModel: OpenAIChat(\n                configuration: UserPreferenceChatGPTConfiguration(\n                    chatModelKey: \\.preferredChatModelIdForUtilities\n                )\n                .overriding {\n                    $0.temperature = 0.5\n                    $0.runFunctionsAutomatically = false\n                },\n                memory: EmptyChatGPTMemory(),\n                functionProvider: FunctionProvider(),\n                stream: false\n            )\n        ) { [filterMetadata, hint] input in [\n            .init(\n                role: .system,\n                content: \"\"\"\n                Extract the relevant information from the Document according to the Question.\n                The information may not directly answer the question, but it should be relevant to the question, \\\n                please think carefully and make you decision.\n                Make the information clear, concise and short.\n                If found code, wrap it in markdown code block.\n                \\(hint)\n                \"\"\"\n            ),\n            .init(\n                role: .user,\n                content: \"\"\"\n                Question:###\n                (how, when, what or why)\n                \\(input.question)\n                ###\n                Document:###\n                \\(input.document.metadata.filter { key, _ in\n                    filterMetadata(key)\n                })\n                \\(input.document.pageContent)\n                ###\n                \"\"\"\n            ),\n        ] }\n    }\n\n    public func callLogic(\n        _ input: Input,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output {\n        await withTaskGroup(of: String.self) { group in\n            for document in input.documents {\n                let taskInput = TaskInput(question: input.question, document: document.document)\n                group.addTask {\n                    func run() async throws -> String {\n                        let model = self.buildChatModel()\n                        let output = try await model.call(\n                            taskInput,\n                            callbackManagers: callbackManagers\n                        )\n\n                        if let functionCall = output.toolCalls?\n                            .first(where: { $0.function.name == FinalAnswer().name })?.function\n                        {\n                            do {\n                                let arguments = try JSONDecoder().decode(\n                                    FinalAnswer.Arguments.self,\n                                    from: functionCall.arguments.data(using: .utf8) ?? Data()\n                                )\n                                if arguments.noRelevantInformationFound ?? false {\n                                    return \"\"\n                                }\n                                return arguments.relevantInformation\n                            } catch {\n                                return output.content ?? \"\"\n                            }\n                        }\n\n                        return output.content ?? \"\"\n                    }\n\n                    var repeatCount = 0\n                    while repeatCount < 3 {\n                        do {\n                            return try await run()\n                        } catch {\n                            repeatCount += 1\n                        }\n                    }\n                    return \"\"\n                }\n            }\n\n            var results = [String]()\n            for await output in group where !output.isEmpty {\n                callbackManagers.send(\n                    \\.relevantInformationExtractionChainDidExtractPartialRelevantContent,\n                    output\n                )\n                let trimmed = output.trimmingCharacters(in: .whitespacesAndNewlines)\n                if results.contains(trimmed) { continue }\n                results.append(trimmed)\n            }\n            if results.isEmpty { return \"No information found.\" }\n            return results.joined(separator: \"\")\n        }\n    }\n\n    public func parseOutput(_ output: Output) -> String {\n        return output\n    }\n}\n\npublic extension CallbackEvents {\n    struct RelevantInformationExtractionChainDidExtractPartialRelevantContent: CallbackEvent {\n        public let info: String\n    }\n\n    var relevantInformationExtractionChainDidExtractPartialRelevantContent:\n        RelevantInformationExtractionChainDidExtractPartialRelevantContent.Type\n    {\n        RelevantInformationExtractionChainDidExtractPartialRelevantContent.self\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Chains/StructuredOutputChatModelChain.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Logger\nimport OpenAIService\n\n/// This is an agent used to get a structured output.\npublic class StructuredOutputChatModelChain<Output: Decodable>: Chain {\n    public struct EndFunction: ChatGPTArgumentsCollectingFunction {\n        public struct Arguments: Decodable {\n            var finalAnswer: Output\n        }\n\n        public var name: String { \"FinalAnswer\" }\n        public var description: String { \"Save the final answer when it's ready\" }\n        public var argumentSchema: JSONSchemaValue {\n            return [\n                .type: \"object\",\n                .properties: [\n                    \"finalAnswer\": .hash(finalAnswerSchema),\n                ],\n                .required: [\"finalAnswer\"],\n            ]\n        }\n\n        public let finalAnswerSchema: [String: JSONSchemaValue]\n\n        public init(argumentSchema: [String: JSONSchemaValue]) {\n            finalAnswerSchema = argumentSchema\n        }\n\n        public init() where Output == String {\n            finalAnswerSchema = [\n                JSONSchemaKey.type.key: \"string\",\n            ]\n        }\n\n        public init() where Output == Int {\n            finalAnswerSchema = [\n                JSONSchemaKey.type.key: \"number\",\n            ]\n        }\n\n        public init() where Output == Double {\n            finalAnswerSchema = [\n                JSONSchemaKey.type.key: \"number\",\n            ]\n        }\n    }\n\n    struct FunctionProvider: ChatGPTFunctionProvider {\n        var endFunction: EndFunction\n        var functions: [any ChatGPTFunction] {\n            [endFunction]\n        }\n\n        var functionCallStrategy: FunctionCallStrategy? {\n            .function(name: endFunction.name)\n        }\n    }\n\n    public typealias Input = String\n    public let chatModelChain: ChatModelChain<String>\n    var functionProvider: FunctionProvider\n\n    public init(\n        configuration: ChatGPTConfiguration = UserPreferenceChatGPTConfiguration(),\n        endFunction: EndFunction,\n        promptTemplate: ((String) -> [ChatMessage])? = nil\n    ) {\n        functionProvider = .init(\n            endFunction: endFunction\n        )\n        chatModelChain = .init(\n            chatModel: OpenAIChat(\n                configuration: configuration.overriding {\n                    $0.runFunctionsAutomatically = false\n                },\n                memory: nil,\n                functionProvider: functionProvider,\n                stream: false\n            ),\n            stops: [\"Observation:\"],\n            promptTemplate: promptTemplate ?? { input in\n                [\n                    .init(\n                        role: .system,\n                        content: \"\"\"\n                        You are a helpful assistant\n                        Generate a final answer to my query as concisely, helpfully and accurately as possible.\n                        You don't ask me for additional information.\n                        \"\"\"\n                    ),\n                    .init(role: .user, content: input),\n                ]\n            }\n        )\n    }\n\n    public func callLogic(\n        _ input: String,\n        callbackManagers: [CallbackManager]\n    ) async throws -> Output? {\n        let output = try await chatModelChain.call(input, callbackManagers: callbackManagers)\n        return await parseOutput(output)\n    }\n\n    public func parseOutput(_ output: Output?) -> String {\n        return String(describing: output)\n    }\n\n    public func parseOutput(_ message: ChatMessage) async -> Output? {\n        if let functionCall = message.toolCalls?.first?.function {\n            do {\n                let result = try JSONDecoder().decode(\n                    EndFunction.Arguments.self,\n                    from: functionCall.arguments.data(using: .utf8) ?? Data()\n                )\n                return result.finalAnswer\n            } catch {\n                return nil\n            }\n        }\n\n        return nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/ChatModel/ChatModel.swift",
    "content": "import Foundation\nimport OpenAIService\n\npublic protocol ChatModel {\n    func generate(\n        prompt: [ChatMessage],\n        stops: [String],\n        callbackManagers: [CallbackManager]\n    ) async throws -> ChatMessage\n}\n\npublic typealias ChatMessage = OpenAIService.ChatMessage\n    \npublic extension CallbackEvents {\n    struct LLMDidProduceNewToken: CallbackEvent {\n        public let info: String\n    }\n    \n    var llmDidProduceNewToken: LLMDidProduceNewToken.Type {\n        LLMDidProduceNewToken.self\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/LangChain/ChatModel/OpenAIChat.swift",
    "content": "import Foundation\nimport OpenAIService\n\npublic struct OpenAIChat: ChatModel {\n    public var configuration: ChatGPTConfiguration\n    public var memory: ChatGPTMemory?\n    public var functionProvider: ChatGPTFunctionProvider\n    public var stream: Bool\n\n    public init(\n        configuration: ChatGPTConfiguration = UserPreferenceChatGPTConfiguration(),\n        memory: ChatGPTMemory? = ConversationChatGPTMemory(systemPrompt: \"\"),\n        functionProvider: ChatGPTFunctionProvider = NoChatGPTFunctionProvider(),\n        stream: Bool\n    ) {\n        self.configuration = configuration\n        self.memory = memory\n        self.functionProvider = functionProvider\n        self.stream = stream\n    }\n\n    public func generate(\n        prompt: [ChatMessage],\n        stops: [String],\n        callbackManagers: [CallbackManager]\n    ) async throws -> ChatMessage {\n        let memory = memory ?? EmptyChatGPTMemory()\n        \n        let service = LegacyChatGPTService(\n            memory: memory,\n            configuration: configuration,\n            functionProvider: functionProvider\n        )\n        for message in prompt {\n            await memory.appendMessage(message)\n        }\n\n        if stream {\n            let stream = try await service.send(content: \"\")\n            var message = \"\"\n            for try await chunk in stream {\n                message.append(chunk)\n                callbackManagers.send(CallbackEvents.LLMDidProduceNewToken(info: chunk))\n            }\n            return await memory.history.last ?? .init(role: .assistant, content: \"\")\n        } else {\n            let _ = try await service.sendAndWait(content: \"\")\n            return await memory.history.last ?? .init(role: .assistant, content: \"\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentLoader/DocumentLoader.swift",
    "content": "import Foundation\nimport JSONRPC\n\npublic struct Document: Codable {\n    public typealias Metadata = [String: JSONValue]\n    public var pageContent: String\n    public var metadata: Metadata\n    public init(pageContent: String, metadata: Metadata) {\n        self.pageContent = pageContent\n        self.metadata = metadata\n    }\n    \n    public func metadata<Key>(_ keyPath: KeyPath<Key.Type, String>) -> JSONValue? {\n        let key = Key.self[keyPath: keyPath]\n        return metadata[key]\n    }\n}\n\npublic protocol DocumentLoader {\n    func load() async throws -> [Document]\n}\n\nextension DocumentLoader {\n    func loadAndSplit(\n        with textSplitter: TextSplitter = RecursiveCharacterTextSplitter()\n    ) async throws -> [Document] {\n        let docs = try await load()\n        return try await textSplitter.splitDocuments(docs)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentLoader/TextLoader.swift",
    "content": "import AppKit\nimport Foundation\n\n/// Load a text document from local file.\npublic struct TextLoader: DocumentLoader {\n    public enum MetadataKeys {\n        public static let filename = \"filename\"\n        public static let `extension` = \"extension\"\n        public static let contentModificationDate = \"contentModificationDate\"\n        public static let filePath = \"filePath\"\n    }\n    \n    let url: URL\n    let encoding: String.Encoding\n    let options: [NSAttributedString.DocumentReadingOptionKey: Any]\n\n    public init(\n        url: URL,\n        encoding: String.Encoding = .utf8,\n        options: [NSAttributedString.DocumentReadingOptionKey: Any] = [:]\n    ) {\n        self.url = url\n        self.encoding = encoding\n        self.options = options\n    }\n\n    public func load() async throws -> [Document] {\n        let data = try Data(contentsOf: url)\n        let attributedString = try NSAttributedString(\n            data: data,\n            options: options,\n            documentAttributes: nil\n        )\n        let modificationDate = try? url.resourceValues(forKeys: [.contentModificationDateKey])\n            .contentModificationDate\n        return [Document(pageContent: attributedString.string, metadata: [\n            MetadataKeys.filename: .string(url.lastPathComponent),\n            MetadataKeys.extension: .string(url.pathExtension),\n            MetadataKeys.contentModificationDate: .number(\n                (modificationDate ?? Date()).timeIntervalSince1970\n            ),\n            MetadataKeys.filePath: .string(url.path),\n        ])]\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentLoader/WebLoader.swift",
    "content": "import Foundation\nimport Logger\nimport SwiftSoup\nimport WebKit\n\n/// Load the body of a web page.\npublic struct WebLoader: DocumentLoader {\n    enum MetadataKeys {\n        static let title = \"title\"\n        static let url = \"url\"\n        static let date = \"date\"\n    }\n\n    var downloadHTML: (_ url: URL, _ strategy: LoadWebPageMainContentStrategy) async throws\n        -> (url: URL, html: String, strategy: LoadWebPageMainContentStrategy) = { url, strategy in\n            let html = try await WebScrapper(strategy: strategy).fetch(url: url)\n            return (url, html, strategy)\n        }\n\n    public var urls: [URL]\n\n    public init(urls: [URL]) {\n        self.urls = urls\n    }\n\n    public init(url: URL) {\n        urls = [url]\n    }\n\n    public func load() async throws -> [Document] {\n        try await withThrowingTaskGroup(of: (\n            url: URL,\n            html: String,\n            strategy: LoadWebPageMainContentStrategy\n        ).self) { group in\n            for url in urls {\n                let strategy: LoadWebPageMainContentStrategy = {\n                    switch url {\n                    default:\n                        return DefaultLoadContentStrategy()\n                    }\n                }()\n                group.addTask {\n                    try await downloadHTML(url, strategy)\n                }\n            }\n            var documents: [Document] = []\n            for try await result in group {\n                do {\n                    let parsed = try SwiftSoup.parse(result.html, result.url.path)\n\n                    let title = (try? parsed.title()) ?? \"Untitled\"\n                    let parsedDocuments = try result.strategy.load(\n                        parsed,\n                        metadata: [\n                            MetadataKeys.title: .string(title),\n                            MetadataKeys.url: .string(result.url.absoluteString),\n                            MetadataKeys.date: .number(Date().timeIntervalSince1970),\n                        ]\n                    )\n                    documents.append(contentsOf: parsedDocuments)\n                } catch let Exception.Error(_, message) {\n                    Logger.langchain.error(message)\n                } catch {\n                    Logger.langchain.error(error.localizedDescription)\n                }\n            }\n            return documents\n        }\n    }\n}\n\n// MARK: - WebScrapper\n\n@MainActor\npublic final class WebScrapper: NSObject, WKNavigationDelegate {\n    public var webView: WKWebView\n\n    let strategy: LoadWebPageMainContentStrategy\n    let retryLimit: Int\n    var webViewDidFinishLoading = false\n    var navigationError: (any Error)?\n\n    enum WebScrapperError: Error {\n        case retry\n    }\n    \n    init(\n        retryLimit: Int = 10,\n        strategy: LoadWebPageMainContentStrategy\n    ) {\n        self.retryLimit = retryLimit\n        self.strategy = strategy\n        let configuration = WKWebViewConfiguration()\n        configuration.defaultWebpagePreferences.preferredContentMode = .desktop\n        configuration.defaultWebpagePreferences.allowsContentJavaScript = true\n        configuration\n            .applicationNameForUserAgent =\n            \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15\"\n        // The web page need the web view to have a size to load correctly.\n        let webView = WKWebView(\n            frame: .init(x: 0, y: 0, width: 500, height: 500),\n            configuration: configuration\n        )\n        self.webView = webView\n        super.init()\n        webView.navigationDelegate = self\n    }\n\n    func fetch(url: URL) async throws -> String {\n        webViewDidFinishLoading = false\n        navigationError = nil\n        var retryCount = 0\n        _ = webView.load(.init(url: url))\n        while !webViewDidFinishLoading {\n            try await Task.sleep(nanoseconds: 10_000_000)\n        }\n        if let navigationError { throw navigationError }\n        while retryCount < retryLimit {\n            if let html = try? await getHTML(), !html.isEmpty,\n               let document = try? SwiftSoup.parse(html, url.path),\n               strategy.validate(document)\n            {\n                return html\n            }\n            retryCount += 1\n            try await Task.sleep(nanoseconds: 100_000_000)\n        }\n\n        throw CancellationError()\n    }\n\n    public nonisolated func webView(_: WKWebView, didFinish _: WKNavigation!) {\n        Task { @MainActor in\n            self.webViewDidFinishLoading = true\n        }\n    }\n\n    public nonisolated func webView(\n        _: WKWebView,\n        didFail _: WKNavigation!,\n        withError error: Error\n    ) {\n        Task { @MainActor in\n            self.navigationError = error\n            self.webViewDidFinishLoading = true\n        }\n    }\n\n    func getHTML() async throws -> String {\n        do {\n            let isReady = try await webView.evaluateJavaScript(checkIfReady) as? Bool ?? false\n            if !isReady { throw WebScrapperError.retry }\n            return try await webView.evaluateJavaScript(getHTMLText) as? String ?? \"\"\n        } catch {\n            throw WebScrapperError.retry\n        }\n    }\n}\n\nprivate let getHTMLText = \"\"\"\ndocument.documentElement.outerHTML;\n\"\"\"\n\nprivate let checkIfReady = \"\"\"\ndocument.readyState === \"ready\" || document.readyState === \"complete\";\n\"\"\"\n\n// MARK: - LoadWebPageMainContentStrategy\n\nprotocol LoadWebPageMainContentStrategy {\n    /// Load the web content into several documents.\n    func load(_ document: SwiftSoup.Document, metadata: Document.Metadata) throws -> [Document]\n    /// Validate if the web page is fully loaded.\n    func validate(_ document: SwiftSoup.Document) -> Bool\n}\n\nextension LoadWebPageMainContentStrategy {\n    func text(inFirstTag tagName: String, from document: SwiftSoup.Document) -> String? {\n        if let tag = try? document.getElementsByTag(tagName).first(),\n           let text = try? tag.text()\n        {\n            return text\n        }\n        return nil\n    }\n}\n\nextension WebLoader {\n    struct DefaultLoadContentStrategy: LoadWebPageMainContentStrategy {\n        func load(\n            _ document: SwiftSoup.Document,\n            metadata: Document.Metadata\n        ) throws -> [Document] {\n            if let mainContent = try? {\n                if let article = text(inFirstTag: \"article\", from: document) { return article }\n                if let main = text(inFirstTag: \"main\", from: document) { return main }\n                let body = try document.body()?.text()\n                return body\n            }() {\n                return [.init(pageContent: mainContent, metadata: metadata)]\n            }\n            return []\n        }\n\n        func validate(_: SwiftSoup.Document) -> Bool {\n            return true\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentTransformer/DocumentTransformer.swift",
    "content": "import Foundation\n\npublic protocol DocumentTransformer {\n    func transformDocuments(_ documents: [Document]) async throws -> [Document]\n}\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentTransformer/RecursiveCharacterTextSplitter.swift",
    "content": "import Foundation\n\n/// Implementation of splitting text that looks at characters.\n/// Recursively tries to split by different characters to find one that works.\npublic class RecursiveCharacterTextSplitter: TextSplitter {\n    public var chunkSize: Int\n    public var chunkOverlap: Int\n    public var lengthFunction: (String) -> Int\n\n    /// A list of separators to try. They will be used in order. Supports regular expressions.\n    public var separators: [String]\n\n    /// Create a new splitter\n    /// - Parameters:\n    ///    - separators: A list of separators to try. They will be used in order. Supports regular\n    /// expressions.\n    ///    - chunkSize: The maximum size of chunks. Don't use chunk size larger than 8191, because\n    /// length safe embedding is not implemented.\n    ///    - chunkOverlap: The maximum overlap between chunks.\n    ///    - lengthFunction: A function to compute the length of text.\n    public init(\n        separators: [String],\n        chunkSize: Int = 4000,\n        chunkOverlap: Int = 200,\n        lengthFunction: @escaping (String) -> Int = { $0.count }\n    ) {\n        assert(chunkOverlap <= chunkSize)\n        self.chunkSize = chunkSize\n        self.chunkOverlap = chunkOverlap\n        self.lengthFunction = lengthFunction\n        self.separators = separators\n    }\n\n    // Create a new splitter\n    /// - Parameters:\n    ///    - separatorSet: A set of separators to try.\n    ///    - chunkSize: The maximum size of chunks. Don't use chunk size larger than 8191, because\n    /// length safe embedding is not implemented.\n    ///    - chunkOverlap: The maximum overlap between chunks.\n    ///    - lengthFunction: A function to compute the length of text.\n    public init(\n        separatorSet: TextSplitterSeparatorSet = .default,\n        chunkSize: Int = 4000,\n        chunkOverlap: Int = 200,\n        lengthFunction: @escaping (String) -> Int = { $0.count }\n    ) {\n        assert(chunkOverlap <= chunkSize)\n        self.chunkSize = chunkSize\n        self.chunkOverlap = chunkOverlap\n        self.lengthFunction = lengthFunction\n        separators = separatorSet.separators\n    }\n\n    public func split(text: String) async throws -> [TextChunk] {\n        return split(text: text, separators: separators, startIndex: 0)\n    }\n\n    private func split(text: String, separators: [String], startIndex: Int) -> [TextChunk] {\n        var finalChunks = [TextChunk]()\n\n        // Get appropriate separator to use\n        let firstSeparatorIndex = separators.firstIndex {\n            let pattern = \"(\\($0))\"\n            guard let regex = try? NSRegularExpression(pattern: pattern) else { return false }\n            return regex.firstMatch(\n                in: text,\n                options: [],\n                range: NSRange(text.startIndex..., in: text)\n            ) != nil\n        }\n        var separator: String\n        var nextSeparators: [String]\n\n        if let index = firstSeparatorIndex {\n            separator = separators[index]\n            if index < separators.endIndex - 1 {\n                nextSeparators = Array(separators[(index + 1)...])\n            } else {\n                nextSeparators = []\n            }\n        } else {\n            separator = \"\"\n            nextSeparators = []\n        }\n\n        let splits = split(text: text, separator: separator, startIndex: startIndex)\n\n        // Now go merging things, recursively splitting longer texts.\n        var goodSplits = [TextChunk]()\n        for s in splits {\n            if lengthFunction(s.text) < chunkSize {\n                goodSplits.append(s)\n            } else {\n                if !goodSplits.isEmpty {\n                    let mergedText = mergeSplits(goodSplits)\n                    finalChunks.append(contentsOf: mergedText)\n                    goodSplits.removeAll()\n                }\n                if nextSeparators.isEmpty {\n                    finalChunks.append(s)\n                } else {\n                    let other_info = split(\n                        text: s.text,\n                        separators: nextSeparators,\n                        startIndex: s.startUTF16Offset\n                    )\n                    finalChunks.append(contentsOf: other_info)\n                }\n            }\n        }\n        if !goodSplits.isEmpty {\n            let merged_text = mergeSplits(goodSplits)\n            finalChunks.append(contentsOf: merged_text)\n        }\n        return finalChunks\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentTransformer/TextSplitter.swift",
    "content": "import Foundation\nimport JSONRPC\n\n/// Split text into multiple components.\npublic protocol TextSplitter: DocumentTransformer {\n    /// The maximum size of chunks.\n    var chunkSize: Int { get }\n    /// The maximum overlap between chunks.\n    var chunkOverlap: Int { get }\n    /// A function to compute the length of text.\n    var lengthFunction: (String) -> Int { get }\n\n    /// Split text into multiple components.\n    func split(text: String) async throws -> [TextChunk]\n}\n\npublic extension TextSplitter {\n    /// Create documents from a list of texts.\n    func createDocuments(\n        texts: [String],\n        metadata: [Document.Metadata] = []\n    ) async throws -> [Document] {\n        var documents = [Document]()\n        let paddingLength = texts.count - metadata.count\n        let metadata = metadata + .init(repeating: [:], count: paddingLength)\n        for (text, metadata) in zip(texts, metadata) {\n            let chunks = try await split(text: text)\n            for chunk in chunks {\n                var metadata = metadata\n                metadata[\"startUTF16Offset\"] = .number(Double(chunk.startUTF16Offset))\n                metadata[\"endUTF16Offset\"] = .number(Double(chunk.endUTF16Offset))\n                let document = Document(pageContent: chunk.text, metadata: metadata)\n                documents.append(document)\n            }\n        }\n        return documents\n    }\n\n    /// Split documents.\n    func splitDocuments(_ documents: [Document]) async throws -> [Document] {\n        var texts = [String]()\n        var metadata = [Document.Metadata]()\n        for document in documents {\n            texts.append(document.pageContent)\n            metadata.append(document.metadata)\n        }\n        return try await createDocuments(texts: texts, metadata: metadata)\n    }\n\n    /// Transform sequence of documents by splitting them.\n    func transformDocuments(_ documents: [Document]) async throws -> [Document] {\n        return try await splitDocuments(documents)\n    }\n\n    func joinDocuments(_ documents: [Document]) -> Document {\n        let textChunks: [TextChunk] = documents.compactMap { document in\n            func extract(_ key: String) -> Int? {\n                if case let .number(d) = document.metadata[key] {\n                    return Int(d)\n                }\n                return nil\n            }\n            guard let start = extract(\"startUTF16Offset\"),\n                  let end = extract(\"endUTF16Offset\")\n            else { return nil }\n            return TextChunk(\n                text: document.pageContent,\n                startUTF16Offset: start,\n                endUTF16Offset: end\n            )\n        }.sorted(by: { $0.startUTF16Offset < $1.startUTF16Offset })\n        var sumChunk: TextChunk?\n        for chunk in textChunks {\n            if let current = sumChunk {\n                if let merged = current.merged(with: chunk, force: true) {\n                    sumChunk = merged\n                }\n            } else {\n                sumChunk = chunk\n            }\n        }\n        let pageContent = sumChunk?.text ?? \"\"\n        var metadata = documents.first?.metadata ?? [String: JSONValue]()\n        metadata[\"startUTF16Offset\"] = nil\n        metadata[\"endUTF16Offset\"] = nil\n\n        return Document(pageContent: pageContent, metadata: metadata)\n    }\n}\n\npublic struct TextChunk: Equatable {\n    public var text: String\n    public var startUTF16Offset: Int\n    public var endUTF16Offset: Int\n\n    /// Merge the current chunk with another chunk if the 2 chunks are overlapping or adjacent.\n    public func merged(with chunk: TextChunk, force: Bool = false) -> TextChunk? {\n        let frontChunk = startUTF16Offset < chunk.startUTF16Offset ? self : chunk\n        let backChunk = startUTF16Offset < chunk.startUTF16Offset ? chunk : self\n        let overlap = frontChunk.endUTF16Offset - backChunk.startUTF16Offset\n        guard overlap >= 0 || force else { return nil }\n\n        let text = frontChunk.text + backChunk.text.dropFirst(max(0, overlap))\n        let start = frontChunk.startUTF16Offset\n        let end = backChunk.endUTF16Offset\n        return TextChunk(text: text, startUTF16Offset: start, endUTF16Offset: end)\n    }\n}\n\npublic extension TextSplitter {\n    /// Merge small splits to just fit in the chunk size.\n    func mergeSplits(_ splits: [TextChunk]) -> [TextChunk] {\n        let chunkOverlap = chunkOverlap < chunkSize ? chunkOverlap : 0\n\n        var chunks = [TextChunk]()\n        var currentChunk = [TextChunk]()\n        var overlappingChunks = [TextChunk]()\n        var currentChunkSize = 0\n\n        func join(_ a: [TextChunk], _ b: [TextChunk]) -> TextChunk? {\n            let text = (a + b).map(\\.text).joined()\n            var l = Int.max\n            var u = 0\n\n            for chunk in a + b {\n                l = min(l, chunk.startUTF16Offset)\n                u = max(u, chunk.endUTF16Offset)\n            }\n\n            guard l < u else { return nil }\n\n            return .init(text: text, startUTF16Offset: l, endUTF16Offset: u)\n        }\n\n        for chunk in splits {\n            let textLength = lengthFunction(chunk.text)\n            if currentChunkSize + textLength > chunkSize {\n                guard let currentChunkText = join(overlappingChunks, currentChunk) else { continue }\n                chunks.append(currentChunkText)\n\n                overlappingChunks = []\n                var overlappingSize = 0\n                // use small chunks as overlap if possible\n                for chunk in currentChunk.reversed() {\n                    let length = lengthFunction(chunk.text)\n                    if overlappingSize + length > chunkOverlap { break }\n                    if overlappingSize + length + textLength > chunkSize { break }\n                    overlappingSize += length\n                    overlappingChunks.insert(chunk, at: 0)\n                }\n//                // fallback to use suffix if no small chunk found\n//                if overlappingChunks.isEmpty {\n//                    let suffix = String(\n//                        currentChunkText.suffix(min(chunkOverlap, chunkSize - textLength))\n//                    )\n//                    overlappingChunks.append(suffix)\n//                    overlappingSize = lengthFunction(suffix)\n//                }\n\n                currentChunkSize = overlappingSize + textLength\n                currentChunk = [chunk]\n            } else {\n                currentChunkSize += textLength\n                currentChunk.append(chunk)\n            }\n        }\n\n        if !currentChunk.isEmpty, let joinedChunks = join(overlappingChunks, currentChunk) {\n            chunks.append(joinedChunks)\n        } else {\n            chunks.append(contentsOf: overlappingChunks)\n            chunks.append(contentsOf: currentChunk)\n        }\n\n        return chunks\n    }\n\n    /// Split the text by separator.\n    func split(text: String, separator: String, startIndex: Int = 0) -> [TextChunk] {\n        let pattern = \"(\\(separator))\"\n        if !separator.isEmpty, let regex = try? NSRegularExpression(pattern: pattern) {\n            let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))\n            var all = [TextChunk]()\n            var start = text.startIndex\n            for match in matches {\n                guard let range = Range(match.range, in: text) else { break }\n                guard range.lowerBound > start else { break }\n                let result = text[start..<range.lowerBound]\n                if !result.isEmpty {\n                    all.append(.init(\n                        text: String(result),\n                        startUTF16Offset: start.utf16Offset(in: text) + startIndex,\n                        endUTF16Offset: range.lowerBound.utf16Offset(in: text) + startIndex\n                    ))\n                }\n                start = range.lowerBound\n            }\n            if start < text.endIndex {\n                all.append(.init(\n                    text: String(text[start...]),\n                    startUTF16Offset: start.utf16Offset(in: text) + startIndex,\n                    endUTF16Offset: text.endIndex.utf16Offset(in: text) + startIndex\n                ))\n            }\n            return all\n        } else {\n            return [.init(\n                text: text,\n                startUTF16Offset: text.startIndex.utf16Offset(in: text) + startIndex,\n                endUTF16Offset: text.endIndex.utf16Offset(in: text) + startIndex\n            )]\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/DocumentTransformer/TextSplitterSeparatorSet.swift",
    "content": "public struct TextSplitterSeparatorSet: ExpressibleByArrayLiteral {\n    public typealias ArrayLiteralElement = String\n\n    public var separators: [String]\n    public init(arrayLiteral elements: String...) {\n        separators = elements\n    }\n\n    public static var swift: TextSplitterSeparatorSet {\n        [\n            // Split macros, property wrappers, actor\n            \"\\n@\\\\w+\\\\s\",\n            \"\\n#\\\\w+\\\\s\",\n            // Split scopes\n            \"\\npublic \",\n            \"\\nprivate \",\n            \"\\nfileprivate \",\n            \"\\nopen \",\n            \"\\nfinal \",\n            // Split along class definitions\n            \"\\nclass \",\n            \"\\nstruct \",\n            \"\\nenum \",\n            \"\\nextension \",\n            \"\\nprotocol \",\n            \"\\nactor \",\n            // Split along function definitions\n            \"\\nstatic \",\n            \"\\nfunc \",\n            \"\\ninit \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nwhile \",\n            \"\\ndo \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var cpp: TextSplitterSeparatorSet {\n        [\n            // Split along class definitions\n            \"\\nclass \",\n            // Split along function definitions\n            \"\\nvoid \",\n            \"\\nint \",\n            \"\\nfloat \",\n            \"\\ndouble \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nwhile \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var objectiveC: TextSplitterSeparatorSet {\n        [\n            // Split along interface declaration\n            \"\\n@interface \",\n            \"\\n@implementation \",\n            \"\\n@typedef \",\n            \"\\n@enum \",\n            \"\\n@class \",\n            // Property\n            \"\\n@property \",\n            // Split along function definitions\n            \"\\n- (\",\n            \"\\n+ (\",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nwhile \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var go: TextSplitterSeparatorSet {\n        [\n            // Split along function definitions\n            \"\\nfunc \",\n            \"\\nvar \",\n            \"\\nconst \",\n            \"\\ntype \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var java: TextSplitterSeparatorSet {\n        [\n            // Split along class definitions\n            \"\\nclass \",\n            // Split along method definitions\n            \"\\npublic \",\n            \"\\nprotected \",\n            \"\\nprivate \",\n            \"\\nstatic \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nwhile \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var php: TextSplitterSeparatorSet {\n        [\n            // Split along function definitions\n            \"\\nfunction \",\n            // Split along class definitions\n            \"\\nclass \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nforeach \",\n            \"\\nwhile \",\n            \"\\ndo \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var javaScript: TextSplitterSeparatorSet {\n        [\n            // Split along function definitions\n            \"\\nfunction \",\n            \"\\nconst \",\n            \"\\nlet \",\n            \"\\nvar \",\n            \"\\nclass \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nfor \",\n            \"\\nwhile \",\n            \"\\nswitch \",\n            \"\\ncase \",\n            \"\\ndefault \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var python: TextSplitterSeparatorSet {\n        [\n            // First, try to split along class definitions\n            \"\\nclass \",\n            \"\\ndef \",\n            \"\\n\\tdef \",\n            // Now split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var rust: TextSplitterSeparatorSet {\n        [\n            // Split along function definitions\n            \"\\nfn \",\n            \"\\nconst \",\n            \"\\nlet \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nwhile \",\n            \"\\nfor \",\n            \"\\nloop \",\n            \"\\nmatch \",\n            \"\\nconst \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var ruby: TextSplitterSeparatorSet {\n        [\n            // Split along method definitions\n            \"\\ndef \",\n            \"\\nclass \",\n            // Split along control flow statements\n            \"\\nif \",\n            \"\\nunless \",\n            \"\\nwhile \",\n            \"\\nfor \",\n            \"\\ndo \",\n            \"\\nbegin \",\n            \"\\nrescue \",\n            // Split by the normal type of lines\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var markdown: TextSplitterSeparatorSet {\n        [\n            // First, try to split along Markdown headings (starting with level 2)\n            \"\\n## \",\n            \"\\n### \",\n            \"\\n#### \",\n            \"\\n##### \",\n            \"\\n###### \",\n            // Note the alternative syntax for headings (below) is not handled here\n            // Heading level 2\n            // ---------------\n            // End of code block\n            \"```\\n\\n\",\n            // Horizontal lines\n            \"\\n\\n***\\n\\n\",\n            \"\\n\\n---\\n\\n\",\n            \"\\n\\n___\\n\\n\",\n            // Note that this splitter doesn't handle horizontal lines defined\n            // by *three or more* of ***, ---, or ___, but this is not handled\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var latex: TextSplitterSeparatorSet {\n        [\n            // First, try to split along Latex sections\n            \"\\n\\\\chapter{\",\n            \"\\n\\\\section{\",\n            \"\\n\\\\subsection{\",\n            \"\\n\\\\subsubsection{\",\n            // Now split by environments\n            \"\\n\\\\begin{enumerate}\",\n            \"\\n\\\\begin{itemize}\",\n            \"\\n\\\\begin{description}\",\n            \"\\n\\\\begin{list}\",\n            \"\\n\\\\begin{quote}\",\n            \"\\n\\\\begin{quotation}\",\n            \"\\n\\\\begin{verse}\",\n            \"\\n\\\\begin{verbatim}\",\n            // Now split by math environments\n            \"\\n\\\\begin{align}\",\n            \"$$\",\n            \"$\",\n            // Now split by the normal type of lines\n            \" \",\n            \"\",\n        ]\n    }\n\n    public static var html: TextSplitterSeparatorSet {\n        [\n            // First, try to split along HTML tags\n            \"<body>\",\n            \"<div>\",\n            \"<p>\",\n            \"<br>\",\n            \"<li>\",\n            \"<h1>\",\n            \"<h2>\",\n            \"<h3>\",\n            \"<h4>\",\n            \"<h5>\",\n            \"<h6>\",\n            \"<span>\",\n            \"<table>\",\n            \"<tr>\",\n            \"<td>\",\n            \"<th>\",\n            \"<ul>\",\n            \"<ol>\",\n            \"<header>\",\n            \"<footer>\",\n            \"<nav>\",\n            // Head\n            \"<head>\",\n            \"<style>\",\n            \"<script>\",\n            \"<meta>\",\n            \"<title>\",\n            \"\\n\\n\",\n            \"\\r\\n\",\n            \"\\n\",\n            \"\\r\",\n            \"\",\n        ]\n    }\n\n    public static var `default`: TextSplitterSeparatorSet {\n        [\"\\n\\n\", \"\\r\\n\", \"\\n\", \"\\r\", \" \", \"\"]\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/Embedding/Embedding.swift",
    "content": "import Foundation\n\npublic protocol Embeddings {\n    /// Embed search docs.\n    func embed(documents: [Document]) async throws -> [EmbeddedDocument]\n    /// Embed query text.\n    func embed(query: String) async throws -> [Float]\n}\n\npublic struct EmbeddedDocument: Codable {\n    var document: Document\n    var embeddings: [Float]\n}\n"
  },
  {
    "path": "Tool/Sources/LangChain/Embedding/OpenAIEmbedding.swift",
    "content": "import Foundation\nimport OpenAIService\nimport TokenEncoder\n\npublic struct OpenAIEmbedding: Embeddings {\n    public var service: EmbeddingService\n    public var shouldAverageLongEmbeddings: Bool\n    /// Usually we won't hit the limit because the max token is 8191 and we will do text splitting\n    /// before embedding.\n    public var safe: Bool\n\n    public init(\n        configuration: EmbeddingConfiguration,\n        shouldAverageLongEmbeddings: Bool = false,\n        safe: Bool = false\n    ) {\n        service = EmbeddingService(configuration: configuration)\n        self.shouldAverageLongEmbeddings = shouldAverageLongEmbeddings\n        self.safe = safe\n    }\n\n    public func embed(documents: [Document]) async throws -> [EmbeddedDocument] {\n        if safe {\n            return try await getLenSafeEmbeddings(documents: documents)\n        }\n        return try await getEmbeddings(documents: documents)\n    }\n\n    public func embed(query: String) async throws -> [Float] {\n        if safe {\n            return try await getLenSafeEmbeddings(documents: [.init(\n                pageContent: query,\n                metadata: [:]\n            )])\n            .first?\n            .embeddings ?? []\n        }\n        return try await getEmbeddings(documents: [.init(pageContent: query, metadata: [:])])\n            .first?\n            .embeddings ?? []\n    }\n}\n\nextension OpenAIEmbedding {\n    func getEmbeddings(\n        documents: [Document]\n    ) async throws -> [EmbeddedDocument] {\n        try await service.embed(text: documents.map(\\.pageContent)).data\n            .compactMap {\n                let index = $0.index\n                guard index >= 0, index < documents.endIndex else { return nil }\n                return EmbeddedDocument(document: documents[index], embeddings: $0.embedding)\n            }\n    }\n\n    /// OpenAI's embedding API doesn't support embedding inputs longer than the max token.\n    /// https://github.com/openai/openai-cookbook/blob/main/examples/Embedding_long_inputs.ipynb\n    func getLenSafeEmbeddings(\n        documents: [Document]\n    ) async throws -> [EmbeddedDocument] {\n        struct Text {\n            var document: Document\n            var chunkedTokens: [[Int]]\n        }\n\n        var texts = documents.map { Text(document: $0, chunkedTokens: []) }\n        let encoding = TiktokenCl100kBaseTokenEncoder()\n\n        for (index, text) in texts.enumerated() {\n            let token = encoding.encode(text: text.document.pageContent)\n            // just incase the calculation is incorrect\n            let maxToken = max(10, service.configuration.maxToken - 10)\n\n            for j in stride(from: 0, to: token.count, by: maxToken) {\n                texts[index].chunkedTokens.append(\n                    Array(token[j..<min(j + maxToken, token.count)])\n                )\n            }\n        }\n\n        let batchedEmbeddings = try await withThrowingTaskGroup(\n            of: (Document, [[Float]]).self\n        ) { group in\n            for text in texts {\n                group.addTask {\n                    var retryCount = 6\n                    var previousError: Error?\n                    guard !text.chunkedTokens.isEmpty\n                    else { return (text.document, []) }\n                    while retryCount > 0 {\n                        do {\n                            if text.chunkedTokens.count <= 1 {\n                                // if possible, we should just let OpenAI do the tokenization.\n                                return try (\n                                    text.document,\n                                    await service.embed(text: text.document.pageContent)\n                                        .data\n                                        .map(\\.embedding)\n                                )\n                            }\n\n                            if shouldAverageLongEmbeddings {\n                                return try (\n                                    text.document,\n                                    await service.embed(tokens: text.chunkedTokens)\n                                        .data\n                                        .map(\\.embedding)\n                                )\n                            }\n                            // if `shouldAverageLongEmbeddings` is false,\n                            // we only embed the first chunk to save some money.\n                            return try (\n                                text.document,\n                                await service.embed(tokens: [text.chunkedTokens.first ?? []])\n                                    .data\n                                    .map(\\.embedding)\n                            )\n                        } catch {\n                            retryCount -= 1\n                            previousError = error\n                        }\n                    }\n                    throw previousError ?? CancellationError()\n                }\n            }\n            var result = [(document: Document, embeddings: [[Float]])]()\n            for try await response in group {\n                try Task.checkCancellation()\n                result.append((response.0, response.1))\n            }\n            return result\n        }\n\n        var results = [EmbeddedDocument]()\n\n        for (document, embeddings) in batchedEmbeddings {\n            if embeddings.count == 1, let first = embeddings.first {\n                results.append(.init(document: document, embeddings: first))\n            } else if embeddings.isEmpty {\n                results.append(.init(document: document, embeddings: []))\n            } else if shouldAverageLongEmbeddings {\n                // unimplemented\n                if let first = embeddings.first {\n                    results.append(.init(document: document, embeddings: first))\n                }\n            } else if let first = embeddings.first {\n                results.append(.init(document: document, embeddings: first))\n            }\n        }\n\n        return results\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/VectorStore/TemporaryUSearch.swift",
    "content": "import CryptoKit\nimport Foundation\nimport USearchIndex\n\n@globalActor\nprivate actor TemporaryUSearchActor {\n    static let shared = TemporaryUSearchActor()\n}\n\n/// A temporary USearch index for small and temporary documents.\npublic actor TemporaryUSearch: VectorStore {\n    struct LabeledDocument: Codable {\n        let label: USearchLabel\n        let document: Document\n    }\n\n    public let identifier: String\n    let index: USearchIndex\n    var documents: [USearchLabel: LabeledDocument] = [:]\n\n    public init(identifier: String, dimensions: Int) {\n        self.identifier = calculateMD5Hash(identifier)\n        index = .init(\n            metric: .IP,\n            dimensions: UInt32(dimensions),\n            connectivity: 16,\n            quantization: .F32\n        )\n    }\n\n    /// Load a USearch index if found.\n    public static func load(identifier: String, dimensions: Int) async -> TemporaryUSearch? {\n        let it = TemporaryUSearch(identifier: identifier, dimensions: dimensions)\n        do {\n            try await it.load()\n            return it\n        } catch {\n            return nil\n        }\n    }\n\n    /// Create a readonly USearch instance if the index is found.\n    public static func view(identifier: String, dimensions: Int) async -> TemporaryUSearch? {\n        let it = TemporaryUSearch(identifier: identifier, dimensions: dimensions)\n        do {\n            try await it.view()\n            return it\n        } catch {\n            return nil\n        }\n    }\n\n    public func save() async throws {\n        try await index.save(path: Self.indexURLFromIdentifier(identifier).path)\n        let labeledDocuments: [LabeledDocument] = Array(documents.values)\n        if let documentsData = try? JSONEncoder().encode(labeledDocuments) {\n            FileManager.default.createFile(\n                atPath: Self.documentURLFromIdentifier(identifier).path,\n                contents: documentsData,\n                attributes: nil\n            )\n        }\n    }\n\n    public func searchWithDistance(\n        embeddings: [Float],\n        count: Int\n    ) async throws -> [(document: Document, distance: Float)] {\n        let result = try await index.search(vector: embeddings, count: count)\n        var matches = [(document: Document, distance: Float)]()\n        for (index, distance) in result {\n            if let document = documents[index] {\n                matches.append((document.document, distance))\n            }\n        }\n        return matches\n    }\n\n    public func clear() async throws {\n        try await index.clear()\n        documents = [:]\n    }\n\n    public func add(_ documents: [EmbeddedDocument]) async throws {\n        let lastIndex = self.documents.keys.max() ?? 0\n        for (i, document) in documents.enumerated() {\n            let key = Int(lastIndex) + i + 1\n            let label = USearchLabel(key)\n            let embeddings = document.embeddings\n            try await index.add(label: label, vector: embeddings)\n            self.documents[label] = .init(label: label, document: document.document)\n        }\n        try await save()\n    }\n\n    public func set(_ documents: [EmbeddedDocument]) async throws {\n        let items = documents.enumerated().map { (USearchLabel(UInt32($0)), $1.embeddings) }\n        self.documents = [:]\n        try await index.set(items: items)\n        for (i, document) in documents.enumerated() {\n            let label = USearchLabel(i)\n            self.documents[label] = .init(label: label, document: document.document)\n        }\n        try await save()\n    }\n\n    enum LoadError: Error {\n        case indexNotFound\n        case documentsNotFound\n    }\n\n    func load() async throws {\n        let indexURL = Self.indexURLFromIdentifier(identifier)\n        guard FileManager.default.fileExists(atPath: indexURL.path) else {\n            throw LoadError.indexNotFound\n        }\n        try await index.load(path: indexURL.path)\n        guard let documentsData = FileManager.default.contents(\n            atPath: Self.documentURLFromIdentifier(identifier).path\n        ) else {\n            throw LoadError.documentsNotFound\n        }\n        let docs = try JSONDecoder().decode([LabeledDocument].self, from: documentsData)\n        documents = [:]\n        for doc in docs {\n            documents[doc.label] = doc\n        }\n    }\n\n    func view() async throws {\n        let indexURL = Self.indexURLFromIdentifier(identifier)\n        guard FileManager.default.fileExists(atPath: indexURL.path) else {\n            throw LoadError.indexNotFound\n        }\n        try await index.view(path: indexURL.path)\n        guard let documentsData = FileManager.default.contents(\n            atPath: Self.documentURLFromIdentifier(identifier).path\n        ) else {\n            throw LoadError.documentsNotFound\n        }\n        let docs = try JSONDecoder().decode([LabeledDocument].self, from: documentsData)\n        documents = [:]\n        for doc in docs {\n            documents[doc.label] = doc\n        }\n    }\n}\n\nextension TemporaryUSearch {\n    static func indexURLFromIdentifier(_ identifier: String) -> URL {\n        let cacheDirectory = FileManager.default\n            .urls(for: .cachesDirectory, in: .userDomainMask)\n            .first!\n        let url = cacheDirectory\n            .appendingPathComponent(\"CopilotForXcode-USearchIndex-\" + identifier + \".usearch\")\n        return url\n    }\n\n    static func documentURLFromIdentifier(_ identifier: String) -> URL {\n        let cacheDirectory = FileManager.default\n            .urls(for: .cachesDirectory, in: .userDomainMask)\n            .first!\n        let url = cacheDirectory\n            .appendingPathComponent(\"CopilotForXcode-USearchDocument-\" + identifier + \".usearch\")\n        return url\n    }\n}\n\nprivate func calculateMD5Hash(_ text: String) -> String {\n    let hash = Insecure.MD5.hash(data: text.data(using: .utf8) ?? Data())\n    return hash.map { String(format: \"%02hhx\", $0) }.joined()\n}\n\n"
  },
  {
    "path": "Tool/Sources/LangChain/VectorStore/VectorStore.swift",
    "content": "import Foundation\n\npublic protocol VectorStore {\n    func add(_ documents: [EmbeddedDocument]) async throws\n    func set(_ documents: [EmbeddedDocument]) async throws\n    func clear() async throws\n    func searchWithDistance(embeddings: [Float], count: Int) async throws\n        -> [(document: Document, distance: Float)]\n}\n\npublic extension VectorStore {\n    func search(embeddings: [Float], count: Int) async throws -> [Document] {\n        try await searchWithDistance(embeddings: embeddings, count: count).map { $0.document }\n    }\n\n    func add(_ document: EmbeddedDocument) async throws {\n        try await add([document])\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Logger/Logger.swift",
    "content": "import Foundation\nimport os.log\n\nenum LogLevel: String {\n    case debug\n    case info\n    case error\n}\n\npublic final class Logger {\n    private let subsystem: String\n    private let category: String\n    private let osLog: OSLog\n\n    public static let service = Logger(category: \"Service\")\n    public static let ui = Logger(category: \"UI\")\n    public static let client = Logger(category: \"Client\")\n    public static let updateChecker = Logger(category: \"UpdateChecker\")\n    public static let gitHubCopilot = Logger(category: \"GitHubCopilot\")\n    public static let codeium = Logger(category: \"Codeium\")\n    public static let langchain = Logger(category: \"LangChain\")\n    public static let retrieval = Logger(category: \"Retrieval\")\n    public static let license = Logger(category: \"License\")\n    public static let `extension` = Logger(category: \"Extension\")\n    public static let communicationBridge = Logger(category: \"CommunicationBridge\")\n    public static let chatProxy = Logger(category: \"ChatProxy\")\n    public static let debug = Logger(category: \"Debug\")\n    #if DEBUG\n    /// Use a temp logger to log something temporary. I won't be available in release builds.\n    public static let temp = Logger(category: \"Temp\")\n    #endif\n\n    public init(subsystem: String = \"com.intii.CopilotForXcode\", category: String) {\n        self.subsystem = subsystem\n        self.category = category\n        osLog = OSLog(subsystem: subsystem, category: category)\n    }\n\n    func log(\n        level: LogLevel,\n        message: String,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        let osLogType: OSLogType\n        switch level {\n        case .debug:\n            osLogType = .debug\n        case .info:\n            osLogType = .info\n        case .error:\n            osLogType = .error\n        }\n\n        #if DEBUG\n        os_log(\"%{public}@\", log: osLog, type: osLogType, \"\\(file):\\(line) \\(function)\\n\\n\\(message)\" as CVarArg)\n        #else\n        os_log(\"%{public}@\", log: osLog, type: osLogType, message as CVarArg)\n        #endif\n    }\n\n    public func debug(\n        _ message: String,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        log(level: .debug, message: \"\"\"\n        \\(message)\n        file: \\(file)\n        line: \\(line)\n        function: \\(function)\n        \"\"\", file: file, line: line, function: function)\n    }\n\n    public func info(\n        _ message: String,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        log(level: .info, message: message, file: file, line: line, function: function)\n    }\n\n    public func error(\n        _ message: String,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        log(level: .error, message: message, file: file, line: line, function: function)\n    }\n\n    public func error(\n        _ error: Error,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) {\n        log(\n            level: .error,\n            message: error.localizedDescription,\n            file: file,\n            line: line,\n            function: function\n        )\n    }\n\n    public func signpostBegin(\n        name: StaticString,\n        file: StaticString = #file,\n        line: UInt = #line,\n        function: StaticString = #function\n    ) -> Signposter {\n        let poster = OSSignposter(logHandle: osLog)\n        let id = poster.makeSignpostID()\n        let state = poster.beginInterval(name, id: id)\n        return .init(log: osLog, id: id, name: name, signposter: poster, beginState: state)\n    }\n\n    public struct Signposter {\n        let log: OSLog\n        let id: OSSignpostID\n        let name: StaticString\n        let signposter: OSSignposter\n        let state: OSSignpostIntervalState\n\n        init(\n            log: OSLog,\n            id: OSSignpostID,\n            name: StaticString,\n            signposter: OSSignposter,\n            beginState: OSSignpostIntervalState\n        ) {\n            self.id = id\n            self.log = log\n            self.name = name\n            self.signposter = signposter\n            state = beginState\n        }\n\n        public func end() {\n            signposter.endInterval(name, state)\n        }\n\n        public func event(_ text: String) {\n            signposter.emitEvent(name, id: id, \"\\(text, privacy: .public)\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ModificationBasic/ExplanationThenCodeStreamParser.swift",
    "content": "import Foundation\n\n/// Parse a stream that contains explanation followed by a code block.\npublic actor ExplanationThenCodeStreamParser {\n    enum State {\n        case explanation\n        case code\n        case codeOpening\n        case codeClosing\n    }\n\n    public enum Fragment: Sendable {\n        case explanation(String)\n        case code(String)\n    }\n\n    struct Buffer {\n        var content: String = \"\"\n    }\n\n    var _buffer: Buffer = .init()\n    var isAtBeginning = true\n    var buffer: String { _buffer.content }\n    var state: State = .explanation\n    let fullCodeDelimiter = \"```\"\n\n    public init() {}\n\n    private func appendBuffer(_ character: Character) {\n        _buffer.content.append(character)\n    }\n\n    private func appendBuffer(_ content: String) {\n        _buffer.content += content\n    }\n\n    private func resetBuffer() {\n        _buffer.content = \"\"\n    }\n\n    func flushBuffer() -> String? {\n        if buffer.isEmpty { return nil }\n        guard let targetIndex = _buffer.content.lastIndex(where: { $0 != \"`\" && !$0.isNewline })\n        else { return nil }\n        let prefix = _buffer.content[...targetIndex]\n        if prefix.isEmpty { return nil }\n        let nextIndex = _buffer.content.index(\n            targetIndex,\n            offsetBy: 1,\n            limitedBy: _buffer.content.endIndex\n        ) ?? _buffer.content.endIndex\n\n        if nextIndex == _buffer.content.endIndex {\n            _buffer.content = \"\"\n        } else {\n            _buffer.content = String(\n                _buffer.content[nextIndex...]\n            )\n        }\n\n        // If we flushed something, we are no longer at the beginning\n        isAtBeginning = false\n        return String(prefix)\n    }\n\n    func flushBufferIfNeeded(into results: inout [Fragment]) {\n        switch state {\n        case .explanation:\n            if let flushed = flushBuffer() {\n                results.append(.explanation(flushed))\n            }\n        case .code:\n            if let flushed = flushBuffer() {\n                results.append(.code(flushed))\n            }\n        case .codeOpening, .codeClosing:\n            break\n        }\n    }\n\n    public func yield(_ fragment: String) -> [Fragment] {\n        var results: [Fragment] = []\n\n        func flushBuffer() {\n            flushBufferIfNeeded(into: &results)\n        }\n\n        for character in fragment {\n            switch state {\n            case .explanation:\n                func forceFlush() {\n                    if !buffer.isEmpty {\n                        isAtBeginning = false\n                        results.append(.explanation(buffer))\n                        resetBuffer()\n                    }\n                }\n\n                switch character {\n                case \"`\":\n                    if let last = buffer.last, last == \"`\" || last.isNewline {\n                        flushBuffer()\n                        // if we are seeing the pattern of \"\\n`\" or \"``\"\n                        // that mean we may be hitting a code delimiter\n                        appendBuffer(character)\n                        let shouldOpenCodeBlock: Bool = {\n                            guard buffer.hasSuffix(fullCodeDelimiter)\n                            else { return false }\n                            if isAtBeginning { return true }\n                            let temp = String(buffer.dropLast(fullCodeDelimiter.count))\n                            if let last = temp.last, last.isNewline {\n                                return true\n                            }\n                            return false\n                        }()\n                        // if we meet a code delimiter while in explanation state,\n                        // it means we are opening a code block\n                        if shouldOpenCodeBlock {\n                            results.append(.explanation(\n                                String(buffer.dropLast(fullCodeDelimiter.count))\n                                    .trimmingTrailingCharacters(in: .whitespacesAndNewlines)\n                            ))\n                            resetBuffer()\n                            state = .codeOpening\n                        }\n                    } else {\n                        // Otherwise, the backtick is probably part of the explanation.\n                        forceFlush()\n                        appendBuffer(character)\n                    }\n                case let char where char.isNewline:\n                    // we keep the trailing new lines in case they are right\n                    // ahead of the code block that should be ignored.\n                    if let last = buffer.last, last.isNewline {\n                        flushBuffer()\n                        appendBuffer(character)\n                    } else {\n                        forceFlush()\n                        appendBuffer(character)\n                    }\n                default:\n                    appendBuffer(character)\n                }\n            case .code:\n                func forceFlush() {\n                    if !buffer.isEmpty {\n                        isAtBeginning = false\n                        results.append(.code(buffer))\n                        resetBuffer()\n                    }\n                }\n\n                switch character {\n                case \"`\":\n                    if let last = buffer.last, last == \"`\" || last.isNewline {\n                        flushBuffer()\n                        // if we are seeing the pattern of \"\\n`\" or \"``\"\n                        // that mean we may be hitting a code delimiter\n                        appendBuffer(character)\n                        let possibleClosingDelimiter: String? = {\n                            guard buffer.hasSuffix(fullCodeDelimiter) else { return nil }\n                            let temp = String(buffer.dropLast(fullCodeDelimiter.count))\n                            if let last = temp.last, last.isNewline {\n                                return \"\\(last)\\(fullCodeDelimiter)\"\n                            }\n                            return nil\n                        }()\n                        // if we meet a code delimiter while in code state,\n                        // // it means we are closing the code block\n                        if let possibleClosingDelimiter {\n                            results.append(.code(\n                                String(buffer.dropLast(possibleClosingDelimiter.count))\n                            ))\n                            resetBuffer()\n                            appendBuffer(possibleClosingDelimiter)\n                            state = .codeClosing\n                        }\n                    } else {\n                        // Otherwise, the backtick is probably part of the code.\n                        forceFlush()\n                        appendBuffer(character)\n                    }\n\n                case let char where char.isNewline:\n                    if let last = buffer.last, last.isNewline {\n                        flushBuffer()\n                        appendBuffer(character)\n                    } else {\n                        forceFlush()\n                        appendBuffer(character)\n                    }\n                default:\n                    appendBuffer(character)\n                }\n            case .codeOpening:\n                // skip the code block fence\n                if character.isNewline {\n                    state = .code\n                }\n            case .codeClosing:\n                appendBuffer(character)\n                switch character {\n                case \"`\":\n                    let possibleClosingDelimiter: String? = {\n                        guard buffer.hasSuffix(fullCodeDelimiter) else { return nil }\n                        let temp = String(buffer.dropLast(fullCodeDelimiter.count))\n                        if let last = temp.last, last.isNewline {\n                            return \"\\(last)\\(fullCodeDelimiter)\"\n                        }\n                        return nil\n                    }()\n                    // if we meet another code delimiter while in codeClosing state,\n                    // it means the previous code delimiter was part of the code\n                    if let possibleClosingDelimiter {\n                        results.append(.code(\n                            String(buffer.dropLast(possibleClosingDelimiter.count))\n                        ))\n                        resetBuffer()\n                        appendBuffer(possibleClosingDelimiter)\n                    }\n                default:\n                    break\n                }\n            }\n        }\n\n        flushBuffer()\n\n        return results\n    }\n\n    public func finish() -> [Fragment] {\n        guard !buffer.isEmpty else { return [] }\n\n        var results: [Fragment] = []\n        switch state {\n        case .explanation:\n            results.append(\n                .explanation(buffer.trimmingTrailingCharacters(in: .whitespacesAndNewlines))\n            )\n        case .code:\n            results.append(.code(buffer))\n        case .codeClosing:\n            break\n        case .codeOpening:\n            break\n        }\n        resetBuffer()\n\n        return results\n    }\n}\n\nextension String {\n    func trimmingTrailingCharacters(in characterSet: CharacterSet) -> String {\n        guard !isEmpty else {\n            return \"\"\n        }\n        var unicodeScalars = unicodeScalars\n        while let scalar = unicodeScalars.last {\n            if !characterSet.contains(scalar) {\n                return String(unicodeScalars)\n            }\n            unicodeScalars.removeLast()\n        }\n        return \"\"\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ModificationBasic/ModificationAgent.swift",
    "content": "import ChatBasic\nimport ComposableArchitecture\nimport Foundation\nimport SuggestionBasic\n\npublic enum ModificationAgentResponse {\n    case code(String)\n    case explanation(String)\n}\n\npublic struct ModificationAgentRequest {\n    public var code: String\n    public var requirement: String\n    public var source: ModificationSource\n    public var isDetached: Bool\n    public var extraSystemPrompt: String?\n    public var range: CursorRange\n    public var references: [ChatMessage.Reference]\n    public var topics: [ChatMessage.Reference]\n\n    public struct ModificationSource: Equatable {\n        public var language: CodeLanguage\n        public var documentURL: URL\n        public var projectRootURL: URL\n        public var content: String\n        public var lines: [String]\n\n        public init(\n            language: CodeLanguage,\n            documentURL: URL,\n            projectRootURL: URL,\n            content: String,\n            lines: [String]\n        ) {\n            self.language = language\n            self.documentURL = documentURL\n            self.projectRootURL = projectRootURL\n            self.content = content\n            self.lines = lines\n        }\n    }\n\n    public init(\n        code: String,\n        requirement: String,\n        source: ModificationSource,\n        isDetached: Bool,\n        extraSystemPrompt: String? = nil,\n        range: CursorRange,\n        references: [ChatMessage.Reference],\n        topics: [ChatMessage.Reference]\n    ) {\n        self.code = code\n        self.requirement = requirement\n        self.source = source\n        self.isDetached = isDetached\n        self.extraSystemPrompt = extraSystemPrompt\n        self.range = range\n        self.references = references\n        self.topics = topics\n    }\n}\n\npublic protocol ModificationAgent {\n    typealias Request = ModificationAgentRequest\n    typealias Response = ModificationAgentResponse\n\n    func send(_ request: Request) -> AsyncThrowingStream<Response, any Error>\n}\n\npublic struct ModificationSnippet: Equatable, Identifiable {\n    public let id = UUID()\n    public var startLineIndex: Int\n    public var originalCode: String\n    public var modifiedCode: String\n    public var description: String\n    public var error: String?\n    public var attachedRange: CursorRange\n\n    public init(\n        startLineIndex: Int,\n        originalCode: String,\n        modifiedCode: String,\n        description: String,\n        error: String?,\n        attachedRange: CursorRange\n    ) {\n        self.startLineIndex = startLineIndex\n        self.originalCode = originalCode\n        self.modifiedCode = modifiedCode\n        self.description = description\n        self.error = error\n        self.attachedRange = attachedRange\n    }\n}\n\npublic enum ModificationAttachedTarget: Equatable {\n    case file(URL, projectURL: URL, code: String, lines: [String])\n    case dynamic\n}\n\npublic struct ModificationHistoryNode {\n    public var snippets: IdentifiedArrayOf<ModificationSnippet>\n    public var instruction: NSAttributedString\n    public var references: [ChatMessage.Reference]\n\n    public init(\n        snippets: IdentifiedArrayOf<ModificationSnippet>,\n        instruction: NSAttributedString,\n        references: [ChatMessage.Reference]\n    ) {\n        self.snippets = snippets\n        self.instruction = instruction\n        self.references = references\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ModificationBasic/ModificationState.swift",
    "content": "import ChatBasic\nimport Foundation\nimport IdentifiedCollections\nimport SuggestionBasic\n\npublic struct ModificationState {\n    public typealias Source = ModificationAgentRequest.ModificationSource\n\n    public var source: Source\n    public var history: [ModificationHistoryNode] = []\n    public var snippets: IdentifiedArrayOf<ModificationSnippet> = []\n    public var isGenerating: Bool = false\n    public var extraSystemPrompt: String\n    public var isAttachedToTarget: Bool = true\n    public var status = [String]()\n    public var references: [ChatMessage.Reference] = []\n\n    public init(\n        source: Source,\n        history: [ModificationHistoryNode] = [],\n        snippets: IdentifiedArrayOf<ModificationSnippet>,\n        extraSystemPrompt: String,\n        isAttachedToTarget: Bool,\n        isGenerating: Bool = false,\n        status: [String] = [],\n        references: [ChatMessage.Reference] = []\n    ) {\n        self.history = history\n        self.snippets = snippets\n        self.isGenerating = isGenerating\n        self.isAttachedToTarget = isAttachedToTarget\n        self.extraSystemPrompt = extraSystemPrompt\n        self.source = source\n        self.status = status\n        self.references = references\n    }\n\n    public init(\n        source: Source,\n        originalCode: String,\n        attachedRange: CursorRange,\n        instruction: String,\n        extraSystemPrompt: String\n    ) {\n        self.init(\n            source: source,\n            snippets: [\n                .init(\n                    startLineIndex: 0,\n                    originalCode: originalCode,\n                    modifiedCode: originalCode,\n                    description: \"\",\n                    error: nil,\n                    attachedRange: attachedRange\n                ),\n            ],\n            extraSystemPrompt: extraSystemPrompt,\n            isAttachedToTarget: !attachedRange.isEmpty\n        )\n    }\n\n    public mutating func popHistory() -> NSAttributedString? {\n        if !history.isEmpty {\n            let last = history.removeLast()\n            references = last.references\n            snippets = last.snippets\n            let instruction = last.instruction\n            return instruction\n        }\n\n        return nil\n    }\n\n    public mutating func pushHistory(instruction: NSAttributedString) {\n        history.append(.init(snippets: snippets, instruction: instruction, references: references))\n        let oldSnippets = snippets\n        snippets = IdentifiedArrayOf()\n        for var snippet in oldSnippets {\n            snippet.originalCode = snippet.modifiedCode\n            snippet.modifiedCode = \"\"\n            snippet.description = \"\"\n            snippet.error = nil\n            snippets.append(snippet)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/ObjectiveCExceptionHandling/ObjectiveCExceptionHandling.m",
    "content": "#import \"include/ObjectiveCExceptionHandling.h\"\n\n@implementation ObjcExceptionHandler\n\n+ (BOOL)catchException:(void (^)(void))tryBlock\n                 error:(__autoreleasing NSError **)error {\n  @try {\n    tryBlock();\n    return YES;\n  } @catch (NSException *exception) {\n    *error = [[NSError alloc] initWithDomain:exception.name\n                                        code:0\n                                    userInfo:exception.userInfo];\n    return NO;\n  }\n}\n\n@end\n\n"
  },
  {
    "path": "Tool/Sources/ObjectiveCExceptionHandling/include/ObjectiveCExceptionHandling.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface ObjcExceptionHandler : NSObject\n\n+ (BOOL)catchException:(void (^)(void))tryBlock\n                 error:(__autoreleasing NSError **)error;\n\n@end\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/BuiltinExtensionChatCompletionsService.swift",
    "content": "import AsyncAlgorithms\nimport BuiltinExtension\nimport ChatBasic\nimport Foundation\nimport XcodeInspector\n\n#warning(\"This is a temporary implementation for proof of concept.\")\n\nactor BuiltinExtensionChatCompletionsService {\n    typealias RequestBody = ChatCompletionsRequestBody\n\n    enum CustomError: Swift.Error, LocalizedError {\n        case chatServiceNotFound\n\n        var errorDescription: String? {\n            switch self {\n            case .chatServiceNotFound:\n                return \"Chat service not found.\"\n            }\n        }\n    }\n\n    var extensionManager: BuiltinExtensionManager { .shared }\n\n    let extensionIdentifier: String\n    let requestBody: RequestBody\n\n    init(extensionIdentifier: String, requestBody: RequestBody) {\n        self.extensionIdentifier = extensionIdentifier\n        self.requestBody = requestBody\n    }\n}\n\nextension BuiltinExtensionChatCompletionsService: ChatCompletionsAPI {\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        let stream: AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error> =\n            try await callAsFunction()\n\n        var id: String? = nil\n        var model = \"\"\n        var content = \"\"\n        for try await chunk in stream {\n            if let chunkId = chunk.id { id = chunkId }\n            if model.isEmpty, let chunkModel = chunk.model { model = chunkModel }\n            content.append(chunk.message?.content ?? \"\")\n        }\n\n        return .init(\n            id: id,\n            object: \"\",\n            model: model,\n            message: .init(role: .assistant, content: content),\n            otherChoices: [],\n            finishReason: \"\",\n            usage: nil\n        )\n    }\n}\n\nextension BuiltinExtensionChatCompletionsService: ChatCompletionsStreamAPI {\n    func callAsFunction(\n    ) async throws -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error> {\n        let service = try getChatService()\n        let (message, history) = extractMessageAndHistory(from: requestBody)\n        guard let workspaceURL = XcodeInspector.shared.realtimeActiveWorkspaceURL,\n              let projectURL = XcodeInspector.shared.realtimeActiveProjectURL\n        else { throw CancellationError() }\n        let stream = await service.sendMessage(\n            message,\n            history: history,\n            references: [],\n            workspace: .init(\n                workspaceURL: workspaceURL,\n                projectURL: projectURL\n            )\n        )\n        let responseID = UUID().uuidString\n        return stream.map { text in\n            ChatCompletionsStreamDataChunk(\n                id: responseID,\n                object: nil,\n                model: \"github-copilot\",\n                message: .init(\n                    role: .assistant,\n                    content: text,\n                    toolCalls: nil\n                ),\n                finishReason: nil\n            )\n        }.toStream()\n    }\n}\n\nextension BuiltinExtensionChatCompletionsService {\n    func getChatService() throws -> any BuiltinExtensionChatServiceType {\n        guard let ext = extensionManager.extensions\n            .first(where: { $0.extensionIdentifier == extensionIdentifier }),\n            let service = ext.chatService as? BuiltinExtensionChatServiceType\n        else {\n            throw CustomError.chatServiceNotFound\n        }\n        return service\n    }\n}\n\nextension BuiltinExtensionChatCompletionsService {\n    func extractMessageAndHistory(\n        from request: RequestBody\n    ) -> (message: String, history: [ChatMessage]) {\n        let messages = request.messages\n\n        if let lastIndexNotUserMessage = messages.lastIndex(where: { $0.role != .user }) {\n            let message = messages[(lastIndexNotUserMessage + 1)...]\n                .map { $0.content }\n                .joined(separator: \"\\n\\n\")\n            let history = Array(messages[0...lastIndexNotUserMessage])\n            return (message, history.map {\n                .init(\n                    id: UUID().uuidString,\n                    role: $0.role.asChatMessageRole,\n                    content: $0.content\n                )\n            })\n        } else { // everything is user message\n            let message = messages.map { $0.content }.joined(separator: \"\\n\\n\")\n            return (message, [])\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/ChatCompletionsAPIBuilder.swift",
    "content": "import AIModel\nimport ChatBasic\nimport Dependencies\nimport Foundation\n\nprotocol ChatCompletionsAPIBuilder {\n    func buildStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsStreamAPI\n\n    func buildNonStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsAPI\n}\n\nstruct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {\n    func buildStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsStreamAPI {\n        if model.id == \"com.github.copilot\" {\n            return BuiltinExtensionChatCompletionsService(\n                extensionIdentifier: model.id,\n                requestBody: requestBody\n            )\n        }\n\n        switch model.format {\n        case .googleAI:\n            return GoogleAIChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                requestBody: requestBody,\n                baseURL: endpoint.absoluteString\n            )\n        case .openAI, .openAICompatible, .azureOpenAI:\n            return OpenAIChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .ollama:\n            return OllamaChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .claude:\n            return ClaudeChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .gitHubCopilot:\n            return GitHubCopilotChatCompletionsService(\n                model: model,\n                requestBody: requestBody\n            )\n        }\n    }\n\n    func buildNonStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsAPI {\n        if model.id == \"com.github.copilot\" {\n            return BuiltinExtensionChatCompletionsService(\n                extensionIdentifier: model.id,\n                requestBody: requestBody\n            )\n        }\n\n        switch model.format {\n        case .googleAI:\n            return GoogleAIChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                requestBody: requestBody,\n                baseURL: endpoint.absoluteString\n            )\n        case .openAI, .openAICompatible, .azureOpenAI:\n            return OpenAIChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .ollama:\n            return OllamaChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .claude:\n            return ClaudeChatCompletionsService(\n                apiKey: apiKey,\n                model: model,\n                endpoint: endpoint,\n                requestBody: requestBody\n            )\n        case .gitHubCopilot:\n            return GitHubCopilotChatCompletionsService(\n                model: model,\n                requestBody: requestBody\n            )\n        }\n    }\n}\n\nstruct ChatCompletionsAPIBuilderDependencyKey: DependencyKey {\n    static var liveValue: ChatCompletionsAPIBuilder = DefaultChatCompletionsAPIBuilder()\n}\n\nextension DependencyValues {\n    var chatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {\n        get { self[ChatCompletionsAPIBuilderDependencyKey.self] }\n        set { self[ChatCompletionsAPIBuilderDependencyKey.self] = newValue }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/ChatCompletionsAPIDefinition.swift",
    "content": "import AIModel\nimport ChatBasic\nimport CodableWrappers\nimport Foundation\nimport Preferences\n\nstruct ChatCompletionsRequestBody: Equatable {\n    struct Message: Equatable {\n        enum Role: String, Equatable {\n            case system\n            case user\n            case assistant\n            case tool\n\n            var asChatMessageRole: ChatMessage.Role {\n                switch self {\n                case .system:\n                    return .system\n                case .user:\n                    return .user\n                case .assistant:\n                    return .assistant\n                case .tool:\n                    return .user\n                }\n            }\n        }\n        \n        struct Image: Equatable {\n            enum Format: String {\n                case png = \"image/png\"\n                case jpeg = \"image/jpeg\"\n                case gif = \"image/gif\"\n            }\n            var base64EncodeData: String\n            var format: Format\n            \n            var dataURLString: String {\n                return \"data:\\(format.rawValue);base64,\\(base64EncodeData)\"\n            }\n        }\n        \n        struct Audio: Equatable {\n            enum Format: String {\n                case wav\n                case mp3\n            }\n            \n            var data: Data\n            var format: Format\n        }\n\n        /// The role of the message.\n        var role: Role\n        /// The content of the message.\n        var content: String\n        /// When we want to reply to a function call with the result, we have to provide the\n        /// name of the function call, and include the result in `content`.\n        ///\n        /// - important: It's required when the role is `function`.\n        var name: String? = nil\n        /// Tool calls in an assistant message.\n        var toolCalls: [MessageToolCall]? = nil\n        /// When we want to call a tool, we have to provide the id of the call.\n        ///\n        /// - important: It's required when the role is `tool`.\n        var toolCallId: String? = nil\n        /// Images to include in the message.\n        var images: [Image] = []\n        /// Audios to include in the message.\n        var audios: [Audio] = []\n        /// Cache the message if possible.\n        var cacheIfPossible: Bool = false\n    }\n\n    struct MessageFunctionCall: Equatable {\n        /// The name of the\n        var name: String\n        /// A JSON string.\n        var arguments: String?\n    }\n\n    struct MessageToolCall: Equatable {\n        /// The id of the tool call.\n        var id: String\n        /// The type of the tool.\n        var type: String\n        /// The function call.\n        var function: MessageFunctionCall\n    }\n\n    struct Tool: Equatable {\n        var type: String = \"function\"\n        var function: ChatGPTFunctionSchema\n    }\n\n    var model: String\n    var messages: [Message]\n    var temperature: Double?\n    var stream: Bool?\n    var stop: [String]?\n    var maxTokens: Int?\n    /// Pass nil to let the bot decide.\n    var toolChoice: FunctionCallStrategy?\n    var tools: [Tool]?\n\n    init(\n        model: String,\n        messages: [Message],\n        temperature: Double? = nil,\n        stream: Bool? = nil,\n        stop: [String]? = nil,\n        maxTokens: Int? = nil,\n        toolChoice: FunctionCallStrategy? = nil,\n        tools: [Tool] = []\n    ) {\n        self.model = model\n        self.messages = messages\n        self.temperature = temperature\n        self.stream = stream\n        self.stop = stop\n        self.maxTokens = maxTokens\n        if UserDefaults.shared.value(for: \\.disableFunctionCalling) {\n            self.toolChoice = nil\n            self.tools = nil\n        } else {\n            self.toolChoice = toolChoice\n            self.tools = tools.isEmpty ? nil : tools\n        }\n    }\n}\n\nstruct EmptyMessageFunctionCall: FallbackValueProvider {\n    static var defaultValue: ChatCompletionsRequestBody.MessageFunctionCall {\n        .init(name: \"\")\n    }\n}\n\npublic enum FunctionCallStrategy: Codable, Equatable {\n    /// Forbid the bot to call any function.\n    case none\n    /// Let the bot choose what function to call.\n    case auto\n    /// Force the bot to call a function with the given name.\n    case function(name: String)\n\n    struct CallFunctionNamed: Codable {\n        var type = \"function\"\n        let function: Function\n        struct Function: Codable {\n            var name: String\n        }\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        switch self {\n        case .none:\n            try container.encode(\"none\")\n        case .auto:\n            try container.encode(\"auto\")\n        case let .function(name):\n            try container.encode(CallFunctionNamed(function: .init(name: name)))\n        }\n    }\n}\n\n// MARK: - Stream API\n\nprotocol ChatCompletionsStreamAPI {\n    func callAsFunction() async throws -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n}\n\nextension ChatCompletionsStreamAPI {\n    static func setupExtraHeaderFields(\n        _ request: inout URLRequest,\n        model: ChatModel,\n        apiKey: String\n    ) async {\n        let parser = HeaderValueParser()\n        for field in model.info.customHeaderInfo.headers where !field.key.isEmpty {\n            let value = await parser.parse(\n                field.value,\n                context: .init(modelName: model.info.modelName, apiKey: apiKey)\n            )\n            request.setValue(value, forHTTPHeaderField: field.key)\n        }\n    }\n}\n\nextension AsyncSequence {\n    func toStream() -> AsyncThrowingStream<Element, Error> {\n        AsyncThrowingStream { continuation in\n            let task = Task {\n                do {\n                    for try await element in self {\n                        continuation.yield(element)\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n}\n\nstruct ChatCompletionsStreamDataChunk {\n    struct Delta {\n        struct FunctionCall {\n            var name: String?\n            var arguments: String?\n        }\n\n        struct ToolCall {\n            var index: Int?\n            var id: String?\n            var type: String?\n            var function: FunctionCall?\n        }\n\n        var role: ChatCompletionsRequestBody.Message.Role?\n        var content: String?\n        var reasoningContent: String?\n        var toolCalls: [ToolCall]?\n    }\n\n    struct Usage: Codable, Equatable {\n        var promptTokens: Int?\n        var completionTokens: Int?\n\n        var cachedTokens: Int?\n        var otherUsage: [String: Int]\n    }\n\n    var id: String?\n    var object: String?\n    var model: String?\n    var message: Delta?\n    var finishReason: String?\n    var usage: Usage?\n}\n\n// MARK: - Non Stream API\n\nprotocol ChatCompletionsAPI {\n    func callAsFunction() async throws -> ChatCompletionResponseBody\n}\n\nstruct ChatCompletionResponseBody: Equatable {\n    struct Message: Equatable {\n        typealias Role = ChatCompletionsRequestBody.Message.Role\n        typealias MessageToolCall = ChatCompletionsRequestBody.MessageToolCall\n\n        /// The role of the message.\n        var role: Role\n        /// The content of the message.\n        var content: String?\n        /// The reasoning content of the message.\n        var reasoningContent: String?\n        /// When we want to reply to a function call with the result, we have to provide the\n        /// name of the function call, and include the result in `content`.\n        ///\n        /// - important: It's required when the role is `function`.\n        var name: String?\n        /// Tool calls in an assistant message.\n        var toolCalls: [MessageToolCall]?\n        /// When we want to call a tool, we have to provide the id of the call.\n        ///\n        /// - important: It's required when the role is `tool`.\n        var toolCallId: String?\n    }\n\n    struct Usage: Equatable {\n        var promptTokens: Int\n        var completionTokens: Int\n\n        var cachedTokens: Int\n        var otherUsage: [String: Int]\n\n        mutating func merge(with other: ChatCompletionsStreamDataChunk.Usage) {\n            promptTokens += other.promptTokens ?? 0\n            completionTokens += other.completionTokens ?? 0\n            cachedTokens += other.cachedTokens ?? 0\n            for (key, value) in other.otherUsage {\n                otherUsage[key, default: 0] += value\n            }\n        }\n\n        mutating func merge(with other: Self) {\n            promptTokens += other.promptTokens\n            completionTokens += other.completionTokens\n            cachedTokens += other.cachedTokens\n            for (key, value) in other.otherUsage {\n                otherUsage[key, default: 0] += value\n            }\n        }\n    }\n\n    var id: String?\n    var object: String\n    var model: String\n    var message: Message\n    var otherChoices: [Message]\n    var finishReason: String\n    var usage: Usage?\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/ClaudeChatCompletionsService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport CodableWrappers\nimport Foundation\nimport JoinJSON\nimport Logger\nimport Preferences\n\n#warning(\"Update the definitions\")\n/// https://docs.anthropic.com/claude/reference/messages_post\npublic actor ClaudeChatCompletionsService: ChatCompletionsStreamAPI, ChatCompletionsAPI {\n    /// https://docs.anthropic.com/en/docs/about-claude/models\n    public enum KnownModel: String, CaseIterable {\n        case claude37Sonnet = \"claude-3-7-sonnet-latest\"\n        case claude35Sonnet = \"claude-3-5-sonnet-latest\"\n        case claude35Haiku = \"claude-3-5-haiku-latest\"\n        case claude3Opus = \"claude-3-opus-latest\"\n        case claude3Sonnet = \"claude-3-sonnet-20240229\"\n        case claude3Haiku = \"claude-3-haiku-20240307\"\n\n        public var contextWindow: Int {\n            switch self {\n            case .claude35Sonnet: return 200_000\n            case .claude35Haiku: return 200_000\n            case .claude3Opus: return 200_000\n            case .claude3Sonnet: return 200_000\n            case .claude3Haiku: return 200_000\n            case .claude37Sonnet: return 200_000\n            }\n        }\n    }\n\n    struct APIError: Error, Decodable, LocalizedError {\n        struct ErrorDetail: Decodable {\n            var message: String?\n            var type: String?\n        }\n\n        var error: ErrorDetail?\n        var type: String\n\n        var errorDescription: String? {\n            error?.message ?? error?.type ?? type\n        }\n    }\n\n    public enum MessageRole: String, Codable {\n        case user\n        case assistant\n\n        var formalized: ChatCompletionsRequestBody.Message.Role {\n            switch self {\n            case .user: return .user\n            case .assistant: return .assistant\n            }\n        }\n    }\n\n    struct StreamDataChunk: Decodable {\n        var type: String\n        var message: Message?\n        var index: Int?\n        var content_block: ContentBlock?\n        var delta: Delta?\n        var error: APIError?\n        var usage: ResponseBody.Usage?\n\n        struct Message: Decodable {\n            var id: String\n            var type: String\n            var role: MessageRole?\n            var content: [ContentBlock]?\n            var model: String\n            var stop_reason: String?\n            var stop_sequence: String?\n            var usage: ResponseBody.Usage?\n        }\n\n        struct ContentBlock: Decodable {\n            var type: String\n            var text: String?\n        }\n\n        struct Delta: Decodable {\n            var type: String?\n            var text: String?\n            var stop_reason: String?\n            var stop_sequence: String?\n        }\n    }\n\n    struct ResponseBody: Codable, Equatable {\n        struct Content: Codable, Equatable {\n            enum ContentType: String, Codable, FallbackValueProvider {\n                case text\n                case unknown\n                static var defaultValue: ContentType { .unknown }\n            }\n\n            /// The type of the message.\n            ///\n            /// Currently, the only supported type is `text`.\n            @FallbackDecoding<ContentType>\n            var type: ContentType\n            /// The content of the message.\n            ///\n            /// If the request input messages ended with an assistant turn,\n            /// then the response content will continue directly from that last turn.\n            /// You can use this to constrain the model's output.\n            var text: String?\n        }\n\n        struct Usage: Codable, Equatable {\n            var input_tokens: Int?\n            var output_tokens: Int?\n            var cache_creation_input_tokens: Int?\n            var cache_read_input_tokens: Int?\n        }\n\n        var id: String?\n        var model: String\n        var type: String\n        var usage: Usage\n        var role: MessageRole\n        var content: [Content]\n        var stop_reason: String?\n        var stop_sequence: String?\n    }\n\n    public struct RequestBody: Codable, Equatable {\n        public struct CacheControl: Codable, Equatable, Sendable {\n            public enum CacheControlType: String, Codable, Equatable, Sendable {\n                case ephemeral\n            }\n\n            public var type: CacheControlType = .ephemeral\n        }\n\n        public struct MessageContent: Codable, Equatable {\n            public enum MessageContentType: String, Codable, Equatable {\n                case text\n                case image\n            }\n\n            public struct ImageSource: Codable, Equatable {\n                public var type: String = \"base64\"\n                /// currently support the base64 source type for images,\n                /// and the image/jpeg, image/png, image/gif, and image/webp media types.\n                public var media_type: String = \"image/jpeg\"\n                public var data: String\n            }\n\n            public var type: MessageContentType\n            public var text: String?\n            public var source: ImageSource?\n            public var cache_control: CacheControl?\n        }\n\n        public struct Message: Codable, Equatable {\n            /// The role of the message.\n            public var role: MessageRole\n            /// The content of the message.\n            public var content: [MessageContent]\n\n            public mutating func appendText(_ text: String) {\n                var otherContents = [MessageContent]()\n                var existedText = \"\"\n                for existed in content {\n                    switch existed.type {\n                    case .text:\n                        if existedText.isEmpty {\n                            existedText = existed.text ?? \"\"\n                        } else if let text = existed.text {\n                            existedText += \"\\n\\n\" + text\n                        }\n                    default:\n                        otherContents.append(existed)\n                    }\n                }\n\n                content = otherContents + [.init(type: .text, text: existedText + \"\\n\\n\\(text)\")]\n            }\n        }\n\n        public struct SystemPrompt: Codable, Equatable {\n            public var type = \"text\"\n            public var text: String\n            public var cache_control: CacheControl?\n        }\n\n        public struct Tool: Codable, Equatable {\n            public var name: String\n            public var description: String\n            public var input_schema: JSONSchemaValue\n        }\n\n        public var model: String\n        public var system: [SystemPrompt]\n        public var messages: [Message]\n        public var temperature: Double?\n        public var stream: Bool?\n        public var stop_sequences: [String]?\n        public var max_tokens: Int\n        public var tools: [RequestBody.Tool]?\n    }\n\n    var apiKey: String\n    var endpoint: URL\n    var requestBody: RequestBody\n    var model: ChatModel\n\n    init(\n        apiKey: String,\n        model: ChatModel,\n        endpoint: URL,\n        requestBody: ChatCompletionsRequestBody\n    ) {\n        self.apiKey = apiKey\n        self.endpoint = endpoint\n        self.requestBody = .init(requestBody)\n        self.model = model\n    }\n\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n    {\n        requestBody.stream = true\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(requestBody)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        request.setValue(\"2023-06-01\", forHTTPHeaderField: \"anthropic-version\")\n        request.setValue(\"prompt-caching-2024-07-31\", forHTTPHeaderField: \"anthropic-beta\")\n        if !apiKey.isEmpty {\n            request.setValue(apiKey, forHTTPHeaderField: \"x-api-key\")\n        }\n        Self.setupCustomBody(&request, model: model)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n\n        let (result, response) = try await URLSession.shared.bytes(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let text = try await result.lines.reduce(into: \"\") { partialResult, current in\n                partialResult += current\n            }\n            guard let data = text.data(using: .utf8)\n            else { throw ChatGPTServiceError.responseInvalid }\n            let decoder = JSONDecoder()\n            let error = try? decoder.decode(APIError.self, from: data)\n            throw error ?? ChatGPTServiceError.responseInvalid\n        }\n\n        let stream = ResponseStream<StreamDataChunk>(result: result) {\n            var line = $0\n            if line.hasPrefix(\"event:\") {\n                return .init(chunk: nil, done: false)\n            }\n\n            let prefix = \"data: \"\n            if line.hasPrefix(prefix) {\n                line.removeFirst(prefix.count)\n            }\n\n            if line == \"[DONE]\" { return .init(chunk: nil, done: true) }\n\n            do {\n                let chunk = try JSONDecoder().decode(\n                    StreamDataChunk.self,\n                    from: line.data(using: .utf8) ?? Data()\n                )\n                if let error = chunk.error {\n                    throw error\n                }\n                return .init(chunk: chunk, done: chunk.type == \"message_stop\")\n            } catch let error as APIError {\n                Logger.service.error(error.errorDescription ?? \"Unknown Error\")\n                throw error\n            } catch {\n                Logger.service.error(\"Error decoding stream data: \\(error)\")\n                return .init(chunk: nil, done: false)\n            }\n        }\n\n        return stream.map { $0.formalized() }.toStream()\n    }\n\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        requestBody.stream = false\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(requestBody)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        request.setValue(\"2023-06-01\", forHTTPHeaderField: \"anthropic-version\")\n        request.setValue(\"prompt-caching-2024-07-31\", forHTTPHeaderField: \"anthropic-beta\")\n        if !apiKey.isEmpty {\n            request.setValue(apiKey, forHTTPHeaderField: \"x-api-key\")\n        }\n        Self.setupCustomBody(&request, model: model)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n\n        let (result, response) = try await URLSession.shared.data(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let error = try? JSONDecoder().decode(APIError.self, from: result)\n            throw error ?? ChatGPTServiceError\n                .otherError(String(data: result, encoding: .utf8) ?? \"Unknown Error\")\n        }\n\n        do {\n            let body = try JSONDecoder().decode(ResponseBody.self, from: result)\n            return body.formalized()\n        } catch {\n            dump(error)\n            throw error\n        }\n    }\n\n    static func setupCustomBody(_ request: inout URLRequest, model: ChatModel) {\n        let join = JoinJSON()\n        let jsonBody = model.info.customBodyInfo.jsonBody\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        guard let data = request.httpBody, !jsonBody.isEmpty else { return }\n        let newBody = join.join(data, with: jsonBody)\n        request.httpBody = newBody\n    }\n}\n\nextension ClaudeChatCompletionsService.ResponseBody {\n    func formalized() -> ChatCompletionResponseBody {\n        return .init(\n            id: id,\n            object: \"chat.completions\",\n            model: model,\n            message: .init(\n                role: role.formalized,\n                content: content.reduce(into: \"\") { partialResult, next in\n                    if let text = next.text {\n                        partialResult += text\n                    }\n                }\n            ),\n            otherChoices: [],\n            finishReason: stop_reason ?? \"\",\n            usage: .init(\n                promptTokens: usage.input_tokens ?? 0,\n                completionTokens: usage.output_tokens ?? 0,\n                cachedTokens: usage.cache_read_input_tokens ?? 0,\n                otherUsage: {\n                    var otherUsage = [String: Int]()\n                    if let cacheCreation = usage.cache_creation_input_tokens {\n                        otherUsage[\"cache_creation_input_tokens\"] = cacheCreation\n                    }\n                    return otherUsage\n                }()\n            )\n        )\n    }\n}\n\nextension ClaudeChatCompletionsService.StreamDataChunk {\n    func formalized() -> ChatCompletionsStreamDataChunk {\n        let usage = usage ?? message?.usage\n        return .init(\n            id: message?.id,\n            object: \"chat.completions\",\n            model: message?.model,\n            message: {\n                if let delta {\n                    return .init(content: delta.text)\n                }\n                if let message {\n                    return .init(role: message.role?.formalized)\n                }\n                return nil\n            }(),\n            finishReason: delta?.stop_reason,\n            usage: .init(\n                promptTokens: usage?.input_tokens,\n                completionTokens: usage?.output_tokens,\n                cachedTokens: usage?.cache_read_input_tokens,\n                otherUsage: {\n                    var otherUsage = [String: Int]()\n                    if let cacheCreation = usage?.cache_creation_input_tokens {\n                        otherUsage[\"cache_creation_input_tokens\"] = cacheCreation\n                    }\n                    return otherUsage\n                }()\n            )\n        )\n    }\n}\n\nextension ClaudeChatCompletionsService.RequestBody {\n    init(_ body: ChatCompletionsRequestBody) {\n        model = body.model\n        let prefixChecks = [\n            \"claude-3-5-sonnet\", \"claude-3-5-haiku\", \"claude-3-opus\", \"claude-3-haiku\",\n            \"claude-3.5-sonnet\", \"claude-3.5-haiku\",\n        ]\n        let supportsPromptCache = if prefixChecks.contains(where: model.hasPrefix) {\n            true\n        } else {\n            false\n        }\n\n        var systemPrompts = [SystemPrompt]()\n        var nonSystemMessages = [Message]()\n\n        enum JoinType {\n            case joinMessage\n            case appendToList\n            case padMessageAndAppendToList\n        }\n\n        func checkJoinType(for message: ChatCompletionsRequestBody.Message) -> JoinType {\n            guard let last = nonSystemMessages.last else { return .appendToList }\n            let newMessageRole: ClaudeChatCompletionsService.MessageRole = message.role == .user\n                ? .user\n                : .assistant\n\n            if newMessageRole != last.role {\n                return .appendToList\n            }\n\n            if message.cacheIfPossible != last.content\n                .contains(where: { $0.cache_control != nil })\n            {\n                return .padMessageAndAppendToList\n            }\n\n            return .joinMessage\n        }\n\n        /// Claude only supports caching at most 4 messages.\n        var cacheControlMax = 4\n\n        func consumeCacheControl() -> Bool {\n            if cacheControlMax > 0 {\n                cacheControlMax -= 1\n                return true\n            }\n            return false\n        }\n\n        func convertMessageContent(\n            _ message: ChatCompletionsRequestBody.Message\n        ) -> [MessageContent] {\n            var content = [MessageContent]()\n\n            content.append(.init(type: .text, text: message.content, cache_control: {\n                if message.cacheIfPossible, supportsPromptCache, consumeCacheControl() {\n                    return .init()\n                } else {\n                    return nil\n                }\n            }()))\n            for image in message.images {\n                content.append(.init(type: .image, source: .init(\n                    type: \"base64\",\n                    media_type: image.format.rawValue,\n                    data: image.base64EncodeData\n                )))\n            }\n\n            return content\n        }\n\n        func convertMessage(_ message: ChatCompletionsRequestBody.Message) -> Message {\n            let role: ClaudeChatCompletionsService.MessageRole = switch message.role {\n            case .system: .assistant\n            case .assistant, .tool: .assistant\n            case .user: .user\n            }\n\n            let content: [MessageContent] = convertMessageContent(message)\n\n            return .init(role: role, content: content)\n        }\n\n        for message in body.messages {\n            switch message.role {\n            case .system:\n                systemPrompts.append(.init(text: message.content, cache_control: {\n                    if message.cacheIfPossible, supportsPromptCache, consumeCacheControl() {\n                        return .init()\n                    } else {\n                        return nil\n                    }\n                }()))\n            case .tool, .assistant:\n                switch checkJoinType(for: message) {\n                case .appendToList:\n                    nonSystemMessages.append(convertMessage(message))\n                case .padMessageAndAppendToList, .joinMessage:\n                    nonSystemMessages[nonSystemMessages.endIndex - 1].content\n                        .append(contentsOf: convertMessageContent(message))\n                }\n            case .user:\n                switch checkJoinType(for: message) {\n                case .appendToList:\n                    nonSystemMessages.append(convertMessage(message))\n                case .padMessageAndAppendToList, .joinMessage:\n                    nonSystemMessages[nonSystemMessages.endIndex - 1].content\n                        .append(contentsOf: convertMessageContent(message))\n                }\n            }\n        }\n\n        messages = nonSystemMessages\n        system = systemPrompts\n        temperature = body.temperature\n        stream = body.stream\n        stop_sequences = body.stop\n        max_tokens = body.maxTokens ?? 4000\n    }\n\n    func formalized() -> ChatCompletionsRequestBody {\n        return .init(\n            model: model,\n            messages: system.map { system in\n                let convertedMessage = ChatCompletionsRequestBody.Message(\n                    role: .system,\n                    content: system.text,\n                    cacheIfPossible: system.cache_control != nil\n                )\n                return convertedMessage\n            } + messages.map { message in\n                var convertedMessage = ChatCompletionsRequestBody.Message(\n                    role: message.role == .user ? .user : .assistant,\n                    content: \"\",\n                    cacheIfPossible: message.content.contains(where: { $0.cache_control != nil })\n                )\n                for messageContent in message.content {\n                    switch messageContent.type {\n                    case .text:\n                        if let text = messageContent.text {\n                            convertedMessage.content += text\n                        }\n                    case .image:\n                        if let source = messageContent.source {\n                            convertedMessage.images.append(\n                                .init(\n                                    base64EncodeData: source.data,\n                                    format: {\n                                        switch source.media_type {\n                                        case \"image/png\": return .png\n                                        case \"image/gif\": return .gif\n                                        default: return .jpeg\n                                        }\n                                    }()\n                                )\n                            )\n                        }\n                    }\n                }\n                return convertedMessage\n            },\n            temperature: temperature,\n            stream: stream,\n            stop: stop_sequences,\n            maxTokens: max_tokens\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/EmbeddingAPIDefinitions.swift",
    "content": "import AIModel\nimport Foundation\nimport Preferences\nimport CodableWrappers\n\nprotocol EmbeddingAPI {\n    func embed(text: String) async throws -> EmbeddingResponse\n    func embed(texts: [String]) async throws -> EmbeddingResponse\n    func embed(tokens: [[Int]]) async throws -> EmbeddingResponse\n}\n\nextension EmbeddingAPI {\n    static func setupExtraHeaderFields(\n        _ request: inout URLRequest,\n        model: EmbeddingModel,\n        apiKey: String\n    ) async {\n        let parser = HeaderValueParser()\n        for field in model.info.customHeaderInfo.headers where !field.key.isEmpty {\n            let value = await parser.parse(\n                field.value,\n                context: .init(modelName: model.info.modelName, apiKey: apiKey)\n            )\n            request.setValue(value, forHTTPHeaderField: field.key)\n        }\n    }\n}\n\npublic struct EmbeddingResponse: Decodable {\n    public struct Object: Decodable {\n        public var embedding: [Float]\n        public var index: Int\n        @FallbackDecoding<EmptyString>\n        public var object: String\n    }\n\n    @FallbackDecoding<EmptyArray>\n    public var data: [Object]\n    @FallbackDecoding<EmptyString>\n    public var model: String\n\n    public struct Usage: Decodable {\n        @FallbackDecoding<EmptyInt>\n        public var prompt_tokens: Int\n        @FallbackDecoding<EmptyInt>\n        public var total_tokens: Int\n        \n        public struct Fallback: FallbackValueProvider {\n            public static var defaultValue: Usage { Usage(prompt_tokens: 0, total_tokens: 0) }\n        }\n    }\n\n    @FallbackDecoding<Usage.Fallback>\n    public var usage: Usage\n}\n\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/GitHubCopilotChatCompletionsService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Foundation\nimport GitHubCopilotService\nimport Logger\nimport Preferences\n\npublic enum AvailableGitHubCopilotModel: String, CaseIterable {\n    case claude35sonnet = \"claude-3.5-sonnet\"\n    case o1Mini = \"o1-mini\"\n    case o1 = \"o1\"\n    case gpt4Turbo = \"gpt-4-turbo\"\n    case gpt4oMini = \"gpt-4o-mini\"\n    case gpt4o = \"gpt-4o\"\n    case gpt4 = \"gpt-4\"\n    case gpt35Turbo = \"gpt-3.5-turbo\"\n    \n    public var contextWindow: Int {\n        switch self {\n        case .claude35sonnet:\n            return 200_000\n        case .o1Mini:\n            return 128_000\n        case .o1:\n            return 128_000\n        case .gpt4Turbo:\n            return 128_000\n        case .gpt4oMini:\n            return 128_000\n        case .gpt4o:\n            return 128_000\n        case .gpt4:\n            return 32_768\n        case .gpt35Turbo:\n            return 16_384\n        }\n    }\n}\n\n/// Looks like it's used in many other popular repositories so maybe it's safe.\nactor GitHubCopilotChatCompletionsService: ChatCompletionsStreamAPI, ChatCompletionsAPI {\n    \n    let chatModel: ChatModel\n    let requestBody: ChatCompletionsRequestBody\n\n    init(\n        model: ChatModel,\n        requestBody: ChatCompletionsRequestBody\n    ) {\n        var model = model\n        model.format = .openAICompatible\n        chatModel = model\n        self.requestBody = requestBody\n    }\n\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, any Error>\n    {\n        let service = try await buildService()\n        return try await service()\n    }\n\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        let service = try await buildService()\n        return try await service()\n    }\n\n    private func buildService() async throws -> OpenAIChatCompletionsService {\n        let token = try await GitHubCopilotExtension.fetchToken()\n\n        guard let endpoint = URL(string: token.endpoints.api + \"/chat/completions\") else {\n            throw ChatGPTServiceError.endpointIncorrect\n        }\n\n        return OpenAIChatCompletionsService(\n            apiKey: token.token,\n            model: chatModel,\n            endpoint: endpoint,\n            requestBody: requestBody\n        ) { request in\n\n//            POST /chat/completions HTTP/2\n//            :authority: api.individual.githubcopilot.com\n//            authorization: Bearer *\n//            x-request-id: *\n//            openai-organization: github-copilot\n//            vscode-sessionid: *\n//            vscode-machineid: *\n//            editor-version: vscode/1.89.1\n//            editor-plugin-version: Copilot for Xcode/0.35.5\n//            copilot-language-server-version: 1.236.0\n//            x-github-api-version: 2023-07-07\n//            openai-intent: conversation-panel\n//            content-type: application/json\n//            user-agent: GithubCopilot/1.236.0\n//            content-length: 9061\n//            accept: */*\n//            accept-encoding: gzip,deflate,br\n\n            request.setValue(\n                \"Copilot for Xcode/\\(Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"unknown\")\",\n                forHTTPHeaderField: \"Editor-Version\"\n            )\n            request.setValue(\"Bearer \\(token.token)\", forHTTPHeaderField: \"Authorization\")\n            request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n            request.setValue(\"vscode-chat\", forHTTPHeaderField: \"Copilot-Integration-Id\")\n            request.setValue(\"2023-07-07\", forHTTPHeaderField: \"X-Github-Api-Version\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/GitHubCopilotEmbeddingService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Foundation\nimport GitHubCopilotService\nimport Logger\nimport Preferences\n\n/// Looks like it's used in many other popular repositories so maybe it's safe.\nactor GitHubCopilotEmbeddingService: EmbeddingAPI {\n    let chatModel: EmbeddingModel\n\n    init(model: EmbeddingModel) {\n        var model = model\n        model.format = .openAICompatible\n        chatModel = model\n    }\n\n    func embed(text: String) async throws -> EmbeddingResponse {\n        let service = try await buildService()\n        return try await service.embed(text: text)\n    }\n\n    func embed(texts: [String]) async throws -> EmbeddingResponse {\n        let service = try await buildService()\n        return try await service.embed(texts: texts)\n    }\n\n    func embed(tokens: [[Int]]) async throws -> EmbeddingResponse {\n        let service = try await buildService()\n        return try await service.embed(tokens: tokens)\n    }\n\n    private func buildService() async throws -> OpenAIEmbeddingService {\n        let token = try await GitHubCopilotExtension.fetchToken()\n\n        return OpenAIEmbeddingService(\n            apiKey: token.token,\n            model: chatModel,\n            endpoint: token.endpoints.api + \"/embeddings\"\n        ) { request in\n\n//            POST /chat/completions HTTP/2\n//            :authority: api.individual.githubcopilot.com\n//            authorization: Bearer *\n//            x-request-id: *\n//            openai-organization: github-copilot\n//            vscode-sessionid: *\n//            vscode-machineid: *\n//            editor-version: vscode/1.89.1\n//            editor-plugin-version: Copilot for Xcode/0.35.5\n//            copilot-language-server-version: 1.236.0\n//            x-github-api-version: 2023-07-07\n//            openai-intent: conversation-panel\n//            content-type: application/json\n//            user-agent: GithubCopilot/1.236.0\n//            content-length: 9061\n//            accept: */*\n//            accept-encoding: gzip,deflate,br\n\n            request.setValue(\n                \"Copilot for Xcode/\\(Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"unknown\")\",\n                forHTTPHeaderField: \"Editor-Version\"\n            )\n            request.setValue(\"Bearer \\(token.token)\", forHTTPHeaderField: \"Authorization\")\n            request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n            request.setValue(\"vscode-chat\", forHTTPHeaderField: \"Copilot-Integration-Id\")\n            request.setValue(\"2023-07-07\", forHTTPHeaderField: \"X-Github-Api-Version\")\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/GoogleAIChatCompletionsService.swift",
    "content": "import AIModel\nimport Foundation\nimport GoogleGenerativeAI\nimport Preferences\n\nactor GoogleAIChatCompletionsService: ChatCompletionsAPI, ChatCompletionsStreamAPI {\n    let apiKey: String\n    let model: ChatModel\n    var requestBody: ChatCompletionsRequestBody\n    let baseURL: String\n\n    init(\n        apiKey: String,\n        model: ChatModel,\n        requestBody: ChatCompletionsRequestBody,\n        baseURL: String\n    ) {\n        self.apiKey = apiKey\n        self.model = model\n        self.requestBody = requestBody\n        self.baseURL = baseURL\n    }\n\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        let aiModel = GenerativeModel(\n            name: model.info.modelName,\n            apiKey: apiKey,\n            generationConfig: .init(GenerationConfig(\n                temperature: requestBody.temperature.map(Float.init)\n            )),\n            baseURL: baseURL,\n            requestOptions: model.info.googleGenerativeAIInfo.apiVersion.isEmpty\n                ? .init()\n                : .init(apiVersion: model.info.googleGenerativeAIInfo.apiVersion)\n        )\n        let history = Self.convertMessages(requestBody.messages)\n\n        do {\n            let response = try await aiModel.generateContent(history)\n            return response.formalized()\n        } catch let error as GenerateContentError {\n            struct ErrorWrapper: Error, LocalizedError {\n                let error: Error\n                var errorDescription: String? {\n                    var s = \"\"\n                    dump(error, to: &s)\n                    return \"Internal Error: \\(s)\"\n                }\n            }\n\n            switch error {\n            case let .internalError(underlying):\n                throw ErrorWrapper(error: underlying)\n            case .promptBlocked:\n                throw error\n            case .responseStoppedEarly:\n                throw error\n            case .promptImageContentError:\n                throw error\n            case .invalidAPIKey:\n                throw error\n            case .unsupportedUserLocation:\n                throw error\n            }\n        } catch {\n            throw error\n        }\n    }\n\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n    {\n        let aiModel = GenerativeModel(\n            name: model.info.modelName,\n            apiKey: apiKey,\n            generationConfig: .init(GenerationConfig(\n                temperature: requestBody.temperature.map(Float.init)\n            )),\n            baseURL: baseURL,\n            requestOptions: model.info.googleGenerativeAIInfo.apiVersion.isEmpty\n                ? .init()\n                : .init(apiVersion: model.info.googleGenerativeAIInfo.apiVersion)\n        )\n        let history = requestBody.messages.map { message in\n            ModelContent(message)\n        }\n\n        let stream = AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error> { continuation in\n            let stream = aiModel.generateContentStream(history)\n            let task = Task {\n                do {\n                    for try await response in stream {\n                        if Task.isCancelled { break }\n                        let chunk = response.formalizedAsChunk()\n                        continuation.yield(chunk)\n                    }\n                    continuation.finish()\n                } catch let error as GenerateContentError {\n                    struct ErrorWrapper: Error, LocalizedError {\n                        let error: Error\n                        var errorDescription: String? {\n                            var s = \"\"\n                            dump(error, to: &s)\n                            return \"Internal Error: \\(s)\"\n                        }\n                    }\n\n                    switch error {\n                    case let .internalError(underlying):\n                        continuation.finish(throwing: ErrorWrapper(error: underlying))\n                    case .promptBlocked:\n                        continuation.finish(throwing: error)\n                    case .responseStoppedEarly:\n                        continuation.finish(throwing: error)\n                    case .promptImageContentError:\n                        continuation.finish(throwing: error)\n                    case .invalidAPIKey:\n                        continuation.finish(throwing: error)\n                    case .unsupportedUserLocation:\n                        continuation.finish(throwing: error)\n                    }\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n\n        return stream\n    }\n\n    static func convertMessages(\n        _ messages: [ChatCompletionsRequestBody.Message]\n    ) -> [ModelContent] {\n        var history = messages\n        var reformattedHistory = [ChatCompletionsRequestBody.Message]()\n\n        // We don't want to combine the new user message with others.\n        let newUserMessage: ChatCompletionsRequestBody.Message? = if history.last?.role == .user {\n            history.removeLast()\n        } else {\n            nil\n        }\n\n        for message in history {\n            let lastIndex = reformattedHistory.endIndex - 1\n            guard lastIndex >= 0 else { // first message\n                if message.role == .system {\n                    reformattedHistory.append(.init(\n                        role: .user,\n                        content: ModelContent.convertContent(of: message)\n                    ))\n                    reformattedHistory.append(.init(\n                        role: .assistant,\n                        content: \"Got it. Let's start our conversation.\"\n                    ))\n                    continue\n                }\n\n                reformattedHistory.append(message)\n                continue\n            }\n\n            let lastMessage = reformattedHistory[lastIndex]\n\n            if ModelContent.convertRole(lastMessage.role) == ModelContent\n                .convertRole(message.role)\n            {\n                let newMessage = ChatCompletionsRequestBody.Message(\n                    role: message.role == .assistant ? .assistant : .user,\n                    content: \"\"\"\n                    \\(ModelContent.convertContent(of: lastMessage))\n\n                    ======\n\n                    \\(ModelContent.convertContent(of: message))\n                    \"\"\"\n                )\n                reformattedHistory[lastIndex] = newMessage\n            } else {\n                reformattedHistory.append(message)\n            }\n        }\n\n        if let newUserMessage {\n            if let last = reformattedHistory.last,\n               ModelContent.convertRole(last.role) == ModelContent\n               .convertRole(newUserMessage.role)\n            {\n                // Add dummy message\n                let dummyMessage = ChatCompletionsRequestBody.Message(\n                    role: .assistant,\n                    content: \"OK\"\n                )\n                reformattedHistory.append(dummyMessage)\n            }\n            reformattedHistory.append(newUserMessage)\n        }\n\n        return reformattedHistory.map(ModelContent.init)\n    }\n}\n\nextension ModelContent {\n    static func convertRole(_ role: ChatCompletionsRequestBody.Message.Role) -> String {\n        switch role {\n        case .user, .system, .tool:\n            return \"user\"\n        case .assistant:\n            return \"model\"\n        }\n    }\n\n    static func convertContent(of message: ChatCompletionsRequestBody.Message) -> String {\n        switch message.role {\n        case .system:\n            return \"System Prompt:\\n\\(message.content)\"\n        case .user:\n            return message.content\n        case .tool:\n            return \"\"\"\n            Result of function ID: \\(message.toolCallId ?? \"\")\n            \\(message.content)\n            \"\"\"\n        case .assistant:\n            if let toolCalls = message.toolCalls {\n                return toolCalls.map { call in\n                    \"\"\"\n                    Function ID: \\(call.id)\n                    Call function: \\(call.function.name)\n                    Arguments: \\(call.function.arguments ?? \"{}\")\n                    \"\"\"\n                }.joined(separator: \"\\n\")\n            } else {\n                return message.content\n            }\n        }\n    }\n\n    init(_ message: ChatCompletionsRequestBody.Message) {\n        let role = Self.convertRole(message.role)\n        let parts = [ModelContent.Part.text(Self.convertContent(of: message))]\n        self = .init(role: role, parts: parts)\n    }\n}\n\nextension GenerateContentResponse {\n    func formalized() -> ChatCompletionResponseBody {\n        let message: ChatCompletionResponseBody.Message\n        let otherMessages: [ChatCompletionResponseBody.Message]\n\n        func convertMessage(_ candidate: CandidateResponse) -> ChatCompletionResponseBody.Message {\n            .init(\n                role: .assistant,\n                content: candidate.content.parts.first(where: { part in\n                    if let text = part.text {\n                        return !text.isEmpty\n                    } else {\n                        return false\n                    }\n                })?.text ?? \"\"\n            )\n        }\n\n        if let first = candidates.first {\n            message = convertMessage(first)\n            otherMessages = candidates.dropFirst().map { convertMessage($0) }\n        } else {\n            message = .init(role: .assistant, content: \"\")\n            otherMessages = []\n        }\n\n        return .init(\n            object: \"chat.completion\",\n            model: \"\",\n            message: message,\n            otherChoices: otherMessages,\n            finishReason: candidates.first?.finishReason?.rawValue ?? \"\",\n            usage: nil\n        )\n    }\n\n    func formalizedAsChunk() -> ChatCompletionsStreamDataChunk {\n        func convertMessage(\n            _ candidate: CandidateResponse\n        ) -> ChatCompletionsStreamDataChunk.Delta {\n            .init(\n                role: .assistant,\n                content: candidate.content.parts\n                    .first(where: { $0.text != nil })?.text ?? \"\"\n            )\n        }\n\n        return .init(\n            object: \"\",\n            model: \"\",\n            message: candidates.first.map(convertMessage)\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/OlamaChatCompletionsService.swift",
    "content": "import AIModel\nimport Foundation\nimport Preferences\n\npublic actor OllamaChatCompletionsService {\n    var apiKey: String\n    var endpoint: URL\n    var requestBody: ChatCompletionsRequestBody\n    var model: ChatModel\n\n    public enum ResponseFormat: String {\n        case none = \"\"\n        case json\n    }\n\n    init(\n        apiKey: String,\n        model: ChatModel,\n        endpoint: URL,\n        requestBody: ChatCompletionsRequestBody\n    ) {\n        self.apiKey = apiKey\n        self.endpoint = endpoint\n        self.requestBody = requestBody\n        self.model = model\n    }\n}\n\nextension OllamaChatCompletionsService: ChatCompletionsAPI {\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        let requestBody = ChatCompletionRequestBody(\n            model: model.info.modelName,\n            messages: requestBody.messages.map { message in\n                .init(role: {\n                    switch message.role {\n                    case .assistant:\n                        return .assistant\n                    case .user:\n                        return .user\n                    case .system:\n                        return .system\n                    case .tool:\n                        return .user\n                    }\n                }(), content: message.content)\n            },\n            stream: false,\n            options: .init(\n                temperature: requestBody.temperature,\n                stop: requestBody.stop,\n                num_predict: requestBody.maxTokens\n            ),\n            keep_alive: nil,\n            format: nil\n        )\n\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(requestBody)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        if !apiKey.isEmpty {\n            request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n        }\n\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n\n        let (result, response) = try await URLSession.shared.data(for: request)\n\n        guard let response = response as? HTTPURLResponse else {\n            throw CancellationError()\n        }\n\n        guard response.statusCode == 200 else {\n            let text = String(data: result, encoding: .utf8)\n            throw Error.otherError(text ?? \"Unknown error\")\n        }\n\n        let body = try JSONDecoder().decode(\n            ChatCompletionResponseChunk.self,\n            from: result\n        )\n\n        return .init(\n            object: body.model,\n            model: body.model,\n            message: body.message.map { message in\n                .init(\n                    role: {\n                        switch message.role {\n                        case .assistant:\n                            return .assistant\n                        case .user:\n                            return .user\n                        case .system:\n                            return .system\n                        }\n                    }(),\n                    content: message.content\n                )\n            } ?? .init(role: .assistant, content: \"\"),\n            otherChoices: [],\n            finishReason: \"\",\n            usage: nil\n        )\n    }\n}\n\nextension OllamaChatCompletionsService: ChatCompletionsStreamAPI {\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Swift.Error>\n    {\n        let requestBody = ChatCompletionRequestBody(\n            model: model.info.modelName,\n            messages: requestBody.messages.map { message in\n                .init(role: {\n                    switch message.role {\n                    case .assistant:\n                        return .assistant\n                    case .user:\n                        return .user\n                    case .system:\n                        return .system\n                    case .tool:\n                        return .user\n                    }\n                }(), content: message.content)\n            },\n            stream: true,\n            options: .init(\n                temperature: requestBody.temperature,\n                stop: requestBody.stop,\n                num_predict: requestBody.maxTokens\n            ),\n            keep_alive: nil,\n            format: nil\n        )\n\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(requestBody)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        if !apiKey.isEmpty {\n            request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n        }\n\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n\n        let (result, response) = try await URLSession.shared.bytes(for: request)\n\n        guard let response = response as? HTTPURLResponse else {\n            throw CancellationError()\n        }\n\n        guard response.statusCode == 200 else {\n            let text = try await result.lines.reduce(into: \"\") { partialResult, current in\n                partialResult += current\n            }\n            throw Error.otherError(text)\n        }\n\n        let stream = ResponseStream(result: result) {\n            let chunk = try JSONDecoder().decode(\n                ChatCompletionResponseChunk.self,\n                from: $0.data(using: .utf8) ?? Data()\n            )\n            return .init(chunk: chunk, done: chunk.done)\n        }\n\n        let sequence = stream.map { chunk in\n            ChatCompletionsStreamDataChunk(\n                id: UUID().uuidString,\n                object: chunk.model,\n                model: chunk.model,\n                message: .init(\n                    role: {\n                        switch chunk.message?.role {\n                        case .none:\n                            return nil\n                        case .assistant:\n                            return .assistant\n                        case .user:\n                            return .user\n                        case .system:\n                            return .system\n                        }\n                    }(),\n                    content: chunk.message?.content\n                )\n            )\n        }\n\n        return sequence.toStream()\n    }\n}\n\nextension OllamaChatCompletionsService {\n    struct Message: Codable, Equatable {\n        public enum Role: String, Codable {\n            case user\n            case assistant\n            case system\n        }\n\n        /// The role of the message.\n        public var role: Role\n        /// The content of the message.\n        public var content: String\n    }\n\n    enum Error: Swift.Error, LocalizedError {\n        case decodeError(Swift.Error)\n        case otherError(String)\n\n        public var errorDescription: String? {\n            switch self {\n            case let .decodeError(error):\n                return error.localizedDescription\n            case let .otherError(message):\n                return message\n            }\n        }\n    }\n}\n\n// MARK: - Chat Completion API\n\n/// https://github.com/ollama/ollama/blob/main/docs/api.md#chat-request-streaming\nextension OllamaChatCompletionsService {\n    struct ChatCompletionRequestBody: Codable {\n        struct Options: Codable {\n            var temperature: Double?\n            var stop: [String]?\n            var num_predict: Int?\n            var top_k: Int?\n            var top_p: Double?\n        }\n\n        var model: String\n        var messages: [Message]\n        var stream: Bool\n        var options: Options\n        var keep_alive: String?\n        var format: String?\n    }\n\n    struct ChatCompletionResponseChunk: Decodable {\n        var model: String\n        var message: Message?\n        var response: String?\n        var done: Bool\n        var total_duration: Int64?\n        var load_duration: Int64?\n        var prompt_eval_count: Int?\n        var prompt_eval_duration: Int64?\n        var eval_count: Int?\n        var eval_duration: Int64?\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/OllamaEmbeddingService.swift",
    "content": "import AIModel\nimport Foundation\nimport Logger\n\nstruct OllamaEmbeddingService: EmbeddingAPI {\n    struct EmbeddingRequestBody: Encodable {\n        var prompt: String\n        var model: String\n    }\n\n    struct ResponseBody: Decodable {\n        var embedding: [Float]\n    }\n\n    let apiKey: String\n    let model: EmbeddingModel\n    let endpoint: String\n\n    public func embed(text: String) async throws -> EmbeddingResponse {\n        guard let url = URL(string: endpoint) else { throw ChatGPTServiceError.endpointIncorrect }\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(EmbeddingRequestBody(\n            prompt: text,\n            model: model.info.modelName\n        ))\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n        \n        if !apiKey.isEmpty {\n            request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n        }\n        \n        for field in model.info.customHeaderInfo.headers where !field.key.isEmpty {\n            request.setValue(field.value, forHTTPHeaderField: field.key)\n        }\n\n        let (result, response) = try await URLSession.shared.data(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let error = try? JSONDecoder().decode(\n                OpenAIChatCompletionsService.CompletionAPIError.self,\n                from: result\n            )\n            throw error ?? ChatGPTServiceError\n                .otherError(String(data: result, encoding: .utf8) ?? \"Unknown Error\")\n        }\n\n        let embeddingResponse = try JSONDecoder().decode(ResponseBody.self, from: result)\n        #if DEBUG\n        Logger.service.info(\"\"\"\n        Embedding usage\n        - number of strings: 1\n        - prompt tokens: N/A\n        - total tokens: N/A\n\n        \"\"\")\n        #endif\n        return .init(\n            data: [.init(\n                embedding: embeddingResponse.embedding,\n                index: 0,\n                object: model.info.modelName\n            )],\n            model: model.info.modelName,\n            usage: .init(prompt_tokens: 0, total_tokens: 0)\n        )\n    }\n\n    public func embed(texts: [String]) async throws -> EmbeddingResponse {\n        try await withThrowingTaskGroup(of: EmbeddingResponse.self) { group in\n            for text in texts {\n                _ = group.addTaskUnlessCancelled {\n                    try await self.embed(text: text)\n                }\n            }\n\n            var result = EmbeddingResponse(\n                data: [],\n                model: model.info.modelName,\n                usage: .init(prompt_tokens: 0, total_tokens: 0)\n            )\n\n            for try await response in group {\n                result.data.append(contentsOf: response.data)\n                result.usage.prompt_tokens += response.usage.prompt_tokens\n                result.usage.total_tokens += response.usage.total_tokens\n            }\n\n            return result\n        }\n    }\n\n    public func embed(tokens: [[Int]]) async throws -> EmbeddingResponse {\n        throw CancellationError()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/OpenAIChatCompletionsService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Foundation\nimport JoinJSON\nimport Logger\nimport Preferences\n\n/// https://platform.openai.com/docs/api-reference/chat/create\npublic actor OpenAIChatCompletionsService: ChatCompletionsStreamAPI, ChatCompletionsAPI {\n    struct CompletionAPIError: Error, Decodable, LocalizedError {\n        struct ErrorDetail: Decodable {\n            var message: String\n            var type: String?\n            var param: String?\n            var code: String?\n        }\n\n        struct MistralAIErrorMessage: Decodable {\n            struct Detail: Decodable {\n                var msg: String?\n            }\n\n            var message: String?\n            var msg: String?\n            var detail: [Detail]?\n        }\n\n        enum Message {\n            case raw(String)\n            case mistralAI(MistralAIErrorMessage)\n        }\n\n        var error: ErrorDetail?\n        var message: Message\n\n        var errorDescription: String? {\n            if let message = error?.message { return message }\n            switch message {\n            case let .raw(string):\n                return string\n            case let .mistralAI(mistralAIErrorMessage):\n                return mistralAIErrorMessage.message\n                    ?? mistralAIErrorMessage.msg\n                    ?? mistralAIErrorMessage.detail?.first?.msg\n                    ?? \"Unknown Error\"\n            }\n        }\n\n        enum CodingKeys: String, CodingKey {\n            case error\n            case message\n        }\n\n        init(from decoder: Decoder) throws {\n            let container = try decoder.container(keyedBy: CodingKeys.self)\n\n            error = try container.decode(ErrorDetail.self, forKey: .error)\n            message = {\n                if let e = try? container.decode(MistralAIErrorMessage.self, forKey: .message) {\n                    return CompletionAPIError.Message.mistralAI(e)\n                }\n                if let e = try? container.decode(String.self, forKey: .message) {\n                    return .raw(e)\n                }\n                return .raw(\"Unknown Error\")\n            }()\n        }\n    }\n\n    public enum MessageRole: String, Codable, Sendable {\n        case system\n        case user\n        case assistant\n        case function\n        case tool\n        case developer\n\n        var formalized: ChatCompletionsRequestBody.Message.Role {\n            switch self {\n            case .system: return .system\n            case .developer: return .system\n            case .user: return .user\n            case .assistant: return .assistant\n            case .function: return .tool\n            case .tool: return .tool\n            }\n        }\n    }\n\n    public struct StreamDataChunk: Codable, Sendable {\n        public var id: String?\n        public var provider: String?\n        public var object: String?\n        public var model: String?\n        public var choices: [Choice]?\n        public var usage: ResponseBody.Usage?\n        public var created: Int?\n\n        public struct Choice: Codable, Sendable {\n            public var delta: Delta?\n            public var index: Int?\n            public var finish_reason: String?\n\n            public struct Delta: Codable, Sendable {\n                public var role: MessageRole?\n                public var content: String?\n                public var reasoning_content: String?\n                public var reasoning: String?\n                public var function_call: RequestBody.MessageFunctionCall?\n                public var tool_calls: [RequestBody.MessageToolCall]?\n\n                public init(\n                    role: MessageRole? = nil,\n                    content: String? = nil,\n                    reasoning_content: String? = nil,\n                    reasoning: String? = nil,\n                    function_call: RequestBody.MessageFunctionCall? = nil,\n                    tool_calls: [RequestBody.MessageToolCall]? = nil\n                ) {\n                    self.role = role\n                    self.content = content\n                    self.reasoning_content = reasoning_content\n                    self.reasoning = reasoning\n                    self.function_call = function_call\n                    self.tool_calls = tool_calls\n                }\n            }\n\n            public init(delta: Delta? = nil, index: Int? = nil, finish_reason: String? = nil) {\n                self.delta = delta\n                self.index = index\n                self.finish_reason = finish_reason\n            }\n        }\n\n        public init(\n            id: String? = nil,\n            provider: String? = nil,\n            object: String? = nil,\n            model: String? = nil,\n            choices: [Choice]? = nil,\n            usage: ResponseBody.Usage? = nil,\n            created: Int? = nil\n        ) {\n            self.id = id\n            self.provider = provider\n            self.object = object\n            self.model = model\n            self.choices = choices\n            self.usage = usage\n            self.created = created\n        }\n    }\n\n    public struct ResponseBody: Codable, Equatable {\n        public struct Message: Codable, Equatable, Sendable {\n            /// The role of the message.\n            public var role: MessageRole\n            /// The content of the message.\n            public var content: String?\n            public var reasoning_content: String?\n            public var reasoning: String?\n            /// When we want to reply to a function call with the result, we have to provide the\n            /// name of the function call, and include the result in `content`.\n            ///\n            /// - important: It's required when the role is `function`.\n            public var name: String?\n            /// When the bot wants to call a function, it will reply with a function call in format:\n            /// ```json\n            /// {\n            ///   \"name\": \"weather\",\n            ///   \"arguments\": \"{ \\\"location\\\": \\\"earth\\\" }\"\n            /// }\n            /// ```\n            public var function_call: RequestBody.MessageFunctionCall?\n            /// Tool calls in an assistant message.\n            public var tool_calls: [RequestBody.MessageToolCall]?\n\n            public init(\n                role: MessageRole,\n                content: String? = nil,\n                reasoning_content: String? = nil,\n                reasoning: String? = nil,\n                name: String? = nil,\n                function_call: RequestBody.MessageFunctionCall? = nil,\n                tool_calls: [RequestBody.MessageToolCall]? = nil\n            ) {\n                self.role = role\n                self.content = content\n                self.reasoning_content = reasoning_content\n                self.reasoning = reasoning\n                self.name = name\n                self.function_call = function_call\n                self.tool_calls = tool_calls\n            }\n        }\n\n        public struct Choice: Codable, Equatable, Sendable {\n            public var message: Message\n            public var index: Int?\n            public var finish_reason: String?\n\n            public init(message: Message, index: Int? = nil, finish_reason: String? = nil) {\n                self.message = message\n                self.index = index\n                self.finish_reason = finish_reason\n            }\n        }\n\n        public struct Usage: Codable, Equatable, Sendable {\n            public var prompt_tokens: Int?\n            public var completion_tokens: Int?\n            public var total_tokens: Int?\n            public var prompt_tokens_details: PromptTokensDetails?\n            public var completion_tokens_details: CompletionTokensDetails?\n\n            public struct PromptTokensDetails: Codable, Equatable, Sendable {\n                public var cached_tokens: Int?\n                public var audio_tokens: Int?\n\n                public init(cached_tokens: Int? = nil, audio_tokens: Int? = nil) {\n                    self.cached_tokens = cached_tokens\n                    self.audio_tokens = audio_tokens\n                }\n            }\n\n            public struct CompletionTokensDetails: Codable, Equatable, Sendable {\n                public var reasoning_tokens: Int?\n                public var audio_tokens: Int?\n\n                public init(reasoning_tokens: Int? = nil, audio_tokens: Int? = nil) {\n                    self.reasoning_tokens = reasoning_tokens\n                    self.audio_tokens = audio_tokens\n                }\n            }\n\n            public init(\n                prompt_tokens: Int? = nil,\n                completion_tokens: Int? = nil,\n                total_tokens: Int? = nil,\n                prompt_tokens_details: PromptTokensDetails? = nil,\n                completion_tokens_details: CompletionTokensDetails? = nil\n            ) {\n                self.prompt_tokens = prompt_tokens\n                self.completion_tokens = completion_tokens\n                self.total_tokens = total_tokens\n                self.prompt_tokens_details = prompt_tokens_details\n                self.completion_tokens_details = completion_tokens_details\n            }\n        }\n\n        public var id: String?\n        public var object: String\n        public var model: String\n        public var usage: Usage\n        public var choices: [Choice]\n\n        public init(\n            id: String? = nil,\n            object: String,\n            model: String,\n            usage: Usage,\n            choices: [Choice]\n        ) {\n            self.id = id\n            self.object = object\n            self.model = model\n            self.usage = usage\n            self.choices = choices\n        }\n    }\n\n    public struct RequestBody: Codable, Equatable {\n        public typealias ClaudeCacheControl = ClaudeChatCompletionsService.RequestBody.CacheControl\n\n        public struct GitHubCopilotCacheControl: Codable, Equatable, Sendable {\n            public var type: String\n\n            public init(type: String = \"ephemeral\") {\n                self.type = type\n            }\n        }\n\n        public struct Message: Codable, Equatable {\n            public enum MessageContent: Codable, Equatable {\n                public struct TextContentPart: Codable, Equatable {\n                    public var type = \"text\"\n                    public var text: String\n                    public var cache_control: ClaudeCacheControl?\n\n                    public init(\n                        type: String = \"text\",\n                        text: String,\n                        cache_control: ClaudeCacheControl? = nil\n                    ) {\n                        self.type = type\n                        self.text = text\n                        self.cache_control = cache_control\n                    }\n                }\n\n                public struct ImageContentPart: Codable, Equatable {\n                    public struct ImageURL: Codable, Equatable {\n                        public var url: String\n                        public var detail: String?\n\n                        public init(url: String, detail: String? = nil) {\n                            self.url = url\n                            self.detail = detail\n                        }\n                    }\n\n                    public var type = \"image_url\"\n                    public var image_url: ImageURL\n\n                    public init(type: String = \"image_url\", image_url: ImageURL) {\n                        self.type = type\n                        self.image_url = image_url\n                    }\n                }\n\n                public struct AudioContentPart: Codable, Equatable {\n                    public struct InputAudio: Codable, Equatable {\n                        public var data: String\n                        public var format: String\n\n                        public init(data: String, format: String) {\n                            self.data = data\n                            self.format = format\n                        }\n                    }\n\n                    public var type = \"input_audio\"\n                    public var input_audio: InputAudio\n\n                    public init(type: String = \"input_audio\", input_audio: InputAudio) {\n                        self.type = type\n                        self.input_audio = input_audio\n                    }\n                }\n\n                public enum ContentPart: Codable, Equatable {\n                    case text(TextContentPart)\n                    case image(ImageContentPart)\n                    case audio(AudioContentPart)\n\n                    public func encode(to encoder: any Encoder) throws {\n                        var container = encoder.singleValueContainer()\n                        switch self {\n                        case let .text(text):\n                            try container.encode(text)\n                        case let .image(image):\n                            try container.encode(image)\n                        case let .audio(audio):\n                            try container.encode(audio)\n                        }\n                    }\n\n                    public init(from decoder: any Decoder) throws {\n                        let container = try decoder.singleValueContainer()\n                        var errors: [Error] = []\n\n                        do {\n                            let text = try container.decode(String.self)\n                            self = .text(.init(text: text))\n                            return\n                        } catch {\n                            errors.append(error)\n                        }\n\n                        do {\n                            let text = try container.decode(TextContentPart.self)\n                            self = .text(text)\n                            return\n                        } catch {\n                            errors.append(error)\n                        }\n\n                        do {\n                            let image = try container.decode(ImageContentPart.self)\n                            self = .image(image)\n                            return\n                        } catch {\n                            errors.append(error)\n                        }\n\n                        do {\n                            let audio = try container.decode(AudioContentPart.self)\n                            self = .audio(audio)\n                            return\n                        } catch {\n                            errors.append(error)\n                        }\n\n                        struct E: Error, LocalizedError {\n                            let errors: [Error]\n\n                            var errorDescription: String? {\n                                \"Failed to decode ContentPart: \\(errors.map { $0.localizedDescription }.joined(separator: \"; \"))\"\n                            }\n                        }\n                        throw E(errors: errors)\n                    }\n                }\n\n                case contentParts([ContentPart])\n                case text(String)\n\n                public func encode(to encoder: any Encoder) throws {\n                    var container = encoder.singleValueContainer()\n                    switch self {\n                    case let .contentParts(parts):\n                        try container.encode(parts)\n                    case let .text(text):\n                        try container.encode(text)\n                    }\n                }\n\n                public init(from decoder: any Decoder) throws {\n                    let container = try decoder.singleValueContainer()\n                    var errors: [Error] = []\n\n                    do {\n                        let parts = try container.decode([ContentPart].self)\n                        self = .contentParts(parts)\n                        return\n                    } catch {\n                        errors.append(error)\n                    }\n\n                    do {\n                        let text = try container.decode(String.self)\n                        self = .text(text)\n                        return\n                    } catch {\n                        errors.append(error)\n                    }\n\n                    do { // Null\n                        _ = try container.decode([ContentPart]?.self)\n                        self = .contentParts([])\n                        return\n                    } catch {\n                        errors.append(error)\n                    }\n\n                    struct E: Error, LocalizedError {\n                        let errors: [Error]\n\n                        var errorDescription: String? {\n                            \"Failed to decode MessageContent: \\(errors.map { $0.localizedDescription }.joined(separator: \"; \"))\"\n                        }\n                    }\n                    throw E(errors: errors)\n                }\n            }\n\n            /// The role of the message.\n            public var role: MessageRole\n            /// The content of the message.\n            public var content: MessageContent\n            /// When we want to reply to a function call with the result, we have to provide the\n            /// name of the function call, and include the result in `content`.\n            ///\n            /// - important: It's required when the role is `function`.\n            public var name: String?\n            /// Tool calls in an assistant message.\n            public var tool_calls: [MessageToolCall]?\n            /// When we want to call a tool, we have to provide the id of the call.\n            ///\n            /// - important: It's required when the role is `tool`.\n            public var tool_call_id: String?\n            /// When the bot wants to call a function, it will reply with a function call.\n            ///\n            /// Deprecated.\n            public var function_call: MessageFunctionCall?\n            #warning(\"TODO: when to use it?\")\n            /// Cache control for GitHub Copilot models.\n            public var copilot_cache_control: GitHubCopilotCacheControl?\n\n            public init(\n                role: MessageRole,\n                content: MessageContent,\n                name: String? = nil,\n                tool_calls: [MessageToolCall]? = nil,\n                tool_call_id: String? = nil,\n                function_call: MessageFunctionCall? = nil,\n                copilot_cache_control: GitHubCopilotCacheControl? = nil\n            ) {\n                self.role = role\n                self.content = content\n                self.name = name\n                self.tool_calls = tool_calls\n                self.tool_call_id = tool_call_id\n                self.function_call = function_call\n                self.copilot_cache_control = copilot_cache_control\n            }\n        }\n\n        public struct MessageFunctionCall: Codable, Equatable, Sendable {\n            /// The name of the\n            public var name: String?\n            /// A JSON string.\n            public var arguments: String?\n\n            public init(name: String? = nil, arguments: String? = nil) {\n                self.name = name\n                self.arguments = arguments\n            }\n        }\n\n        public struct MessageToolCall: Codable, Equatable, Sendable {\n            /// When it's returned as a data chunk, use the index to identify the tool call.\n            public var index: Int?\n            /// The id of the tool call.\n            public var id: String?\n            /// The type of the tool.\n            public var type: String?\n            /// The function call.\n            public var function: MessageFunctionCall?\n\n            public init(\n                index: Int? = nil,\n                id: String? = nil,\n                type: String? = nil,\n                function: MessageFunctionCall? = nil\n            ) {\n                self.index = index\n                self.id = id\n                self.type = type\n                self.function = function\n            }\n        }\n\n        public struct Tool: Codable, Equatable, Sendable {\n            public var type: String = \"function\"\n            public var function: ChatGPTFunctionSchema\n\n            public init(type: String, function: ChatGPTFunctionSchema) {\n                self.type = type\n                self.function = function\n            }\n        }\n\n        public struct StreamOptions: Codable, Equatable, Sendable {\n            public var include_usage: Bool = true\n\n            public init(include_usage: Bool = true) {\n                self.include_usage = include_usage\n            }\n        }\n\n        public var model: String\n        public var messages: [Message]\n        public var temperature: Double?\n        public var stream: Bool?\n        public var stop: [String]?\n        public var max_completion_tokens: Int?\n        public var tool_choice: FunctionCallStrategy?\n        public var tools: [Tool]?\n        public var stream_options: StreamOptions?\n\n        public init(\n            model: String,\n            messages: [Message],\n            temperature: Double? = nil,\n            stream: Bool? = nil,\n            stop: [String]? = nil,\n            max_completion_tokens: Int? = nil,\n            tool_choice: FunctionCallStrategy? = nil,\n            tools: [Tool]? = nil,\n            stream_options: StreamOptions? = nil\n        ) {\n            self.model = model\n            self.messages = messages\n            self.temperature = temperature\n            self.stream = stream\n            self.stop = stop\n            self.max_completion_tokens = max_completion_tokens\n            self.tool_choice = tool_choice\n            self.tools = tools\n            self.stream_options = stream_options\n        }\n    }\n\n    var apiKey: String\n    var endpoint: URL\n    var requestBody: RequestBody\n    var model: ChatModel\n    let requestModifier: ((inout URLRequest) -> Void)?\n\n    init(\n        apiKey: String,\n        model: ChatModel,\n        endpoint: URL,\n        requestBody: ChatCompletionsRequestBody,\n        requestModifier: ((inout URLRequest) -> Void)? = nil\n    ) {\n        self.apiKey = apiKey\n        self.endpoint = endpoint\n        self.requestBody = .init(\n            requestBody,\n            endpoint: endpoint,\n            enforceMessageOrder: model.info.openAICompatibleInfo.enforceMessageOrder,\n            supportsMultipartMessageContent: model.info.openAICompatibleInfo\n                .supportsMultipartMessageContent,\n            requiresBeginWithUserMessage: model.info.openAICompatibleInfo\n                .requiresBeginWithUserMessage,\n            canUseTool: model.info.supportsFunctionCalling,\n            supportsImage: model.info.supportsImage,\n            supportsAudio: model.info.supportsAudio,\n            supportsTemperature: {\n                guard model.format == .openAI else { return true }\n                if let chatGPTModel = ChatGPTModel(rawValue: model.info.modelName) {\n                    return chatGPTModel.supportsTemperature\n                } else if model.info.modelName.hasPrefix(\"o\") {\n                    return false\n                }\n                return true\n            }(),\n            supportsSystemPrompt: {\n                guard model.format == .openAI else { return true }\n                if let chatGPTModel = ChatGPTModel(rawValue: model.info.modelName) {\n                    return chatGPTModel.supportsSystemPrompt\n                } else if model.info.modelName.hasPrefix(\"o\") {\n                    return false\n                }\n                return true\n            }()\n        )\n        self.model = model\n        self.requestModifier = requestModifier\n    }\n\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n    {\n        requestBody.stream = true\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(requestBody)\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        Self.setupCustomBody(&request, model: model)\n        Self.setupAppInformation(&request)\n        Self.setupAPIKey(&request, model: model, apiKey: apiKey)\n        Self.setupGitHubCopilotVisionField(&request, model: model)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n        requestModifier?(&request)\n\n        let (result, response) = try await URLSession.shared.bytes(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let text = try await result.lines.reduce(into: \"\") { partialResult, current in\n                partialResult += current\n            }\n            guard let data = text.data(using: .utf8)\n            else { throw ChatGPTServiceError.responseInvalid }\n            if response.statusCode == 403 {\n                throw ChatGPTServiceError.unauthorized(text)\n            }\n            let decoder = JSONDecoder()\n            let error = try? decoder.decode(CompletionAPIError.self, from: data)\n            throw error ?? ChatGPTServiceError.otherError(\n                text +\n                    \"\\n\\nPlease check your model settings, some capabilities may not be supported by the model.\"\n            )\n        }\n\n        let stream = ResponseStream<StreamDataChunk>(result: result) {\n            var line = $0\n            let prefix = \"data: \"\n            if line.hasPrefix(prefix) {\n                line.removeFirst(prefix.count)\n            }\n\n            if line == \"[DONE]\" { return .init(chunk: nil, done: true) }\n\n            do {\n                let chunk = try JSONDecoder().decode(\n                    StreamDataChunk.self,\n                    from: line.data(using: .utf8) ?? Data()\n                )\n                return .init(chunk: chunk, done: false)\n            } catch {\n                Logger.service.error(\"Error decoding stream data: \\(error)\")\n                return .init(chunk: nil, done: false)\n            }\n        }\n\n        return stream.map { $0.formalized() }.toStream()\n    }\n\n    func callAsFunction() async throws -> ChatCompletionResponseBody {\n        let stream: AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error> =\n            try await callAsFunction()\n\n        var body = ChatCompletionResponseBody(\n            id: nil,\n            object: \"\",\n            model: \"\",\n            message: .init(role: .assistant, content: \"\"),\n            otherChoices: [],\n            finishReason: \"\",\n            usage: .init(\n                promptTokens: 0,\n                completionTokens: 0,\n                cachedTokens: 0,\n                otherUsage: [:]\n            )\n        )\n        for try await chunk in stream {\n            if let id = chunk.id {\n                body.id = id\n            }\n            if let finishReason = chunk.finishReason {\n                body.finishReason = finishReason\n            }\n            if let model = chunk.model {\n                body.model = model\n            }\n            if let object = chunk.object {\n                body.object = object\n            }\n            if let role = chunk.message?.role {\n                body.message.role = role\n            }\n            if let text = chunk.message?.content {\n                let existed = body.message.content ?? \"\"\n                body.message.content = existed + text\n            }\n            if let usage = chunk.usage {\n                body.usage?.merge(with: usage)\n            }\n        }\n        return body\n    }\n\n    static func setupAppInformation(_ request: inout URLRequest) {\n        if #available(macOS 13.0, *) {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        } else {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        }\n    }\n\n    static func setupAPIKey(_ request: inout URLRequest, model: ChatModel, apiKey: String) {\n        if !apiKey.isEmpty {\n            switch model.format {\n            case .openAI:\n                if !model.info.openAIInfo.organizationID.isEmpty {\n                    request.setValue(\n                        model.info.openAIInfo.organizationID,\n                        forHTTPHeaderField: \"OpenAI-Organization\"\n                    )\n                }\n\n                if !model.info.openAIInfo.projectID.isEmpty {\n                    request.setValue(\n                        model.info.openAIInfo.projectID,\n                        forHTTPHeaderField: \"OpenAI-Project\"\n                    )\n                }\n\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .openAICompatible:\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .azureOpenAI:\n                request.setValue(apiKey, forHTTPHeaderField: \"api-key\")\n            case .gitHubCopilot:\n                break\n            case .googleAI:\n                assertionFailure(\"Unsupported\")\n            case .ollama:\n                assertionFailure(\"Unsupported\")\n            case .claude:\n                assertionFailure(\"Unsupported\")\n            }\n        }\n    }\n\n    static func setupGitHubCopilotVisionField(_ request: inout URLRequest, model: ChatModel) {\n        if model.info.supportsImage {\n            request.setValue(\"true\", forHTTPHeaderField: \"copilot-vision-request\")\n        }\n    }\n\n    static func setupCustomBody(_ request: inout URLRequest, model: ChatModel) {\n        switch model.format {\n        case .openAI, .openAICompatible:\n            break\n        default:\n            return\n        }\n\n        let join = JoinJSON()\n        let jsonBody = model.info.customBodyInfo.jsonBody\n            .trimmingCharacters(in: .whitespacesAndNewlines)\n        guard let data = request.httpBody, !jsonBody.isEmpty else { return }\n        let newBody = join.join(data, with: jsonBody)\n        request.httpBody = newBody\n    }\n}\n\nextension OpenAIChatCompletionsService.ResponseBody {\n    func formalized() -> ChatCompletionResponseBody {\n        let message: ChatCompletionResponseBody.Message\n        let otherMessages: [ChatCompletionResponseBody.Message]\n\n        func convertMessage(_ message: Message) -> ChatCompletionResponseBody.Message {\n            .init(\n                role: message.role.formalized,\n                content: message.content ?? \"\",\n                reasoningContent: message.reasoning_content ?? message.reasoning ?? \"\",\n                toolCalls: {\n                    if let toolCalls = message.tool_calls {\n                        return toolCalls.map { toolCall in\n                            .init(\n                                id: toolCall.id ?? \"\",\n                                type: toolCall.type ?? \"function\",\n                                function: .init(\n                                    name: toolCall.function?.name ?? \"\",\n                                    arguments: toolCall.function?.arguments\n                                )\n                            )\n                        }\n                    } else if let functionCall = message.function_call {\n                        return [\n                            .init(\n                                id: functionCall.name ?? \"\",\n                                type: \"function\",\n                                function: .init(\n                                    name: functionCall.name ?? \"\",\n                                    arguments: functionCall.arguments\n                                )\n                            ),\n                        ]\n                    } else {\n                        return nil\n                    }\n                }()\n            )\n        }\n\n        if let first = choices.first?.message {\n            message = convertMessage(first)\n            otherMessages = choices.dropFirst().map { convertMessage($0.message) }\n        } else {\n            message = .init(role: .assistant, content: \"\")\n            otherMessages = []\n        }\n\n        let usage = ChatCompletionResponseBody.Usage(\n            promptTokens: usage.prompt_tokens ?? 0,\n            completionTokens: usage.completion_tokens ?? 0,\n            cachedTokens: usage.prompt_tokens_details?.cached_tokens ?? 0,\n            otherUsage: [\n                \"audio_tokens\": usage.completion_tokens_details?.audio_tokens ?? 0,\n                \"reasoning_tokens\": usage.completion_tokens_details?.reasoning_tokens ?? 0,\n            ]\n        )\n\n        return .init(\n            id: id,\n            object: object,\n            model: model,\n            message: message,\n            otherChoices: otherMessages,\n            finishReason: choices.first?.finish_reason ?? \"\",\n            usage: usage\n        )\n    }\n}\n\nextension OpenAIChatCompletionsService.StreamDataChunk {\n    func formalized() -> ChatCompletionsStreamDataChunk {\n        .init(\n            id: id,\n            object: object,\n            model: model,\n            message: {\n                if let choice = self.choices?.first {\n                    return .init(\n                        role: choice.delta?.role?.formalized,\n                        content: choice.delta?.content,\n                        reasoningContent: choice.delta?.reasoning_content\n                            ?? choice.delta?.reasoning,\n                        toolCalls: {\n                            if let toolCalls = choice.delta?.tool_calls {\n                                return toolCalls.map {\n                                    .init(\n                                        index: $0.index,\n                                        id: $0.id,\n                                        type: $0.type,\n                                        function: .init(\n                                            name: $0.function?.name,\n                                            arguments: $0.function?.arguments\n                                        )\n                                    )\n                                }\n                            }\n\n                            if let functionCall = choice.delta?.function_call {\n                                return [\n                                    .init(\n                                        index: 0,\n                                        id: functionCall.name,\n                                        type: \"function\",\n                                        function: .init(\n                                            name: functionCall.name,\n                                            arguments: functionCall.arguments\n                                        )\n                                    ),\n                                ]\n                            }\n\n                            return nil\n                        }()\n                    )\n                }\n                return nil\n            }(),\n            finishReason: choices?.first?.finish_reason,\n            usage: .init(\n                promptTokens: usage?.prompt_tokens,\n                completionTokens: usage?.completion_tokens,\n                cachedTokens: usage?.prompt_tokens_details?.cached_tokens,\n                otherUsage: {\n                    var dict = [String: Int]()\n                    if let audioTokens = usage?.completion_tokens_details?.audio_tokens {\n                        dict[\"audio_tokens\"] = audioTokens\n                    }\n                    if let reasoningTokens = usage?.completion_tokens_details?.reasoning_tokens {\n                        dict[\"reasoning_tokens\"] = reasoningTokens\n                    }\n                    return dict\n                }()\n            )\n        )\n    }\n}\n\nextension OpenAIChatCompletionsService.RequestBody {\n    static func convertContentPart(\n        content: String,\n        images: [ChatCompletionsRequestBody.Message.Image],\n        audios: [ChatCompletionsRequestBody.Message.Audio]\n    ) -> [Message.MessageContent.ContentPart] {\n        var all = [Message.MessageContent.ContentPart]()\n        all.append(.text(.init(text: content)))\n\n        for image in images {\n            all.append(.image(.init(\n                image_url: .init(\n                    url: image.dataURLString,\n                    detail: nil\n                )\n            )))\n        }\n\n        for audio in audios {\n            all.append(.audio(.init(\n                input_audio: .init(\n                    data: audio.data.base64EncodedString(),\n                    format: audio.format.rawValue\n                )\n            )))\n        }\n\n        return all\n    }\n\n    static func convertContentPart(\n        _ part: ClaudeChatCompletionsService.RequestBody.MessageContent\n    ) -> Message.MessageContent.ContentPart? {\n        switch part.type {\n        case .text:\n            return .text(.init(text: part.text ?? \"\", cache_control: part.cache_control))\n        case .image:\n            let type = part.source?.type ?? \"base64\"\n            let base64Data = part.source?.data ?? \"\"\n            let mediaType = part.source?.media_type ?? \"image/png\"\n            return .image(.init(image_url: .init(url: \"data:\\(mediaType);\\(type),\\(base64Data)\")))\n        }\n    }\n\n    static func joinMessageContent(\n        _ message: inout Message,\n        content: String,\n        images: [ChatCompletionsRequestBody.Message.Image],\n        audios: [ChatCompletionsRequestBody.Message.Audio],\n        supportsMultipartMessageContent: Bool\n    ) {\n        if supportsMultipartMessageContent {\n            switch message.role {\n            case .system, .developer, .assistant, .user:\n                let newParts = Self.convertContentPart(\n                    content: content,\n                    images: images,\n                    audios: audios\n                )\n                if case let .contentParts(existingParts) = message.content {\n                    message.content = .contentParts(existingParts + newParts)\n                } else {\n                    message.content = .contentParts(newParts)\n                }\n            case .tool, .function:\n                if case let .text(existingText) = message.content {\n                    message.content = .text(existingText + \"\\n\\n\" + content)\n                } else {\n                    message.content = .text(content)\n                }\n            }\n        } else {\n            switch message.role {\n            case .system, .developer, .assistant, .user:\n                if case let .text(existingText) = message.content {\n                    message.content = .text(existingText + \"\\n\\n\" + content)\n                } else {\n                    message.content = .text(content)\n                }\n            case .tool, .function:\n                if case let .text(existingText) = message.content {\n                    message.content = .text(existingText + \"\\n\\n\" + content)\n                } else {\n                    message.content = .text(content)\n                }\n            }\n        }\n    }\n\n    init(\n        _ body: ChatCompletionsRequestBody,\n        endpoint: URL,\n        enforceMessageOrder: Bool,\n        supportsMultipartMessageContent: Bool,\n        requiresBeginWithUserMessage: Bool,\n        canUseTool: Bool,\n        supportsImage: Bool,\n        supportsAudio: Bool,\n        supportsTemperature: Bool,\n        supportsSystemPrompt: Bool\n    ) {\n        let supportsMultipartMessageContent = if supportsAudio || supportsImage {\n            true\n        } else {\n            supportsMultipartMessageContent\n        }\n        temperature = body.temperature\n        stream = body.stream\n        stop = body.stop\n        max_completion_tokens = body.maxTokens\n        tool_choice = body.toolChoice\n        tools = body.tools?.map {\n            Tool(\n                type: $0.type,\n                function: $0.function\n            )\n        }\n        stream_options = if body.stream ?? false {\n            StreamOptions()\n        } else {\n            nil\n        }\n\n        model = body.model\n\n        var body = body\n\n        if !supportsTemperature {\n            temperature = nil\n        }\n        if !supportsSystemPrompt {\n            for (index, message) in body.messages.enumerated() {\n                if message.role == .system {\n                    body.messages[index].role = .user\n                }\n            }\n        }\n\n        if requiresBeginWithUserMessage {\n            let firstUserIndex = body.messages.firstIndex(where: { $0.role == .user }) ?? 0\n            let endIndex = firstUserIndex\n            for i in stride(from: endIndex - 1, to: 0, by: -1)\n                where i >= 0 && body.messages.endIndex > i\n            {\n                body.messages.remove(at: i)\n            }\n        }\n\n        // Special case for Claude through OpenRouter\n\n        if endpoint.absoluteString.contains(\"openrouter.ai\"), model.hasPrefix(\"anthropic/\") {\n            body.model = model.replacingOccurrences(of: \"anthropic/\", with: \"\")\n            let claudeRequestBody = ClaudeChatCompletionsService.RequestBody(body)\n            messages = claudeRequestBody.system.map {\n                Message(\n                    role: .system,\n                    content: .contentParts([.text(.init(\n                        text: $0.text,\n                        cache_control: $0.cache_control\n                    ))])\n                )\n            } + claudeRequestBody.messages.map {\n                (message: ClaudeChatCompletionsService.RequestBody.Message) in\n                let role: OpenAIChatCompletionsService.MessageRole = switch message.role {\n                case .user: .user\n                case .assistant: .assistant\n                }\n                return Message(\n                    role: role,\n                    content: .contentParts(message.content.compactMap(Self.convertContentPart)),\n                    name: nil,\n                    tool_calls: nil,\n                    tool_call_id: nil\n                )\n            }\n            return\n        }\n\n        // Enforce message order\n\n        if enforceMessageOrder {\n            var systemPrompts = [Message.MessageContent.ContentPart]()\n            var nonSystemMessages = [Message]()\n\n            for message in body.messages {\n                switch (message.role, canUseTool) {\n                case (.system, _):\n                    systemPrompts.append(contentsOf: Self.convertContentPart(\n                        content: message.content,\n                        images: supportsImage ? message.images : [],\n                        audios: supportsAudio ? message.audios : []\n                    ))\n                case (.tool, true):\n                    if let last = nonSystemMessages.last, last.role == .tool {\n                        Self.joinMessageContent(\n                            &nonSystemMessages[nonSystemMessages.endIndex - 1],\n                            content: message.content,\n                            images: supportsImage ? message.images : [],\n                            audios: supportsAudio ? message.audios : [],\n                            supportsMultipartMessageContent: supportsMultipartMessageContent\n                        )\n                    } else {\n                        nonSystemMessages.append(.init(\n                            role: .tool,\n                            content: {\n                                if supportsMultipartMessageContent {\n                                    return .contentParts(Self.convertContentPart(\n                                        content: message.content,\n                                        images: supportsImage ? message.images : [],\n                                        audios: supportsAudio ? message.audios : []\n                                    ))\n                                }\n                                return .text(message.content)\n                            }(),\n                            tool_calls: message.toolCalls?.map { tool in\n                                MessageToolCall(\n                                    id: tool.id,\n                                    type: tool.type,\n                                    function: MessageFunctionCall(\n                                        name: tool.function.name,\n                                        arguments: tool.function.arguments\n                                    )\n                                )\n                            }\n                        ))\n                    }\n                case (.assistant, _), (.tool, false):\n                    if let last = nonSystemMessages.last, last.role == .assistant {\n                        Self.joinMessageContent(\n                            &nonSystemMessages[nonSystemMessages.endIndex - 1],\n                            content: message.content,\n                            images: supportsImage ? message.images : [],\n                            audios: supportsAudio ? message.audios : [],\n                            supportsMultipartMessageContent: supportsMultipartMessageContent\n                        )\n                    } else {\n                        nonSystemMessages.append(.init(\n                            role: .assistant,\n                            content: {\n                                if supportsMultipartMessageContent {\n                                    return .contentParts(Self.convertContentPart(\n                                        content: message.content,\n                                        images: supportsImage ? message.images : [],\n                                        audios: supportsAudio ? message.audios : []\n                                    ))\n                                }\n                                return .text(message.content)\n                            }()\n                        ))\n                    }\n                case (.user, _):\n                    if let last = nonSystemMessages.last, last.role == .user {\n                        Self.joinMessageContent(\n                            &nonSystemMessages[nonSystemMessages.endIndex - 1],\n                            content: message.content,\n                            images: supportsImage ? message.images : [],\n                            audios: supportsAudio ? message.audios : [],\n                            supportsMultipartMessageContent: supportsMultipartMessageContent\n                        )\n                    } else {\n                        nonSystemMessages.append(.init(\n                            role: .user,\n                            content: {\n                                if supportsMultipartMessageContent {\n                                    return .contentParts(Self.convertContentPart(\n                                        content: message.content,\n                                        images: supportsImage ? message.images : [],\n                                        audios: supportsAudio ? message.audios : []\n                                    ))\n                                }\n                                return .text(message.content)\n                            }(),\n                            name: message.name,\n                            tool_call_id: message.toolCallId\n                        ))\n                    }\n                }\n            }\n            messages = [\n                .init(\n                    role: .system,\n                    content: {\n                        if supportsMultipartMessageContent {\n                            return .contentParts(systemPrompts)\n                        }\n                        let textParts = systemPrompts.compactMap {\n                            if case let .text(text) = $0 { return text.text }\n                            return nil\n                        }\n\n                        return .text(textParts.joined(separator: \"\\n\\n\"))\n                    }()\n                ),\n            ] + nonSystemMessages\n\n            return\n        }\n\n        // Default\n\n        messages = body.messages.map { message in\n            .init(\n                role: {\n                    switch message.role {\n                    case .user:\n                        return .user\n                    case .assistant:\n                        return .assistant\n                    case .system:\n                        return .system\n                    case .tool:\n                        return .tool\n                    }\n                }(),\n                content: {\n                    // always prefer text only content if possible.\n                    if supportsMultipartMessageContent {\n                        let images = supportsImage ? message.images : []\n                        let audios = supportsAudio ? message.audios : []\n                        if !images.isEmpty || !audios.isEmpty {\n                            return .contentParts(Self.convertContentPart(\n                                content: message.content,\n                                images: images,\n                                audios: audios\n                            ))\n                        }\n                    }\n                    return .text(message.content)\n                }(),\n                name: message.name,\n                tool_calls: message.toolCalls?.map { tool in\n                    MessageToolCall(\n                        id: tool.id,\n                        type: tool.type,\n                        function: MessageFunctionCall(\n                            name: tool.function.name,\n                            arguments: tool.function.arguments\n                        )\n                    )\n                },\n                tool_call_id: message.toolCallId\n            )\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/OpenAIEmbeddingService.swift",
    "content": "import AIModel\nimport Foundation\nimport Logger\n\nstruct OpenAIEmbeddingService: EmbeddingAPI {\n    struct EmbeddingRequestBody: Encodable {\n        var input: [String]\n        var model: String\n    }\n\n    struct EmbeddingFromTokensRequestBody: Encodable {\n        var input: [[Int]]\n        var model: String\n    }\n\n    let apiKey: String\n    let model: EmbeddingModel\n    let endpoint: String\n    var requestModifier: ((inout URLRequest) -> Void)? = nil\n\n    public func embed(text: String) async throws -> EmbeddingResponse {\n        return try await embed(texts: [text])\n    }\n\n    public func embed(texts text: [String]) async throws -> EmbeddingResponse {\n        guard let url = URL(string: endpoint) else { throw ChatGPTServiceError.endpointIncorrect }\n        if text.isEmpty {\n            return .init(\n                data: [],\n                model: model.info.modelName,\n                usage: .init(prompt_tokens: 0, total_tokens: 0)\n            )\n        }\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(EmbeddingRequestBody(\n            input: text,\n            model: model.info.modelName\n        ))\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        Self.setupAppInformation(&request)\n        Self.setupAPIKey(&request, model: model, apiKey: apiKey)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n        requestModifier?(&request)\n\n        let (result, response) = try await URLSession.shared.data(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let error = try? JSONDecoder().decode(\n                OpenAIChatCompletionsService.CompletionAPIError.self,\n                from: result\n            )\n            throw error ?? ChatGPTServiceError\n                .otherError(String(data: result, encoding: .utf8) ?? \"Unknown Error\")\n        }\n\n        let embeddingResponse = try JSONDecoder().decode(EmbeddingResponse.self, from: result)\n        return embeddingResponse\n    }\n\n    public func embed(tokens: [[Int]]) async throws -> EmbeddingResponse {\n        guard let url = URL(string: endpoint) else { throw ChatGPTServiceError.endpointIncorrect }\n        if tokens.isEmpty {\n            return .init(\n                data: [],\n                model: model.info.modelName,\n                usage: .init(prompt_tokens: 0, total_tokens: 0)\n            )\n        }\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n        let encoder = JSONEncoder()\n        request.httpBody = try encoder.encode(EmbeddingFromTokensRequestBody(\n            input: tokens,\n            model: model.info.modelName\n        ))\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        Self.setupAppInformation(&request)\n        Self.setupAPIKey(&request, model: model, apiKey: apiKey)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n        requestModifier?(&request)\n\n        let (result, response) = try await URLSession.shared.data(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let error = try? JSONDecoder().decode(\n                OpenAIChatCompletionsService.CompletionAPIError.self,\n                from: result\n            )\n            throw error ?? ChatGPTServiceError\n                .otherError(String(data: result, encoding: .utf8) ?? \"Unknown Error\")\n        }\n\n        let embeddingResponse = try JSONDecoder().decode(EmbeddingResponse.self, from: result)\n        return embeddingResponse\n    }\n\n    static func setupAppInformation(_ request: inout URLRequest) {\n        if #available(macOS 13.0, *) {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        } else {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        }\n    }\n\n    static func setupAPIKey(_ request: inout URLRequest, model: EmbeddingModel, apiKey: String) {\n        if !apiKey.isEmpty {\n            switch model.format {\n            case .openAI:\n                if model.info.openAIInfo.organizationID.isEmpty {\n                    request.setValue(\n                        model.info.openAIInfo.organizationID,\n                        forHTTPHeaderField: \"OpenAI-Organization\"\n                    )\n                }\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .openAICompatible:\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .azureOpenAI:\n                request.setValue(apiKey, forHTTPHeaderField: \"api-key\")\n            case .gitHubCopilot:\n                break\n            case .ollama:\n                assertionFailure(\"Unsupported\")\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/OpenAIResponsesRawService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Foundation\nimport GitHubCopilotService\nimport JoinJSON\nimport Logger\nimport Preferences\n\n/// https://platform.openai.com/docs/api-reference/responses/create\npublic actor OpenAIResponsesRawService {\n    struct CompletionAPIError: Error, Decodable, LocalizedError {\n        struct ErrorDetail: Decodable {\n            var message: String\n            var type: String?\n            var param: String?\n            var code: String?\n        }\n\n        struct MistralAIErrorMessage: Decodable {\n            struct Detail: Decodable {\n                var msg: String?\n            }\n\n            var message: String?\n            var msg: String?\n            var detail: [Detail]?\n        }\n\n        enum Message {\n            case raw(String)\n            case mistralAI(MistralAIErrorMessage)\n        }\n\n        var error: ErrorDetail?\n        var message: Message\n\n        var errorDescription: String? {\n            if let message = error?.message { return message }\n            switch message {\n            case let .raw(string):\n                return string\n            case let .mistralAI(mistralAIErrorMessage):\n                return mistralAIErrorMessage.message\n                    ?? mistralAIErrorMessage.msg\n                    ?? mistralAIErrorMessage.detail?.first?.msg\n                    ?? \"Unknown Error\"\n            }\n        }\n\n        enum CodingKeys: String, CodingKey {\n            case error\n            case message\n        }\n\n        init(from decoder: Decoder) throws {\n            let container = try decoder.container(keyedBy: CodingKeys.self)\n\n            error = try container.decode(ErrorDetail.self, forKey: .error)\n            message = {\n                if let e = try? container.decode(MistralAIErrorMessage.self, forKey: .message) {\n                    return CompletionAPIError.Message.mistralAI(e)\n                }\n                if let e = try? container.decode(String.self, forKey: .message) {\n                    return .raw(e)\n                }\n                return .raw(\"Unknown Error\")\n            }()\n        }\n    }\n\n    var apiKey: String\n    var endpoint: URL\n    var requestBody: [String: Any]\n    var model: ChatModel\n    let requestModifier: ((inout URLRequest) -> Void)?\n\n    public init(\n        apiKey: String,\n        model: ChatModel,\n        endpoint: URL,\n        requestBody: Data,\n        requestModifier: ((inout URLRequest) -> Void)? = nil\n    ) {\n        self.apiKey = apiKey\n        self.endpoint = endpoint\n        self.requestBody = (\n            try? JSONSerialization.jsonObject(with: requestBody) as? [String: Any]\n        ) ?? [:]\n        self.requestBody[\"model\"] = model.info.modelName\n        self.model = model\n        self.requestModifier = requestModifier\n    }\n\n    public func callAsFunction() async throws\n        -> URLSession.AsyncBytes\n    {\n        requestBody[\"stream\"] = true\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"POST\"\n        request.httpBody = try JSONSerialization.data(\n            withJSONObject: requestBody,\n            options: []\n        )\n        request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n\n        Self.setupAppInformation(&request)\n        await Self.setupAPIKey(&request, model: model, apiKey: apiKey)\n        Self.setupGitHubCopilotVisionField(&request, model: model)\n        await Self.setupExtraHeaderFields(&request, model: model, apiKey: apiKey)\n        requestModifier?(&request)\n\n        let (result, response) = try await URLSession.shared.bytes(for: request)\n        guard let response = response as? HTTPURLResponse else {\n            throw ChatGPTServiceError.responseInvalid\n        }\n\n        guard response.statusCode == 200 else {\n            let text = try await result.lines.reduce(into: \"\") { partialResult, current in\n                partialResult += current\n            }\n            guard let data = text.data(using: .utf8)\n            else { throw ChatGPTServiceError.responseInvalid }\n            if response.statusCode == 403 {\n                throw ChatGPTServiceError.unauthorized(text)\n            }\n            let decoder = JSONDecoder()\n            let error = try? decoder.decode(CompletionAPIError.self, from: data)\n            throw error ?? ChatGPTServiceError.otherError(\n                text +\n                    \"\\n\\nPlease check your model settings, some capabilities may not be supported by the model.\"\n            )\n        }\n\n        return result\n    }\n\n    public func callAsFunction() async throws -> Data {\n        let stream: URLSession.AsyncBytes = try await callAsFunction()\n\n        return try await stream.reduce(into: Data()) { partialResult, byte in\n            partialResult.append(byte)\n        }\n    }\n\n    static func setupAppInformation(_ request: inout URLRequest) {\n        if #available(macOS 13.0, *) {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        } else {\n            if request.url?.host == \"openrouter.ai\" {\n                request.setValue(\"Copilot for Xcode\", forHTTPHeaderField: \"X-Title\")\n                request.setValue(\n                    \"https://github.com/intitni/CopilotForXcode\",\n                    forHTTPHeaderField: \"HTTP-Referer\"\n                )\n            }\n        }\n    }\n\n    static func setupAPIKey(_ request: inout URLRequest, model: ChatModel, apiKey: String) async {\n        if !apiKey.isEmpty {\n            switch model.format {\n            case .openAI:\n                if !model.info.openAIInfo.organizationID.isEmpty {\n                    request.setValue(\n                        model.info.openAIInfo.organizationID,\n                        forHTTPHeaderField: \"OpenAI-Organization\"\n                    )\n                }\n\n                if !model.info.openAIInfo.projectID.isEmpty {\n                    request.setValue(\n                        model.info.openAIInfo.projectID,\n                        forHTTPHeaderField: \"OpenAI-Project\"\n                    )\n                }\n\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .openAICompatible:\n                request.setValue(\"Bearer \\(apiKey)\", forHTTPHeaderField: \"Authorization\")\n            case .azureOpenAI:\n                request.setValue(apiKey, forHTTPHeaderField: \"api-key\")\n            case .gitHubCopilot:\n                break\n            case .googleAI:\n                assertionFailure(\"Unsupported\")\n            case .ollama:\n                assertionFailure(\"Unsupported\")\n            case .claude:\n                assertionFailure(\"Unsupported\")\n            }\n        }\n\n        if model.format == .gitHubCopilot,\n           let token = try? await GitHubCopilotExtension.fetchToken()\n        {\n            request.setValue(\n                \"Copilot for Xcode/\\(Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String ?? \"unknown\")\",\n                forHTTPHeaderField: \"Editor-Version\"\n            )\n            request.setValue(\"Bearer \\(token.token)\", forHTTPHeaderField: \"Authorization\")\n            request.setValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n            request.setValue(\"vscode-chat\", forHTTPHeaderField: \"Copilot-Integration-Id\")\n            request.setValue(\"2023-07-07\", forHTTPHeaderField: \"X-Github-Api-Version\")\n        }\n    }\n\n    static func setupGitHubCopilotVisionField(_ request: inout URLRequest, model: ChatModel) {\n        if model.info.supportsImage {\n            request.setValue(\"true\", forHTTPHeaderField: \"copilot-vision-request\")\n        }\n    }\n\n    static func setupExtraHeaderFields(\n        _ request: inout URLRequest,\n        model: ChatModel,\n        apiKey: String\n    ) async {\n        let parser = HeaderValueParser()\n        for field in model.info.customHeaderInfo.headers where !field.key.isEmpty {\n            let value = await parser.parse(\n                field.value,\n                context: .init(modelName: model.info.modelName, apiKey: apiKey)\n            )\n            request.setValue(value, forHTTPHeaderField: field.key)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/APIs/ResponseStream.swift",
    "content": "import Foundation\n\nstruct ResponseStream<Chunk>: AsyncSequence {\n    func makeAsyncIterator() -> Stream.AsyncIterator {\n        stream.makeAsyncIterator()\n    }\n\n    typealias Stream = AsyncThrowingStream<Chunk, Error>\n    typealias AsyncIterator = Stream.AsyncIterator\n    typealias Element = Chunk\n    \n    struct LineContent {\n        let chunk: Chunk?\n        let done: Bool\n    }\n\n    let stream: Stream\n\n    init(result: URLSession.AsyncBytes, lineExtractor: @escaping (String) throws -> LineContent) {\n        stream = AsyncThrowingStream<Chunk, Error> { continuation in\n            let task = Task {\n                do {\n                    for try await line in result.lines {\n                        if Task.isCancelled { break }\n                        let content = try lineExtractor(line)\n                        if let chunk = content.chunk {\n                            continuation.yield(chunk)\n                        }\n                        \n                        if content.done { break }\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                    result.task.cancel()\n                }\n            }\n            continuation.onTermination = { _ in\n                task.cancel()\n                result.task.cancel()\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/ChatGPTService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Dependencies\nimport Foundation\nimport IdentifiedCollections\nimport Logger\nimport Preferences\n\npublic enum ChatGPTServiceError: Error, LocalizedError {\n    case chatModelNotAvailable\n    case embeddingModelNotAvailable\n    case endpointIncorrect\n    case responseInvalid\n    case unauthorized(String)\n    case otherError(String)\n\n    public var errorDescription: String? {\n        switch self {\n        case .chatModelNotAvailable:\n            return \"Chat model is not available, please add a model in the settings.\"\n        case .embeddingModelNotAvailable:\n            return \"Embedding model is not available, please add a model in the settings.\"\n        case .endpointIncorrect:\n            return \"ChatGPT endpoint is incorrect\"\n        case .responseInvalid:\n            return \"Response is invalid\"\n        case let .unauthorized(reason):\n            return \"Unauthorized: \\(reason)\"\n        case let .otherError(content):\n            return content\n        }\n    }\n}\n\npublic struct ChatGPTError: Error, Codable, LocalizedError {\n    public var error: ErrorContent\n    public init(error: ErrorContent) {\n        self.error = error\n    }\n\n    public struct ErrorContent: Codable {\n        public var message: String\n        public var type: String?\n        public var param: String?\n        public var code: String?\n\n        public init(\n            message: String,\n            type: String? = nil,\n            param: String? = nil,\n            code: String? = nil\n        ) {\n            self.message = message\n            self.type = type\n            self.param = param\n            self.code = code\n        }\n    }\n\n    public var errorDescription: String? {\n        error.message\n    }\n}\n\npublic enum ChatGPTResponse: Equatable {\n    case status([String])\n    case partialText(String)\n    case partialReasoning(String)\n    case toolCalls([ChatMessage.ToolCall])\n    case usage(\n        promptTokens: Int,\n        completionTokens: Int,\n        cachedTokens: Int,\n        otherUsage: [String: Int]\n    )\n}\n\npublic typealias ChatGPTResponseStream = AsyncThrowingStream<ChatGPTResponse, any Error>\n\npublic extension ChatGPTResponseStream {\n    func asText() async throws -> String {\n        var text = \"\"\n        for try await case let .partialText(response) in self {\n            text += response\n        }\n        return text\n    }\n\n    func asToolCalls() async throws -> [ChatMessage.ToolCall] {\n        var toolCalls = [ChatMessage.ToolCall]()\n        for try await case let .toolCalls(calls) in self {\n            toolCalls.append(contentsOf: calls)\n        }\n        return toolCalls\n    }\n\n    func asArray() async throws -> [ChatGPTResponse] {\n        var responses = [ChatGPTResponse]()\n        for try await response in self {\n            responses.append(response)\n        }\n        return responses\n    }\n}\n\npublic protocol ChatGPTServiceType {\n    typealias Response = ChatGPTResponse\n    var configuration: ChatGPTConfiguration { get set }\n    func send(_ memory: ChatGPTMemory) -> ChatGPTResponseStream\n}\n\npublic class ChatGPTService: ChatGPTServiceType {\n    public var configuration: ChatGPTConfiguration\n    public var utilityConfiguration: ChatGPTConfiguration\n    public var functionProvider: ChatGPTFunctionProvider\n\n    public init(\n        configuration: ChatGPTConfiguration = UserPreferenceChatGPTConfiguration(),\n        utilityConfiguration: ChatGPTConfiguration =\n            UserPreferenceChatGPTConfiguration(chatModelKey: \\.preferredChatModelIdForUtilities),\n        functionProvider: ChatGPTFunctionProvider = NoChatGPTFunctionProvider()\n    ) {\n        self.configuration = configuration\n        self.utilityConfiguration = utilityConfiguration\n        self.functionProvider = functionProvider\n    }\n\n    @Dependency(\\.uuid) var uuid\n    @Dependency(\\.date) var date\n    @Dependency(\\.chatCompletionsAPIBuilder) var chatCompletionsAPIBuilder\n\n    /// Send the memory and stream the reply. While it's returning the results in a\n    /// ``ChatGPTResponseStream``, it's also streaming the results to the memory.\n    ///\n    /// If ``ChatGPTConfiguration/runFunctionsAutomatically`` is enabled, the service will handle\n    /// the tool calls inside the function. Otherwise, it will return the tool calls to the caller.\n    public func send(_ memory: ChatGPTMemory) -> ChatGPTResponseStream {\n        return Debugger.$id.withValue(.init()) {\n            ChatGPTResponseStream { continuation in\n                let task = Task(priority: .userInitiated) {\n                    do {\n                        var pendingToolCalls = [ChatMessage.ToolCall]()\n                        var sourceMessageId = \"\"\n                        var isInitialCall = true\n\n                        loop: while !pendingToolCalls.isEmpty || isInitialCall {\n                            try Task.checkCancellation()\n                            isInitialCall = false\n\n                            var functionCallResponses = [ChatCompletionsRequestBody.Message]()\n\n                            if !pendingToolCalls.isEmpty {\n                                if configuration.runFunctionsAutomatically {\n                                    var toolCallStatuses = [String: String]() {\n                                        didSet {\n                                            if toolCallStatuses != oldValue {\n                                                continuation.yield(.status(\n                                                    Array(toolCallStatuses.values).sorted()\n                                                ))\n                                            }\n                                        }\n                                    }\n                                    for toolCall in pendingToolCalls {\n                                        let id = toolCall.id\n                                        for await response in await runFunctionCall(\n                                            toolCall,\n                                            memory: memory,\n                                            sourceMessageId: sourceMessageId\n                                        ) {\n                                            switch response {\n                                            case let .output(output):\n                                                functionCallResponses.append(.init(\n                                                    role: .tool,\n                                                    content: output,\n                                                    toolCallId: id\n                                                ))\n                                            case let .status(status):\n                                                toolCallStatuses[id] = status\n                                            }\n                                        }\n                                        toolCallStatuses[id] = nil\n                                    }\n                                    toolCallStatuses = [:]\n                                } else {\n                                    if !configuration.runFunctionsAutomatically {\n                                        continuation.yield(.toolCalls(pendingToolCalls))\n                                        continuation.finish()\n                                        return\n                                    }\n                                }\n                            }\n\n                            sourceMessageId = uuid().uuidString\n                            let stream = try await sendRequest(\n                                memory: memory,\n                                proposedMessageId: sourceMessageId\n                            )\n\n                            for try await content in stream {\n                                try Task.checkCancellation()\n                                switch content {\n                                case let .partialText(text):\n                                    continuation.yield(ChatGPTResponse.partialText(text))\n\n                                case let .partialReasoning(text):\n                                    continuation.yield(ChatGPTResponse.partialReasoning(text))\n\n                                case let .partialToolCalls(toolCalls):\n                                    guard configuration.runFunctionsAutomatically else { break }\n                                    var toolCallStatuses = [String: String]() {\n                                        didSet {\n                                            if toolCallStatuses != oldValue {\n                                                continuation.yield(.status(\n                                                    Array(toolCallStatuses.values).sorted()\n                                                ))\n                                            }\n                                        }\n                                    }\n                                    for toolCall in toolCalls.keys.sorted() {\n                                        if let toolCallValue = toolCalls[toolCall] {\n                                            for await status in await prepareFunctionCall(\n                                                toolCallValue,\n                                                memory: memory,\n                                                sourceMessageId: sourceMessageId\n                                            ) {\n                                                toolCallStatuses[toolCallValue.id] = status\n                                            }\n                                        }\n                                    }\n                                case let .usage(\n                                    promptTokens,\n                                    completionTokens,\n                                    cachedTokens,\n                                    otherUsage\n                                ):\n                                    continuation.yield(\n                                        .usage(\n                                            promptTokens: promptTokens,\n                                            completionTokens: completionTokens,\n                                            cachedTokens: cachedTokens,\n                                            otherUsage: otherUsage\n                                        )\n                                    )\n                                }\n                            }\n\n                            let replyMessage = await memory.history\n                                .last { $0.id == sourceMessageId }\n                            pendingToolCalls = replyMessage?.toolCalls ?? []\n\n                            #if DEBUG\n                            Debugger.didReceiveResponse(content: replyMessage?.content ?? \"\")\n                            #endif\n                        }\n\n                        #if DEBUG\n                        Debugger.didFinish()\n                        #endif\n                        continuation.finish()\n                    } catch {\n                        continuation.finish(throwing: error)\n                    }\n                }\n                continuation.onTermination = { _ in\n                    task.cancel()\n                }\n            }\n        }\n    }\n}\n\n// - MARK: Internal\n\nextension ChatGPTService {\n    enum StreamContent {\n        case partialReasoning(String)\n        case partialText(String)\n        case partialToolCalls([Int: ChatMessage.ToolCall])\n        case usage(\n            promptTokens: Int,\n            completionTokens: Int,\n            cachedTokens: Int,\n            otherUsage: [String: Int]\n        )\n    }\n\n    enum FunctionCallResult {\n        case status(String)\n        case output(String)\n    }\n\n    /// Send the memory as prompt to ChatGPT, with stream enabled.\n    func sendRequest(\n        memory: ChatGPTMemory,\n        proposedMessageId: String\n    ) async throws -> AsyncThrowingStream<StreamContent, Error> {\n        let prompt = await memory.generatePrompt()\n\n        guard let model = configuration.model else {\n            throw ChatGPTServiceError.chatModelNotAvailable\n        }\n        guard let url = URL(string: configuration.endpoint) else {\n            throw ChatGPTServiceError.endpointIncorrect\n        }\n\n        let requestBody = createRequestBody(prompt: prompt, model: model, stream: true)\n\n        let api = chatCompletionsAPIBuilder.buildStreamAPI(\n            model: model,\n            endpoint: url,\n            apiKey: configuration.apiKey,\n            requestBody: requestBody\n        )\n\n        #if DEBUG\n        Debugger.didSendRequestBody(body: requestBody)\n        #endif\n\n        return AsyncThrowingStream<StreamContent, Error> { continuation in\n            let task = Task {\n                do {\n                    await memory.streamMessage(\n                        id: proposedMessageId,\n                        role: .assistant,\n                        references: prompt.references\n                    )\n                    let chunks = try await api()\n                    var usage: ChatCompletionResponseBody.Usage = .init(\n                        promptTokens: 0,\n                        completionTokens: 0,\n                        cachedTokens: 0,\n                        otherUsage: [:]\n                    )\n                    for try await chunk in chunks {\n                        try Task.checkCancellation()\n\n                        if let newUsage = chunk.usage {\n                            usage.merge(with: newUsage)\n                        }\n\n                        guard let delta = chunk.message else { continue }\n\n                        // The api will always return a function call with JSON object.\n                        // The first round will contain the function name and an empty argument.\n                        // e.g. {\"name\":\"weather\",\"arguments\":\"\"}\n                        // The other rounds will contain part of the arguments.\n                        let toolCalls = delta.toolCalls?\n                            .reduce(into: [Int: ChatMessage.ToolCall]()) {\n                                $0[$1.index ?? 0] = ChatMessage.ToolCall(\n                                    id: $1.id ?? \"\",\n                                    type: $1.type ?? \"\",\n                                    function: .init(\n                                        name: $1.function?.name ?? \"\",\n                                        arguments: $1.function?.arguments ?? \"\"\n                                    )\n                                )\n                            }\n\n                        await memory.streamMessage(\n                            id: proposedMessageId,\n                            role: delta.role?.asChatMessageRole,\n                            content: delta.content,\n                            toolCalls: toolCalls\n                        )\n\n                        if let toolCalls {\n                            continuation.yield(.partialToolCalls(toolCalls))\n                        }\n\n                        if let content = delta.content {\n                            continuation.yield(.partialText(content))\n                        }\n\n                        if let reasoning = delta.reasoningContent {\n                            continuation.yield(.partialReasoning(reasoning))\n                        }\n                    }\n\n                    Logger.service.info(\"ChatGPT usage: \\(usage)\")\n                    continuation.yield(.usage(\n                        promptTokens: usage.promptTokens,\n                        completionTokens: usage.completionTokens,\n                        cachedTokens: usage.cachedTokens,\n                        otherUsage: usage.otherUsage\n                    ))\n                    continuation.finish()\n                } catch let error as CancellationError {\n                    continuation.finish(throwing: error)\n                } catch let error as NSError where error.code == NSURLErrorCancelled {\n                    continuation.finish(throwing: error)\n                } catch {\n                    await memory.appendMessage(.init(\n                        id: uuid().uuidString,\n                        role: .assistant,\n                        content: error.localizedDescription\n                    ))\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    /// When a function call is detected, but arguments are not yet ready, we can call this\n    /// to report the status.\n    func prepareFunctionCall(\n        _ call: ChatMessage.ToolCall,\n        memory: ChatGPTMemory,\n        sourceMessageId: String\n    ) async -> AsyncStream<String> {\n        return .init { continuation in\n            guard let function = functionProvider.function(named: call.function.name) else {\n                continuation.finish()\n                return\n            }\n            let task = Task {\n                await memory.streamToolCallResponse(\n                    id: sourceMessageId,\n                    toolCallId: call.id\n                )\n                await function.prepare { summary in\n                    continuation.yield(summary)\n                    await memory.streamToolCallResponse(\n                        id: sourceMessageId,\n                        toolCallId: call.id,\n                        summary: summary\n                    )\n                }\n                continuation.finish()\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    /// Run a function call from the bot.\n    @discardableResult\n    func runFunctionCall(\n        _ call: ChatMessage.ToolCall,\n        memory: ChatGPTMemory,\n        sourceMessageId: String\n    ) async -> AsyncStream<FunctionCallResult> {\n        #if DEBUG\n        Debugger.didReceiveFunction(name: call.function.name, arguments: call.function.arguments)\n        #endif\n\n        return .init { continuation in\n            let task = Task {\n                guard let function = functionProvider.function(named: call.function.name) else {\n                    let response = await fallbackFunctionCall(\n                        call,\n                        memory: memory,\n                        sourceMessageId: sourceMessageId\n                    )\n                    continuation.yield(.output(response))\n                    continuation.finish()\n                    return\n                }\n\n                await memory.streamToolCallResponse(\n                    id: sourceMessageId,\n                    toolCallId: call.id\n                )\n\n                do {\n                    // Run the function\n                    let result = try await function\n                        .call(argumentsJsonString: call.function.arguments) { summary in\n                            continuation.yield(.status(summary))\n                            await memory.streamToolCallResponse(\n                                id: sourceMessageId,\n                                toolCallId: call.id,\n                                summary: summary\n                            )\n                        }\n\n                    #if DEBUG\n                    Debugger.didReceiveFunctionResult(result: result.botReadableContent)\n                    #endif\n\n                    await memory.streamToolCallResponse(\n                        id: sourceMessageId,\n                        toolCallId: call.id,\n                        content: result.botReadableContent\n                    )\n\n                    continuation.yield(.output(result.botReadableContent))\n                    continuation.finish()\n                } catch {\n                    // For errors, use the error message as the result.\n                    let content = \"Error: \\(error.localizedDescription)\"\n\n                    #if DEBUG\n                    Debugger.didReceiveFunctionResult(result: content)\n                    #endif\n\n                    await memory.streamToolCallResponse(\n                        id: sourceMessageId,\n                        toolCallId: call.id,\n                        content: content,\n                        summary: content\n                    )\n\n                    continuation.yield(.output(content))\n                    continuation.finish()\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n    }\n\n    /// Mock a function call result when the bot is calling a function that is not implemented.\n    func fallbackFunctionCall(\n        _ call: ChatMessage.ToolCall,\n        memory: ChatGPTMemory,\n        sourceMessageId: String\n    ) async -> String {\n        let temporaryMemory = ConversationChatGPTMemory(systemPrompt: {\n            if call.function.name == \"python\" {\n                return \"\"\"\n                Act like a Python interpreter.\n                I will give you Python code and you will execute it.\n                Reply with output of the code and tell me it's an answer generated by LLM.\n                \"\"\"\n            } else {\n                return \"\"\"\n                You are a function simulator. Your name is \\(call.function.name).\n                Act like a function.\n                I will send you the arguments.\n                Reply with output of the function and tell me it's an answer generated by LLM.\n                \"\"\"\n            }\n        }())\n\n        let service = ChatGPTService(\n            configuration: OverridingChatGPTConfiguration(\n                overriding: utilityConfiguration,\n                with: .init(temperature: 0)\n            ),\n            functionProvider: NoChatGPTFunctionProvider()\n        )\n\n        let stream = service.send(temporaryMemory)\n\n        do {\n            let result = try await stream.asText()\n            await memory.streamToolCallResponse(\n                id: sourceMessageId,\n                toolCallId: call.id,\n                content: result,\n                summary: \"Finished running function.\"\n            )\n            return result\n        } catch {\n            return error.localizedDescription\n        }\n    }\n\n    func createRequestBody(\n        prompt: ChatGPTPrompt,\n        model: ChatModel,\n        stream: Bool\n    ) -> ChatCompletionsRequestBody {\n        let serviceSupportsFunctionCalling = switch model.format {\n        case .openAI, .openAICompatible, .azureOpenAI, .gitHubCopilot:\n            model.info.supportsFunctionCalling\n        case .ollama, .googleAI, .claude:\n            false\n        }\n\n        let messages = prompt.history.flatMap { chatMessage in\n            let images = chatMessage.images.map { image in\n                ChatCompletionsRequestBody.Message.Image(\n                    base64EncodeData: image.base64EncodedData,\n                    format: {\n                        switch image.format {\n                        case .png: .png\n                        case .jpeg: .jpeg\n                        case .gif: .gif\n                        }\n                    }()\n                )\n            }\n            var all = [ChatCompletionsRequestBody.Message]()\n            all.append(ChatCompletionsRequestBody.Message(\n                role: {\n                    switch chatMessage.role {\n                    case .system: .system\n                    case .user: .user\n                    case .assistant: .assistant\n                    }\n                }(),\n                content: chatMessage.content ?? \"\",\n                name: chatMessage.name,\n                toolCalls: {\n                    if serviceSupportsFunctionCalling {\n                        chatMessage.toolCalls?.map {\n                            .init(\n                                id: $0.id,\n                                type: $0.type,\n                                function: .init(\n                                    name: $0.function.name,\n                                    arguments: $0.function.arguments\n                                )\n                            )\n                        }\n                    } else {\n                        nil\n                    }\n                }(),\n                images: images,\n                audios: [],\n                cacheIfPossible: chatMessage.cacheIfPossible\n            ))\n\n            for call in chatMessage.toolCalls ?? [] {\n                if serviceSupportsFunctionCalling {\n                    all.append(ChatCompletionsRequestBody.Message(\n                        role: .tool,\n                        content: call.response.content,\n                        toolCallId: call.id\n                    ))\n                } else {\n                    all.append(ChatCompletionsRequestBody.Message(\n                        role: .user,\n                        content: call.response.content\n                    ))\n                }\n            }\n\n            return all\n        }\n\n        let remainingTokens = prompt.remainingTokenCount\n\n        let requestBody = ChatCompletionsRequestBody(\n            model: model.info.modelName,\n            messages: messages,\n            temperature: configuration.temperature,\n            stream: stream,\n            stop: configuration.stop.isEmpty ? nil : configuration.stop,\n            maxTokens: maxTokenForReply(\n                maxToken: model.info.maxTokens,\n                remainingTokens: remainingTokens\n            ),\n            toolChoice: serviceSupportsFunctionCalling\n                ? functionProvider.functionCallStrategy\n                : nil,\n            tools: serviceSupportsFunctionCalling\n                ? functionProvider.functions.map {\n                    .init(function: ChatGPTFunctionSchema(\n                        name: $0.name,\n                        description: $0.description,\n                        parameters: $0.argumentSchema\n                    ))\n                }\n                : []\n        )\n\n        return requestBody\n    }\n\n    func maxTokenForReply(maxToken: Int, remainingTokens: Int?) -> Int? {\n        guard let remainingTokens else { return nil }\n        return min(maxToken / 2, remainingTokens)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Configuration/ChatGPTConfiguration.swift",
    "content": "import Foundation\nimport AIModel\nimport Preferences\nimport Keychain\n\npublic protocol ChatGPTConfiguration {\n    var model: ChatModel? { get }\n    var temperature: Double { get }\n    var apiKey: String { get }\n    var stop: [String] { get }\n    var maxTokens: Int { get }\n    var minimumReplyTokens: Int { get }\n    var runFunctionsAutomatically: Bool { get }\n    var shouldEndTextWindow: (String) -> Bool { get }\n}\n\npublic extension ChatGPTConfiguration {\n    var endpoint: String {\n        model?.endpoint ?? \"\"\n    }\n    \n    var apiKey: String {\n        guard let name = model?.info.apiKeyName else { return \"\" }\n        return (try? Keychain.apiKey.get(name)) ?? \"\"\n    }\n\n    func overriding(\n        _ overrides: OverridingChatGPTConfiguration.Overriding\n    ) -> OverridingChatGPTConfiguration {\n        .init(overriding: self, with: overrides)\n    }\n\n    func overriding(\n        _ update: (inout OverridingChatGPTConfiguration.Overriding) -> Void = { _ in }\n    ) -> OverridingChatGPTConfiguration {\n        var overrides = OverridingChatGPTConfiguration.Overriding()\n        update(&overrides)\n        return .init(overriding: self, with: overrides)\n    }\n}\n\npublic final class OverridingChatGPTConfiguration: ChatGPTConfiguration {\n    public struct Overriding: Codable {\n        public var temperature: Double?\n        public var modelId: String?\n        public var model: ChatModel?\n        public var stop: [String]?\n        public var maxTokens: Int?\n        public var minimumReplyTokens: Int?\n        public var runFunctionsAutomatically: Bool?\n        public var apiKey: String?\n\n        public init(\n            temperature: Double? = nil,\n            modelId: String? = nil,\n            model: ChatModel? = nil,\n            stop: [String]? = nil,\n            maxTokens: Int? = nil,\n            minimumReplyTokens: Int? = nil,\n            runFunctionsAutomatically: Bool? = nil,\n            apiKey: String? = nil\n        ) {\n            self.temperature = temperature\n            self.modelId = modelId\n            self.model = model\n            self.stop = stop\n            self.maxTokens = maxTokens\n            self.minimumReplyTokens = minimumReplyTokens\n            self.runFunctionsAutomatically = runFunctionsAutomatically\n            self.apiKey = apiKey\n        }\n    }\n\n    private let configuration: ChatGPTConfiguration\n    public var overriding = Overriding()\n    public var textWindowTerminator: ((String) -> Bool)?\n\n    public init(\n        overriding configuration: any ChatGPTConfiguration,\n        with overrides: Overriding = .init()\n    ) {\n        overriding = overrides\n        self.configuration = configuration\n    }\n\n    public var temperature: Double {\n        overriding.temperature ?? configuration.temperature\n    }\n\n    public var model: ChatModel? {\n        if let model = overriding.model { return model }\n        let models = UserDefaults.shared.value(for: \\.chatModels)\n        guard let id = overriding.modelId else { return configuration.model }\n        if id == \"com.github.copilot\" {\n            return .init(id: id, name: \"GitHub Copilot\", format: .openAI, info: .init())\n        }\n        guard let model = models.first(where: { $0.id == id }) else { return configuration.model }\n        return model\n    }\n\n    public var stop: [String] {\n        overriding.stop ?? configuration.stop\n    }\n\n    public var maxTokens: Int {\n        if let maxTokens = overriding.maxTokens { return maxTokens }\n        if let model { return model.info.maxTokens }\n        return configuration.maxTokens\n    }\n\n    public var minimumReplyTokens: Int {\n        if let minimumReplyTokens = overriding.minimumReplyTokens { return minimumReplyTokens }\n        return maxTokens / 5\n    }\n\n    public var runFunctionsAutomatically: Bool {\n        overriding.runFunctionsAutomatically ?? configuration.runFunctionsAutomatically\n    }\n\n    public var apiKey: String {\n        if let apiKey = overriding.apiKey { return apiKey }\n        guard let name = model?.info.apiKeyName else { return configuration.apiKey }\n        return (try? Keychain.apiKey.get(name)) ?? \"\"\n    }\n\n    public var shouldEndTextWindow: (String) -> Bool {\n        textWindowTerminator ?? configuration.shouldEndTextWindow\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Configuration/EmbeddingConfiguration.swift",
    "content": "import AIModel\nimport Foundation\nimport Keychain\nimport Preferences\n\npublic protocol EmbeddingConfiguration {\n    var model: EmbeddingModel? { get }\n    var apiKey: String { get }\n    var maxToken: Int { get }\n    var dimensions: Int { get }\n}\n\npublic extension EmbeddingConfiguration {\n    var endpoint: String {\n        model?.endpoint ?? \"\"\n    }\n    \n    var apiKey: String {\n        guard let name = model?.info.apiKeyName else { return \"\" }\n        return (try? Keychain.apiKey.get(name)) ?? \"\"\n    }\n\n    func overriding(\n        _ overrides: OverridingEmbeddingConfiguration.Overriding\n    ) -> OverridingEmbeddingConfiguration {\n        .init(overriding: self, with: overrides)\n    }\n\n    func overriding(\n        _ update: (inout OverridingEmbeddingConfiguration.Overriding) -> Void = { _ in }\n    ) -> OverridingEmbeddingConfiguration {\n        var overrides = OverridingEmbeddingConfiguration.Overriding()\n        update(&overrides)\n        return .init(overriding: self, with: overrides)\n    }\n}\n\npublic class OverridingEmbeddingConfiguration: EmbeddingConfiguration {\n    public struct Overriding {\n        public var modelId: String?\n        public var model: EmbeddingModel?\n        public var maxTokens: Int?\n        public var dimensions: Int?\n\n        public init(\n            modelId: String? = nil,\n            model: EmbeddingModel? = nil,\n            maxTokens: Int? = nil,\n            dimensions: Int? = nil\n        ) {\n            self.modelId = modelId\n            self.model = model\n            self.maxTokens = maxTokens\n            self.dimensions = dimensions\n        }\n    }\n\n    private let configuration: EmbeddingConfiguration\n    public var overriding = Overriding()\n\n    public init(\n        overriding configuration: any EmbeddingConfiguration,\n        with overrides: Overriding = .init()\n    ) {\n        overriding = overrides\n        self.configuration = configuration\n    }\n\n    public var model: EmbeddingModel? {\n        if let model = overriding.model { return model }\n        let models = UserDefaults.shared.value(for: \\.embeddingModels)\n        guard let id = overriding.modelId,\n              let model = models.first(where: { $0.id == id })\n        else { return configuration.model }\n        return model\n    }\n\n    public var maxToken: Int {\n        overriding.maxTokens ?? configuration.maxToken\n    }\n\n    public var dimensions: Int {\n        overriding.dimensions ?? configuration.dimensions\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Configuration/UserPreferenceChatGPTConfiguration.swift",
    "content": "import AIModel\nimport ChatBasic\nimport Foundation\nimport Keychain\nimport Preferences\n\npublic struct UserPreferenceChatGPTConfiguration: ChatGPTConfiguration {\n    public var chatModelKey: KeyPath<UserDefaultPreferenceKeys, PreferenceKey<String>>?\n\n    public var temperature: Double {\n        min(max(0, UserDefaults.shared.value(for: \\.chatGPTTemperature)), 2)\n    }\n\n    public var model: ChatModel? {\n        let models = UserDefaults.shared.value(for: \\.chatModels)\n\n        if let chatModelKey {\n            let id = UserDefaults.shared.value(for: chatModelKey)\n            if id == \"com.github.copilot\" {\n                return .init(id: id, name: \"GitHub Copilot\", format: .openAI, info: .init())\n            }\n            if let model = models.first(where: { $0.id == id }) {\n                return model\n            }\n        }\n\n        let id = UserDefaults.shared.value(for: \\.defaultChatFeatureChatModelId)\n        if id == \"com.github.copilot\", chatModelKey != \\.preferredChatModelIdForUtilities {\n            return .init(id: id, name: \"GitHub Copilot\", format: .openAI, info: .init())\n        }\n        return models.first { $0.id == id }\n            ?? models.first\n    }\n\n    public var maxTokens: Int {\n        model?.info.maxTokens ?? 0\n    }\n\n    public var stop: [String] {\n        []\n    }\n\n    public var minimumReplyTokens: Int {\n        maxTokens / 5\n    }\n\n    public var runFunctionsAutomatically: Bool {\n        true\n    }\n\n    public var shouldEndTextWindow: (String) -> Bool {\n        { _ in true }\n    }\n\n    public init(chatModelKey: KeyPath<UserDefaultPreferenceKeys, PreferenceKey<String>>? = nil) {\n        self.chatModelKey = chatModelKey\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Configuration/UserPreferenceEmbeddingConfiguration.swift",
    "content": "import AIModel\nimport ChatBasic\nimport Foundation\nimport Preferences\n\npublic struct UserPreferenceEmbeddingConfiguration: EmbeddingConfiguration {\n    public var embeddingModelKey: KeyPath<UserDefaultPreferenceKeys, PreferenceKey<String>>?\n\n    public var model: EmbeddingModel? {\n        let models = UserDefaults.shared.value(for: \\.embeddingModels)\n\n        if let embeddingModelKey {\n            let id = UserDefaults.shared.value(for: embeddingModelKey)\n            if let model = models.first(where: { $0.id == id }) {\n                return model\n            }\n        }\n\n        let id = UserDefaults.shared.value(for: \\.defaultChatFeatureEmbeddingModelId)\n        return models.first { $0.id == id }\n            ?? models.first\n    }\n\n    public var maxToken: Int {\n        model?.info.maxTokens ?? 0\n    }\n\n    public var dimensions: Int {\n        let dimensions = model?.info.dimensions ?? 0\n        if dimensions <= 0 {\n            return 1536\n        }\n        return dimensions\n    }\n\n    public init(\n        embeddingModelKey: KeyPath<UserDefaultPreferenceKeys, PreferenceKey<String>>? = nil\n    ) {\n        self.embeddingModelKey = embeddingModelKey\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Debug/Debug.swift",
    "content": "import AppKit\nimport Foundation\n\nenum Debugger {\n    @TaskLocal\n    static var id: UUID?\n\n    #if DEBUG\n    static func didSendRequestBody(body: ChatCompletionsRequestBody) {\n        let center = NotificationCenter.default\n        center.post(\n            name: .init(\"ServiceDebugger.ChatRequestDebug.requestSent\"),\n            object: nil,\n            userInfo: [\n                \"id\": id ?? UUID(),\n                \"data\": body,\n            ]\n        )\n    }\n\n    static func didReceiveFunction(name: String, arguments: String) {\n        let center = NotificationCenter.default\n        center.post(\n            name: .init(\"ServiceDebugger.ChatRequestDebug.receivedFunctionCall\"),\n            object: nil,\n            userInfo: [\n                \"id\": id ?? UUID(),\n                \"name\": name,\n                \"arguments\": arguments,\n            ]\n        )\n    }\n\n    static func didReceiveFunctionResult(result: String) {\n        let center = NotificationCenter.default\n        center.post(\n            name: .init(\"ServiceDebugger.ChatRequestDebug.receivedFunctionResult\"),\n            object: nil,\n            userInfo: [\n                \"id\": id ?? UUID(),\n                \"result\": result,\n            ]\n        )\n    }\n\n    static func didReceiveResponse(content: String) {\n        let center = NotificationCenter.default\n        center.post(\n            name: .init(\"ServiceDebugger.ChatRequestDebug.responseReceived\"),\n            object: nil,\n            userInfo: [\n                \"id\": id ?? UUID(),\n                \"response\": content,\n            ]\n        )\n    }\n\n    static func didFinish() {\n        let center = NotificationCenter.default\n        center.post(\n            name: .init(\"ServiceDebugger.ChatRequestDebug.finished\"),\n            object: nil,\n            userInfo: [\n                \"id\": id ?? UUID(),\n            ]\n        )\n    }\n    #endif\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/EmbeddingService.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Logger\n\npublic struct EmbeddingService {\n    public let configuration: EmbeddingConfiguration\n\n    public init(configuration: EmbeddingConfiguration) {\n        self.configuration = configuration\n    }\n\n    public func embed(text: String) async throws -> EmbeddingResponse {\n        guard let model = configuration.model else {\n            throw ChatGPTServiceError.embeddingModelNotAvailable\n        }\n        let embeddingResponse: EmbeddingResponse\n        switch model.format {\n        case .openAI, .openAICompatible, .azureOpenAI:\n            embeddingResponse = try await OpenAIEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(text: text)\n        case .ollama:\n            embeddingResponse = try await OllamaEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(text: text)\n        case .gitHubCopilot:\n            embeddingResponse = try await GitHubCopilotEmbeddingService(\n                model: model\n            ).embed(text: text)\n        }\n\n        #if DEBUG\n        Logger.service.info(\"\"\"\n        Embedding usage\n        - number of strings: \\(text.count)\n        - prompt tokens: \\(embeddingResponse.usage.prompt_tokens)\n        - total tokens: \\(embeddingResponse.usage.total_tokens)\n\n        \"\"\")\n        #endif\n        return embeddingResponse\n    }\n\n    public func embed(text: [String]) async throws -> EmbeddingResponse {\n        guard let model = configuration.model else {\n            throw ChatGPTServiceError.embeddingModelNotAvailable\n        }\n        let embeddingResponse: EmbeddingResponse\n        switch model.format {\n        case .openAI, .openAICompatible, .azureOpenAI:\n            embeddingResponse = try await OpenAIEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(texts: text)\n        case .ollama:\n            embeddingResponse = try await OllamaEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(texts: text)\n        case .gitHubCopilot:\n            embeddingResponse = try await GitHubCopilotEmbeddingService(\n                model: model\n            ).embed(texts: text)\n        }\n\n        #if DEBUG\n        Logger.service.info(\"\"\"\n        Embedding usage\n        - number of strings: \\(text.count)\n        - prompt tokens: \\(embeddingResponse.usage.prompt_tokens)\n        - total tokens: \\(embeddingResponse.usage.total_tokens)\n\n        \"\"\")\n        #endif\n        return embeddingResponse\n    }\n\n    public func embed(tokens: [[Int]]) async throws -> EmbeddingResponse {\n        guard let model = configuration.model else {\n            throw ChatGPTServiceError.embeddingModelNotAvailable\n        }\n        let embeddingResponse: EmbeddingResponse\n        switch model.format {\n        case .openAI, .openAICompatible, .azureOpenAI:\n            embeddingResponse = try await OpenAIEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(tokens: tokens)\n        case .ollama:\n            embeddingResponse = try await OllamaEmbeddingService(\n                apiKey: configuration.apiKey,\n                model: model,\n                endpoint: configuration.endpoint\n            ).embed(tokens: tokens)\n        case .gitHubCopilot:\n            embeddingResponse = try await GitHubCopilotEmbeddingService(\n                model: model\n            ).embed(tokens: tokens)\n        }\n\n        #if DEBUG\n        Logger.service.info(\"\"\"\n        Embedding usage\n        - number of strings: \\(tokens.count)\n        - prompt tokens: \\(embeddingResponse.usage.prompt_tokens)\n        - total tokens: \\(embeddingResponse.usage.total_tokens)\n\n        \"\"\")\n        #endif\n        return embeddingResponse\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/FucntionCall/ChatGPTFuntionProvider.swift",
    "content": "import ChatBasic\nimport Foundation\n\npublic protocol ChatGPTFunctionProvider {\n    var functions: [any ChatGPTFunction] { get }\n    var functionCallStrategy: FunctionCallStrategy? { get }\n}\n\npublic extension ChatGPTFunctionProvider {\n    func function(named: String) -> (any ChatGPTFunction)? {\n        functions.first(where: { $0.name == named })\n    }\n}\n\npublic struct NoChatGPTFunctionProvider: ChatGPTFunctionProvider {\n    public var functionCallStrategy: FunctionCallStrategy?\n    public var functions: [any ChatGPTFunction] { [] }\n    public init() {}\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/HeaderValueParser.swift",
    "content": "import Foundation\nimport GitHubCopilotService\nimport Logger\nimport Terminal\n\npublic struct HeaderValueParser {\n    public enum Placeholder: String {\n        case gitHubCopilotOBearerToken = \"github_copilot_bearer_token\"\n        case apiKey = \"api_key\"\n        case modelName = \"model_name\"\n    }\n\n    public struct Context {\n        public var modelName: String\n        public var apiKey: String\n        public var gitHubCopilotToken: () async -> GitHubCopilotExtension.Token?\n        public var shellEnvironmentVariable: (_ key: String) async -> String?\n\n        public init(\n            modelName: String,\n            apiKey: String,\n            gitHubCopilotToken: (() async -> GitHubCopilotExtension.Token?)? = nil,\n            shellEnvironmentVariable: ((_: String) async -> String?)? = nil\n        ) {\n            self.modelName = modelName\n            self.apiKey = apiKey\n            self.gitHubCopilotToken = gitHubCopilotToken ?? {\n                try? await GitHubCopilotExtension.fetchToken()\n            }\n            self.shellEnvironmentVariable = shellEnvironmentVariable ?? { p in\n                let shell = ProcessInfo.processInfo.environment[\"SHELL\"] ?? \"/bin/bash\"\n                let terminal = Terminal()\n                return try? await terminal.runCommand(\n                    shell,\n                    arguments: [\"-i\", \"-l\", \"-c\", \"echo $\\(p)\"],\n                    environment: [:]\n                )\n            }\n        }\n    }\n\n    public init() {}\n\n    /// Replace `{{PlaceHolder}}` with exact values.\n    public func parse(_ value: String, context: Context) async -> String {\n        var parsedValue = value\n        let placeholderRanges = findPlaceholderRanges(in: parsedValue)\n\n        for (range, placeholderText) in placeholderRanges.reversed() {\n            let cleanPlaceholder = placeholderText\n                .trimmingCharacters(in: CharacterSet(charactersIn: \"{}\"))\n\n            var replacement: String?\n            if let knownPlaceholder = Placeholder(rawValue: cleanPlaceholder) {\n                async let token = context.gitHubCopilotToken()\n                switch knownPlaceholder {\n                case .gitHubCopilotOBearerToken:\n                    replacement = await token?.token\n                case .apiKey:\n                    replacement = context.apiKey\n                case .modelName:\n                    replacement = context.modelName\n                }\n            } else {\n                replacement = await context.shellEnvironmentVariable(cleanPlaceholder)\n            }\n\n            if let replacement {\n                parsedValue.replaceSubrange(\n                    range,\n                    with: replacement.trimmingCharacters(in: .whitespacesAndNewlines)\n                )\n            } else {\n                parsedValue.replaceSubrange(range, with: \"none\")\n            }\n        }\n\n        return parsedValue\n    }\n\n    private func findPlaceholderRanges(in string: String) -> [(Range<String.Index>, String)] {\n        var ranges: [(Range<String.Index>, String)] = []\n        let pattern = #\"\\{\\{[^}]+\\}\\}\"#\n\n        do {\n            let regex = try NSRegularExpression(pattern: pattern)\n            let matches = regex.matches(\n                in: string,\n                range: NSRange(string.startIndex..., in: string)\n            )\n\n            for match in matches {\n                if let range = Range(match.range, in: string) {\n                    ranges.append((range, String(string[range])))\n                }\n            }\n        } catch {\n            Logger.service.error(\"Failed to find placeholders in string: \\(string)\")\n        }\n\n        return ranges\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/LegacyChatGPTService.swift",
    "content": "import AIModel\nimport AsyncAlgorithms\nimport ChatBasic\nimport Dependencies\nimport Foundation\nimport IdentifiedCollections\nimport Preferences\n\n@available(*, deprecated, message: \"Use ChatGPTServiceType instead.\")\npublic protocol LegacyChatGPTServiceType {\n    var memory: ChatGPTMemory { get set }\n    var configuration: ChatGPTConfiguration { get set }\n    func send(content: String, summary: String?) async throws -> AsyncThrowingStream<String, Error>\n    func stopReceivingMessage() async\n}\n\n@available(*, deprecated, message: \"Use ChatGPTServiceType instead.\")\npublic class LegacyChatGPTService: LegacyChatGPTServiceType {\n    public var memory: ChatGPTMemory\n    public var configuration: ChatGPTConfiguration\n    public var functionProvider: ChatGPTFunctionProvider\n\n    var runningTask: Task<AsyncThrowingStream<String, any Error>, Never>?\n\n    public init(\n        memory: ChatGPTMemory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: UserPreferenceChatGPTConfiguration(),\n            functionProvider: NoChatGPTFunctionProvider(), \n            maxNumberOfMessages: .max\n        ),\n        configuration: ChatGPTConfiguration = UserPreferenceChatGPTConfiguration(),\n        functionProvider: ChatGPTFunctionProvider = NoChatGPTFunctionProvider()\n    ) {\n        self.memory = memory\n        self.configuration = configuration\n        self.functionProvider = functionProvider\n    }\n\n    @Dependency(\\.uuid) var uuid\n    @Dependency(\\.date) var date\n    @Dependency(\\.chatCompletionsAPIBuilder) var chatCompletionsAPIBuilder\n\n    /// Send a message and stream the reply.\n    public func send(\n        content: String,\n        summary: String? = nil\n    ) async throws -> AsyncThrowingStream<String, Error> {\n        let task = Task {\n            if !content.isEmpty || summary != nil {\n                let newMessage = ChatMessage(\n                    id: uuid().uuidString,\n                    role: .user,\n                    content: content,\n                    name: nil,\n                    toolCalls: nil,\n                    summary: summary,\n                    references: []\n                )\n                await memory.appendMessage(newMessage)\n            }\n            \n            let service = ChatGPTService(\n                configuration: configuration,\n                functionProvider: functionProvider\n            )\n            \n            let responses = service.send(memory)\n            \n            return responses.compactMap { response in\n                switch response {\n                case let .partialText(token): return token\n                default: return nil\n                }\n            }.eraseToThrowingStream()\n        }\n        runningTask = task\n        return await task.value\n    }\n\n    /// Send a message and get the reply in return.\n    public func sendAndWait(\n        content: String,\n        summary: String? = nil\n    ) async throws -> String? {\n        if !content.isEmpty || summary != nil {\n            let newMessage = ChatMessage(\n                id: uuid().uuidString,\n                role: .user,\n                content: content,\n                summary: summary\n            )\n            await memory.appendMessage(newMessage)\n        }\n\n        let service = ChatGPTService(\n            configuration: configuration,\n            functionProvider: functionProvider\n        )\n\n        return try await service.send(memory).asText()\n    }\n\n    public func stopReceivingMessage() {\n        runningTask?.cancel()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/AutoManagedChatGPTMemory.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Logger\nimport Preferences\nimport TokenEncoder\n\n@globalActor\npublic enum AutoManagedChatGPTMemoryActor: GlobalActor {\n    public actor Actor {}\n    public static let shared = Actor()\n}\n\nprotocol AutoManagedChatGPTMemoryStrategy {\n    func countToken(_ message: ChatMessage) async -> Int\n    func countToken<F: ChatGPTFunction>(_ function: F) async -> Int\n}\n\n/// A memory that automatically manages the history according to max tokens and max message count.\npublic actor AutoManagedChatGPTMemory: ChatGPTMemory {\n    public struct ComposableMessages {\n        public var systemPromptMessage: ChatMessage\n        public var historyMessage: [ChatMessage]\n        public var retrievedContentMessage: ChatMessage\n        public var contextSystemPromptMessage: ChatMessage\n        public var newMessage: ChatMessage\n    }\n\n    public typealias HistoryComposer = (ComposableMessages) -> [ChatMessage]\n\n    public private(set) var history: [ChatMessage] = [] {\n        didSet { onHistoryChange() }\n    }\n\n    public private(set) var remainingTokens: Int?\n\n    public var systemPrompt: String\n    public var contextSystemPrompt: String\n    public var retrievedContent: [ChatMessage.Reference] = []\n    public var configuration: ChatGPTConfiguration\n    public var functionProvider: ChatGPTFunctionProvider\n    public var maxNumberOfMessages: Int\n\n    var onHistoryChange: () -> Void = {}\n\n    let composeHistory: HistoryComposer\n\n    public init(\n        systemPrompt: String,\n        configuration: ChatGPTConfiguration,\n        functionProvider: ChatGPTFunctionProvider,\n        maxNumberOfMessages: Int = .max,\n        composeHistory: @escaping HistoryComposer = {\n            /// Default Format:\n            /// ```\n            /// [System Prompt] priority: high\n            /// [Functions] priority: high\n            /// [Retrieved Content] priority: low\n            ///     [Retrieved Content A]\n            ///     <separator>\n            ///     [Retrieved Content B]\n            /// [Message History] priority: medium\n            /// [Context System Prompt] priority: high\n            /// [Latest Message] priority: high\n            /// ```\n            [$0.systemPromptMessage] +\n                $0.historyMessage +\n                [$0.retrievedContentMessage, $0.contextSystemPromptMessage, $0.newMessage]\n        }\n    ) {\n        self.systemPrompt = systemPrompt\n        contextSystemPrompt = \"\"\n        self.configuration = configuration\n        self.functionProvider = functionProvider\n        self.composeHistory = composeHistory\n        self.maxNumberOfMessages = maxNumberOfMessages\n    }\n\n    public func mutateHistory(_ update: (inout [ChatMessage]) -> Void) {\n        update(&history)\n    }\n\n    public func mutateSystemPrompt(_ newPrompt: String) {\n        systemPrompt = newPrompt\n    }\n\n    public func mutateContextSystemPrompt(_ newPrompt: String) {\n        contextSystemPrompt = newPrompt\n    }\n\n    public func mutateRetrievedContent(_ newContent: [ChatMessage.Reference]) {\n        retrievedContent = newContent\n    }\n\n    public nonisolated\n    func observeHistoryChange(_ onChange: @escaping () -> Void) {\n        Task {\n            await setOnHistoryChangeBlock(onChange)\n        }\n    }\n\n    public func generatePrompt() async -> ChatGPTPrompt {\n        let strategy: AutoManagedChatGPTMemoryStrategy = switch configuration.model?.format {\n        case .googleAI: GoogleAIStrategy(configuration: configuration)\n        default: OpenAIStrategy()\n        }\n        return await generateSendingHistory(strategy: strategy)\n    }\n\n    func setOnHistoryChangeBlock(_ onChange: @escaping () -> Void) {\n        onHistoryChange = onChange\n    }\n}\n\nextension AutoManagedChatGPTMemory {\n    /// https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\n    func generateSendingHistory(strategy: AutoManagedChatGPTMemoryStrategy) async -> ChatGPTPrompt {\n        // handle no function support models\n\n        let (\n            systemPromptMessage,\n            contextSystemPromptMessage,\n            availableTokenCountForMessages,\n            mandatoryUsage\n        ) = await generateMandatoryMessages(strategy: strategy)\n\n        let (\n            historyMessage,\n            newMessage,\n            availableTokenCountForRetrievedContent,\n            messageUsage\n        ) = await generateMessageHistory(\n            maxNumberOfMessages: maxNumberOfMessages - 1, // for the new message\n            maxTokenCount: availableTokenCountForMessages,\n            strategy: strategy\n        )\n\n        let (\n            retrievedContentMessage,\n            _,\n            retrievedContentUsage,\n            retrievedContent\n        ) = await generateRetrievedContentMessage(\n            maxTokenCount: availableTokenCountForRetrievedContent,\n            strategy: strategy\n        )\n\n        let allMessages = composeHistory(.init(\n            systemPromptMessage: systemPromptMessage,\n            historyMessage: historyMessage,\n            retrievedContentMessage: retrievedContentMessage,\n            contextSystemPromptMessage: contextSystemPromptMessage,\n            newMessage: newMessage\n        )).filter {\n            !($0.content?.isEmpty ?? false)\n        }\n\n        #if DEBUG\n        Logger.service.info(\"\"\"\n        Sending tokens count\n        - system prompt: \\(mandatoryUsage.systemPrompt)\n        - context system prompt: \\(mandatoryUsage.contextSystemPrompt)\n        - functions: \\(mandatoryUsage.functions)\n        - messages: \\(messageUsage)\n        - retrieved content: \\(retrievedContentUsage)\n        - total: \\(\n            mandatoryUsage.systemPrompt\n                + mandatoryUsage.contextSystemPrompt\n                + mandatoryUsage.functions\n                + messageUsage\n                + retrievedContentUsage\n        )\n        \"\"\")\n        #endif\n\n        return .init(\n            history: allMessages,\n            references: retrievedContent\n        )\n    }\n\n    func generateMandatoryMessages(strategy: AutoManagedChatGPTMemoryStrategy) async -> (\n        systemPrompt: ChatMessage,\n        contextSystemPrompt: ChatMessage,\n        remainingTokenCount: Int,\n        usage: (systemPrompt: Int, contextSystemPrompt: Int, functions: Int)\n    ) {\n        let smallestSystemPromptMessage = ChatMessage(\n            role: .system,\n            content: systemPrompt\n        )\n        let contextSystemPromptMessage = ChatMessage(\n            role: .user,\n            content: contextSystemPrompt\n        )\n        let smallestSystemMessageTokenCount = await strategy\n            .countToken(smallestSystemPromptMessage)\n        let contextSystemPromptTokenCount = !contextSystemPrompt.isEmpty\n            ? (await strategy.countToken(contextSystemPromptMessage))\n            : 0\n\n        let functionTokenCount = await {\n            var totalTokenCount = 0\n            for function in self.functionProvider.functions {\n                totalTokenCount += await strategy.countToken(function)\n            }\n            return totalTokenCount\n        }()\n\n        let mandatoryContentTokensCount = smallestSystemMessageTokenCount\n            + contextSystemPromptTokenCount\n            + functionTokenCount\n            + 3 // every reply is primed with <|start|>assistant<|message|>\n\n        // build messages\n\n        /// the available tokens count for other messages and retrieved content\n        let availableTokenCountForMessages = configuration.maxTokens\n            - configuration.minimumReplyTokens\n            - mandatoryContentTokensCount\n\n        return (\n            smallestSystemPromptMessage,\n            contextSystemPromptMessage,\n            availableTokenCountForMessages,\n            (\n                smallestSystemMessageTokenCount,\n                contextSystemPromptTokenCount,\n                functionTokenCount\n            )\n        )\n    }\n\n    func generateMessageHistory(\n        maxNumberOfMessages: Int,\n        maxTokenCount: Int,\n        strategy: AutoManagedChatGPTMemoryStrategy\n    ) async -> (\n        history: [ChatMessage],\n        newMessage: ChatMessage,\n        remainingTokenCount: Int,\n        usage: Int\n    ) {\n        var messageTokenCount = 0\n        var allMessages: [ChatMessage] = []\n        var newMessage: ChatMessage?\n\n        for (index, message) in history.enumerated().reversed() {\n            if maxNumberOfMessages > 0, allMessages.count >= maxNumberOfMessages { break }\n            if message.isEmpty { continue }\n            let tokensCount = await strategy.countToken(message)\n            if tokensCount + messageTokenCount > maxTokenCount { break }\n            messageTokenCount += tokensCount\n            if index == history.endIndex - 1 {\n                newMessage = message\n            } else {\n                allMessages.append(message)\n            }\n        }\n\n        return (\n            allMessages.reversed(),\n            newMessage ?? .init(role: .user, content: \"\"),\n            maxTokenCount - messageTokenCount,\n            messageTokenCount\n        )\n    }\n\n    func generateRetrievedContentMessage(\n        maxTokenCount: Int,\n        strategy: AutoManagedChatGPTMemoryStrategy\n    ) async -> (\n        retrievedContent: ChatMessage,\n        remainingTokenCount: Int,\n        usage: Int,\n        references: [ChatMessage.Reference]\n    ) {\n        /// the available tokens count for retrieved content\n        let thresholdMaxTokenCount = min(maxTokenCount, configuration.maxTokens / 2)\n        /// A separator that costs only 1 token\n        let separator = String(repeating: \"=\", count: 32)\n        let retrievedContent = retrievedContent.filter { !$0.content.isEmpty }\n\n        func buildMessage(retrievedContent: [ChatMessage.Reference]) -> ChatMessage {\n            var text = \"\"\n            for (index, content) in retrievedContent.enumerated() {\n                if index == 0 {\n                    text += \"\"\"\n                    Here are the information you know about the system and the project, \\\n                    separated by \\(separator)\n                    \"\"\"\n                }\n\n                text += \"\\n\\n\\(separator)[DOCUMENT \\(index)]\\n\\n\" + content.content\n            }\n\n            return .init(role: .user, content: text)\n        }\n\n        func buildMessageThatFits() async\n            -> (message: ChatMessage, references: [ChatMessage.Reference], tokenCount: Int)\n        {\n            var right = retrievedContent.count\n            var left = 0\n            var gappedRetrievedContent = retrievedContent\n            var tokenCount: Int?\n            var proposedMessage = buildMessage(retrievedContent: [])\n\n            func checkValid(proposedMessage: ChatMessage) async\n                -> (isValid: Bool, tokenCount: Int?)\n            {\n                // if the size is way below the threshold\n                let characterCount = proposedMessage.content?.count ?? 0\n\n                if characterCount <= thresholdMaxTokenCount {\n                    return (true, nil) // guessing token count.\n                }\n\n                let tokensCount = await strategy.countToken(proposedMessage)\n                if tokensCount <= thresholdMaxTokenCount {\n                    return (true, tokenCount)\n                }\n                return (false, tokenCount)\n            }\n\n            // check if all retrieved content included\n            let maxMessage = buildMessage(retrievedContent: retrievedContent)\n            let (isValid, maxTokenCount) = await checkValid(proposedMessage: maxMessage)\n            if isValid {\n                let tokenCount = if let maxTokenCount { maxTokenCount }\n                else { await strategy.countToken(maxMessage) }\n                return (maxMessage, retrievedContent, tokenCount)\n            }\n\n            // binary search to reduce countToken calls\n            while left <= right {\n                let count = (right + left) / 2\n                let _retrievedContent = Array(retrievedContent.prefix(count))\n                let _proposedMessage = buildMessage(retrievedContent: _retrievedContent)\n                let (isValid, _tokenCount) = await checkValid(proposedMessage: _proposedMessage)\n                if isValid {\n                    proposedMessage = _proposedMessage\n                    gappedRetrievedContent = _retrievedContent\n                    tokenCount = _tokenCount\n                    left = count + 1\n                } else {\n                    right = count - 1\n                }\n            }\n\n            let finalCount = if let tokenCount {\n                tokenCount\n            } else if proposedMessage.content?.isEmpty ?? true {\n                0\n            } else {\n                await strategy.countToken(proposedMessage)\n            }\n            return (proposedMessage, gappedRetrievedContent, finalCount)\n        }\n\n        let (message, references, tokensCount) = await buildMessageThatFits()\n\n        return (\n            message,\n            maxTokenCount - tokensCount,\n            tokensCount,\n            references\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/AutoManagedChatGPTMemoryStrategy/AutoManagedChatGPTMemoryGoogleAIStrategy.swift",
    "content": "import ChatBasic\nimport Foundation\nimport GoogleGenerativeAI\nimport Logger\n\nextension AutoManagedChatGPTMemory {\n    struct GoogleAIStrategy: AutoManagedChatGPTMemoryStrategy {\n        let configuration: ChatGPTConfiguration\n\n        func countToken(_ message: ChatMessage) async -> Int {\n            (await OpenAIStrategy().countToken(message)) + 20\n            // Using local tiktoken instead until I find a faster solution.\n            // The official solution requires sending a lot of requests when adjusting the prompt.\n            // adding 20 just incase.\n\n//            guard let model = configuration.model else {\n//                return 0\n//            }\n//            let aiModel = GenerativeModel(name: model.info.modelName, apiKey:\n//            configuration.apiKey)\n//            if message.isEmpty { return 0 }\n//            let modelMessage = ModelContent(message)\n//            return (try? await aiModel.countTokens([modelMessage]).totalTokens) ?? 0\n        }\n\n        func countToken<F>(_: F) async -> Int where F: ChatGPTFunction {\n            // function is not supported.\n            return 0\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/AutoManagedChatGPTMemoryStrategy/AutoManagedChatGPTMemoryOpenAIStrategy.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Logger\nimport TokenEncoder\n\nextension AutoManagedChatGPTMemory {\n    #warning(\"TODO: Need to fix the tokenizer or supports model specified tokenizers.\")\n    struct OpenAIStrategy: AutoManagedChatGPTMemoryStrategy {\n        static let encoder: TokenEncoder = TiktokenCl100kBaseTokenEncoder()\n\n        func countToken(_ message: ChatMessage) async -> Int {\n            await Self.encoder.countToken(message)\n        }\n        \n        func countToken<F>(_ function: F) async -> Int where F : ChatGPTFunction {\n            async let nameTokenCount = Self.encoder.countToken(text: function.name)\n            async let descriptionTokenCount = Self.encoder.countToken(text: function.description)\n            async let schemaTokenCount = {\n                guard let data = try? JSONEncoder().encode(function.argumentSchema),\n                      let string = String(data: data, encoding: .utf8)\n                else { return 0 }\n                return await Self.encoder.countToken(text: string)\n            }()\n\n            return await (nameTokenCount + descriptionTokenCount + schemaTokenCount)\n        }\n    }\n}\n\nextension TokenEncoder {\n    /// https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\n    func countToken(_ message: ChatMessage) async -> Int {\n        var total = 3\n        var encodingContent = [String]()\n        if let content = message.content {\n            encodingContent.append(content)\n        }\n        if let name = message.name {\n            encodingContent.append(name)\n            total += 1\n        }\n        if let toolCalls = message.toolCalls {\n            for toolCall in toolCalls {\n                encodingContent.append(toolCall.id)\n                encodingContent.append(toolCall.type)\n                encodingContent.append(toolCall.function.name)\n                encodingContent.append(toolCall.function.arguments)\n                total += 4\n                encodingContent.append(toolCall.response.content)\n                encodingContent.append(toolCall.id)\n            }\n        }\n        total += await withTaskGroup(of: Int.self, body: { group in\n            for content in encodingContent {\n                group.addTask {\n                    await encode(text: content).count\n                }\n            }\n            return await group.reduce(0, +)\n        })\n        for image in message.images {\n            encodingContent.append(image.urlString)\n            total += Int(Double(image.urlString.count) * 1.1)\n        }\n        return total\n    }\n\n    func countToken(_ message: inout ChatMessage) async -> Int {\n        if let count = message.tokensCount { return count }\n        let count = await countToken(message)\n        message.tokensCount = count\n        return count\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/ChatGPTMemory.swift",
    "content": "import ChatBasic\nimport Foundation\n\npublic struct ChatGPTPrompt: Equatable {\n    public var history: [ChatMessage]\n    public var references: [ChatMessage.Reference]\n    public var remainingTokenCount: Int?\n\n    public init(\n        history: [ChatMessage],\n        references: [ChatMessage.Reference] = [],\n        remainingTokenCount: Int? = nil\n    ) {\n        self.history = history\n        self.references = references\n        self.remainingTokenCount = remainingTokenCount\n    }\n}\n\npublic protocol ChatGPTMemory {\n    /// The message history.\n    var history: [ChatMessage] { get async }\n    /// Update the message history.\n    func mutateHistory(_ update: (inout [ChatMessage]) -> Void) async\n    /// Generate prompt that would be send through the API.\n    ///\n    /// A memory should make sure that the history in the prompt\n    /// doesn't exceed the maximum token count.\n    ///\n    /// The history can be different from the actual history.\n    func generatePrompt() async -> ChatGPTPrompt\n}\n\npublic extension ChatGPTMemory {\n    /// Append a message to the history.\n    func appendMessage(_ message: ChatMessage) async {\n        await mutateHistory { history in\n            if let index = history.firstIndex(where: { $0.id == message.id }) {\n                history[index] = message\n            } else {\n                history.append(message)\n            }\n        }\n    }\n\n    /// Update a message in the history.\n    func updateMessage(id: String, _ update: (inout ChatMessage) -> Void) async {\n        await mutateHistory { history in\n            if let index = history.firstIndex(where: { $0.id == id }) {\n                update(&history[index])\n            }\n        }\n    }\n\n    /// Remove a message from the history.\n    func removeMessage(_ id: String) async {\n        await mutateHistory {\n            $0.removeAll { $0.id == id }\n        }\n    }\n\n    func streamToolCallResponse(\n        id: String,\n        toolCallId: String,\n        content: String? = nil,\n        summary: String? = nil\n    ) async {\n        await updateMessage(id: id) { message in\n            if let index = message.toolCalls?.firstIndex(where: {\n                $0.id == toolCallId\n            }) {\n                if let content {\n                    message.toolCalls?[index].response.content = content\n                }\n                if let summary {\n                    message.toolCalls?[index].response.summary = summary\n                }\n            }\n        }\n    }\n\n    /// Stream a message to the history.\n    func streamMessage(\n        id: String,\n        role: ChatMessage.Role? = nil,\n        content: String? = nil,\n        name: String? = nil,\n        toolCalls: [Int: ChatMessage.ToolCall]? = nil,\n        summary: String? = nil,\n        references: [ChatMessage.Reference]? = nil\n    ) async {\n        if await history.contains(where: { $0.id == id }) {\n            await updateMessage(id: id) { message in\n                if let content {\n                    if message.content == nil {\n                        message.content = content\n                    } else {\n                        message.content?.append(content)\n                    }\n                }\n                if let role {\n                    message.role = role\n                }\n                if let toolCalls {\n                    if var existedToolCalls = message.toolCalls {\n                        for pair in toolCalls.sorted(by: { $0.key <= $1.key }) {\n                            let (proposedIndex, toolCall) = pair\n                            let index = {\n                                if toolCall.id.isEmpty { return proposedIndex }\n                                return existedToolCalls.lastIndex(where: { $0.id == toolCall.id })\n                                    ?? proposedIndex\n                            }()\n                            if index < existedToolCalls.endIndex {\n                                if !toolCall.id.isEmpty {\n                                    existedToolCalls[index].id = toolCall.id\n                                }\n                                if !toolCall.type.isEmpty {\n                                    existedToolCalls[index].type = toolCall.type\n                                }\n                                existedToolCalls[index].function.name\n                                    .append(toolCall.function.name)\n                                existedToolCalls[index].function.arguments\n                                    .append(toolCall.function.arguments)\n                            } else {\n                                existedToolCalls.append(toolCall)\n                            }\n                        }\n                        message.toolCalls = existedToolCalls\n                    } else {\n                        message.toolCalls = toolCalls.sorted(by: { $0.key <= $1.key }).map(\\.value)\n                    }\n                }\n                if let summary {\n                    message.summary = summary\n                }\n                if let references {\n                    message.references.append(contentsOf: references)\n                }\n                if let name {\n                    message.name = name\n                }\n            }\n        } else {\n            await mutateHistory { history in\n                history.append(.init(\n                    id: id,\n                    role: role ?? .system,\n                    content: content,\n                    name: name,\n                    toolCalls: toolCalls?.sorted(by: { $0.key <= $1.key }).map(\\.value),\n                    summary: summary,\n                    references: references ?? []\n                ))\n            }\n        }\n    }\n\n    /// Clear the history.\n    func clearHistory() async {\n        await mutateHistory { $0.removeAll() }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/ConversationChatGPTMemory.swift",
    "content": "import Foundation\n\npublic actor ConversationChatGPTMemory: ChatGPTMemory {\n    public var history: [ChatMessage] = []\n\n    public init(systemPrompt: String, systemMessageId: String = UUID().uuidString) {\n        history.append(.init(id: systemMessageId, role: .system, content: systemPrompt))\n    }\n\n    public func mutateHistory(_ update: (inout [ChatMessage]) -> Void) {\n        update(&history)\n    }\n    \n    public func generatePrompt() async -> ChatGPTPrompt {\n        return .init(history: history)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/EmptyChatGPTMemory.swift",
    "content": "import Foundation\n\npublic actor EmptyChatGPTMemory: ChatGPTMemory {\n    public var history: [ChatMessage] = []\n\n    public init() {}\n\n    public func mutateHistory(_ update: (inout [ChatMessage]) -> Void) {\n        update(&history)\n    }\n    \n    public func generatePrompt() async -> ChatGPTPrompt {\n        return .init(history: history)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Memory/TemplateChatGPTMemory.swift",
    "content": "import ChatBasic\nimport Foundation\nimport Logger\nimport Preferences\nimport TokenEncoder\n\n/// A memory that automatically manages the history according to max tokens and the template rules.\npublic actor TemplateChatGPTMemory: ChatGPTMemory {\n    public private(set) var memoryTemplate: MemoryTemplate\n    public var history: [ChatMessage] { memoryTemplate.resolved() }\n    public var configuration: ChatGPTConfiguration\n    public var functionProvider: ChatGPTFunctionProvider\n\n    public init(\n        memoryTemplate: MemoryTemplate,\n        configuration: ChatGPTConfiguration,\n        functionProvider: ChatGPTFunctionProvider\n    ) {\n        self.memoryTemplate = memoryTemplate\n        self.configuration = configuration\n        self.functionProvider = functionProvider\n    }\n\n    public func mutateHistory(_ update: (inout [ChatMessage]) -> Void) async {\n        update(&memoryTemplate.followUpMessages)\n    }\n\n    public func generatePrompt() async -> ChatGPTPrompt {\n        let strategy: AutoManagedChatGPTMemoryStrategy = switch configuration.model?.format {\n        case .googleAI: AutoManagedChatGPTMemory.GoogleAIStrategy(configuration: configuration)\n        default: AutoManagedChatGPTMemory.OpenAIStrategy()\n        }\n\n        var memoryTemplate = self.memoryTemplate\n        func checkTokenCount() async -> Bool {\n            let history = memoryTemplate.resolved()\n            var tokenCount = 0\n            for message in history {\n                tokenCount += await strategy.countToken(message)\n            }\n            for function in functionProvider.functions {\n                tokenCount += await strategy.countToken(function)\n            }\n            return tokenCount <= configuration.maxTokens - configuration.minimumReplyTokens\n        }\n\n        var truncationTimes = 500\n        while !(await checkTokenCount()) {\n            do {\n                truncationTimes -= 1\n                if truncationTimes <= 0 {\n                    throw CancellationError()\n                }\n                try Task.checkCancellation()\n                try await memoryTemplate.truncate()\n            } catch {\n                Logger.service.error(\"Failed to truncate prompt template: \\(error)\")\n                break\n            }\n        }\n\n        return ChatGPTPrompt(history: memoryTemplate.resolved())\n    }\n}\n\npublic struct MemoryTemplate {\n    public struct Message {\n        public struct DynamicContent: ExpressibleByStringLiteral {\n            public enum Content: ExpressibleByStringLiteral {\n                case text(String)\n                case list([String], formatter: ([String]) -> String)\n                case priorityList(\n                    [(content: String, priority: Int)],\n                    formatter: ([String]) -> String\n                )\n\n                public init(stringLiteral value: String) {\n                    self = .text(value)\n                }\n            }\n\n            public var content: Content\n            public var priority: Int\n            public var isEmpty: Bool {\n                switch content {\n                case let .text(text):\n                    return text.isEmpty\n                case let .list(list, _):\n                    return list.isEmpty\n                case let .priorityList(list, _):\n                    return list.isEmpty\n                }\n            }\n\n            public init(stringLiteral value: String) {\n                content = .text(value)\n                priority = .max\n            }\n\n            public init(_ content: Content, priority: Int = .max) {\n                self.content = content\n                self.priority = priority\n            }\n        }\n\n        public var chatMessage: ChatMessage\n        public var dynamicContent: [DynamicContent] = []\n        public var priority: Int\n\n        public func resolved() -> ChatMessage? {\n            var baseMessage = chatMessage\n            guard !dynamicContent.isEmpty else {\n                if baseMessage.isEmpty { return nil }\n                return baseMessage\n            }\n\n            let contents: [String] = dynamicContent.compactMap { content in\n                if content.isEmpty { return nil }\n                switch content.content {\n                case let .text(text):\n                    return text\n                case let .list(list, formatter):\n                    return formatter(list)\n                case let .priorityList(list, formatter):\n                    return formatter(list.map { $0.0 })\n                }\n            }\n\n            let composedContent = contents.joined(separator: \"\\n\\n\")\n            if composedContent.isEmpty { return nil }\n\n            baseMessage.content = composedContent\n            return baseMessage\n        }\n\n        public var isEmpty: Bool {\n            if !dynamicContent.isEmpty { return dynamicContent.allSatisfy { $0.isEmpty } }\n            if let toolCalls = chatMessage.toolCalls, !toolCalls.isEmpty {\n                return false\n            }\n            if let content = chatMessage.content, !content.isEmpty {\n                return false\n            }\n            return true\n        }\n\n        public init(\n            chatMessage: ChatMessage,\n            dynamicContent: [DynamicContent] = [],\n            priority: Int = .max\n        ) {\n            self.chatMessage = chatMessage\n            self.dynamicContent = dynamicContent\n            self.priority = priority\n        }\n    }\n\n    public var messages: [Message]\n    public var followUpMessages: [ChatMessage]\n\n    public typealias TruncateRule = (\n        _ messages: inout [Message],\n        _ followUpMessages: inout [ChatMessage]\n    ) async throws -> Void\n\n    let truncateRule: TruncateRule?\n\n    public init(\n        messages: [Message],\n        followUpMessages: [ChatMessage] = [],\n        truncateRule: TruncateRule? = nil\n    ) {\n        self.messages = messages\n        self.truncateRule = truncateRule\n        self.followUpMessages = followUpMessages\n    }\n\n    func resolved() -> [ChatMessage] {\n        messages.compactMap { message in message.resolved() } + followUpMessages\n    }\n\n    func truncated() async throws -> MemoryTemplate {\n        var copy = self\n        try await copy.truncate()\n        return copy\n    }\n\n    mutating func truncate() async throws {\n        if Task.isCancelled { return }\n\n        if let truncateRule = truncateRule {\n            try await truncateRule(&messages, &followUpMessages)\n            return\n        }\n\n        try await Self.defaultTruncateRule()(&messages, &followUpMessages)\n    }\n\n    public struct DefaultTruncateRuleOptions {\n        public var numberOfContentListItemToKeep: (Int) -> Int = { $0 * 2 / 3 }\n    }\n\n    public static func defaultTruncateRule(\n        options updateOptions: (inout DefaultTruncateRuleOptions) -> Void = { _ in }\n    ) -> TruncateRule {\n        var options = DefaultTruncateRuleOptions()\n        updateOptions(&options)\n        return { messages, followUpMessages in\n\n            // Remove the oldest followup messages when available.\n\n            if followUpMessages.count > 20 {\n                followUpMessages.removeFirst(followUpMessages.count / 2)\n                return\n            }\n\n            if followUpMessages.count > 2 {\n                if followUpMessages.count.isMultiple(of: 2) {\n                    followUpMessages.removeFirst(2)\n                } else {\n                    followUpMessages.removeFirst(1)\n                }\n                return\n            }\n\n            // Remove according to the priority.\n\n            var truncatingMessageIndex: Int?\n            for (index, message) in messages.enumerated() {\n                if message.priority == .max { continue }\n                if let previousIndex = truncatingMessageIndex,\n                   message.priority < messages[previousIndex].priority\n                {\n                    truncatingMessageIndex = index\n                }\n            }\n\n            guard let truncatingMessageIndex else { throw CancellationError() }\n            var truncatingMessage: Message {\n                get { messages[truncatingMessageIndex] }\n                set { messages[truncatingMessageIndex] = newValue }\n            }\n\n            if truncatingMessage.isEmpty {\n                messages.remove(at: truncatingMessageIndex)\n                return\n            }\n\n            truncatingMessage.dynamicContent.removeAll(where: { $0.isEmpty })\n\n            var truncatingContentIndex: Int?\n            for (index, content) in truncatingMessage.dynamicContent.enumerated() {\n                if content.isEmpty { continue }\n                if let previousIndex = truncatingContentIndex,\n                   content.priority < truncatingMessage.dynamicContent[previousIndex].priority\n                {\n                    truncatingContentIndex = index\n                }\n            }\n\n            guard let truncatingContentIndex else { throw CancellationError() }\n            var truncatingContent: Message.DynamicContent {\n                get { truncatingMessage.dynamicContent[truncatingContentIndex] }\n                set { truncatingMessage.dynamicContent[truncatingContentIndex] = newValue }\n            }\n\n            switch truncatingContent.content {\n            case .text:\n                truncatingMessage.dynamicContent.remove(at: truncatingContentIndex)\n            case let .list(list, formatter):\n                let count = options.numberOfContentListItemToKeep(list.count)\n                if count > 0 {\n                    truncatingContent.content = .list(\n                        Array(list.prefix(count)),\n                        formatter: formatter\n                    )\n                } else {\n                    truncatingMessage.dynamicContent.remove(at: truncatingContentIndex)\n                }\n            case let .priorityList(list, formatter):\n                let count = options.numberOfContentListItemToKeep(list.count)\n                if count > 0 {\n                    let orderedList = list.enumerated()\n                    let orderedByPriority = orderedList\n                        .sorted { $0.element.priority >= $1.element.priority }\n                    let kept = orderedByPriority.prefix(count)\n                    let reordered = kept.sorted { $0.offset < $1.offset }\n                    truncatingContent.content = .priorityList(\n                        Array(reordered.map { $0.element }),\n                        formatter: formatter\n                    )\n                } else {\n                    truncatingMessage.dynamicContent.remove(at: truncatingContentIndex)\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/OpenAIService/Models.swift",
    "content": "import ChatBasic\nimport CodableWrappers\nimport Foundation\n\nstruct Cancellable {\n    let cancel: () -> Void\n    func callAsFunction() {\n        cancel()\n    }\n}\n\npublic typealias ChatMessage = ChatBasic.ChatMessage\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/AppStorage.swift",
    "content": "import Foundation\n\n#if canImport(SwiftUI)\n\nimport SwiftUI\n\npublic extension AppStorage {\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Bool {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Double {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == URL {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Data {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value: RawRepresentable, Value.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value: RawRepresentable, Value.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n}\n\npublic extension AppStorage where Value: ExpressibleByNilLiteral {\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Bool? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == String? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Double? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Int? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == URL? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == Data? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n}\n\npublic extension AppStorage {\n    init<K: UserDefaultPreferenceKey, R>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == R?, R: RawRepresentable, R.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    init<K: UserDefaultPreferenceKey, R>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == Value, Value == R?, R: RawRepresentable, R.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n}\n\n// MARK: - Deprecated Key Accessor\n\npublic extension AppStorage {\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Bool {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Double {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == URL {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Data {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value: RawRepresentable, Value.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value: RawRepresentable, Value.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(wrappedValue: key.defaultValue, key.key, store: .shared)\n    }\n}\n\npublic extension AppStorage where Value: ExpressibleByNilLiteral {\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Bool? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == String? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Double? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Int? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == URL? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == Data? {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n}\n\npublic extension AppStorage {\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init<R>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == R?, R: RawRepresentable, R.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    init<R>(\n        _ keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<Value>>\n    ) where Value == R?, R: RawRepresentable, R.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        self.init(key.key, store: .shared)\n    }\n}\n\n#endif\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Keys.swift",
    "content": "import AIModel\nimport Foundation\n\npublic protocol UserDefaultPreferenceKey {\n    associatedtype Value\n    var defaultValue: Value { get }\n    var key: String { get }\n}\n\npublic struct PreferenceKey<T>: UserDefaultPreferenceKey {\n    public let defaultValue: T\n    public let key: String\n\n    public init(defaultValue: T, key: String) {\n        self.defaultValue = defaultValue\n        self.key = key\n    }\n}\n\npublic struct DeprecatedPreferenceKey<T> {\n    public let defaultValue: T\n    public let key: String\n\n    public init(defaultValue: T, key: String) {\n        self.defaultValue = defaultValue\n        self.key = key\n    }\n}\n\npublic struct FeatureFlag: UserDefaultPreferenceKey {\n    public let defaultValue: Bool\n    public let key: String\n\n    public init(defaultValue: Bool, key: String) {\n        self.defaultValue = defaultValue\n        self.key = key\n    }\n}\n\npublic struct UserDefaultPreferenceKeys {\n    public init() {}\n\n    // MARK: Quit XPC Service On Xcode And App Quit\n\n    public let quitXPCServiceOnXcodeAndAppQuit = PreferenceKey(\n        defaultValue: true,\n        key: \"QuitXPCServiceOnXcodeAndAppQuit\"\n    )\n\n    // MARK: Automatically Check For Update\n\n    public let automaticallyCheckForUpdate = PreferenceKey(\n        defaultValue: false,\n        key: \"AutomaticallyCheckForUpdate\"\n    )\n\n    // MARK: Suggestion Widget Position Mode\n\n    public let suggestionWidgetPositionMode = PreferenceKey(\n        defaultValue: SuggestionWidgetPositionMode.fixedToBottom,\n        key: \"SuggestionWidgetPositionMode\"\n    )\n\n    // MARK: Widget Color Scheme\n\n    public let widgetColorScheme = PreferenceKey(\n        defaultValue: WidgetColorScheme.dark,\n        key: \"WidgetColorScheme\"\n    )\n\n    // MARK: Force Order Widget to Front\n\n    public let forceOrderWidgetToFront = PreferenceKey(\n        defaultValue: true,\n        key: \"ForceOrderWidgetToFront\"\n    )\n\n    // MARK: Prefer Widget to Stay Inside Editor When Width Greater Than\n\n    public let preferWidgetToStayInsideEditorWhenWidthGreaterThan = PreferenceKey(\n        defaultValue: 1400 as Double,\n        key: \"PreferWidgetToStayInsideEditorWhenWidthGreaterThan\"\n    )\n\n    // MARK: Hide Circular Widget\n\n    public let hideCircularWidget = PreferenceKey(\n        defaultValue: false,\n        key: \"HideCircularWidget\"\n    )\n\n    public let showHideWidgetShortcutGlobally = PreferenceKey(\n        defaultValue: false,\n        key: \"ShowHideWidgetShortcutGlobally\"\n    )\n\n    // MARK: Update Channel\n\n    public let installBetaBuilds = PreferenceKey(\n        defaultValue: false,\n        key: \"InstallBetaBuilds\"\n    )\n\n    public let debugOverlayPanel = PreferenceKey(\n        defaultValue: false,\n        key: \"DebugOverlayPanel\"\n    )\n}\n\n// MARK: - OpenAI Account Settings\n\npublic extension UserDefaultPreferenceKeys {\n    var openAIAPIKey: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"OpenAIAPIKey\")\n    }\n\n    var openAIBaseURL: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"OpenAIBaseURL\")\n    }\n\n    var chatGPTModel: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: ChatGPTModel.gpt35Turbo.rawValue, key: \"ChatGPTModel\")\n    }\n\n    var chatGPTMaxToken: DeprecatedPreferenceKey<Int> {\n        .init(defaultValue: 4000, key: \"ChatGPTMaxToken\")\n    }\n\n    var embeddingModel: DeprecatedPreferenceKey<String> {\n        .init(\n            defaultValue: OpenAIEmbeddingModel.textEmbeddingAda002.rawValue,\n            key: \"OpenAIEmbeddingModel\"\n        )\n    }\n}\n\n// MARK: - Azure OpenAI Settings\n\npublic extension UserDefaultPreferenceKeys {\n    var azureOpenAIAPIKey: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"AzureOpenAIAPIKey\")\n    }\n\n    var azureOpenAIBaseURL: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"AzureOpenAIBaseURL\")\n    }\n\n    var azureChatGPTDeployment: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"AzureChatGPTDeployment\")\n    }\n\n    var azureEmbeddingDeployment: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"AzureEmbeddingDeployment\")\n    }\n}\n\n// MARK: - GitHub Copilot Settings\n\npublic extension UserDefaultPreferenceKeys {\n    var gitHubCopilotVerboseLog: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"GitHubCopilotVerboseLog\")\n    }\n\n    var gitHubCopilotProxyHost: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotProxyHost\")\n    }\n\n    var gitHubCopilotProxyPort: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotProxyPort\")\n    }\n\n    var gitHubCopilotEnterpriseURI: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotEnterpriseURI\")\n    }\n\n    var gitHubCopilotUseStrictSSL: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"GitHubCopilotUseStrictSSL\")\n    }\n\n    var gitHubCopilotProxyUsername: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotProxyUsername\")\n    }\n\n    var gitHubCopilotProxyPassword: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotProxyPassword\")\n    }\n\n    var nodePath: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"NodePath\")\n    }\n\n    var runNodeWith: PreferenceKey<NodeRunner> {\n        .init(defaultValue: .env, key: \"RunNodeWith\")\n    }\n\n    var gitHubCopilotLoadKeyChainCertificates: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"GitHubCopilotLoadKeyChainCertificates\")\n    }\n\n    var gitHubCopilotPretendIDEToBeVSCode: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"GitHubCopilotPretendIDEToBeVSCode\")\n    }\n\n    var gitHubCopilotModelId: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotModelId\")\n    }\n\n    var gitHubCopilotModelFamily: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"GitHubCopilotModelFamily\")\n    }\n}\n\n// MARK: - Codeium Settings\n\npublic extension UserDefaultPreferenceKeys {\n    var codeiumVerboseLog: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"CodeiumVerboseLog\")\n    }\n\n    var codeiumEnterpriseMode: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"CodeiumEnterpriseMode\")\n    }\n\n    var codeiumPortalUrl: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"CodeiumPortalUrl\")\n    }\n\n    var codeiumApiUrl: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"CodeiumApiUrl\")\n    }\n\n    var codeiumEnterpriseVersion: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"CodeiumEnterpriseVersion\")\n    }\n\n    var codeiumIndexEnabled: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"CodeiumIndexEnabled\")\n    }\n\n    var codeiumIndexingMaxFileSize: PreferenceKey<Int> {\n        .init(defaultValue: 5000, key: \"CodeiumIndexingMaxFileSize\")\n    }\n}\n\n// MARK: - Chat Models\n\npublic extension UserDefaultPreferenceKeys {\n    var chatModels: PreferenceKey<[ChatModel]> {\n        .init(defaultValue: [], key: \"ChatModels\")\n    }\n\n    var chatGPTLanguage: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"ChatGPTLanguage\")\n    }\n\n    var chatGPTMaxMessageCount: PreferenceKey<Int> {\n        .init(defaultValue: 5, key: \"ChatGPTMaxMessageCount\")\n    }\n\n    var chatGPTTemperature: PreferenceKey<Double> {\n        .init(defaultValue: 0.7, key: \"ChatGPTTemperature\")\n    }\n}\n\n// MARK: - Embedding Models\n\npublic extension UserDefaultPreferenceKeys {\n    var embeddingModels: PreferenceKey<[EmbeddingModel]> {\n        .init(defaultValue: [], key: \"EmbeddingModels\")\n    }\n}\n\n// MARK: - Prompt to Code\n\npublic extension UserDefaultPreferenceKeys {\n    var promptToCodeFeatureProvider: PreferenceKey<PromptToCodeFeatureProvider> {\n        .init(defaultValue: .openAI, key: \"PromptToCodeFeatureProvider\")\n    }\n\n    var promptToCodeGenerateDescription: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"PromptToCodeGenerateDescription\")\n    }\n\n    var promptToCodeGenerateDescriptionInUserPreferredLanguage: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"PromptToCodeGenerateDescriptionInUserPreferredLanguage\")\n    }\n\n    var promptToCodeChatModelId: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PromptToCodeChatModelId\")\n    }\n\n    var promptToCodeEmbeddingModelId: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PromptToCodeEmbeddingModelId\")\n    }\n\n    var enableSenseScopeByDefaultInPromptToCode: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"EnableSenseScopeByDefaultInPromptToCode\")\n    }\n\n    var promptToCodeCodeFontSize: PreferenceKey<Double> {\n        .init(defaultValue: 13, key: \"PromptToCodeCodeFontSize\")\n    }\n\n    var hideCommonPrecedingSpacesInPromptToCode: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"HideCommonPrecedingSpacesInPromptToCode\")\n    }\n\n    var wrapCodeInPromptToCode: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"WrapCodeInPromptToCode\")\n    }\n}\n\n// MARK: - Suggestion\n\npublic extension UserDefaultPreferenceKeys {\n    var oldSuggestionFeatureProvider: DeprecatedPreferenceKey<BuiltInSuggestionFeatureProvider> {\n        .init(defaultValue: .gitHubCopilot, key: \"SuggestionFeatureProvider\")\n    }\n\n    var suggestionFeatureProvider: PreferenceKey<SuggestionFeatureProvider> {\n        .init(defaultValue: .builtIn(.gitHubCopilot), key: \"NewSuggestionFeatureProvider\")\n    }\n\n    var realtimeSuggestionToggle: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"RealtimeSuggestionToggle\")\n    }\n\n    var suggestionDisplayCompactMode: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionDisplayCompactMode\")\n    }\n\n    var suggestionCodeFontSize: PreferenceKey<Double> {\n        .init(defaultValue: 13, key: \"SuggestionCodeFontSize\")\n    }\n\n    var disableSuggestionFeatureGlobally: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"DisableSuggestionFeatureGlobally\")\n    }\n\n    var suggestionFeatureEnabledProjectList: PreferenceKey<[String]> {\n        .init(defaultValue: [], key: \"SuggestionFeatureEnabledProjectList\")\n    }\n\n    var suggestionFeatureDisabledLanguageList: PreferenceKey<[String]> {\n        .init(defaultValue: [], key: \"SuggestionFeatureDisabledLanguageList\")\n    }\n\n    var hideCommonPrecedingSpacesInSuggestion: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"HideCommonPrecedingSpacesInSuggestion\")\n    }\n\n    var suggestionPresentationMode: PreferenceKey<PresentationMode> {\n        .init(defaultValue: .nearbyTextCursor, key: \"SuggestionPresentationMode\")\n    }\n\n    var realtimeSuggestionDebounce: PreferenceKey<Double> {\n        .init(defaultValue: 0.2, key: \"RealtimeSuggestionDebounce\")\n    }\n\n    var acceptSuggestionWithTab: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"AcceptSuggestionWithTab\")\n    }\n\n    var acceptSuggestionWithModifierCommand: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionWithModifierCommand\")\n    }\n\n    var acceptSuggestionWithModifierOption: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionWithModifierOption\")\n    }\n\n    var acceptSuggestionWithModifierControl: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionWithModifierControl\")\n    }\n\n    var acceptSuggestionWithModifierShift: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionWithModifierShift\")\n    }\n\n    var acceptSuggestionWithModifierOnlyForSwift: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SuggestionWithModifierOnlyForSwift\")\n    }\n\n    var acceptSuggestionLineWithModifierControl: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"SuggestionLineWithModifierControl\")\n    }\n\n    var dismissSuggestionWithEsc: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"DismissSuggestionWithEsc\")\n    }\n\n    var isSuggestionSenseEnabled: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"IsSuggestionSenseEnabled\")\n    }\n\n    var isSuggestionTypeInTheMiddleEnabled: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"IsSuggestionTypeInTheMiddleEnabled\")\n    }\n}\n\n// MARK: - Chat\n\npublic extension UserDefaultPreferenceKeys {\n    var chatFeatureProvider: DeprecatedPreferenceKey<ChatFeatureProvider> {\n        .init(defaultValue: .openAI, key: \"ChatFeatureProvider\")\n    }\n\n    var defaultChatFeatureChatModelId: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"DefaultChatFeatureChatModelId\")\n    }\n\n    var embeddingFeatureProvider: DeprecatedPreferenceKey<EmbeddingFeatureProvider> {\n        .init(defaultValue: .openAI, key: \"EmbeddingFeatureProvider\")\n    }\n\n    var defaultChatFeatureEmbeddingModelId: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"DefaultChatFeatureEmbeddingModelId\")\n    }\n\n    var chatFontSize: PreferenceKey<Double> {\n        .init(defaultValue: 12, key: \"ChatFontSize\")\n    }\n\n    var chatCodeFontSize: PreferenceKey<Double> {\n        .init(defaultValue: 12, key: \"ChatCodeFontSize\")\n    }\n\n    var useGlobalChat: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"UseGlobalChat\")\n    }\n\n    var embedFileContentInChatContextIfNoSelection: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"EmbedFileContentInChatContextIfNoSelection\")\n    }\n\n    var maxFocusedCodeLineCount: PreferenceKey<Int> {\n        .init(defaultValue: 100, key: \"MaxEmbeddableFileInChatContextLineCount\")\n    }\n\n    var useCodeScopeByDefaultInChatContext: DeprecatedPreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"UseSelectionScopeByDefaultInChatContext\")\n    }\n\n    var defaultChatSystemPrompt: PreferenceKey<String> {\n        .init(\n            defaultValue: \"\",\n            key: \"DefaultChatSystemPrompt\"\n        )\n    }\n\n    var chatSearchPluginMaxIterations: PreferenceKey<Int> {\n        .init(defaultValue: 3, key: \"ChatSearchPluginMaxIterations\")\n    }\n\n    var wrapCodeInChatCodeBlock: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"WrapCodeInChatCodeBlock\")\n    }\n\n    var enableFileScopeByDefaultInChatContext: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"EnableFileScopeByDefaultInChatContext\")\n    }\n\n    var enableCodeScopeByDefaultInChatContext: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"UseSelectionScopeByDefaultInChatContext\")\n    }\n\n    var enableSenseScopeByDefaultInChatContext: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"EnableSenseScopeByDefaultInChatContext\")\n    }\n\n    var enableProjectScopeByDefaultInChatContext: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"EnableProjectScopeByDefaultInChatContext\")\n    }\n\n    var enableWebScopeByDefaultInChatContext: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"EnableWebScopeByDefaultInChatContext\")\n    }\n\n    var preferredChatModelIdForSenseScope: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PreferredChatModelIdForSenseScope\")\n    }\n\n    var preferredChatModelIdForProjectScope: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PreferredChatModelIdForProjectScope\")\n    }\n\n    var preferredChatModelIdForWebScope: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PreferredChatModelIdForWebScope\")\n    }\n\n    var preferredChatModelIdForUtilities: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"PreferredChatModelIdForUtilities\")\n    }\n\n    enum ChatPanelFloatOnTopOption: Int, Codable, Equatable {\n        case alwaysOnTop\n        case onTopWhenXcodeIsActive\n        case never\n    }\n\n    var chatPanelFloatOnTopOption: PreferenceKey<ChatPanelFloatOnTopOption> {\n        .init(defaultValue: .onTopWhenXcodeIsActive, key: \"ChatPanelFloatOnTopOption\")\n    }\n\n    var disableFloatOnTopWhenTheChatPanelIsDetached: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"DisableFloatOnTopWhenTheChatPanelIsDetached\")\n    }\n\n    var keepFloatOnTopIfChatPanelAndXcodeOverlaps: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"KeepFloatOnTopIfChatPanelAndXcodeOverlaps\")\n    }\n\n    var openChatMode: PreferenceKey<UserDefaultsStorageBox<OpenChatMode>> {\n        .init(defaultValue: .init(.chatPanel), key: \"DefaultOpenChatMode\")\n    }\n\n    var legacyOpenChatMode: DeprecatedPreferenceKey<OpenChatMode.LegacyOpenChatMode> {\n        .init(defaultValue: .chatPanel, key: \"OpenChatMode\")\n    }\n\n    var openChatInBrowserURL: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"OpenChatInBrowserURL\")\n    }\n\n    var openChatInBrowserInInAppBrowser: PreferenceKey<Bool> {\n        .init(defaultValue: true, key: \"OpenChatInBrowserInInAppBrowser\")\n    }\n}\n\n// MARK: - Theme\n\npublic extension UserDefaultPreferenceKeys {\n    var syncSuggestionHighlightTheme: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SyncSuggestionHighlightTheme\")\n    }\n\n    var syncPromptToCodeHighlightTheme: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SyncPromptToCodeHighlightTheme\")\n    }\n\n    var syncChatCodeHighlightTheme: PreferenceKey<Bool> {\n        .init(defaultValue: false, key: \"SyncChatCodeHighlightTheme\")\n    }\n\n    var codeForegroundColorLight: PreferenceKey<UserDefaultsStorageBox<StorableColor?>> {\n        .init(defaultValue: .init(nil), key: \"CodeForegroundColorLight\")\n    }\n\n    var codeForegroundColorDark: PreferenceKey<UserDefaultsStorageBox<StorableColor?>> {\n        .init(defaultValue: .init(nil), key: \"CodeForegroundColorDark\")\n    }\n\n    var codeBackgroundColorLight: PreferenceKey<UserDefaultsStorageBox<StorableColor?>> {\n        .init(defaultValue: .init(nil), key: \"CodeBackgroundColorLight\")\n    }\n\n    var codeBackgroundColorDark: PreferenceKey<UserDefaultsStorageBox<StorableColor?>> {\n        .init(defaultValue: .init(nil), key: \"CodeBackgroundColorDark\")\n    }\n\n    var suggestionCodeFont: PreferenceKey<UserDefaultsStorageBox<StorableFont>> {\n        .init(\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(ofSize: 12, weight: .regular))),\n            key: \"SuggestionCodeFont\"\n        )\n    }\n\n    var promptToCodeCodeFont: PreferenceKey<UserDefaultsStorageBox<StorableFont>> {\n        .init(\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(ofSize: 12, weight: .regular))),\n            key: \"PromptToCodeCodeFont\"\n        )\n    }\n\n    var chatCodeFont: PreferenceKey<UserDefaultsStorageBox<StorableFont>> {\n        .init(\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(ofSize: 12, weight: .regular))),\n            key: \"ChatCodeFont\"\n        )\n    }\n\n    var terminalFont: PreferenceKey<UserDefaultsStorageBox<StorableFont>> {\n        .init(\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(ofSize: 12, weight: .regular))),\n            key: \"TerminalCodeFont\"\n        )\n    }\n}\n\n// MARK: - Search\n\npublic extension UserDefaultPreferenceKeys {\n    enum SearchProvider: String, Codable, CaseIterable {\n        case headlessBrowser\n        case serpAPI\n    }\n\n    enum SerpAPIEngine: String, Codable, CaseIterable {\n        case google\n        case baidu\n        case bing\n        case duckDuckGo = \"duckduckgo\"\n    }\n\n    enum HeadlessBrowserEngine: String, Codable, CaseIterable {\n        case google\n        case baidu\n        case bing\n        case duckDuckGo = \"duckduckgo\"\n    }\n\n    var searchProvider: PreferenceKey<SearchProvider> {\n        .init(defaultValue: .headlessBrowser, key: \"SearchProvider\")\n    }\n\n    var serpAPIEngine: PreferenceKey<SerpAPIEngine> {\n        .init(defaultValue: .google, key: \"SerpAPIEngine\")\n    }\n\n    var serpAPIKeyName: PreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"SerpAPIKeyName\")\n    }\n\n    var headlessBrowserEngine: PreferenceKey<HeadlessBrowserEngine> {\n        .init(defaultValue: .google, key: \"HeadlessBrowserEngine\")\n    }\n\n    var bingSearchSubscriptionKey: DeprecatedPreferenceKey<String> {\n        .init(defaultValue: \"\", key: \"BingSearchSubscriptionKey\")\n    }\n\n    var bingSearchEndpoint: DeprecatedPreferenceKey<String> {\n        .init(\n            defaultValue: \"https://api.bing.microsoft.com/v7.0/search/\",\n            key: \"BingSearchEndpoint\"\n        )\n    }\n}\n\n// MARK: - Custom Commands\n\npublic extension UserDefaultPreferenceKeys {\n    var customCommands: PreferenceKey<[CustomCommand]> {\n        .init(defaultValue: [\n            .init(\n                commandId: \"BuiltInCustomCommandExplainSelection\",\n                name: \"Explain Selection\",\n                feature: .chatWithSelection(\n                    extraSystemPrompt: \"\",\n                    prompt: \"Explain the selected code concisely, step-by-step.\",\n                    useExtraSystemPrompt: true\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n            .init(\n                commandId: \"BuiltInCustomCommandAddDocumentationToSelection\",\n                name: \"Add Documentation to Selection\",\n                feature: .promptToCode(\n                    extraSystemPrompt: \"\",\n                    prompt: \"Add documentation on top of the code. Use triple slash if the language supports it.\",\n                    continuousMode: false,\n                    generateDescription: true\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n            .init(\n                commandId: \"BuiltInCustomCommandSendCodeToChat\",\n                name: \"Send Selected Code to Chat\",\n                feature: .chatWithSelection(\n                    extraSystemPrompt: \"\",\n                    prompt: \"\"\"\n                    ```{{active_editor_language}}\n                    {{selected_code}}\n                    ```\n                    \"\"\",\n                    useExtraSystemPrompt: true\n                ),\n                ignoreExistingAttachments: false,\n                attachments: []\n            ),\n        ], key: \"CustomCommands\")\n    }\n}\n\n// MARK: - Feature Flags\n\npublic extension UserDefaultPreferenceKeys {\n    var disableLazyVStack: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-DisableLazyVStack\")\n    }\n\n    var preCacheOnFileOpen: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-PreCacheOnFileOpen\")\n    }\n\n    var runNodeWithInteractiveLoggedInShell: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-RunNodeWithInteractiveLoggedInShell\")\n    }\n\n    var useCustomScrollViewWorkaround: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-UseCustomScrollViewWorkaround\")\n    }\n\n    var triggerActionWithAccessibilityAPI: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-TriggerActionWithAccessibilityAPI\")\n    }\n\n    var alwaysAcceptSuggestionWithAccessibilityAPI: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-AlwaysAcceptSuggestionWithAccessibilityAPI\")\n    }\n\n    var animationACrashSuggestion: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-AnimationACrashSuggestion\")\n    }\n\n    var animationBCrashSuggestion: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-AnimationBCrashSuggestion\")\n    }\n\n    var animationCCrashSuggestion: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-AnimationCCrashSuggestion\")\n    }\n\n    var enableXcodeInspectorDebugMenu: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-EnableXcodeInspectorDebugMenu\")\n    }\n\n    var disableFunctionCalling: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-DisableFunctionCalling\")\n    }\n\n    var useUserDefaultsBaseAPIKeychain: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-UseUserDefaultsBaseAPIKeychain\")\n    }\n\n    var disableGitHubCopilotSettingsAutoRefreshOnAppear: FeatureFlag {\n        .init(\n            defaultValue: false,\n            key: \"FeatureFlag-DisableGitHubCopilotSettingsAutoRefreshOnAppear\"\n        )\n    }\n\n    var disableGitIgnoreCheck: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-DisableGitIgnoreCheck\")\n    }\n\n    var disableFileContentManipulationByCheatsheet: FeatureFlag {\n        .init(defaultValue: true, key: \"FeatureFlag-DisableFileContentManipulationByCheatsheet\")\n    }\n\n    var disableEnhancedWorkspace: FeatureFlag {\n        .init(\n            defaultValue: false,\n            key: \"FeatureFlag-DisableEnhancedWorkspace\"\n        )\n    }\n\n    var restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning: FeatureFlag {\n        .init(\n            defaultValue: false,\n            key: \"FeatureFlag-RestartXcodeInspectorIfAccessibilityAPIIsMalfunctioning\"\n        )\n    }\n\n    var restartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer: FeatureFlag {\n        .init(\n            defaultValue: true,\n            key: \"FeatureFlag-RestartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer\"\n        )\n    }\n\n    var toastForTheReasonWhyXcodeInspectorNeedsToBeRestarted: FeatureFlag {\n        .init(\n            defaultValue: false,\n            key: \"FeatureFlag-ToastForTheReasonWhyXcodeInspectorNeedsToBeRestarted\"\n        )\n    }\n\n    var observeToAXNotificationWithDefaultMode: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-observeToAXNotificationWithDefaultMode\")\n    }\n\n    var useCloudflareDomainNameForLicenseCheck: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-UseCloudflareDomainNameForLicenseCheck\")\n    }\n\n    var doNotInstallLaunchAgentAutomatically: FeatureFlag {\n        .init(defaultValue: false, key: \"FeatureFlag-DoNotInstallLaunchAgentAutomatically\")\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/ChatFeatureProvider.swift",
    "content": "public enum ChatFeatureProvider: String, CaseIterable, Codable {\n    case openAI\n    case azureOpenAI\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/ChatGPTModel.swift",
    "content": "import Foundation\n\npublic enum ChatGPTModel: String, CaseIterable {\n    case gpt35Turbo = \"gpt-3.5-turbo\"\n    case gpt35Turbo16k = \"gpt-3.5-turbo-16k\"\n    case gpt4o = \"gpt-4o\"\n    case gpt4oMini = \"gpt-4o-mini\"\n    case gpt4 = \"gpt-4\"\n    case gpt432k = \"gpt-4-32k\"\n    case gpt4Turbo = \"gpt-4-turbo\"\n    case gpt4VisionPreview = \"gpt-4-vision-preview\"\n    case gpt432k0314 = \"gpt-4-32k-0314\"\n    case gpt432k0613 = \"gpt-4-32k-0613\"\n    case gpt40125 = \"gpt-4-0125-preview\"\n    case gpt4_1 = \"gpt-4.1\"\n    case gpt4_1Mini = \"gpt-4.1-mini\"\n    case gpt4_1Nano = \"gpt-4.1-nano\"\n    case o1 = \"o1\"\n    case o1Preview = \"o1-preview\"\n    case o1Pro = \"o1-pro\"\n    case o3Mini = \"o3-mini\"\n    case o3 = \"o3\"\n    case o4Mini = \"o4-mini\"\n}\n\npublic extension ChatGPTModel {\n    var maxToken: Int {\n        switch self {\n        case .gpt4:\n            return 8192\n        case .gpt432k:\n            return 32768\n        case .gpt432k0314:\n            return 32768\n        case .gpt35Turbo:\n            return 16385\n        case .gpt35Turbo16k:\n            return 16385\n        case .gpt432k0613:\n            return 32768\n        case .gpt4VisionPreview:\n            return 128_000\n        case .gpt40125:\n            return 128_000\n        case .gpt4Turbo:\n            return 128_000\n        case .gpt4o:\n            return 128_000\n        case .gpt4oMini:\n            return 128_000\n        case .o1Preview:\n            return 128_000\n        case .o1:\n            return 200_000\n        case .o3Mini:\n            return 200_000\n        case .gpt4_1:\n            return 1_047_576\n        case .gpt4_1Mini:\n            return 1_047_576\n        case .gpt4_1Nano:\n            return 1_047_576\n        case .o1Pro:\n            return 200_000\n        case .o3:\n            return 200_000\n        case .o4Mini:\n            return 200_000\n        }\n    }\n\n    var supportsImages: Bool {\n        switch self {\n        case .gpt4VisionPreview, .gpt4Turbo, .gpt4o, .gpt4oMini, .o1Preview, .o1, .o3Mini:\n            return true\n        default:\n            return false\n        }\n    }\n    \n    var supportsTemperature: Bool {\n        switch self {\n        case .o1Preview, .o1, .o3Mini:\n            return false\n        default:\n            return true\n        }\n    }\n    \n    var supportsSystemPrompt: Bool {\n        switch self {\n        case .o1Preview, .o1, .o3Mini:\n            return false\n        default:\n            return true\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/CustomCommand.swift",
    "content": "import CryptoKit\nimport Foundation\n\npublic struct CustomCommand: Codable, Equatable {\n    /// The custom command feature.\n    ///\n    /// Keep everything optional so nothing will break when the format changes.\n    public enum Feature: Codable, Equatable {\n        /// Prompt to code.\n        case promptToCode(\n            extraSystemPrompt: String?,\n            prompt: String?,\n            continuousMode: Bool?,\n            generateDescription: Bool?\n        )\n        /// Send message.\n        case chatWithSelection(\n            extraSystemPrompt: String?,\n            prompt: String?,\n            useExtraSystemPrompt: Bool?\n        )\n        /// Custom chat.\n        case customChat(systemPrompt: String?, prompt: String?)\n        /// Single round dialog.\n        case singleRoundDialog(\n            systemPrompt: String?,\n            overwriteSystemPrompt: Bool?,\n            prompt: String?,\n            receiveReplyInNotification: Bool?\n        )\n    }\n\n    public struct Attachment: Codable, Equatable {\n        public enum Kind: Codable, Equatable, Hashable {\n            case activeDocument\n            case debugArea\n            case clipboard\n            case senseScope\n            case projectScope\n            case webScope\n            case gitStatus\n            case gitLog\n            case file(path: String)\n        }\n        public var kind: Kind\n        public init(kind: Kind) {\n            self.kind = kind\n        }\n    }\n\n    public var id: String { commandId ?? legacyId }\n    public var commandId: String?\n    public var name: String\n    public var feature: Feature\n\n    public var ignoreExistingAttachments: Bool\n    public var attachments: [Attachment]\n\n    public init(\n        commandId: String,\n        name: String,\n        feature: Feature,\n        ignoreExistingAttachments: Bool,\n        attachments: [Attachment]\n    ) {\n        self.commandId = commandId\n        self.name = name\n        self.feature = feature\n        self.ignoreExistingAttachments = ignoreExistingAttachments\n        self.attachments = attachments\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        commandId = try container.decodeIfPresent(String.self, forKey: .commandId)\n        name = try container.decode(String.self, forKey: .name)\n        feature = (\n            try? container\n                .decode(CustomCommand.Feature.self, forKey: .feature)\n        ) ?? .chatWithSelection(\n            extraSystemPrompt: \"\",\n            prompt: \"\",\n            useExtraSystemPrompt: false\n        )\n        ignoreExistingAttachments = try container.decodeIfPresent(\n            Bool.self,\n            forKey: .ignoreExistingAttachments\n        ) ?? false\n        attachments = try container.decodeIfPresent([Attachment].self, forKey: .attachments) ?? []\n    }\n\n    var legacyId: String {\n        name.sha1HexString\n    }\n}\n\nprivate extension Digest {\n    var bytes: [UInt8] { Array(makeIterator()) }\n    var data: Data { Data(bytes) }\n\n    var hexStr: String {\n        bytes.map { String(format: \"%02X\", $0) }.joined()\n    }\n}\n\nprivate extension String {\n    var sha1HexString: String {\n        Insecure.SHA1.hash(data: data(using: .utf8) ?? Data()).hexStr\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/EmbeddingFeatureProvider.swift",
    "content": "public enum EmbeddingFeatureProvider: String, CaseIterable {\n    case openAI\n    case azureOpenAI\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/GoogleGenerativeChatModel.swift",
    "content": "import Foundation\n\npublic enum GoogleGenerativeAIModel: String {\n    case gemini25FlashPreview = \"gemini-2.5-flash-preview-04-17\"\n    case gemini25ProPreview = \"gemini-2.5-pro-preview-05-06\"\n    case gemini20Flash = \"gemini-2.0-flash\"\n    case gemini20FlashLite = \"gemini-2.0-flash-lite\"\n    case gemini15Pro = \"gemini-1.5-pro\"\n    case gemini15Flash = \"gemini-1.5-flash\"\n    case geminiPro = \"gemini-pro\"\n}\n\npublic extension GoogleGenerativeAIModel {\n    var maxToken: Int {\n        switch self {\n        case .geminiPro:\n            return 32768\n        case .gemini15Flash:\n            return 1_048_576\n        case .gemini15Pro:\n            return 2_097_152\n        case .gemini25FlashPreview:\n            return 1_048_576\n        case .gemini25ProPreview:\n            return 1_048_576\n        case .gemini20Flash:\n            return 1_048_576\n        case .gemini20FlashLite:\n            return 1_048_576\n        }\n    }\n}\n\nextension GoogleGenerativeAIModel: CaseIterable {}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/Locale.swift",
    "content": "import Foundation\n\npublic extension Locale {\n    static var availableLocalizedLocales: [String] {\n        let localizedLocales = Locale.isoLanguageCodes.compactMap {\n            Locale(identifier: \"en-US\").localizedString(forLanguageCode: $0)\n        }\n        .sorted()\n        return localizedLocales\n    }\n\n    var languageName: String {\n        localizedString(forLanguageCode: languageCode ?? \"\") ?? \"\"\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/NodeRunner.swift",
    "content": "import Foundation\n\npublic enum NodeRunner: Int, CaseIterable {\n    case env\n    case bash\n    case shell\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/OpenAIEmbeddingModel.swift",
    "content": "public enum OpenAIEmbeddingModel: String, CaseIterable {\n    case textEmbedding3Small = \"text-embedding-3-small\"\n    case textEmbedding3Large = \"text-embedding-3-large\"\n    case textEmbeddingAda002 = \"text-embedding-ada-002\"\n}\n\npublic extension OpenAIEmbeddingModel {\n    var maxToken: Int {\n        switch self {\n        case .textEmbeddingAda002:\n            return 8191\n        case .textEmbedding3Small:\n            return 8191\n        case .textEmbedding3Large:\n            return 8191\n        }\n    }\n    \n    var dimensions: Int {\n        switch self {\n        case .textEmbeddingAda002:\n            return 1536\n        case .textEmbedding3Small:\n            return 1536\n        case .textEmbedding3Large:\n            return 3072\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/OpenChatMode.swift",
    "content": "import Foundation\n\npublic enum OpenChatMode: Codable, Equatable, Identifiable, Hashable {\n    public var id: String {\n        switch self {\n        case .chatPanel:\n            return \"chatPanel\"\n        case .browser:\n            return \"browser\"\n        case let .builtinExtension(extensionIdentifier, id, _):\n            return \"builtinExtension-\\(extensionIdentifier)-\\(id)\"\n        case let .externalExtension(extensionIdentifier, id, _):\n            return \"externalExtension-\\(extensionIdentifier)-\\(id)\"\n        }\n    }\n\n    public enum LegacyOpenChatMode: String {\n        case chatPanel\n        case browser\n        case codeiumChat\n    }\n\n    case chatPanel\n    case browser\n    case builtinExtension(extensionIdentifier: String, id: String, tabName: String)\n    case externalExtension(extensionIdentifier: String, id: String, tabName: String)\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/PresentationMode.swift",
    "content": "public enum PresentationMode: Int, CaseIterable {\n    case nearbyTextCursor = 0\n    case floatingWidget = 1\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/PromptToCodeFeatureProvider.swift",
    "content": "import Foundation\n\npublic enum PromptToCodeFeatureProvider: Int, CaseIterable {\n    case openAI\n    case githubCopilot\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/StorableColors.swift",
    "content": "import Foundation\n\npublic struct StorableColor: Codable, Equatable {\n    public var red: Double\n    public var green: Double\n    public var blue: Double\n    public var alpha: Double\n\n    public init(red: Double, green: Double, blue: Double, alpha: Double) {\n        self.red = red\n        self.green = green\n        self.blue = blue\n        self.alpha = alpha\n    }\n}\n\n#if canImport(SwiftUI)\nimport SwiftUI\npublic extension StorableColor {\n    var swiftUIColor: SwiftUI.Color {\n        SwiftUI.Color(nsColor: nsColor)\n    }\n}\n#endif\n\n#if canImport(AppKit)\nimport AppKit\npublic extension StorableColor {\n    var nsColor: NSColor {\n        NSColor(\n            calibratedRed: CGFloat(red),\n            green: CGFloat(green),\n            blue: CGFloat(blue),\n            alpha: CGFloat(alpha)\n        )\n    }\n}\n#endif\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/StorableFont.swift",
    "content": "import AppKit\nimport Foundation\n\npublic struct StorableFont: Codable, Equatable {\n    public var nsFont: NSFont\n\n    public init(nsFont: NSFont) {\n        self.nsFont = nsFont\n    }\n\n    public enum CodingKeys: String, CodingKey {\n        case nsFont\n    }\n\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        let fontData = try container.decode(Data.self, forKey: .nsFont)\n        guard let nsFont = try NSKeyedUnarchiver.unarchivedObject(\n            ofClass: NSFont.self,\n            from: fontData\n        ) else {\n            throw DecodingError.dataCorruptedError(\n                forKey: .nsFont,\n                in: container,\n                debugDescription: \"Failed to decode NSFont\"\n            )\n        }\n        self.nsFont = nsFont\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        let fontData = try NSKeyedArchiver.archivedData(\n            withRootObject: nsFont,\n            requiringSecureCoding: false\n        )\n        try container.encode(fontData, forKey: .nsFont)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/SuggestionFeatureProvider.swift",
    "content": "import Foundation\n\npublic enum BuiltInSuggestionFeatureProvider: Int, CaseIterable, Codable {\n    case gitHubCopilot\n    case codeium\n}\n\npublic enum SuggestionFeatureProvider: RawRepresentable, Hashable {\n    case builtIn(BuiltInSuggestionFeatureProvider)\n    case `extension`(name: String, bundleIdentifier: String)\n\n    enum Storage: Codable {\n        case builtIn(BuiltInSuggestionFeatureProvider)\n        case `extension`(name: String, bundleIdentifier: String)\n    }\n\n    public init?(rawValue: String) {\n        guard let data = rawValue.data(using: .utf8),\n              let value = try? JSONDecoder().decode(Storage.self, from: data)\n        else { return nil }\n\n        switch value {\n        case let .builtIn(provider):\n            self = .builtIn(provider)\n        case let .extension(name, bundleIdentifier):\n            self = .extension(name: name, bundleIdentifier: bundleIdentifier)\n        }\n    }\n\n    public var rawValue: String {\n        let storage: Storage = switch self {\n        case let .builtIn(provider): .builtIn(provider)\n        case let .extension(name, bundleIdentifier):\n            .extension(name: name, bundleIdentifier: bundleIdentifier)\n        }\n        if let data = try? JSONEncoder().encode(storage) {\n            return String(data: data, encoding: .utf8) ?? \"\"\n        }\n        return \"\"\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/SuggestionWidgetPositionMode.swift",
    "content": "public enum SuggestionWidgetPositionMode: Int, CaseIterable {\n    case fixedToBottom = 0\n    case alignToTextCursor = 1\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/Types/WidgetColorScheme.swift",
    "content": "public enum WidgetColorScheme: Int, CaseIterable {\n    case system = 0\n    case light = 1\n    case dark = 2\n}\n"
  },
  {
    "path": "Tool/Sources/Preferences/UserDefaults.swift",
    "content": "import AIModel\nimport AppKit\nimport Configs\nimport Foundation\n\npublic protocol UserDefaultsType {\n    func value(forKey: String) -> Any?\n    func set(_ value: Any?, forKey: String)\n}\n\npublic extension UserDefaults {\n    static var shared = UserDefaults(suiteName: userDefaultSuiteName)!\n\n    static func setupDefaultSettings() {\n        shared.setupDefaultValue(for: \\.quitXPCServiceOnXcodeAndAppQuit)\n        shared.setupDefaultValue(for: \\.realtimeSuggestionToggle)\n        shared.setupDefaultValue(for: \\.realtimeSuggestionDebounce)\n        shared.setupDefaultValue(for: \\.automaticallyCheckForUpdate)\n        shared.setupDefaultValue(for: \\.suggestionPresentationMode)\n        shared.setupDefaultValue(for: \\.widgetColorScheme)\n        shared.setupDefaultValue(for: \\.customCommands)\n        shared.setupDefaultValue(for: \\.runNodeWith, defaultValue: .env)\n        shared.setupDefaultValue(for: \\.chatModels)\n        shared.setupDefaultValue(for: \\.embeddingModels)\n        shared.setupDefaultValue(\n            for: \\.suggestionFeatureProvider,\n            defaultValue: .builtIn(shared.deprecatedValue(for: \\.oldSuggestionFeatureProvider))\n        )\n        shared.setupDefaultValue(\n            for: \\.promptToCodeCodeFontSize,\n            defaultValue: shared.value(for: \\.suggestionCodeFontSize)\n        )\n        shared.setupDefaultValue(\n            for: \\.suggestionCodeFont,\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(\n                ofSize: shared.value(for: \\.suggestionCodeFontSize),\n                weight: .regular\n            )))\n        )\n        shared.setupDefaultValue(\n            for: \\.promptToCodeCodeFont,\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(\n                ofSize: shared.value(for: \\.promptToCodeCodeFontSize),\n                weight: .regular\n            )))\n        )\n        shared.setupDefaultValue(\n            for: \\.chatCodeFont,\n            defaultValue: .init(.init(nsFont: .monospacedSystemFont(\n                ofSize: shared.value(for: \\.chatCodeFontSize),\n                weight: .regular\n            )))\n        )\n        shared.setupDefaultValue(\n            for: \\.openChatMode,\n            defaultValue: {\n                switch shared.deprecatedValue(for: \\.legacyOpenChatMode) {\n                case .chatPanel: return .init(.chatPanel)\n                case .browser: return .init(.browser)\n                case .codeiumChat:\n                    return .init(.builtinExtension(\n                        extensionIdentifier: \"com.codeium\",\n                        id: \"Codeium Chat\",\n                        tabName: \"Codeium Chat\"\n                    ))\n                }\n            }()\n        )\n    }\n}\n\nextension UserDefaults: UserDefaultsType {}\n\npublic protocol UserDefaultsStorable {}\n\nextension Int: UserDefaultsStorable {}\nextension Double: UserDefaultsStorable {}\nextension Bool: UserDefaultsStorable {}\nextension String: UserDefaultsStorable {}\nextension Data: UserDefaultsStorable {}\nextension URL: UserDefaultsStorable {}\n\nextension Array: @retroactive RawRepresentable where Element: Codable {\n    public init?(rawValue: String) {\n        guard let data = rawValue.data(using: .utf8),\n              let result = try? JSONDecoder().decode([Element].self, from: data)\n        else {\n            return nil\n        }\n        self = result\n    }\n\n    public var rawValue: String {\n        guard let data = try? JSONEncoder().encode(self),\n              let result = String(data: data, encoding: .utf8)\n        else {\n            return \"[]\"\n        }\n        return result\n    }\n}\n\npublic struct UserDefaultsStorageBox<Element: Codable>: RawRepresentable {\n    public let value: Element\n\n    public init(_ value: Element) {\n        self.value = value\n    }\n\n    public init?(rawValue: String) {\n        guard let data = rawValue.data(using: .utf8),\n              let result = try? JSONDecoder().decode(Element.self, from: data)\n        else {\n            return nil\n        }\n        value = result\n    }\n\n    public var rawValue: String {\n        guard let data = try? JSONEncoder().encode(value),\n              let result = String(data: data, encoding: .utf8)\n        else {\n            return \"\"\n        }\n        return result\n    }\n}\n\nextension UserDefaultsStorageBox: Equatable where Element: Equatable {}\n\npublic extension UserDefaultsType {\n    // MARK: Normal Types\n\n    func value<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) -> K.Value where K.Value: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        return (value(forKey: key.key) as? K.Value) ?? key.defaultValue\n    }\n\n    func set<K: UserDefaultPreferenceKey>(\n        _ value: K.Value,\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        set(value, forKey: key.key)\n    }\n\n    func setupDefaultValue<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        if value(forKey: key.key) == nil {\n            set(key.defaultValue, forKey: key.key)\n        }\n    }\n\n    func setupDefaultValue<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>,\n        defaultValue: K.Value\n    ) where K.Value: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        if value(forKey: key.key) == nil {\n            set(defaultValue, forKey: key.key)\n        }\n    }\n\n    // MARK: Raw Representable\n\n    func value<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) -> K.Value where K.Value: RawRepresentable, K.Value.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? String else {\n            return key.defaultValue\n        }\n        return K.Value(rawValue: rawValue) ?? key.defaultValue\n    }\n\n    func value<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) -> K.Value where K.Value: RawRepresentable, K.Value.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? Int else {\n            return key.defaultValue\n        }\n        return K.Value(rawValue: rawValue) ?? key.defaultValue\n    }\n\n    func value<K: UserDefaultPreferenceKey, V>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) -> V where K.Value == UserDefaultsStorageBox<V> {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? String else {\n            return key.defaultValue.value\n        }\n        return (K.Value(rawValue: rawValue) ?? key.defaultValue).value\n    }\n\n    func set<K: UserDefaultPreferenceKey>(\n        _ value: K.Value,\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value: RawRepresentable, K.Value.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        set(value.rawValue, forKey: key.key)\n    }\n\n    func set<K: UserDefaultPreferenceKey>(\n        _ value: K.Value,\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value: RawRepresentable, K.Value.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        set(value.rawValue, forKey: key.key)\n    }\n\n    func set<K: UserDefaultPreferenceKey, V: Codable>(\n        _ value: V,\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>\n    ) where K.Value == UserDefaultsStorageBox<V> {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        set(UserDefaultsStorageBox(value).rawValue, forKey: key.key)\n    }\n\n    func setupDefaultValue<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>,\n        defaultValue: K.Value? = nil\n    ) where K.Value: RawRepresentable, K.Value.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        if value(forKey: key.key) == nil {\n            set(defaultValue?.rawValue ?? key.defaultValue.rawValue, forKey: key.key)\n        }\n    }\n\n    func setupDefaultValue<K: UserDefaultPreferenceKey>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, K>,\n        defaultValue: K.Value? = nil\n    ) where K.Value: RawRepresentable, K.Value.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        if value(forKey: key.key) == nil {\n            set(defaultValue?.rawValue ?? key.defaultValue.rawValue, forKey: key.key)\n        }\n    }\n}\n\n// MARK: - Deprecated Key Accessor\n\npublic extension UserDefaultsType {\n    // MARK: Normal Types\n\n    func deprecatedValue<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        return (value(forKey: key.key) as? K) ?? key.defaultValue\n    }\n\n    // MARK: Raw Representable\n\n    func deprecatedValue<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: RawRepresentable, K.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? String else {\n            return key.defaultValue\n        }\n        return K(rawValue: rawValue) ?? key.defaultValue\n    }\n\n    func deprecatedValue<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: RawRepresentable, K.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? Int else {\n            return key.defaultValue\n        }\n        return K(rawValue: rawValue) ?? key.defaultValue\n    }\n}\n\npublic extension UserDefaultsType {\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    func value<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: UserDefaultsStorable {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        return (value(forKey: key.key) as? K) ?? key.defaultValue\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    func value<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: RawRepresentable, K.RawValue == String {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? String else {\n            return key.defaultValue\n        }\n        return K(rawValue: rawValue) ?? key.defaultValue\n    }\n\n    @available(*, deprecated, message: \"This preference key is deprecated.\")\n    func value<K>(\n        for keyPath: KeyPath<UserDefaultPreferenceKeys, DeprecatedPreferenceKey<K>>\n    ) -> K where K: RawRepresentable, K.RawValue == Int {\n        let key = UserDefaultPreferenceKeys()[keyPath: keyPath]\n        guard let rawValue = value(forKey: key.key) as? Int else {\n            return key.defaultValue\n        }\n        return K(rawValue: rawValue) ?? key.defaultValue\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/PromptToCodeCustomization/PromptToCodeCustomization.swift",
    "content": "import ChatBasic\nimport ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport ModificationBasic\nimport SuggestionBasic\nimport SwiftUI\n\npublic enum PromptToCodeCustomization {\n    public static var CustomizedUI: any PromptToCodeCustomizedUI = NoPromptToCodeCustomizedUI()\n    public static var contextInputControllerFactory: (\n        Shared<ModificationState>\n    ) -> PromptToCodeContextInputController = { _ in\n        DefaultPromptToCodeContextInputController()\n    }\n}\n\npublic struct PromptToCodeCustomizationContextWrapper<Content: View>: View {\n    @State var context: AnyObject\n    let content: (AnyObject) -> Content\n\n    public init<O: AnyObject>(context: O, @ViewBuilder content: @escaping (O) -> Content) {\n        self.context = context\n        self.content = { context in\n            content(context as! O)\n        }\n    }\n\n    public var body: some View {\n        content(context)\n    }\n}\n\npublic protocol PromptToCodeCustomizedUI {\n    typealias PromptToCodeCustomizedViews = (\n        extraMenuItems: AnyView?,\n        extraButtons: AnyView?,\n        extraAcceptButtonVariants: AnyView?,\n        contextInputField: AnyView?\n    )\n\n    func callAsFunction<V: View>(\n        state: Shared<ModificationState>,\n        delegate: PromptToCodeContextInputControllerDelegate,\n        contextInputController: PromptToCodeContextInputController,\n        isInputFieldFocused: FocusState<Bool>,\n        @ViewBuilder view: @escaping (PromptToCodeCustomizedViews) -> V\n    ) -> PromptToCodeCustomizationContextWrapper<V>\n}\n\npublic protocol PromptToCodeContextInputControllerDelegate {\n    func modifyCodeButtonClicked()\n}\n\npublic protocol PromptToCodeContextInputController: Perception.Perceptible {\n    var instruction: NSAttributedString { get set }\n\n    func resolveContext(\n        forDocumentURL: URL,\n        onStatusChange: @escaping ([String]) async -> Void\n    ) async -> (\n        instruction: String,\n        references: [ChatMessage.Reference],\n        topics: [ChatMessage.Reference],\n        agent: (() -> any ModificationAgent)?\n    )\n}\n\nstruct NoPromptToCodeCustomizedUI: PromptToCodeCustomizedUI {\n    private class Context {}\n\n    func callAsFunction<V: View>(\n        state: Shared<ModificationState>,\n        delegate: PromptToCodeContextInputControllerDelegate,\n        contextInputController: PromptToCodeContextInputController,\n        isInputFieldFocused: FocusState<Bool>,\n        @ViewBuilder view: @escaping (PromptToCodeCustomizedViews) -> V\n    ) -> PromptToCodeCustomizationContextWrapper<V> {\n        PromptToCodeCustomizationContextWrapper(context: Context()) { _ in\n            view((\n                extraMenuItems: nil,\n                extraButtons: nil,\n                extraAcceptButtonVariants: nil,\n                contextInputField: nil\n            ))\n        }\n    }\n}\n\n@Perceptible\npublic final class DefaultPromptToCodeContextInputController: PromptToCodeContextInputController {\n    public var instruction: NSAttributedString = .init()\n    public var instructionString: String {\n        get { instruction.string }\n        set { instruction = .init(string: newValue) }\n    }\n\n    public func appendNewLineToPromptButtonTapped() {\n        let mutable = NSMutableAttributedString(\n            attributedString: instruction\n        )\n        mutable.append(NSAttributedString(string: \"\\n\"))\n        instruction = mutable\n    }\n\n    public func resolveContext(\n        forDocumentURL: URL,\n        onStatusChange: @escaping ([String]) async -> Void\n    ) -> (\n        instruction: String,\n        references: [ChatMessage.Reference],\n        topics: [ChatMessage.Reference],\n        agent: (() -> any ModificationAgent)?\n    ) {\n        return (\n            instruction: instructionString,\n            references: [],\n            topics: [],\n            agent: nil\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/RAGChatAgent/RAGChatAgent.swift",
    "content": "import AIModel\nimport ChatBasic\nimport Foundation\nimport OpenAIService\n\npublic class RAGChatAgent: ChatAgent {\n    public let configuration: RAGChatAgentConfiguration\n\n    public init(configuration: RAGChatAgentConfiguration) {\n        self.configuration = configuration\n    }\n\n    public func send(_ request: Request) async -> AsyncThrowingStream<Response, any Error> {\n        let stream = AsyncThrowingStream<Response, any Error> { continuation in\n            let task = Task(priority: .userInitiated) {\n                do {\n                    let service = try await createService(for: request)\n                    let response = try await service.send(content: request.text, summary: nil)\n                    for try await item in response {\n                        if Task.isCancelled {\n                            continuation.finish()\n                            return\n                        }\n                        continuation.yield(.contentToken(item))\n                    }\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n\n            continuation.onTermination = { _ in\n                task.cancel()\n            }\n        }\n\n        return stream\n    }\n}\n\nextension RAGChatAgent {\n    func createService(for request: Request) async throws -> LegacyChatGPTServiceType {\n        guard let chatGPTConfiguration = configuration.chatGPTConfiguration\n        else { throw CancellationError() }\n        let functionProvider = ChatFunctionProvider()\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: configuration.modelConfiguration.systemPrompt,\n            configuration: chatGPTConfiguration,\n            functionProvider: functionProvider\n        )\n        \n        await memory.mutateHistory { messages in\n            for history in request.history {\n                messages.append(history)\n            }\n        }\n\n        return LegacyChatGPTService(\n            memory: memory,\n            configuration: chatGPTConfiguration,\n            functionProvider: functionProvider\n        )\n    }\n\n    var allCapabilities: [String: any RAGChatAgentCapability] {\n        RAGChatAgentCapabilityContainer.capabilities\n    }\n\n    func capability(for identifier: String) -> (any RAGChatAgentCapability)? {\n        allCapabilities[identifier]\n    }\n}\n\nfinal class ChatFunctionProvider: ChatGPTFunctionProvider {\n    var functions: [any ChatGPTFunction] = []\n\n    init() {}\n\n    func removeAll() {\n        functions = []\n    }\n\n    func append(functions others: [any ChatGPTFunction]) {\n        functions.append(contentsOf: others)\n    }\n\n    var functionCallStrategy: OpenAIService.FunctionCallStrategy? {\n        nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/RAGChatAgent/RAGChatAgentCapability.swift",
    "content": "import ChatBasic\nimport Foundation\n\n/// A singleton that stores all the possible capabilities of an ``RAGChatAgent``.\npublic enum RAGChatAgentCapabilityContainer {\n    static var capabilities: [String: any RAGChatAgentCapability] = [:]\n    static func add(_ capability: any RAGChatAgentCapability) {\n        capabilities[capability.id] = capability\n    }\n\n    static func add(_ capabilities: [any RAGChatAgentCapability]) {\n        capabilities.forEach { add($0) }\n    }\n}\n\n/// A protocol that defines the capability of an ``RAGChatAgent``.\nprotocol RAGChatAgentCapability: Identifiable {\n    typealias Request = ChatAgentRequest\n    typealias Reference = ChatAgentContext.Reference\n\n    /// The name to be displayed to the user.\n    var name: String { get }\n    /// The identifier of the capability.\n    var id: String { get }\n    /// Fetch the context for a given request. It can return a portion of the context at a time.\n    func fetchContext(for request: ChatAgentRequest) async -> AsyncStream<ChatAgentContext>\n}\n\npublic struct ChatAgentContext {\n    public typealias Reference = ChatMessage.Reference\n\n    /// Extra system prompt to be included in the chat request.\n    public var extraSystemPrompt: String?\n    /// References to be included in the chat request.\n    public var references: [Reference]\n    /// Functions to be included in the chat request.\n    public var functions: [any ChatGPTFunction]\n\n    public init(\n        extraSystemPrompt: String? = nil,\n        references: [ChatMessage.Reference] = [],\n        functions: [any ChatGPTFunction] = []\n    ) {\n        self.extraSystemPrompt = extraSystemPrompt\n        self.references = references\n        self.functions = functions\n    }\n}\n\n// MARK: - Default Implementation\n\nextension RAGChatAgentCapability {\n    func fetchContext(for request: ChatAgentRequest) async -> AsyncStream<ChatAgentContext> {\n        return AsyncStream { continuation in\n            continuation.finish()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/RAGChatAgent/RAGChatAgentConfiguration.swift",
    "content": "import AIModel\nimport ChatBasic\nimport CodableWrappers\nimport Foundation\nimport OpenAIService\nimport Preferences\nimport Keychain\n\npublic struct RAGChatAgentConfiguration: Codable {\n    public struct ModelConfiguration: Codable {\n        public var maxTokens: Int\n        public var minimumReplyTokens: Int\n        public var temperature: Double\n        public var systemPrompt: String\n\n        public init(\n            maxTokens: Int,\n            minimumReplyTokens: Int,\n            temperature: Double,\n            systemPrompt: String\n        ) {\n            self.maxTokens = maxTokens\n            self.minimumReplyTokens = minimumReplyTokens\n            self.temperature = temperature\n            self.systemPrompt = systemPrompt\n        }\n    }\n\n    public struct ConversationConfiguration: Codable {\n        public var maxTurns: Int\n        public var isConversationIsolated: Bool\n        public var respondInLanguage: String\n\n        public init(maxTurns: Int, isConversationIsolated: Bool, respondInLanguage: String) {\n            self.maxTurns = maxTurns\n            self.isConversationIsolated = isConversationIsolated\n            self.respondInLanguage = respondInLanguage\n        }\n    }\n\n    public enum ServiceProvider: Codable {\n        case chatModel(id: String)\n        case extensionService(id: String)\n    }\n\n    public var id: String\n    public var name: String\n    public var serviceProvider: ServiceProvider\n    @FallbackDecoding<EmptySet>\n    public var capabilityIds: Set<String>\n\n    public var modelConfiguration: ModelConfiguration\n    public var conversationConfiguration: ConversationConfiguration\n    var _otherConfigurations: Data\n\n    public init<OtherConfiguration: Codable>(\n        id: String,\n        name: String,\n        serviceProvider: ServiceProvider,\n        capabilityIds: Set<String>,\n        modelConfiguration: ModelConfiguration,\n        conversationConfiguration: ConversationConfiguration,\n        otherConfigurations: OtherConfiguration\n    ) throws {\n        self.id = id\n        self.name = name\n        self.serviceProvider = serviceProvider\n        self.capabilityIds = capabilityIds\n        self.modelConfiguration = modelConfiguration\n        self.conversationConfiguration = conversationConfiguration\n        _otherConfigurations = try JSONEncoder().encode(otherConfigurations)\n    }\n\n    public func otherConfigurations<Configuration: Codable>(\n        as: Configuration.Type = Configuration.self\n    ) throws -> Configuration {\n        try JSONDecoder().decode(Configuration.self, from: _otherConfigurations)\n    }\n\n    public mutating func setOtherConfigurations<Configuration: Codable>(\n        _ otherConfigurations: Configuration\n    ) throws {\n        _otherConfigurations = try JSONEncoder().encode(otherConfigurations)\n    }\n\n    var chatGPTConfiguration: ChatGPTConfiguration? {\n        guard case let .chatModel(id) = serviceProvider else { return nil }\n        return .init(\n            model: {\n                let models = UserDefaults.shared.value(for: \\.chatModels)\n                let id = UserDefaults.shared.value(for: \\.defaultChatFeatureChatModelId)\n                return models.first { $0.id == id }\n                    ?? models.first\n            }(),\n            temperature: modelConfiguration.temperature,\n            stop: [],\n            maxTokens: modelConfiguration.maxTokens,\n            minimumReplyTokens: modelConfiguration.minimumReplyTokens,\n            runFunctionsAutomatically: false,\n            shouldEndTextWindow: { _ in false }\n        )\n    }\n\n    struct ChatGPTConfiguration: OpenAIService.ChatGPTConfiguration {\n        var model: ChatModel?\n        var temperature: Double\n        var stop: [String]\n        var maxTokens: Int\n        var minimumReplyTokens: Int\n        var runFunctionsAutomatically: Bool\n        var shouldEndTextWindow: (String) -> Bool\n        \n        var apiKey: String {\n            guard let name = model?.info.apiKeyName else { return \"\" }\n            return (try? Keychain.apiKey.get(name)) ?? \"\"\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/AsyncCodeBlock.swift",
    "content": "import CodeDiff\nimport DebounceFunction\nimport Foundation\nimport Perception\nimport SwiftUI\n\npublic struct AsyncCodeBlock: View {\n    @State var storage = Storage()\n    @Environment(\\.colorScheme) var colorScheme\n\n    /// If original code is provided, diff will be generated.\n    let originalCode: String?\n    /// The code to present.\n    let code: String\n    /// The language of the code.\n    let language: String\n    /// The index of the first line.\n    let startLineIndex: Int\n    /// The scenario of the code block.\n    let scenario: String\n    /// The font of the code block.\n    let font: NSFont\n    /// The default foreground color of the code block.\n    let proposedForegroundColor: Color?\n    /// The ranges to dim in the code.\n    let dimmedCharacterCount: DimmedCharacterCount\n    /// Whether to drop common leading spaces of each line.\n    let droppingLeadingSpaces: Bool\n    /// Whether to ignore whole line change in diff.\n    let ignoreWholeLineChangeInDiff: Bool\n\n    public init(\n        code: String,\n        originalCode: String? = nil,\n        language: String,\n        startLineIndex: Int,\n        scenario: String,\n        font: NSFont,\n        droppingLeadingSpaces: Bool,\n        proposedForegroundColor: Color?,\n        dimmedCharacterCount: DimmedCharacterCount = .init(prefix: 0, suffix: 0),\n        ignoreWholeLineChangeInDiff: Bool = true\n    ) {\n        self.code = code\n        self.originalCode = originalCode\n        self.startLineIndex = startLineIndex\n        self.language = language\n        self.scenario = scenario\n        self.font = font\n        self.proposedForegroundColor = proposedForegroundColor\n        self.dimmedCharacterCount = dimmedCharacterCount\n        self.droppingLeadingSpaces = droppingLeadingSpaces\n        self.ignoreWholeLineChangeInDiff = ignoreWholeLineChangeInDiff\n    }\n\n    var foregroundColor: Color {\n        proposedForegroundColor ?? (colorScheme == .dark ? .white : .black)\n    }\n\n    public var body: some View {\n        WithPerceptionTracking {\n            let commonPrecedingSpaceCount = storage.highlightStorage.commonPrecedingSpaceCount\n            VStack(spacing: 2) {\n                ForEach(Array(storage.highlightedContent.enumerated()), id: \\.0) { item in\n                    let (index, attributedString) = item\n                    HStack(alignment: .firstTextBaseline, spacing: 4) {\n                        Text(\"\\(index + startLineIndex + 1)\")\n                            .multilineTextAlignment(.trailing)\n                            .foregroundColor(foregroundColor.opacity(0.5))\n                            .frame(minWidth: 40)\n                        Text(AttributedString(attributedString))\n                            .foregroundColor(foregroundColor.opacity(0.3))\n                            .frame(maxWidth: .infinity, alignment: .leading)\n                            .multilineTextAlignment(.leading)\n                            .lineSpacing(4)\n                            .overlay(alignment: .topLeading) {\n                                if index == 0, commonPrecedingSpaceCount > 0 {\n                                    Text(\"\\(commonPrecedingSpaceCount + 1)\")\n                                        .padding(.top, -12)\n                                        .font(.footnote)\n                                        .foregroundStyle(foregroundColor)\n                                        .opacity(0.3)\n                                }\n                            }\n                    }\n                }\n            }\n            .foregroundColor(.white)\n            .font(.init(font))\n            .padding(.leading, 4)\n            .padding(.trailing)\n            .padding(.top, commonPrecedingSpaceCount > 0 ? 16 : 4)\n            .padding(.bottom, 4)\n            .onAppear {\n                storage.dimmedCharacterCount = dimmedCharacterCount\n                storage.ignoreWholeLineChangeInDiff = ignoreWholeLineChangeInDiff\n                storage.highlightStorage.highlight(debounce: false, for: self)\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: code) { code in\n                storage.code = code\n                storage.highlightStorage.highlight(debounce: true, for: self)\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: originalCode) { originalCode in\n                storage.originalCode = originalCode\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: colorScheme) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: droppingLeadingSpaces) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: scenario) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: language) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: proposedForegroundColor) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: dimmedCharacterCount) { value in\n                storage.dimmedCharacterCount = value\n            }\n            .onChange(of: ignoreWholeLineChangeInDiff) { value in\n                storage.ignoreWholeLineChangeInDiff = value\n            }\n        }\n    }\n}\n\n// MARK: - Storage\n\nextension AsyncCodeBlock {\n    nonisolated static let queue = DispatchQueue(\n        label: \"code-block-highlight\",\n        qos: .userInteractive,\n        attributes: .concurrent\n    )\n\n    public struct DimmedCharacterCount: Equatable {\n        public var prefix: Int\n        public var suffix: Int\n        public init(prefix: Int, suffix: Int) {\n            self.prefix = prefix\n            self.suffix = suffix\n        }\n    }\n\n    @Perceptible\n    class Storage {\n        var dimmedCharacterCount: DimmedCharacterCount = .init(prefix: 0, suffix: 0)\n        let diffStorage = DiffStorage()\n        let highlightStorage = HighlightStorage()\n        var ignoreWholeLineChangeInDiff: Bool = true\n\n        var code: String? {\n            get { highlightStorage.code }\n            set {\n                highlightStorage.code = newValue\n                diffStorage.code = newValue\n            }\n        }\n\n        var originalCode: String? {\n            get { diffStorage.originalCode }\n            set { diffStorage.originalCode = newValue }\n        }\n\n        var highlightedContent: [NSAttributedString] {\n            let commonPrecedingSpaceCount = highlightStorage.commonPrecedingSpaceCount\n            let highlightedCode = highlightStorage.highlightedCode\n                .map(NSMutableAttributedString.init(attributedString:))\n\n            Self.dim(\n                highlightedCode,\n                commonPrecedingSpaceCount: commonPrecedingSpaceCount,\n                dimmedCharacterCount: dimmedCharacterCount\n            )\n\n            if let diffResult = diffStorage.diffResult {\n                Self.presentDiff(\n                    highlightedCode,\n                    commonPrecedingSpaceCount: commonPrecedingSpaceCount,\n                    ignoreWholeLineChange: ignoreWholeLineChangeInDiff,\n                    diffResult: diffResult\n                )\n            }\n\n            return highlightedCode\n        }\n\n        static func dim(\n            _ highlightedCode: [NSMutableAttributedString],\n            commonPrecedingSpaceCount: Int,\n            dimmedCharacterCount: DimmedCharacterCount\n        ) {\n            func dim(\n                _ line: NSMutableAttributedString,\n                in targetRange: Range<String.Index>,\n                opacity: Double\n            ) {\n                let targetRange = NSRange(targetRange, in: line.string)\n                line.enumerateAttribute(\n                    .foregroundColor,\n                    in: NSRange(location: 0, length: line.length)\n                ) { value, range, _ in\n                    guard let color = value as? NSColor else { return }\n                    let opacity = max(0.1, color.alphaComponent * opacity)\n                    let intersection = NSIntersectionRange(targetRange, range)\n                    guard !(intersection.length == 0) else { return }\n                    let rangeA = intersection\n                    line.addAttribute(\n                        .foregroundColor,\n                        value: color.withAlphaComponent(opacity),\n                        range: rangeA\n                    )\n\n                    let rangeB = NSRange(\n                        location: intersection.upperBound,\n                        length: range.upperBound - intersection.upperBound\n                    )\n                    line.addAttribute(\n                        .foregroundColor,\n                        value: color,\n                        range: rangeB\n                    )\n                }\n            }\n\n            if dimmedCharacterCount.prefix > commonPrecedingSpaceCount,\n               let firstLine = highlightedCode.first\n            {\n                let dimmedCount = dimmedCharacterCount.prefix - commonPrecedingSpaceCount\n                let startIndex = firstLine.string.startIndex\n                let endIndex = firstLine.string.utf16.index(\n                    startIndex,\n                    offsetBy: min(firstLine.length, max(0, dimmedCount)),\n                    limitedBy: firstLine.string.endIndex\n                ) ?? firstLine.string.endIndex\n                if endIndex > startIndex {\n                    dim(firstLine, in: startIndex..<endIndex, opacity: 0.4)\n                }\n            }\n\n            if let lastLine = highlightedCode.last {\n                let endIndex = lastLine.string.endIndex\n                let startIndex = lastLine.string.utf16.index(\n                    endIndex,\n                    offsetBy: -dimmedCharacterCount.suffix,\n                    limitedBy: lastLine.string.startIndex\n                ) ?? lastLine.string.endIndex\n                if startIndex < endIndex {\n                    dim(lastLine, in: startIndex..<endIndex, opacity: 0.2)\n                }\n            }\n        }\n\n        static func presentDiff(\n            _ highlightedCode: [NSMutableAttributedString],\n            commonPrecedingSpaceCount: Int,\n            ignoreWholeLineChange: Bool,\n            diffResult: CodeDiff.SnippetDiff\n        ) {\n            let originalCodeIsSingleLine = diffResult.sections.count == 1\n                && diffResult.sections[0].oldSnippet.count <= 1\n            if !originalCodeIsSingleLine {\n                for (index, mutableString) in highlightedCode.enumerated() {\n                    guard let line = diffResult.line(at: index, in: \\.newSnippet),\n                          case let .mutated(changes) = line.diff, !changes.isEmpty\n                    else { continue }\n\n                    for change in changes {\n                        if change.offset == 0,\n                           change.element.count - commonPrecedingSpaceCount\n                           == mutableString.string.count\n                        {\n                            if ignoreWholeLineChange {\n                                continue\n                            }\n                        }\n\n                        let offset = change.offset - commonPrecedingSpaceCount\n                        let range = NSRange(\n                            location: max(0, offset),\n                            length: max(0, change.element.count + (offset < 0 ? offset : 0))\n                        )\n                        if range.location + range.length > mutableString.length {\n                            continue\n                        }\n                        mutableString.addAttributes([\n                            .backgroundColor: NSColor.systemGreen.withAlphaComponent(0.2),\n                        ], range: range)\n                    }\n                }\n            } else if let firstMutableString = highlightedCode.first,\n                      let oldLine = diffResult.line(at: 0, in: \\.oldSnippet),\n                      oldLine.text.count > commonPrecedingSpaceCount\n            {\n                // Only highlight the diffs inside the dimmed area\n                let scopeRange = NSRange(\n                    location: 0,\n                    length: min(\n                        oldLine.text.count - commonPrecedingSpaceCount,\n                        firstMutableString.length\n                    )\n                )\n                if let line = diffResult.line(at: 0, in: \\.newSnippet),\n                   case let .mutated(changes) = line.diff, !changes.isEmpty\n                {\n                    for change in changes {\n                        let offset = change.offset - commonPrecedingSpaceCount\n                        let range = NSRange(\n                            location: max(0, offset),\n                            length: max(0, change.element.count + (offset < 0 ? offset : 0))\n                        )\n                        guard let limitedRange = limitRange(range, inside: scopeRange)\n                        else { continue }\n                        firstMutableString.addAttributes([\n                            .backgroundColor: NSColor.systemGreen.withAlphaComponent(0.2),\n                        ], range: limitedRange)\n                    }\n                }\n            }\n\n            let lastLineIndex = highlightedCode.endIndex - 1\n            if lastLineIndex >= 0 {\n                if let line = diffResult.line(at: lastLineIndex, in: \\.oldSnippet),\n                   case let .mutated(changes) = line.diff,\n                   changes.count == 1,\n                   let change = changes.last,\n                   change.offset + change.element.count == line.text.count\n                {\n                    let lastLine = highlightedCode[lastLineIndex]\n                    lastLine.append(.init(string: String(change.element), attributes: [\n                        .foregroundColor: NSColor.systemRed.withAlphaComponent(0.5),\n                        .backgroundColor: NSColor.systemRed.withAlphaComponent(0.2),\n                    ]))\n                }\n            }\n        }\n    }\n\n    @Perceptible\n    class DiffStorage {\n        private(set) var diffResult: CodeDiff.SnippetDiff?\n\n        @PerceptionIgnored var originalCode: String?\n        @PerceptionIgnored var code: String?\n        @PerceptionIgnored private var diffTask: Task<Void, Error>?\n\n        func diff(for view: AsyncCodeBlock) {\n            performDiff(for: view)\n        }\n\n        private func performDiff(for view: AsyncCodeBlock) {\n            diffTask?.cancel()\n            let code = code ?? view.code\n            guard let originalCode = originalCode ?? view.originalCode else {\n                diffResult = nil\n                return\n            }\n\n            diffTask = Task {\n                let result = await withUnsafeContinuation { continuation in\n                    AsyncCodeBlock.queue.async {\n                        let result = CodeDiff().diff(snippet: code, from: originalCode)\n                        continuation.resume(returning: result)\n                    }\n                }\n                try Task.checkCancellation()\n                await MainActor.run {\n                    diffResult = result\n                }\n            }\n        }\n    }\n\n    @Perceptible\n    class HighlightStorage {\n        private(set) var highlightedCode = [NSAttributedString]()\n        private(set) var commonPrecedingSpaceCount = 0\n\n        @PerceptionIgnored var code: String?\n        @PerceptionIgnored private var foregroundColor: Color = .primary\n        @PerceptionIgnored private var debounceFunction: DebounceFunction<AsyncCodeBlock>?\n        @PerceptionIgnored private var highlightTask: Task<Void, Error>?\n\n        init() {\n            debounceFunction = .init(duration: 0.1, block: { view in\n                self.highlight(for: view)\n            })\n        }\n\n        func highlight(debounce: Bool, for view: AsyncCodeBlock) {\n            if debounce {\n                Task { @MainActor in await debounceFunction?(view) }\n            } else {\n                highlight(for: view)\n            }\n        }\n\n        private func highlight(for view: AsyncCodeBlock) {\n            highlightTask?.cancel()\n            let code = self.code ?? view.code\n            let language = view.language\n            let scenario = view.scenario\n            let brightMode = view.colorScheme != .dark\n            let droppingLeadingSpaces = view.droppingLeadingSpaces\n            let font = CodeHighlighting.SendableFont(font: view.font)\n            foregroundColor = view.foregroundColor\n\n            if highlightedCode.isEmpty {\n                let content = CodeHighlighting.convertToCodeLines(\n                    .init(string: code),\n                    middleDotColor: brightMode\n                        ? NSColor.black.withAlphaComponent(0.1)\n                        : NSColor.white.withAlphaComponent(0.1),\n                    droppingLeadingSpaces: droppingLeadingSpaces,\n                    replaceSpacesWithMiddleDots: true\n                )\n                highlightedCode = content.code\n                commonPrecedingSpaceCount = content.commonLeadingSpaceCount\n            }\n\n            highlightTask = Task {\n                let result = await withUnsafeContinuation { continuation in\n                    AsyncCodeBlock.queue.async {\n                        let content = CodeHighlighting.highlighted(\n                            code: code,\n                            language: language,\n                            scenario: scenario,\n                            brightMode: brightMode,\n                            droppingLeadingSpaces: droppingLeadingSpaces,\n                            font: font\n                        )\n                        continuation.resume(returning: content)\n                    }\n                }\n                try Task.checkCancellation()\n                await MainActor.run {\n                    self.highlightedCode = result.0\n                    self.commonPrecedingSpaceCount = result.1\n                }\n            }\n        }\n    }\n\n    static func limitRange(_ nsRange: NSRange, inside another: NSRange) -> NSRange? {\n        let intersection = NSIntersectionRange(nsRange, another)\n        guard intersection.length > 0 else { return nil }\n        return intersection\n    }\n}\n\n#Preview(\"Single Line Suggestion\") {\n    AsyncCodeBlock(\n        code: \"    let foo = Bar()\",\n        originalCode: \"    var foo // comment\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary,\n        dimmedCharacterCount: .init(prefix: 11, suffix: 0)\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Single Line Suggestion / Appending Suffix\") {\n    AsyncCodeBlock(\n        code: \"    let foo = Bar() // comment\",\n        originalCode: \"    var foo // comment\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary,\n        dimmedCharacterCount: .init(prefix: 11, suffix: 11)\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Multiple Line Suggestion\") {\n    AsyncCodeBlock(\n        code: \"    let foo = Bar()\\n    print(foo)\",\n        originalCode: \"    var foo // comment\\n    print(bar)\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary,\n        dimmedCharacterCount: .init(prefix: 11, suffix: 0)\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Multiple Line Suggestion Including Whole Line Change in Diff\") {\n    AsyncCodeBlock(\n        code: \"// comment\\n    let foo = Bar()\\n    print(bar)\\n    print(foo)\",\n        originalCode: \"    let foo = Bar()\\n\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary,\n        dimmedCharacterCount: .init(prefix: 11, suffix: 0),\n        ignoreWholeLineChangeInDiff: false\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Updating Content\") {\n    struct UpdateContent: View {\n        @State var index = 0\n        struct Case {\n            let code: String\n            let originalCode: String\n        }\n\n        let cases: [Case] = [\n            .init(code: \"foo(123)\\nprint(foo)\", originalCode: \"bar(234)\\nprint(bar)\"),\n            .init(code: \"bar(456)\", originalCode: \"baz(567)\"),\n        ]\n\n        var body: some View {\n            VStack {\n                Button(\"Update\") {\n                    index = (index + 1) % cases.count\n                }\n                AsyncCodeBlock(\n                    code: cases[index].code,\n                    originalCode: cases[index].originalCode,\n                    language: \"swift\",\n                    startLineIndex: 10,\n                    scenario: \"\",\n                    font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n                    droppingLeadingSpaces: true,\n                    proposedForegroundColor: .primary,\n                    dimmedCharacterCount: .init(prefix: 0, suffix: 0)\n                )\n            }\n        }\n    }\n\n    return UpdateContent()\n        .frame(width: 400, height: 200)\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/AsyncDiffCodeBlock.swift",
    "content": "import CodeDiff\nimport DebounceFunction\nimport Foundation\nimport Perception\nimport SwiftUI\n\npublic struct AsyncDiffCodeBlock: View {\n    @State var storage = Storage()\n    @Environment(\\.colorScheme) var colorScheme\n\n    /// If original code is provided, diff will be generated.\n    let originalCode: String?\n    /// The code to present.\n    let code: String\n    /// The language of the code.\n    let language: String\n    /// The index of the first line.\n    let startLineIndex: Int\n    /// The scenario of the code block.\n    let scenario: String\n    /// The font of the code block.\n    let font: NSFont\n    /// The default foreground color of the code block.\n    let proposedForegroundColor: Color?\n    /// Whether to drop common leading spaces of each line.\n    let droppingLeadingSpaces: Bool\n    /// Whether to render the last diff section that only contains removals.\n    let skipLastOnlyRemovalSection: Bool\n\n    public init(\n        code: String,\n        originalCode: String? = nil,\n        language: String,\n        startLineIndex: Int,\n        scenario: String,\n        font: NSFont,\n        droppingLeadingSpaces: Bool,\n        proposedForegroundColor: Color?,\n        ignoreWholeLineChangeInDiff: Bool = true,\n        skipLastOnlyRemovalSection: Bool = false\n    ) {\n        self.code = code\n        self.originalCode = originalCode\n        self.startLineIndex = startLineIndex\n        self.language = language\n        self.scenario = scenario\n        self.font = font\n        self.proposedForegroundColor = proposedForegroundColor\n        self.droppingLeadingSpaces = droppingLeadingSpaces\n        self.skipLastOnlyRemovalSection = skipLastOnlyRemovalSection\n    }\n\n    var foregroundColor: Color {\n        proposedForegroundColor ?? (colorScheme == .dark ? .white : .black)\n    }\n\n    public var body: some View {\n        WithPerceptionTracking {\n            let commonPrecedingSpaceCount = storage.highlightStorage.commonPrecedingSpaceCount\n            VStack(spacing: 0) {\n                lines\n            }\n            .foregroundColor(.white)\n            .font(.init(font))\n            .padding(.leading, 4)\n            .padding(.trailing)\n            .padding(.top, commonPrecedingSpaceCount > 0 ? 16 : 4)\n            .padding(.bottom, 4)\n            .onAppear {\n                storage.highlightStorage.highlight(debounce: false, for: self)\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: code) { code in\n                storage.code = code\n                storage.highlightStorage.highlight(debounce: true, for: self)\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: originalCode) { originalCode in\n                storage.originalCode = originalCode\n                storage.diffStorage.diff(for: self)\n            }\n            .onChange(of: colorScheme) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: droppingLeadingSpaces) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: scenario) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: language) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: proposedForegroundColor) { _ in\n                storage.highlightStorage.highlight(debounce: true, for: self)\n            }\n            .onChange(of: skipLastOnlyRemovalSection) { _ in\n                storage.skipLastOnlyRemovalSection = skipLastOnlyRemovalSection\n            }\n        }\n    }\n\n    @ViewBuilder\n    var lines: some View {\n        WithPerceptionTracking {\n            let commonPrecedingSpaceCount = storage.highlightStorage.commonPrecedingSpaceCount\n            ForEach(storage.highlightedContent) { line in\n                LineView(\n                    isFirstLine: line.id == storage.highlightedContent.first?.id,\n                    commonPrecedingSpaceCount: commonPrecedingSpaceCount,\n                    line: line,\n                    startLineIndex: startLineIndex,\n                    foregroundColor: foregroundColor\n                )\n            }\n        }\n    }\n\n    struct LineView: View {\n        let isFirstLine: Bool\n        let commonPrecedingSpaceCount: Int\n        let line: Storage.Line\n        let startLineIndex: Int\n        let foregroundColor: Color\n\n        var body: some View {\n            let attributedString = line.string\n            let lineIndex = line.index + startLineIndex + 1\n            HStack(alignment: .firstTextBaseline, spacing: 4) {\n                Text(\"\\(lineIndex)\")\n                    .multilineTextAlignment(.trailing)\n                    .foregroundColor(foregroundColor.opacity(0.5))\n                    .frame(minWidth: 40)\n                Text(AttributedString(attributedString))\n                    .foregroundColor(foregroundColor.opacity(0.3))\n                    .frame(maxWidth: .infinity, alignment: .leading)\n                    .multilineTextAlignment(.leading)\n                    .lineSpacing(4)\n                    .overlay(alignment: .topLeading) {\n                        if isFirstLine, commonPrecedingSpaceCount > 0 {\n                            Text(\"\\(commonPrecedingSpaceCount + 1)\")\n                                .padding(.top, -12)\n                                .font(.footnote)\n                                .foregroundStyle(foregroundColor)\n                                .opacity(0.3)\n                        }\n                    }\n            }\n            .padding(.vertical, 1)\n            .background(\n                line.kind == .added ? Color.green.opacity(0.2) : line\n                    .kind == .deleted ? Color.red.opacity(0.2) : nil\n            )\n        }\n    }\n}\n\n// MARK: - Storage\n\nextension AsyncDiffCodeBlock {\n    nonisolated static let queue = DispatchQueue(\n        label: \"code-block-highlight\",\n        qos: .userInteractive,\n        attributes: .concurrent\n    )\n\n    public struct DimmedCharacterCount: Equatable {\n        public var prefix: Int\n        public var suffix: Int\n        public init(prefix: Int, suffix: Int) {\n            self.prefix = prefix\n            self.suffix = suffix\n        }\n    }\n\n    @Perceptible\n    class Storage {\n        let diffStorage = DiffStorage()\n        let highlightStorage = HighlightStorage()\n        var skipLastOnlyRemovalSection: Bool = false\n\n        var code: String? {\n            get { highlightStorage.code }\n            set {\n                highlightStorage.code = newValue\n                diffStorage.code = newValue\n            }\n        }\n\n        var originalCode: String? {\n            get { diffStorage.originalCode }\n            set { diffStorage.originalCode = newValue }\n        }\n\n        struct Line: Identifiable {\n            enum Kind {\n                case added\n                case deleted\n                case unchanged\n            }\n\n            let index: Int\n            let kind: Kind\n            let string: NSAttributedString\n\n            var id: String { \"\\(index)-\\(kind)-\\(string.string)\" }\n        }\n\n        var highlightedContent: [Line] {\n            let commonPrecedingSpaceCount = highlightStorage.commonPrecedingSpaceCount\n            let highlightedCode = highlightStorage.highlightedCode\n            let highlightedOriginalCode = highlightStorage.highlightedOriginalCode\n\n            if let diffResult = diffStorage.diffResult {\n                return Self.presentDiff(\n                    new: highlightedCode,\n                    original: highlightedOriginalCode,\n                    commonPrecedingSpaceCount: commonPrecedingSpaceCount,\n                    skipLastOnlyRemovalSection: skipLastOnlyRemovalSection,\n                    diffResult: diffResult\n                )\n            }\n\n            return highlightedCode.enumerated().map {\n                Line(index: $0, kind: .unchanged, string: $1)\n            }\n        }\n\n        static func presentDiff(\n            new highlightedCode: [NSAttributedString],\n            original originalHighlightedCode: [NSAttributedString],\n            commonPrecedingSpaceCount: Int,\n            skipLastOnlyRemovalSection: Bool,\n            diffResult: CodeDiff.SnippetDiff\n        ) -> [Line] {\n            var lines = [Line]()\n\n            for (index, section) in diffResult.sections.enumerated() {\n                guard !section.isEmpty else { continue }\n\n                if skipLastOnlyRemovalSection,\n                   index == diffResult.sections.count - 1,\n                   section.newSnippet.isEmpty\n                {\n                    continue\n                }\n\n                for (index, line) in section.oldSnippet.enumerated() {\n                    if line.diff == .unchanged { continue }\n                    let lineIndex = section.oldOffset + index\n                    if lineIndex >= 0, lineIndex < originalHighlightedCode.count {\n                        let oldLine = originalHighlightedCode[lineIndex]\n                        lines.append(Line(index: lineIndex, kind: .deleted, string: oldLine))\n                    }\n                }\n\n                for (index, line) in section.newSnippet.enumerated() {\n                    let lineIndex = section.newOffset + index\n                    guard lineIndex >= 0, lineIndex < highlightedCode.count else { continue }\n                    if line.diff == .unchanged {\n                        let newLine = highlightedCode[lineIndex]\n                        lines.append(Line(index: lineIndex, kind: .unchanged, string: newLine))\n                    } else {\n                        let newLine = highlightedCode[lineIndex]\n                        lines.append(Line(index: lineIndex, kind: .added, string: newLine))\n                    }\n                }\n            }\n\n            return lines\n        }\n    }\n\n    @Perceptible\n    class DiffStorage {\n        private(set) var diffResult: CodeDiff.SnippetDiff?\n\n        @PerceptionIgnored var originalCode: String?\n        @PerceptionIgnored var code: String?\n        @PerceptionIgnored private var diffTask: Task<Void, Error>?\n\n        func diff(for view: AsyncDiffCodeBlock) {\n            performDiff(for: view)\n        }\n\n        private func performDiff(for view: AsyncDiffCodeBlock) {\n            diffTask?.cancel()\n            let code = code ?? view.code\n            guard let originalCode = originalCode ?? view.originalCode else {\n                diffResult = nil\n                return\n            }\n\n            diffTask = Task {\n                let result = await withUnsafeContinuation { continuation in\n                    AsyncCodeBlock.queue.async {\n                        let result = CodeDiff().diff(snippet: code, from: originalCode)\n                        continuation.resume(returning: result)\n                    }\n                }\n                try Task.checkCancellation()\n                await MainActor.run {\n                    diffResult = result\n                }\n            }\n        }\n    }\n\n    @Perceptible\n    class HighlightStorage {\n        private(set) var highlightedOriginalCode = [NSAttributedString]()\n        private(set) var highlightedCode = [NSAttributedString]()\n        private(set) var commonPrecedingSpaceCount = 0\n\n        @PerceptionIgnored var code: String?\n        @PerceptionIgnored var originalCode: String?\n        @PerceptionIgnored private var foregroundColor: Color = .primary\n        @PerceptionIgnored private var debounceFunction: DebounceFunction<AsyncDiffCodeBlock>?\n        @PerceptionIgnored private var highlightTask: Task<Void, Error>?\n\n        init() {\n            debounceFunction = .init(duration: 0.1, block: { view in\n                self.highlight(for: view)\n            })\n        }\n\n        func highlight(debounce: Bool, for view: AsyncDiffCodeBlock) {\n            if debounce {\n                Task { @MainActor in await debounceFunction?(view) }\n            } else {\n                highlight(for: view)\n            }\n        }\n\n        private func highlight(for view: AsyncDiffCodeBlock) {\n            highlightTask?.cancel()\n            let code = self.code ?? view.code\n            let originalCode = self.originalCode ?? view.originalCode\n            let language = view.language\n            let scenario = view.scenario\n            let brightMode = view.colorScheme != .dark\n            let droppingLeadingSpaces = view.droppingLeadingSpaces\n            let font = CodeHighlighting.SendableFont(font: view.font)\n            foregroundColor = view.foregroundColor\n\n            if highlightedCode.isEmpty {\n                let content = CodeHighlighting.convertToCodeLines(\n                    [.init(string: code), .init(string: originalCode ?? \"\")],\n                    middleDotColor: brightMode\n                        ? NSColor.black.withAlphaComponent(0.1)\n                        : NSColor.white.withAlphaComponent(0.1),\n                    droppingLeadingSpaces: droppingLeadingSpaces,\n                    replaceSpacesWithMiddleDots: true\n                )\n                highlightedCode = content.code[0]\n                highlightedOriginalCode = content.code[1]\n                commonPrecedingSpaceCount = content.commonLeadingSpaceCount\n            }\n\n            highlightTask = Task {\n                let result = await withUnsafeContinuation { continuation in\n                    AsyncCodeBlock.queue.async {\n                        let content = CodeHighlighting.highlighted(\n                            code: [code, originalCode ?? \"\"],\n                            language: language,\n                            scenario: scenario,\n                            brightMode: brightMode,\n                            droppingLeadingSpaces: droppingLeadingSpaces,\n                            font: font\n                        )\n                        continuation.resume(returning: content)\n                    }\n                }\n                try Task.checkCancellation()\n                await MainActor.run {\n                    self.highlightedCode = result.0[0]\n                    self.highlightedOriginalCode = result.0[1]\n                    self.commonPrecedingSpaceCount = result.1\n                }\n            }\n        }\n    }\n\n    static func limitRange(_ nsRange: NSRange, inside another: NSRange) -> NSRange? {\n        let intersection = NSIntersectionRange(nsRange, another)\n        guard intersection.length > 0 else { return nil }\n        return intersection\n    }\n}\n\n#Preview(\"Single Line Suggestion\") {\n    AsyncDiffCodeBlock(\n        code: \"    let foo = Bar()\",\n        originalCode: \"    var foo // comment\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Multiple Line Suggestion\") {\n    AsyncDiffCodeBlock(\n        code: \"    let foo = Bar()\\n    print(foo)\\n    print(a)\",\n        originalCode: \"    var foo // comment\\n    print(bar)\\n    print(a)\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Multiple Line Suggestion Including Whole Line Change in Diff\") {\n    AsyncDiffCodeBlock(\n        code: \"// comment\\n    let foo = Bar()\\n    print(bar)\\n    print(foo)\\n\",\n        originalCode: \"    let foo = Bar()\\n\",\n        language: \"swift\",\n        startLineIndex: 10,\n        scenario: \"\",\n        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n        droppingLeadingSpaces: true,\n        proposedForegroundColor: .primary\n    )\n    .frame(width: 400, height: 100)\n}\n\n#Preview(\"Updating Content\") {\n    struct UpdateContent: View {\n        @State var index = 0\n        struct Case {\n            let code: String\n            let originalCode: String\n        }\n\n        let cases: [Case] = [\n            .init(code: \"foo(123)\\nprint(foo)\", originalCode: \"bar(234)\\nprint(bar)\"),\n            .init(code: \"bar(456)\", originalCode: \"baz(567)\"),\n        ]\n\n        var body: some View {\n            VStack {\n                Button(\"Update\") {\n                    index = (index + 1) % cases.count\n                }\n                AsyncDiffCodeBlock(\n                    code: cases[index].code,\n                    originalCode: cases[index].originalCode,\n                    language: \"swift\",\n                    startLineIndex: 10,\n                    scenario: \"\",\n                    font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n                    droppingLeadingSpaces: true,\n                    proposedForegroundColor: .primary\n                )\n            }\n        }\n    }\n\n    return UpdateContent()\n        .frame(width: 400, height: 200)\n}\n\n#Preview(\"Code Diff Editor\") {\n    struct V: View {\n        @State var originalCode = \"\"\n        @State var newCode = \"\"\n\n        var body: some View {\n            VStack {\n                HStack {\n                    VStack {\n                        Text(\"Original\")\n                        TextEditor(text: $originalCode)\n                            .frame(width: 300, height: 200)\n                    }\n                    VStack {\n                        Text(\"New\")\n                        TextEditor(text: $newCode)\n                            .frame(width: 300, height: 200)\n                    }\n                }\n                .font(.body.monospaced())\n                ScrollView {\n                    AsyncDiffCodeBlock(\n                        code: newCode,\n                        originalCode: originalCode,\n                        language: \"swift\",\n                        startLineIndex: 0,\n                        scenario: \"\",\n                        font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n                        droppingLeadingSpaces: true,\n                        proposedForegroundColor: .primary\n                    )\n                }\n            }\n            .padding()\n            .frame(height: 600)\n        }\n    }\n    \n    return V()\n}\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/CodeBlock.swift",
    "content": "import Preferences\nimport SwiftUI\n\npublic struct CodeBlock: View {\n    public let code: String\n    public let language: String\n    public let startLineIndex: Int\n    public let scenario: String\n    public let colorScheme: ColorScheme\n    public let commonPrecedingSpaceCount: Int\n    public let highlightedCode: [NSAttributedString]\n    public let firstLinePrecedingSpaceCount: Int\n    public let font: NSFont\n    public let droppingLeadingSpaces: Bool\n    public let proposedForegroundColor: Color?\n    public let wrapCode: Bool\n\n    public init(\n        code: String,\n        language: String,\n        startLineIndex: Int,\n        scenario: String,\n        colorScheme: ColorScheme,\n        firstLinePrecedingSpaceCount: Int = 0,\n        font: NSFont,\n        droppingLeadingSpaces: Bool,\n        proposedForegroundColor: Color?,\n        wrapCode: Bool = true\n    ) {\n        self.code = code\n        self.language = language\n        self.startLineIndex = startLineIndex\n        self.scenario = scenario\n        self.colorScheme = colorScheme\n        self.droppingLeadingSpaces = droppingLeadingSpaces\n        self.firstLinePrecedingSpaceCount = firstLinePrecedingSpaceCount\n        self.font = font\n        self.proposedForegroundColor = proposedForegroundColor\n        self.wrapCode = wrapCode\n        let padding = firstLinePrecedingSpaceCount > 0\n            ? String(repeating: \" \", count: firstLinePrecedingSpaceCount)\n            : \"\"\n        let result = Self.highlight(\n            code: padding + code,\n            language: language,\n            scenario: scenario,\n            colorScheme: colorScheme,\n            font: font,\n            droppingLeadingSpaces: droppingLeadingSpaces\n        )\n        commonPrecedingSpaceCount = result.commonLeadingSpaceCount\n        highlightedCode = result.code\n    }\n    \n    var foregroundColor: Color {\n        proposedForegroundColor ?? (colorScheme == .dark ? .white : .black)\n    }\n\n    public var body: some View {\n        VStack(spacing: 2) {\n            ForEach(0..<highlightedCode.endIndex, id: \\.self) { index in\n                HStack(alignment: .firstTextBaseline, spacing: 4) {\n                    Text(\"\\(index + startLineIndex + 1)\")\n                        .multilineTextAlignment(.trailing)\n                        .foregroundColor(foregroundColor.opacity(0.5))\n                        .frame(minWidth: 40)\n                    Text(AttributedString(highlightedCode[index]))\n                        .foregroundColor(foregroundColor.opacity(0.3))\n                        .frame(maxWidth: .infinity, alignment: .leading)\n                        .multilineTextAlignment(.leading)\n                        .lineSpacing(4)\n                        .overlay(alignment: .topLeading) {\n                            if index == 0, commonPrecedingSpaceCount > 0 {\n                                Text(\"\\(commonPrecedingSpaceCount + 1)\")\n                                    .padding(.top, -12)\n                                    .font(.footnote)\n                                    .foregroundStyle(foregroundColor)\n                                    .opacity(0.3)\n                            }\n                        }\n                }\n            }\n        }\n        .foregroundColor(.white)\n        .font(.init(font))\n        .padding(.leading, 4)\n        .padding(.trailing)\n        .padding(.top, commonPrecedingSpaceCount > 0 ? 16 : 4)\n        .padding(.bottom, 4)\n    }\n\n    static func highlight(\n        code: String,\n        language: String,\n        scenario: String,\n        colorScheme: ColorScheme,\n        font: NSFont,\n        droppingLeadingSpaces: Bool\n    ) -> (code: [NSAttributedString], commonLeadingSpaceCount: Int) {\n        return CodeHighlighting.highlighted(\n            code: code,\n            language: language,\n            scenario: scenario,\n            brightMode: colorScheme != .dark,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            font: font\n        )\n    }\n}\n\n// MARK: - Preview\n\nstruct CodeBlock_Previews: PreviewProvider {\n    static var previews: some View {\n        CodeBlock(\n            code: \"\"\"\n            let foo = Foo()\n            let bar = Bar()\n            \"\"\",\n            language: \"swift\",\n            startLineIndex: 0,\n            scenario: \"\",\n            colorScheme: .dark,\n            firstLinePrecedingSpaceCount: 0,\n            font: .monospacedSystemFont(ofSize: 12, weight: .regular),\n            droppingLeadingSpaces: true,\n            proposedForegroundColor: nil\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/CopyButton.swift",
    "content": "import AppKit\nimport SwiftUI\n\npublic struct CopyButton: View {\n    public var copy: () -> Void\n    @State var isCopied = false\n\n    public init(copy: @escaping () -> Void) {\n        self.copy = copy\n    }\n\n    public var body: some View {\n        Image(systemName: isCopied ? \"checkmark.circle.fill\" : \"doc.on.doc.fill\")\n            .resizable()\n            .aspectRatio(contentMode: .fit)\n            .frame(width: 14, height: 14)\n            .frame(width: 20, height: 20, alignment: .center)\n            .foregroundColor(.secondary)\n            .background(\n                .regularMaterial,\n                in: RoundedRectangle(cornerRadius: 4, style: .circular)\n            )\n            .background {\n                RoundedRectangle(cornerRadius: 4, style: .circular)\n                    .fill(Color.primary.opacity(0.1))\n            }\n            .padding(4)\n            .simultaneousGesture(\n                TapGesture()\n                    .onEnded { _ in\n                        withAnimation(.linear(duration: 0.1)) {\n                            isCopied = true\n                        }\n                        copy()\n                        Task {\n                            try await Task.sleep(nanoseconds: 1_000_000_000)\n                            withAnimation(.linear(duration: 0.1)) {\n                                isCopied = false\n                            }\n                        }\n                    }\n            )\n    }\n}\n\npublic struct DraggableCopyButton: View {\n    public var content: () -> String\n\n    public init(content: @escaping () -> String) {\n        self.content = content\n    }\n\n    public var body: some View {\n        CopyButton {\n            NSPasteboard.general.clearContents()\n            NSPasteboard.general.setString(content(), forType: .string)\n        }\n        .onDrag {\n            NSItemProvider(object: content() as NSString)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/CustomScrollView.swift",
    "content": "import AppKit\nimport Combine\nimport Preferences\nimport SwiftUI\n\npublic struct CustomScrollViewHeightPreferenceKey: SwiftUI.PreferenceKey {\n    public static var defaultValue: Double = 0\n    public static func reduce(value: inout Double, nextValue: () -> Double) {\n        value = nextValue() + value\n    }\n}\n\npublic struct CustomScrollViewUpdateHeightModifier: ViewModifier {\n    public func body(content: Content) -> some View {\n        content\n            .background {\n                GeometryReader { proxy in\n                    Color.clear\n                        .preference(\n                            key: CustomScrollViewHeightPreferenceKey.self,\n                            value: proxy.size.height\n                        )\n                }\n            }\n    }\n}\n\n/// Used to workaround a SwiftUI bug. https://github.com/intitni/CopilotForXcode/issues/122\npublic struct CustomScrollView<Content: View>: View {\n    @ViewBuilder var content: () -> Content\n    @State var height: Double = 10\n    @AppStorage(\\.useCustomScrollViewWorkaround) var useNSScrollViewWrapper\n\n    public init(content: @escaping () -> Content) {\n        self.content = content\n    }\n    \n    public var body: some View {\n        if useNSScrollViewWrapper {\n            List {\n                content()\n                    .listRowInsets(EdgeInsets(top: 0, leading: -8, bottom: 0, trailing: -8))\n                    .modifier(CustomScrollViewUpdateHeightModifier())\n            }\n            .listStyle(.plain)\n            .modify { view in\n                if #available(macOS 13.0, *) {\n                    view.listRowSeparator(.hidden).listSectionSeparator(.hidden)\n                } else {\n                    view\n                }\n            }\n            .frame(idealHeight: max(10, height))\n            .onPreferenceChange(CustomScrollViewHeightPreferenceKey.self) { newHeight in\n                Task { @MainActor in\n                    height = newHeight\n                }\n            }\n        } else {\n            ScrollView {\n                content()\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/CustomTextEditor.swift",
    "content": "import SwiftUI\n\npublic struct AutoresizingCustomTextEditor: View {\n    @Binding public var text: String\n    public let font: NSFont\n    public let isEditable: Bool\n    public let maxHeight: Double\n    public let onSubmit: () -> Void\n    public var completions: (_ text: String, _ words: [String], _ range: NSRange) -> [String]\n\n    public init(\n        text: Binding<String>,\n        font: NSFont,\n        isEditable: Bool,\n        maxHeight: Double,\n        onSubmit: @escaping () -> Void,\n        completions: @escaping (_ text: String, _ words: [String], _ range: NSRange)\n            -> [String] = { _, _, _ in [] }\n    ) {\n        _text = text\n        self.font = font\n        self.isEditable = isEditable\n        self.maxHeight = maxHeight\n        self.onSubmit = onSubmit\n        self.completions = completions\n    }\n\n    public var body: some View {\n        ZStack(alignment: .center) {\n            // a hack to support dynamic height of TextEditor\n            Text(text.isEmpty ? \"Hi\" : text).opacity(0)\n                .font(.init(font))\n                .frame(maxWidth: .infinity, maxHeight: maxHeight)\n                .padding(.top, 1)\n                .padding(.bottom, 2)\n                .padding(.horizontal, 4)\n\n            CustomTextEditor(\n                text: $text,\n                font: font,\n                onSubmit: onSubmit,\n                completions: completions\n            )\n            .padding(.top, 1)\n            .padding(.bottom, -1)\n        }\n    }\n}\n\npublic struct CustomTextEditor: NSViewRepresentable {\n    public func makeCoordinator() -> Coordinator {\n        Coordinator(self)\n    }\n\n    @Binding public var text: String\n    public let font: NSFont\n    public let isEditable: Bool\n    public let onSubmit: () -> Void\n    public var completions: (_ text: String, _ words: [String], _ range: NSRange) -> [String]\n\n    public init(\n        text: Binding<String>,\n        font: NSFont,\n        isEditable: Bool = true,\n        onSubmit: @escaping () -> Void,\n        completions: @escaping (_ text: String, _ words: [String], _ range: NSRange)\n            -> [String] = { _, _, _ in [] }\n    ) {\n        _text = text\n        self.font = font\n        self.isEditable = isEditable\n        self.onSubmit = onSubmit\n        self.completions = completions\n    }\n\n    public func makeNSView(context: Context) -> NSScrollView {\n        context.coordinator.completions = completions\n        let textView = (context.coordinator.theTextView.documentView as! NSTextView)\n        textView.delegate = context.coordinator\n        textView.string = text\n        textView.font = font\n        textView.allowsUndo = true\n        textView.drawsBackground = false\n        textView.isAutomaticQuoteSubstitutionEnabled = false\n        textView.isAutomaticDashSubstitutionEnabled = false\n        textView.isAutomaticTextReplacementEnabled = false\n\n        return context.coordinator.theTextView\n    }\n\n    public func updateNSView(_ nsView: NSScrollView, context: Context) {\n        context.coordinator.completions = completions\n        let textView = (context.coordinator.theTextView.documentView as! NSTextView)\n        textView.isEditable = isEditable\n        guard textView.string != text else { return }\n        textView.string = text\n        textView.undoManager?.removeAllActions()\n    }\n}\n\npublic extension CustomTextEditor {\n    class Coordinator: NSObject, NSTextViewDelegate {\n        var view: CustomTextEditor\n        var theTextView = NSTextView.scrollableTextView()\n        var affectedCharRange: NSRange?\n        var completions: (String, [String], _ range: NSRange) -> [String] = { _, _, _ in [] }\n\n        init(_ view: CustomTextEditor) {\n            self.view = view\n        }\n\n        public func textDidChange(_ notification: Notification) {\n            guard let textView = notification.object as? NSTextView else {\n                return\n            }\n\n            view.text = textView.string\n            textView.complete(nil)\n        }\n\n        public func textView(\n            _ textView: NSTextView,\n            doCommandBy commandSelector: Selector\n        ) -> Bool {\n            if commandSelector == #selector(NSTextView.insertNewline(_:)) {\n                if let event = NSApplication.shared.currentEvent,\n                   !event.modifierFlags.contains(.shift),\n                   event.keyCode == 36 // enter\n                {\n                    view.onSubmit()\n                    return true\n                }\n            }\n\n            return false\n        }\n\n        public func textView(\n            _ textView: NSTextView,\n            shouldChangeTextIn affectedCharRange: NSRange,\n            replacementString: String?\n        ) -> Bool {\n            return true\n        }\n\n        public func textView(\n            _ textView: NSTextView,\n            completions words: [String],\n            forPartialWordRange charRange: NSRange,\n            indexOfSelectedItem index: UnsafeMutablePointer<Int>?\n        ) -> [String] {\n            index?.pointee = -1\n            return completions(textView.textStorage?.string ?? \"\", words, charRange)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/DynamicHeightTextInFormWorkaround.swift",
    "content": "import SwiftUI\n\nstruct DynamicHeightTextInFormWorkaroundModifier: ViewModifier {\n    func body(content: Content) -> some View {\n        HStack(spacing: 0) {\n            content\n            Spacer()\n        }\n        .fixedSize(horizontal: false, vertical: true)\n    }\n}\n\npublic extension View {\n    func dynamicHeightTextInFormWorkaround() -> some View {\n        modifier(DynamicHeightTextInFormWorkaroundModifier())\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/FontPicker.swift",
    "content": "import AppKit\nimport Foundation\nimport Preferences\nimport SwiftUI\n\npublic struct FontPicker<Label: View>: View {\n    @State var fontManagerDelegate: FontManagerDelegate?\n    @Binding var font: NSFont\n    let label: Label\n\n    public init(font: Binding<NSFont>, @ViewBuilder label: () -> Label) {\n        _font = font\n        self.label = label()\n    }\n\n    public var body: some View {\n        if #available(macOS 13.0, *) {\n            LabeledContent {\n                button\n            } label: {\n                label\n            }\n        } else {\n            HStack {\n                label\n                button\n            }\n        }\n    }\n    \n    var button: some View {\n        Button {\n            if NSFontPanel.shared.isVisible {\n                NSFontPanel.shared.orderOut(nil)\n            }\n\n            self.fontManagerDelegate = FontManagerDelegate(font: font) {\n                self.font = $0\n            }\n            NSFontManager.shared.target = self.fontManagerDelegate\n            NSFontPanel.shared.setPanelFont(self.font, isMultiple: false)\n            NSFontPanel.shared.orderBack(nil)\n        } label: {\n            HStack {\n                Text(font.fontName)\n                    + Text(\" - \")\n                    + Text(font.pointSize, format: .number.precision(.fractionLength(1)))\n                    + Text(\"pt\")\n\n                Spacer().frame(width: 30)\n\n                Image(systemName: \"textformat\")\n                    .frame(width: 13)\n                    .scaledToFit()\n            }\n        }\n    }\n\n    final class FontManagerDelegate: NSObject {\n        let font: NSFont\n        let onSelection: (NSFont) -> Void\n        init(font: NSFont, onSelection: @escaping (NSFont) -> Void) {\n            self.font = font\n            self.onSelection = onSelection\n        }\n\n        @objc func changeFont(_ sender: NSFontManager) {\n            onSelection(sender.convert(font))\n        }\n    }\n}\n\npublic extension FontPicker {\n    init(font: Binding<UserDefaultsStorageBox<StorableFont>>, @ViewBuilder label: () -> Label) {\n        _font = Binding(\n            get: { font.wrappedValue.value.nsFont },\n            set: { font.wrappedValue = .init(StorableFont(nsFont: $0)) }\n        )\n        self.label = label()\n    }\n}\n\n#Preview {\n    FontPicker(font: .constant(.systemFont(ofSize: 15))) {\n        Text(\"Font\")\n    }\n    .padding()\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/ModifierFlagsMonitor.swift",
    "content": "import Cocoa\nimport Foundation\nimport SwiftUI\n\npublic extension View {\n    func modifierFlagsMonitor() -> some View {\n        ModifierFlagsMonitorWrapper { self }\n    }\n}\n\npublic extension EnvironmentValues {\n    var modifierFlags: NSEvent.ModifierFlags {\n        get { self[ModifierFlagsEnvironmentKey.self] }\n        set { self[ModifierFlagsEnvironmentKey.self] = newValue }\n    }\n}\n\nfinal class ModifierFlagsMonitor {\n    private var monitor: Any?\n\n    deinit { stop() }\n\n    func start(binding: Binding<NSEvent.ModifierFlags>) {\n        guard monitor == nil else { return }\n        monitor = NSEvent.addLocalMonitorForEvents(matching: [.flagsChanged]) { event in\n            binding.wrappedValue = event.modifierFlags\n            return event\n        }\n    }\n\n    func stop() {\n        if let monitor {\n            NSEvent.removeMonitor(monitor)\n            self.monitor = nil\n        }\n    }\n}\n\nstruct ModifierFlagsMonitorWrapper<Content: View>: View {\n    @ViewBuilder let content: () -> Content\n    @State private var modifierFlags: NSEvent.ModifierFlags = []\n    @State private var eventMonitor = ModifierFlagsMonitor()\n\n    var body: some View {\n        content()\n            .environment(\\.modifierFlags, modifierFlags)\n            .onAppear { eventMonitor.start(binding: $modifierFlags) }\n            .onDisappear { eventMonitor.stop() }\n    }\n}\n\nstruct ModifierFlagsEnvironmentKey: EnvironmentKey {\n    static let defaultValue: NSEvent.ModifierFlags = []\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/SettingsDivider.swift",
    "content": "import SwiftUI\n\npublic struct SettingsDivider<Title: View>: View {\n    let title: Title?\n    \n    public init(_ title: Title) {\n        self.title = title\n    }\n    \n    public var body: some View {\n        if let title {\n            HStack {\n                VStack {\n                    Divider()\n                }\n                title\n                    .foregroundStyle(.secondary)\n                    .font(.subheadline)\n                    .zIndex(2)\n                VStack {\n                    Divider()\n                }\n            }\n            .padding(.vertical, 8)\n        } else {\n            Divider()\n                .padding(.vertical, 8)\n        }\n    }\n}\n\nextension SettingsDivider where Title == Text {\n    public init(_ title: String) {\n        self.title = Text(title)\n    }\n}\n\nextension SettingsDivider where Title == EmptyView {\n    public init() {\n        self.title = nil\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/SubSection.swift",
    "content": "import SwiftUI\n\npublic struct SubSection<Title: View, Description: View, Content: View>: View {\n    public let title: Title\n    public let description: Description\n    @ViewBuilder public let content: () -> Content\n\n    public init(title: Title, description: Description, @ViewBuilder content: @escaping () -> Content) {\n        self.title = title\n        self.description = description\n        self.content = content\n    }\n\n    public var body: some View {\n        VStack(alignment: .leading) {\n            if !(title is EmptyView && description is EmptyView) {\n                VStack(alignment: .leading, spacing: 8) {\n                    title\n                        .font(.system(size: 14).weight(.semibold))\n\n                    description\n                        .multilineTextAlignment(.leading)\n                        .foregroundStyle(.secondary)\n                }\n                .frame(maxWidth: .infinity, alignment: .leading)\n            }\n\n            if !(title is EmptyView && description is EmptyView) {\n                Divider().padding(.bottom, 4)\n            }\n\n            content()\n        }\n        .padding()\n        .background {\n            RoundedRectangle(cornerRadius: 8)\n                .fill(Color.secondary.opacity(0.1))\n        }\n        .overlay {\n            RoundedRectangle(cornerRadius: 8)\n                .strokeBorder(Color.secondary.opacity(0.2))\n        }\n    }\n}\n\npublic extension SubSection where Description == Text {\n    init(title: Title, description: String, @ViewBuilder content: @escaping () -> Content) {\n        self.init(title: title, description: Text(description), content: content)\n    }\n}\n\npublic extension SubSection where Description == EmptyView {\n    init(title: Title, @ViewBuilder content: @escaping () -> Content) {\n        self.init(title: title, description: EmptyView(), content: content)\n    }\n}\n\npublic extension SubSection where Title == EmptyView {\n    init(description: Description, @ViewBuilder content: @escaping () -> Content) {\n        self.init(title: EmptyView(), description: description, content: content)\n    }\n}\n\npublic extension SubSection where Title == EmptyView, Description == EmptyView {\n    init(@ViewBuilder content: @escaping () -> Content) {\n        self.init(title: EmptyView(), description: EmptyView(), content: content)\n    }\n}\n\npublic extension SubSection where Title == EmptyView, Description == Text {\n    init(description: String, @ViewBuilder content: @escaping () -> Content) {\n        self.init(title: EmptyView(), description: description, content: content)\n    }\n}\n\n#Preview(\"Sub Section Default Style\") {\n    SubSection(title: Text(\"Title\"), description: \"Description\") {\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Picker(\"Label\", selection: .constant(0)) {\n            Text(\"Label\").tag(0)\n            Text(\"Label\").tag(1)\n            Text(\"Label\").tag(2)\n        }\n    }\n    .padding()\n}\n\n#Preview(\"Sub Section No Title\") {\n    SubSection(description: \"Description\") {\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Picker(\"Label\", selection: .constant(0)) {\n            Text(\"Label\").tag(0)\n            Text(\"Label\").tag(1)\n            Text(\"Label\").tag(2)\n        }\n    }\n    .padding()\n}\n\n#Preview(\"Sub Section No Title or Description\") {\n    SubSection {\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Toggle(isOn: .constant(true), label: {\n            Text(\"Label\")\n        })\n\n        Picker(\"Label\", selection: .constant(0)) {\n            Text(\"Label\").tag(0)\n            Text(\"Label\").tag(1)\n            Text(\"Label\").tag(2)\n        }\n    }\n    .padding()\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/SyntaxHighlighting.swift",
    "content": "import AppKit\nimport Foundation\nimport Highlightr\nimport SuggestionBasic\nimport SwiftUI\n\npublic enum CodeHighlighting {\n    public struct SendableFont: @unchecked Sendable {\n        public let font: NSFont\n        public init(font: NSFont) {\n            self.font = font\n        }\n    }\n\n    public static func highlightedCodeBlock(\n        code: String,\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        font: SendableFont\n    ) -> NSAttributedString {\n        highlightedCodeBlock(\n            code: code,\n            language: language,\n            scenario: scenario,\n            brightMode: brightMode,\n            font: font.font\n        )\n    }\n\n    public static func highlightedCodeBlock(\n        code: String,\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        font: NSFont\n    ) -> NSAttributedString {\n        var language = language\n        // Workaround: Highlightr uses a different identifier for Objective-C.\n        if language.lowercased().hasPrefix(\"objective\"), language.lowercased().hasSuffix(\"c\") {\n            language = \"objectivec\"\n        }\n        func unhighlightedCode() -> NSAttributedString {\n            return NSAttributedString(\n                string: code,\n                attributes: [\n                    .foregroundColor: brightMode ? NSColor.black : NSColor.white,\n                    .font: font,\n                ]\n            )\n        }\n        guard let highlighter = Highlightr() else {\n            return unhighlightedCode()\n        }\n        highlighter.setTheme(to: {\n            let mode = brightMode ? \"light\" : \"dark\"\n            if scenario.isEmpty {\n                return mode\n            }\n            return \"\\(scenario)-\\(mode)\"\n        }())\n        highlighter.theme.setCodeFont(font)\n        guard let formatted = highlighter.highlight(code, as: language) else {\n            return unhighlightedCode()\n        }\n        if formatted.string == \"undefined\" {\n            return unhighlightedCode()\n        }\n        return formatted\n    }\n\n    public static func highlightedCodeBlocks(\n        code: [String],\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        font: NSFont\n    ) -> [NSAttributedString] {\n        var language = language\n        // Workaround: Highlightr uses a different identifier for Objective-C.\n        if language.lowercased().hasPrefix(\"objective\"), language.lowercased().hasSuffix(\"c\") {\n            language = \"objectivec\"\n        }\n        func unhighlightedCode(_ code: String) -> NSAttributedString {\n            return NSAttributedString(\n                string: code,\n                attributes: [\n                    .foregroundColor: brightMode ? NSColor.black : NSColor.white,\n                    .font: font,\n                ]\n            )\n        }\n        guard let highlighter = Highlightr() else {\n            return code.map(unhighlightedCode)\n        }\n        highlighter.setTheme(to: {\n            let mode = brightMode ? \"light\" : \"dark\"\n            if scenario.isEmpty {\n                return mode\n            }\n            return \"\\(scenario)-\\(mode)\"\n        }())\n        highlighter.theme.setCodeFont(font)\n\n        var formattedCodeBlocks = [NSAttributedString]()\n        for code in code {\n            guard let formatted = highlighter.highlight(code, as: language) else {\n                formattedCodeBlocks.append(unhighlightedCode(code))\n                continue\n            }\n            if formatted.string == \"undefined\" {\n                formattedCodeBlocks.append(unhighlightedCode(code))\n                continue\n            }\n            formattedCodeBlocks.append(formatted)\n        }\n        return formattedCodeBlocks\n    }\n\n    public static func highlighted(\n        code: String,\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        droppingLeadingSpaces: Bool,\n        font: SendableFont,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [NSAttributedString], commonLeadingSpaceCount: Int) {\n        highlighted(\n            code: code,\n            language: language,\n            scenario: scenario,\n            brightMode: brightMode,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            font: font.font,\n            replaceSpacesWithMiddleDots: replaceSpacesWithMiddleDots\n        )\n    }\n\n    public static func highlighted(\n        code: [String],\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        droppingLeadingSpaces: Bool,\n        font: SendableFont,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [[NSAttributedString]], commonLeadingSpaceCount: Int) {\n        highlighted(\n            code: code,\n            language: language,\n            scenario: scenario,\n            brightMode: brightMode,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            font: font.font,\n            replaceSpacesWithMiddleDots: replaceSpacesWithMiddleDots\n        )\n    }\n\n    public static func highlighted(\n        code: String,\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        droppingLeadingSpaces: Bool,\n        font: NSFont,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [NSAttributedString], commonLeadingSpaceCount: Int) {\n        let result = highlighted(\n            code: [code],\n            language: language,\n            scenario: scenario,\n            brightMode: brightMode,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            font: font,\n            replaceSpacesWithMiddleDots: replaceSpacesWithMiddleDots\n        )\n        return (result.code.first ?? [], result.commonLeadingSpaceCount)\n    }\n\n    public static func highlighted(\n        code: [String],\n        language: String,\n        scenario: String,\n        brightMode: Bool,\n        droppingLeadingSpaces: Bool,\n        font: NSFont,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [[NSAttributedString]], commonLeadingSpaceCount: Int) {\n        let formatted = highlightedCodeBlocks(\n            code: code,\n            language: language,\n            scenario: scenario,\n            brightMode: brightMode,\n            font: font\n        )\n        let middleDotColor = brightMode\n            ? NSColor.black.withAlphaComponent(0.1)\n            : NSColor.white.withAlphaComponent(0.1)\n        return convertToCodeLines(\n            formatted,\n            middleDotColor: middleDotColor,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            replaceSpacesWithMiddleDots: replaceSpacesWithMiddleDots\n        )\n    }\n\n    public static func convertToCodeLines(\n        _ formattedCode: NSAttributedString,\n        middleDotColor: NSColor,\n        droppingLeadingSpaces: Bool,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [NSAttributedString], commonLeadingSpaceCount: Int) {\n        let result = convertToCodeLines(\n            [formattedCode],\n            middleDotColor: middleDotColor,\n            droppingLeadingSpaces: droppingLeadingSpaces,\n            replaceSpacesWithMiddleDots: replaceSpacesWithMiddleDots\n        )\n        return (result.code.first ?? [], result.commonLeadingSpaceCount)\n    }\n\n    public static func convertToCodeLines(\n        _ formattedCode: [NSAttributedString],\n        middleDotColor: NSColor,\n        droppingLeadingSpaces: Bool,\n        replaceSpacesWithMiddleDots: Bool = true\n    ) -> (code: [[NSAttributedString]], commonLeadingSpaceCount: Int) {\n        let inputs = formattedCode.map { $0.string }\n\n        func isEmptyLine(_ line: String) -> Bool {\n            if line.isEmpty { return true }\n            guard let regex = try? NSRegularExpression(pattern: #\"^\\s*\\n?$\"#) else { return false }\n            if regex.firstMatch(\n                in: line,\n                options: [],\n                range: NSMakeRange(0, line.utf16.count)\n            ) != nil {\n                return true\n            }\n            return false\n        }\n\n        let separatedInputs = inputs.map { $0.splitByNewLine(omittingEmptySubsequences: false)\n            .map { String($0) }\n        }\n\n        let commonLeadingSpaceCount = {\n            if !droppingLeadingSpaces { return 0 }\n            let split = separatedInputs.flatMap { $0 }\n            var result = 0\n            outerLoop: for i in stride(from: 40, through: 4, by: -4) {\n                for line in split {\n                    if isEmptyLine(line) { continue }\n                    if i >= line.count { continue outerLoop }\n                    if !line.hasPrefix(.init(repeating: \" \", count: i)) { continue outerLoop }\n                }\n                result = i\n                break\n            }\n            return result\n        }()\n        var outputs = [[NSAttributedString]]()\n        for (separatedInput, formattedCode) in zip(separatedInputs, formattedCode) {\n            var output = [NSAttributedString]()\n            var start = 0\n            for sub in separatedInput {\n                let range = NSMakeRange(start, sub.utf16.count)\n                let attributedString = formattedCode.attributedSubstring(from: range)\n                let mutable = NSMutableAttributedString(attributedString: attributedString)\n\n                // remove leading spaces\n                if commonLeadingSpaceCount > 0 {\n                    let leadingSpaces = String(repeating: \" \", count: commonLeadingSpaceCount)\n                    if mutable.string.hasPrefix(leadingSpaces) {\n                        mutable.replaceCharacters(\n                            in: NSRange(location: 0, length: commonLeadingSpaceCount),\n                            with: \"\"\n                        )\n                    } else if isEmptyLine(mutable.string) {\n                        mutable.mutableString.setString(\"\")\n                    }\n                }\n\n                if replaceSpacesWithMiddleDots {\n                    // use regex to replace all spaces to a middle dot\n                    do {\n                        let regex = try NSRegularExpression(pattern: \"[ ]*\", options: [])\n                        let result = regex.matches(\n                            in: mutable.string,\n                            range: NSRange(location: 0, length: mutable.mutableString.length)\n                        )\n                        for r in result {\n                            let range = r.range\n                            mutable.replaceCharacters(\n                                in: range,\n                                with: String(repeating: \"·\", count: range.length)\n                            )\n                            mutable.addAttributes([\n                                .foregroundColor: middleDotColor,\n                            ], range: range)\n                        }\n                    } catch {}\n                }\n                output.append(mutable)\n                start += range.length + 1\n            }\n            outputs.append(output)\n        }\n        return (outputs, commonLeadingSpaceCount)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/TabContainer.swift",
    "content": "import Dependencies\nimport Foundation\nimport SwiftUI\n\npublic final class ExternalTabContainer {\n    public static var tabContainers = [String: ExternalTabContainer]()\n\n    public struct TabItem: Identifiable {\n        public var id: String\n        public var title: String\n        public var description: String\n        public var image: String\n        public let viewBuilder: () -> AnyView\n\n        public init<V: View>(\n            id: String,\n            title: String,\n            description: String = \"\",\n            image: String = \"\",\n            @ViewBuilder viewBuilder: @escaping () -> V\n        ) {\n            self.id = id\n            self.title = title\n            self.description = description\n            self.image = image\n            self.viewBuilder = { AnyView(viewBuilder()) }\n        }\n    }\n\n    public var tabs: [TabItem] = []\n    public init() { tabs = [] }\n\n    public static func tabContainer(for id: String) -> ExternalTabContainer {\n        if let tabContainer = tabContainers[id] {\n            return tabContainer\n        }\n        let tabContainer = ExternalTabContainer()\n        tabContainers[id] = tabContainer\n        return tabContainer\n    }\n\n    @ViewBuilder\n    public func tabView(for id: String) -> some View {\n        if let tab = tabs.first(where: { $0.id == id }) {\n            tab.viewBuilder()\n        }\n    }\n\n    public func registerTab<V: View>(\n        id: String,\n        title: String,\n        description: String = \"\",\n        image: String = \"\",\n        @ViewBuilder viewBuilder: @escaping () -> V\n    ) {\n        tabs.append(TabItem(\n            id: id,\n            title: title,\n            description: description,\n            image: image,\n            viewBuilder: viewBuilder\n        ))\n    }\n\n    public static func registerTab<V: View>(\n        for tabContainerId: String,\n        id: String,\n        title: String,\n        description: String = \"\",\n        image: String = \"\",\n        @ViewBuilder viewBuilder: @escaping () -> V\n    ) {\n        tabContainer(for: tabContainerId).registerTab(\n            id: id,\n            title: title,\n            description: description,\n            image: image,\n            viewBuilder: viewBuilder\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/View+Modify.swift",
    "content": "import SwiftUI\n\npublic extension View {\n    @ViewBuilder func modify<Content: View>(@ViewBuilder transform: (Self) -> Content)\n        -> some View\n    {\n        transform(self)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SharedUIComponents/XcodeStyleFrame.swift",
    "content": "import Foundation\nimport SwiftUI\n\npublic struct XcodeLikeFrame<Content: View>: View {\n    @Environment(\\.colorScheme) var colorScheme\n    let content: Content\n    let cornerRadius: Double\n\n    public init(cornerRadius: Double, content: Content) {\n        self.content = content\n        self.cornerRadius = cornerRadius\n    }\n\n    public var body: some View {\n        content\n            .clipShape(RoundedRectangle(cornerRadius: cornerRadius, style: .continuous))\n            .background(\n                RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                    .fill(Material.bar)\n            )\n            .overlay(\n                RoundedRectangle(cornerRadius: max(0, cornerRadius), style: .continuous)\n                    .stroke(Color.black.opacity(0.1), style: .init(lineWidth: 1))\n            ) // Add an extra border just incase the background is not displayed.\n            .overlay(\n                RoundedRectangle(cornerRadius: max(0, cornerRadius - 1), style: .continuous)\n                    .stroke(Color.white.opacity(0.1), style: .init(lineWidth: 1))\n                    .padding(1)\n            )\n    }\n}\n\npublic extension View {\n    func xcodeStyleFrame(cornerRadius: Double? = nil) -> some View {\n        if #available(macOS 26.0, *) {\n            XcodeLikeFrame(cornerRadius: cornerRadius ?? 14, content: self)\n        } else {\n            XcodeLikeFrame(cornerRadius: cornerRadius ?? 10, content: self)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/CodeSuggestion.swift",
    "content": "import CodableWrappers\nimport Foundation\n\npublic struct CodeSuggestion: Codable, Equatable {\n    public struct Description: Codable, Equatable {\n        public enum Kind: Codable, Equatable {\n            case warning\n            case action\n        }\n        \n        public var kind: Kind\n        public var content: String\n        \n        public init(kind: Kind, content: String) {\n            self.kind = kind\n            self.content = content\n        }\n    }\n    \n    public init(\n        id: String,\n        text: String,\n        position: CursorPosition,\n        range: CursorRange,\n        replacingLines: [String] = [],\n        descriptions: [Description] = [],\n        middlewareComments: [String] = [],\n        metadata: [String: String] = [:]\n    ) {\n        self.text = text\n        self.position = position\n        self.id = id\n        self.range = range\n        self.replacingLines = replacingLines\n        self.descriptions = descriptions\n        self.middlewareComments = middlewareComments\n        self.metadata = metadata\n    }\n\n    public static func == (lhs: CodeSuggestion, rhs: CodeSuggestion) -> Bool {\n        return lhs.text == rhs.text\n            && lhs.position == rhs.position\n            && lhs.id == rhs.id\n            && lhs.range == rhs.range\n            && lhs.descriptions == rhs.descriptions\n            && lhs.middlewareComments == rhs.middlewareComments\n    }\n\n    /// The new code to be inserted and the original code on the first line.\n    public var text: String\n    /// The position of the cursor before generating the completion.\n    public var position: CursorPosition\n    /// An id.\n    public var id: String\n    /// The range of the original code that should be replaced.\n    public var range: CursorRange\n    /// Descriptions about this code suggestion\n    @FallbackDecoding<EmptyArray> public var replacingLines: [String]\n    /// Descriptions about this code suggestion\n    @FallbackDecoding<EmptyArray> public var descriptions: [Description]\n    /// A place to store comments inserted by middleware for debugging use.\n    @FallbackDecoding<EmptyArray> public var middlewareComments: [String]\n    /// A place to store extra data.\n    @FallbackDecoding<EmptyDictionary> public var metadata: [String: String]\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/EditorInformation.swift",
    "content": "import Foundation\nimport Parsing\n\npublic struct EditorInformation: Sendable {\n    public struct LineAnnotation: Sendable {\n        public var type: String\n        public var line: Int\n        public var message: String\n    }\n\n    public struct SourceEditorContent: Sendable {\n        /// The content of the source editor.\n        public var content: String\n        /// The content of the source editor in lines. Every line should ends with `\\n`.\n        public var lines: [String]\n        /// The selection ranges of the source editor.\n        public var selections: [CursorRange]\n        /// The cursor position of the source editor.\n        public var cursorPosition: CursorPosition\n        /// The cursor position as offset.\n        public var cursorOffset: Int\n        /// Line annotations of the source editor.\n        public var lineAnnotations: [LineAnnotation]\n\n        public var selectedContent: String {\n            guard !lines.isEmpty else { return \"\" }\n            if let range = selections.first {\n                if range.isEmpty { return \"\" }\n                let startIndex = min(\n                    max(0, range.start.line),\n                    lines.endIndex - 1\n                )\n                let endIndex = min(\n                    max(startIndex, range.end.line),\n                    lines.endIndex - 1\n                )\n                let selectedContent = lines[startIndex...endIndex]\n                return selectedContent.joined()\n            }\n            return \"\"\n        }\n\n        public init(\n            content: String,\n            lines: [String],\n            selections: [CursorRange],\n            cursorPosition: CursorPosition,\n            cursorOffset: Int,\n            lineAnnotations: [String]\n        ) {\n            self.content = content\n            self.lines = lines\n            self.selections = selections\n            self.cursorPosition = cursorPosition\n            self.cursorOffset = cursorOffset\n            self.lineAnnotations = lineAnnotations.map(EditorInformation.parseLineAnnotation)\n        }\n    }\n\n    public let editorContent: SourceEditorContent?\n    public let selectedContent: String\n    public let selectedLines: [String]\n    public let documentURL: URL\n    public let workspaceURL: URL\n    public let projectRootURL: URL\n    public let relativePath: String\n    public let language: CodeLanguage\n\n    public init(\n        editorContent: SourceEditorContent?,\n        selectedContent: String,\n        selectedLines: [String],\n        documentURL: URL,\n        workspaceURL: URL,\n        projectRootURL: URL,\n        relativePath: String,\n        language: CodeLanguage\n    ) {\n        self.editorContent = editorContent\n        self.selectedContent = selectedContent\n        self.selectedLines = selectedLines\n        self.documentURL = documentURL\n        self.workspaceURL = workspaceURL\n        self.projectRootURL = projectRootURL\n        self.relativePath = relativePath\n        self.language = language\n    }\n\n    public func code(in range: CursorRange) -> String {\n        return EditorInformation.code(in: editorContent?.lines ?? [], inside: range).code\n    }\n\n    public static func lines(in code: [String], containing range: CursorRange) -> [String] {\n        guard !code.isEmpty else { return [] }\n        guard range.start.line <= range.end.line else { return [] }\n        let startIndex = min(max(0, range.start.line), code.endIndex - 1)\n        let endIndex = min(max(startIndex, range.end.line), code.endIndex - 1)\n        guard startIndex <= endIndex else { return [] }\n        let selectedLines = code[startIndex...endIndex]\n        return Array(selectedLines)\n    }\n\n    public static func code(\n        in code: [String],\n        inside range: CursorRange,\n        ignoreColumns: Bool = false\n    ) -> (code: String, lines: [String]) {\n        if range.start == range.end {\n            // Empty selection (cursor only): return empty code but include the containing line\n            return (\"\", lines(in: code, containing: range))\n        }\n        guard range.start < range.end else { return (\"\", []) }\n\n        let rangeLines = lines(in: code, containing: range)\n        if ignoreColumns {\n            return (rangeLines.joined(), rangeLines)\n        }\n        var content = rangeLines\n        if !content.isEmpty {\n            let lastLine = content[content.endIndex - 1]\n            let droppedEndIndex = lastLine.utf16.index(\n                lastLine.utf16.startIndex,\n                offsetBy: range.end.character,\n                limitedBy: lastLine.utf16.endIndex\n            ) ?? lastLine.utf16.endIndex\n            content[content.endIndex - 1] = if droppedEndIndex > lastLine.utf16.startIndex {\n                String(lastLine[..<droppedEndIndex])\n            } else {\n                \"\"\n            }\n            \n            let firstLine = content[0]\n            let droppedStartIndex = firstLine.utf16.index(\n                firstLine.utf16.startIndex,\n                offsetBy: range.start.character,\n                limitedBy: firstLine.utf16.endIndex\n            ) ?? firstLine.utf16.endIndex\n            \n            content[0] = if droppedStartIndex < firstLine.utf16.endIndex {\n                String(firstLine[droppedStartIndex...])\n            } else {\n                \"\"\n            }\n        }\n        return (content.joined(), rangeLines)\n    }\n\n    /// Error Line 25: FileName.swift:25 Cannot convert Type\n    static func parseLineAnnotation(_ annotation: String) -> LineAnnotation {\n        let lineAnnotationParser = Parse(input: Substring.self) {\n            PrefixUpTo(\":\")\n            \":\"\n            PrefixUpTo(\":\")\n            \":\"\n            Int.parser()\n            Prefix(while: { _ in true })\n        }.map { (prefix: Substring, _: Substring, line: Int, message: Substring) in\n            let type = String(prefix.split(separator: \" \").first ?? prefix)\n            return LineAnnotation(\n                type: type.trimmingCharacters(in: .whitespacesAndNewlines),\n                line: line,\n                message: message.trimmingCharacters(in: .whitespacesAndNewlines)\n            )\n        }\n\n        do {\n            return try lineAnnotationParser.parse(annotation[...])\n        } catch {\n            return .init(type: \"\", line: 0, message: annotation)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/ExportedFromLSP.swift",
    "content": "@preconcurrency import LanguageServerProtocol\n\n/// Line starts at 0.\npublic typealias CursorPosition = LanguageServerProtocol.Position\n\npublic extension CursorPosition {\n    static let zero = CursorPosition(line: 0, character: 0)\n    static var outOfScope: CursorPosition { .init(line: -1, character: -1) }\n    \n    var readableText: String {\n        return \"[\\(line + 1), \\(character)]\"\n    }\n}\n\npublic struct CursorRange: Codable, Hashable, Sendable, Equatable, CustomStringConvertible {\n    public static let zero = CursorRange(start: .zero, end: .zero)\n\n    public var start: CursorPosition\n    public var end: CursorPosition\n\n    public init(start: Position, end: Position) {\n        self.start = start\n        self.end = end\n    }\n\n    public init(startPair: (Int, Int), endPair: (Int, Int)) {\n        start = CursorPosition(startPair)\n        end = CursorPosition(endPair)\n    }\n\n    public func contains(_ position: CursorPosition) -> Bool {\n        return position >= start && position <= end\n    }\n\n    public func contains(_ range: CursorRange) -> Bool {\n        return range.start >= start && range.end <= end\n    }\n    \n    public func strictlyContains(_ range: CursorRange) -> Bool {\n        return range.start > start && range.end < end\n    }\n\n    public func intersects(_ other: LSPRange) -> Bool {\n        return contains(other.start) || contains(other.end)\n    }\n\n    public var isEmpty: Bool {\n        return start == end\n    }\n    \n    public var isOneLine: Bool {\n        return start.line == end.line\n    }\n    \n    /// The number of lines in the range.\n    public var lineCount: Int {\n        return end.line - start.line + 1\n    }\n    \n    public static func == (lhs: CursorRange, rhs: CursorRange) -> Bool {\n        return lhs.start == rhs.start && lhs.end == rhs.end\n    }\n    \n    public var description: String {\n        return \"\\(start.readableText) - \\(end.readableText)\"\n    }\n}\n\npublic extension CursorRange {\n    static var outOfScope: CursorRange { .init(start: .outOfScope, end: .outOfScope) }\n    static func cursor(_ position: CursorPosition) -> CursorRange {\n        return .init(start: position, end: position)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/LanguageIdentifierFromFilePath.swift",
    "content": "import Foundation\n@preconcurrency import LanguageServerProtocol\n\npublic enum CodeLanguage: RawRepresentable, Codable, CaseIterable, Hashable, Sendable {\n    case builtIn(LanguageIdentifier)\n    case plaintext\n    case other(String)\n\n    public var rawValue: String {\n        switch self {\n        case let .builtIn(language):\n            return language.rawValue\n        case .plaintext:\n            return \"plaintext\"\n        case let .other(language):\n            return language\n        }\n    }\n\n    public var hashValue: Int {\n        rawValue.hashValue\n    }\n\n    public init?(rawValue: String) {\n        if let language = LanguageIdentifier(rawValue: rawValue) {\n            self = .builtIn(language)\n        } else if rawValue == \"txt\" || rawValue.isEmpty {\n            self = .plaintext\n        } else {\n            self = .other(rawValue)\n        }\n    }\n    \n    public init(fileURL: URL) {\n        self = languageIdentifierFromFileURL(fileURL)\n    }\n    \n    public init(filePath: String) {\n        self = languageIdentifierFromFileURL(URL(fileURLWithPath: filePath))\n    }\n\n    public static var allCases: [CodeLanguage] {\n        var all = LanguageIdentifier.allCases.map(CodeLanguage.builtIn)\n        all.append(.plaintext)\n        return all\n    }\n}\n\npublic extension LanguageIdentifier {\n    /// Copied from https://github.com/github/linguist/blob/master/lib/linguist/languages.yml [MIT]\n    var fileExtensions: [String] {\n        switch self {\n        case .abap:\n            return [\"abap\"]\n        case .windowsbat:\n            return [\"bat\", \"cmd\"]\n        case .bibtex:\n            return [\"bib\", \"bibtex\"]\n        case .clojure:\n            return [\"clj\", \"boot\", \"cl2\", \"cljc\", \"cljs\", \"cljs.hl\", \"cljscm\", \"cljx\", \"hic\"]\n        case .coffeescript:\n            return [\"coffee\", \"_coffee\", \"cjsx\", \"cson\", \"iced\"]\n        case .c:\n            return [\"c\", \"cats\", \"idc\"]\n        case .cpp:\n            return [\"cpp\", \"c++\", \"cc\", \"cp\", \"cxx\", \"h++\", \"hh\", \"hpp\", \"hxx\", \"inl\", \"ino\", \"ipp\",\n                    \"ixx\", \"re\", \"tcc\", \"tpp\"]\n        case .csharp:\n            return [\"cs\", \"cake\", \"csx\", \"linq\"]\n        case .css:\n            return [\"css\"]\n        case .diff:\n            return [\"diff\", \"patch\"]\n        case .dart:\n            return [\"dart\"]\n        case .dockerfile:\n            return [\"dockerfile\"]\n        case .elixir:\n            return [\"ex\", \"exs\"]\n        case .erlang:\n            return [\"erl\", \"es\", \"escript\", \"hrl\"]\n        case .fsharp:\n            return [\"fs\", \"fsi\", \"fsx\"]\n        case .gitcommit:\n            return []\n        case .gitrebase:\n            return []\n        case .go:\n            return [\"go\"]\n        case .groovy:\n            return [\"groovy\", \"grt\", \"gtpl\", \"gvy\"]\n        case .handlebars:\n            return [\"handlebars\", \"hbs\"]\n        case .html:\n            return [\"html\", \"hta\", \"htm\", \"inc\", \"xht\", \"xhtml\"]\n        case .ini:\n            return [\"ini\", \"cfg\", \"dof\", \"lektorproject\", \"prefs\", \"pro\", \"properties\", \"url\"]\n        case .java:\n            return [\"java\"]\n        case .javascript:\n            return [\"js\", \"_js\", \"bones\", \"es6\", \"frag\", \"gs\", \"jake\", \"jsb\", \"jsfl\", \"jsm\", \"jss\",\n                    \"njs\", \"pac\", \"sjs\", \"ssjs\", \"xsjs\", \"xsjslib\"]\n        case .javascriptreact:\n            return [\"jsx\"]\n        case .json:\n            return [\"json\"]\n        case .latex:\n            return [\"tex\"]\n        case .less:\n            return [\"less\"]\n        case .lua:\n            return [\"lua\"]\n        case .makefile:\n            return [\"mak\", \"d\", \"mk\"]\n        case .markdown:\n            return [\"md\", \"livemd\", \"markdown\", \"mkd\", \"mkdn\", \"mkdown\", \"ronn\", \"scd\", \"workbook\"]\n        case .objc:\n            return [\"m\", \"h\"]\n        case .objcpp:\n            return [\"mm\"]\n        case .perl:\n            return [\"pl\", \"perl\", \"ph\", \"plx\", /* \"pm\", */ \"pod\", \"psgi\" /* \"t\" */ ]\n        case .perl6:\n            return [\"6pl\", \"6pm\", \"nqp\", \"p6\", \"p6l\", \"p6m\", /* \"pl\", */ \"pl6\", \"pm\", \"pm6\", \"t\"]\n        case .php:\n            return [\"php\", \"aw\", \"ctp\", \"php3\", \"php4\", \"php5\", \"phpt\"]\n        case .powershell:\n            return [\"ps1\", \"psd1\", \"psm1\"]\n        case .pug:\n            return [\"jade\", \"pug\"]\n        case .python:\n            return [\"py\", \"cgi\", \"gyp\", \"lmi\", \"pyde\", \"pyp\", \"pyt\", \"pyw\", \"tac\", \"wsgi\", \"xpy\"]\n        case .r:\n            return [\"r\", \"rd\", \"rsx\"]\n        case .razor:\n            return [\"cshtml\", \"razor\"]\n        case .ruby:\n            return [\"rb\", \"builder\", \"gemspec\", \"god\", \"irbrc\", \"jbuilder\", \"mspec\", \"pluginspec\",\n                    \"podspec\", \"rabl\", \"rake\", \"rbuild\", \"rbw\", \"rbx\", \"ru\", \"ruby\", \"thor\",\n                    \"watchr\"]\n        case .rust:\n            return [\"rs\"]\n        case .scss:\n            return [\"scss\"]\n        case .sass:\n            return [\"sass\"]\n        case .scala:\n            return [\"scala\", \"sbt\", \"sc\"]\n        case .shaderlab:\n            return [\"shader\"]\n        case .shellscript:\n            return [\"sh\"]\n        case .sql:\n            return [\"sql\", \"cql\", \"ddl\", \"prc\", \"tab\", \"udf\", \"viw\"]\n        case .swift:\n            return [\"swift\", \"xcplayground\", \"xcplaygroundpage\", \"playground\"]\n        case .typescript:\n            return [\"ts\"]\n        case .typescriptreact:\n            return [\"tsx\"]\n        case .tex:\n            return [ /* \"tex\", */ \"aux\", \"bbx\", \"cbx\", \"cls\", \"dtx\", \"ins\", \"lbx\", \"ltx\", \"mkii\",\n                     \"mkiv\", \"mkvi\", \"sty\", \"toc\"]\n        case .vb:\n            return [\n                \"vb\",\n                \"bas\",\n//                \"cls\",\n                \"frm\",\n                \"frx\",\n                \"vba\",\n                \"vbhtml\",\n                \"vbs\",\n            ]\n        case .xml:\n            return [\n                \"xml\",\n                \"ant\",\n                \"axml\",\n                \"ccxml\",\n                \"clixml\",\n                \"cproject\",\n                \"csproj\",\n                \"ct\",\n                \"dita\",\n                \"ditamap\",\n                \"ditaval\",\n                \"dll.config\",\n                \"filters\",\n                \"fsproj\",\n                \"fxml\",\n                \"glade\",\n                \"grxml\",\n                \"ivy\",\n                \"jelly\",\n                \"kml\",\n                \"launch\",\n                \"mxml\",\n                \"nproj\",\n                \"nuspec\",\n                \"odd\",\n                \"osm\",\n                \"plist\",\n//                \"pluginspec\",\n                \"ps1xml\",\n                \"psc1\",\n                \"pt\",\n                \"rdf\",\n                \"rss\",\n                \"scxml\",\n                \"srdf\",\n                \"storyboard\",\n                \"stTheme\",\n                \"sublime-snippet\",\n                \"targets\",\n                \"tmCommand\",\n                \"tml\",\n                \"tmLanguage\",\n                \"tmPreferences\",\n                \"tmSnippet\",\n                \"tmTheme\",\n                \"ui\",\n                \"urdf\",\n                \"vbproj\",\n                \"vcxproj\",\n                \"vxml\",\n                \"wsdl\",\n                \"wsf\",\n                \"wxi\",\n                \"wxl\",\n                \"wxs\",\n                \"x3d\",\n                \"xacro\",\n                \"xaml\",\n                \"xib\",\n                \"xlf\",\n                \"xliff\",\n                \"xmi\",\n                \"xml.dist\",\n                \"xsd\",\n                \"xul\",\n                \"zcml\",\n            ]\n        case .xsl:\n            return [\"xsl\"]\n        case .yaml:\n            return [\n                \"yml\",\n                \"reek\",\n                \"rviz\",\n                \"yaml\",\n            ]\n        }\n    }\n}\n\nlet fileExtensionToLanguageId = {\n    var dict = [String: LanguageIdentifier]()\n    for languageId in LanguageIdentifier.allCases {\n        for e in languageId.fileExtensions {\n            dict[e] = languageId\n        }\n    }\n    return dict\n}()\n\npublic func languageIdentifierFromFileURL(_ fileURL: URL) -> CodeLanguage {\n    let fileExtension = fileURL.pathExtension\n    if let builtIn = fileExtensionToLanguageId[fileExtension] {\n        return .builtIn(builtIn)\n    }\n    return .init(rawValue: fileExtension) ?? .plaintext\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/Modification.swift",
    "content": "import Foundation\n\npublic enum Modification: Codable, Equatable {\n    case deleted(ClosedRange<Int>)\n    case inserted(Int, [String])\n}\n\npublic extension [String] {\n    mutating func apply(_ modifications: [Modification]) {\n        for modification in modifications {\n            switch modification {\n            case let .deleted(range):\n                if isEmpty { break }\n                let removingRange = range.lowerBound..<(range.upperBound + 1)\n                removeSubrange(removingRange.clamped(to: 0..<endIndex))\n            case let .inserted(index, strings):\n                insert(contentsOf: strings, at: Swift.min(endIndex, index))\n            }\n        }\n    }\n\n    func applying(_ modifications: [Modification]) -> Array {\n        var newArray = self\n        newArray.apply(modifications)\n        return newArray\n    }\n}\n\npublic extension NSMutableArray {\n    func apply(_ modifications: [Modification]) {\n        for modification in modifications {\n            switch modification {\n            case let .deleted(range):\n                if count == 0 { break }\n                let newRange = range.clamped(to: 0...(count - 1))\n                removeObjects(in: NSRange(newRange))\n            case let .inserted(index, strings):\n                for string in strings.reversed() {\n                    insert(string, at: Swift.min(count, index))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/SuggestionBasic/String+LineEnding.swift",
    "content": "import Foundation\n\npublic extension String {\n    /// The line ending of the string.\n    ///\n    /// We are pretty safe to just check the last character here, in most case, a line ending\n    /// will be in the end of the string.\n    ///\n    /// For other situations, we can assume that they are \"\\n\".\n    var lineEnding: Character {\n        if let last, last.isNewline { return last }\n        return \"\\n\"\n    }\n\n    func splitByNewLine(\n        omittingEmptySubsequences: Bool = true,\n        fast: Bool = true\n    ) -> [Substring] {\n        if fast {\n            let lineEndingInText = lineEnding\n            return split(\n                separator: lineEndingInText,\n                omittingEmptySubsequences: omittingEmptySubsequences\n            )\n        }\n        return split(\n            omittingEmptySubsequences: omittingEmptySubsequences,\n            whereSeparator: \\.isNewline\n        )\n    }\n\n    /// Break a string into lines.\n    func breakLines(\n        proposedLineEnding: String? = nil,\n        appendLineBreakToLastLine: Bool = false\n    ) -> [String] {\n        let lineEndingInText = lineEnding\n        let lineEnding = proposedLineEnding ?? String(lineEndingInText)\n        // Split on character for better performance.\n        let lines = split(separator: lineEndingInText, omittingEmptySubsequences: false)\n        var all = [String]()\n        for (index, line) in lines.enumerated() {\n            if !appendLineBreakToLastLine, index == lines.endIndex - 1 {\n                all.append(String(line))\n            } else {\n                all.append(String(line) + lineEnding)\n            }\n        }\n        return all\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionInjector/SuggestionInjector.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\n// NOTE: Every lines from Xcode Extension has a line break at its end, even the last line.\n// NOTE: Copilot's completion always start at character 0, no matter where the cursor is.\n\npublic struct SuggestionInjector {\n    public init() {}\n\n    public struct ExtraInfo {\n        public var didChangeContent = false\n        public var didChangeCursorPosition = false\n        public var modificationRanges: [String: CursorRange] = [:]\n        public var modifications: [Modification] = []\n        public init() {}\n    }\n\n    public func acceptSuggestion(\n        intoContentWithoutSuggestion content: inout [String],\n        cursorPosition: inout CursorPosition,\n        completion: CodeSuggestion,\n        extraInfo: inout ExtraInfo\n    ) {\n        extraInfo.didChangeContent = true\n        extraInfo.didChangeCursorPosition = true\n        let start = completion.range.start\n        let end = completion.range.end\n        let suggestionContent = completion.text\n        let lineEnding = if let ending = content.first?.last, ending.isNewline {\n            String(ending)\n        } else {\n            \"\\n\"\n        }\n\n        let firstRemovedLine = content[safe: start.line]\n        let lastRemovedLine = completion.replacingLines[safe: max(0, end.line - start.line)]\n        let startLine = max(0, start.line)\n        let endLine = max(start.line, min(end.line, content.endIndex - 1))\n        if startLine < content.endIndex {\n            extraInfo.modifications.append(.deleted(startLine...endLine))\n            content.removeSubrange(startLine...endLine)\n        }\n\n        var toBeInserted = suggestionContent.breakLines(\n            proposedLineEnding: lineEnding,\n            appendLineBreakToLastLine: true\n        )\n\n        // prepending prefix text not in range if needed.\n        if let firstRemovedLine,\n           !firstRemovedLine.isEmptyOrNewLine,\n           start.character > 0,\n           start.character < firstRemovedLine.count,\n           !toBeInserted.isEmpty\n        {\n            let leftoverRange = firstRemovedLine.utf16.startIndex..<(firstRemovedLine.utf16.index(\n                firstRemovedLine.utf16.startIndex,\n                offsetBy: start.character,\n                limitedBy: firstRemovedLine.utf16.endIndex\n            ) ?? firstRemovedLine.utf16.endIndex)\n            var leftover = String(firstRemovedLine[leftoverRange])\n            if leftover.last?.isNewline ?? false {\n                leftover.removeLast(1)\n            }\n            toBeInserted[0].insert(\n                contentsOf: leftover,\n                at: toBeInserted[0].startIndex\n            )\n        }\n\n        let recoveredSuffixLength = recoverSuffixIfNeeded(\n            endOfReplacedContent: end,\n            toBeInserted: &toBeInserted,\n            originalLastRemovedLine: lastRemovedLine,\n            lineEnding: lineEnding\n        )\n\n        let cursorCol = toBeInserted[toBeInserted.endIndex - 1].utf16.count\n            - 1 - recoveredSuffixLength\n        let insertingIndex = min(start.line, content.endIndex)\n        content.insert(contentsOf: toBeInserted, at: insertingIndex)\n        extraInfo.modifications.append(.inserted(insertingIndex, toBeInserted))\n        cursorPosition = .init(\n            line: startLine + toBeInserted.count - 1,\n            character: max(0, cursorCol)\n        )\n        extraInfo.modificationRanges[completion.id] = .init(start: start, end: cursorPosition)\n    }\n\n    public func acceptSuggestions(\n        intoContentWithoutSuggestion content: inout [String],\n        cursorPosition: inout CursorPosition,\n        completions: [CodeSuggestion],\n        extraInfo: inout ExtraInfo\n    ) {\n        let sortedCompletions = completions.sorted {\n            if $0.range.start.line < $1.range.start.line {\n                true\n            } else if $0.range.start.line == $1.range.start.line {\n                $0.range.start.character < $1.range.start.character\n            } else {\n                false\n            }\n        }\n\n        for var completion in sortedCompletions {\n            let lineCountChange: Int = {\n                var accumulation = 0\n                let endIndex = completion.range.start.line\n                for modification in extraInfo.modifications {\n                    switch modification {\n                    case let .deleted(range):\n                        if range.lowerBound <= endIndex {\n                            accumulation -= range.count\n                            if range.upperBound >= endIndex {\n                                accumulation += range.upperBound - endIndex\n                            }\n                        }\n                    case let .inserted(index, lines):\n                        if index <= endIndex {\n                            accumulation += lines.count\n                        }\n                    }\n                }\n                return accumulation\n            }()\n\n            if lineCountChange != 0 {\n                completion.position = CursorPosition(\n                    line: completion.position.line + lineCountChange,\n                    character: completion.position.character\n                )\n                completion.range = CursorRange(\n                    start: CursorPosition(\n                        line: completion.range.start.line + lineCountChange,\n                        character: completion.range.start.character\n                    ),\n                    end: CursorPosition(\n                        line: completion.range.end.line + lineCountChange,\n                        character: completion.range.end.character\n                    )\n                )\n            }\n\n            completion.replacingLines = {\n                let start = completion.range.start.line\n                let end = completion.range.end.line\n                if start >= content.endIndex {\n                    return []\n                }\n                if end < content.endIndex {\n                    return Array(content[start...end])\n                }\n                return Array(content[start...])\n            }()\n\n            // Accept the suggestion\n            acceptSuggestion(\n                intoContentWithoutSuggestion: &content,\n                cursorPosition: &cursorPosition,\n                completion: completion,\n                extraInfo: &extraInfo\n            )\n        }\n    }\n\n    func recoverSuffixIfNeeded(\n        endOfReplacedContent end: CursorPosition,\n        toBeInserted: inout [String],\n        originalLastRemovedLine: String?,\n        lineEnding: String\n    ) -> Int {\n        // If there is no line removed, there is no need to recover anything.\n        guard let lastRemovedLine = originalLastRemovedLine,\n              !lastRemovedLine.isEmptyOrNewLine else { return 0 }\n\n        let lastRemovedLineCleaned = lastRemovedLine.droppedLineBreak()\n\n        // locate the split index, the prefix of which matches the suggestion prefix.\n        let splitIndex = lastRemovedLineCleaned.utf16.index(\n            lastRemovedLineCleaned.utf16.startIndex,\n            offsetBy: end.character,\n            limitedBy: lastRemovedLineCleaned.utf16.endIndex\n        )\n\n        // then check how many characters are not in the suffix of the suggestion.\n        guard let splitIndex, splitIndex != lastRemovedLineCleaned.utf16.endIndex else { return 0 }\n\n        var suffix = String(lastRemovedLineCleaned[splitIndex...])\n\n        // remove the first adjacent placeholder in suffix which looks like `<#Hello#>`\n\n        let regex = try! NSRegularExpression(pattern: \"\\\\s*?<#.*?#>\")\n\n        if let firstPlaceholderRange = regex.firstMatch(\n            in: suffix,\n            options: [],\n            range: NSRange(suffix.startIndex..., in: suffix)\n        )?.range,\n            firstPlaceholderRange.location == 0,\n            let r = Range(firstPlaceholderRange, in: suffix)\n        {\n            suffix.removeSubrange(r)\n        }\n\n        let lastInsertingLine = toBeInserted[toBeInserted.endIndex - 1]\n            .droppedLineBreak()\n            .appending(suffix)\n            .recoveredLineBreak(lineEnding: lineEnding)\n\n        toBeInserted[toBeInserted.endIndex - 1] = lastInsertingLine\n\n        return suffix.utf16.count\n    }\n}\n\npublic struct SuggestionAnalyzer {\n    struct Result {\n        enum InsertPosition {\n            case currentLine\n            case nextLine\n        }\n\n        var insertPosition: InsertPosition\n        var commonPrefix: String?\n    }\n\n    func analyze() -> Result {\n        fatalError()\n    }\n}\n\nextension String {\n    var isEmptyOrNewLine: Bool {\n        isEmpty || self == \"\\n\" || self == \"\\r\\n\" || self == \"\\r\"\n    }\n\n    func droppedLineBreak() -> String {\n        if last?.isNewline ?? false {\n            return String(dropLast(1))\n        }\n        return self\n    }\n\n    func recoveredLineBreak(lineEnding: String) -> String {\n        if hasSuffix(lineEnding) {\n            return self\n        }\n        return self + lineEnding\n    }\n}\n\nfunc longestCommonPrefix(of a: String, and b: String) -> String {\n    let length = min(a.count, b.count)\n\n    var prefix = \"\"\n    for i in 0..<length {\n        let charIndex = a.index(a.startIndex, offsetBy: i)\n        let firstStrChar = a[charIndex]\n        guard b[charIndex] == firstStrChar else { return prefix }\n        prefix += String(firstStrChar)\n    }\n\n    return prefix\n}\n\nextension Array {\n    subscript(safe index: Index) -> Element? {\n        indices.contains(index) ? self[index] : nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionProvider/PostProcessingSuggestionServiceMiddleware.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\npublic struct PostProcessingSuggestionServiceMiddleware: SuggestionServiceMiddleware {\n    public init() {}\n\n    public func getSuggestion(\n        _ request: SuggestionRequest,\n        configuration: SuggestionServiceConfiguration,\n        next: Next\n    ) async throws -> [CodeSuggestion] {\n        let suggestions = try await next(request)\n\n        return suggestions.compactMap {\n            var suggestion = $0\n            if suggestion.text.allSatisfy({ $0.isWhitespace || $0.isNewline }) { return nil }\n            Self.removeTrailingWhitespacesAndNewlines(&suggestion)\n            Self.removeRedundantClosingParenthesis(&suggestion, lines: request.lines)\n            if !Self.checkIfSuggestionHasNoEffect(suggestion, request: request) { return nil }\n            Self.injectReplacingLines(&suggestion, request: request)\n            return suggestion\n        }\n    }\n\n    static func removeTrailingWhitespacesAndNewlines(_ suggestion: inout CodeSuggestion) {\n        suggestion.text = suggestion.text.removedTrailingWhitespacesAndNewlines()\n    }\n    \n    static func injectReplacingLines(\n        _ suggestion: inout CodeSuggestion,\n        request: SuggestionRequest\n    ) {\n        guard !request.lines.isEmpty else { return }\n        let range = suggestion.range\n        let lowerBound = max(0, range.start.line)\n        let upperBound = max(lowerBound, min(request.lines.count - 1, range.end.line))\n        suggestion.replacingLines = Array(request.lines[lowerBound...upperBound])\n    }\n\n    /// Remove the parenthesis in the last line of the suggestion if\n    /// - It contains only closing parenthesis\n    /// - It's identical to the next line below the range of the suggestion\n    static func removeRedundantClosingParenthesis(\n        _ suggestion: inout CodeSuggestion,\n        lines: [String]\n    ) {\n        let nextLineIndex = suggestion.range.end.line + 1\n        guard nextLineIndex < lines.endIndex, nextLineIndex >= 0 else { return }\n        let nextLine = lines[nextLineIndex].dropLast(1)\n        let lineBreakIndex = suggestion.text.lastIndex(where: { $0.isNewline })\n        let lastLineIndex = if let index = lineBreakIndex {\n            suggestion.text.index(after: index)\n        } else {\n            suggestion.text.startIndex\n        }\n        guard lastLineIndex < suggestion.text.endIndex else { return }\n        let lastSuggestionLine = suggestion.text[lastLineIndex...]\n        guard lastSuggestionLine == nextLine else { return }\n\n        let closingParenthesis: [Character] = [\")\", \"]\", \"}\", \">\"]\n        let validCharacters = Set(closingParenthesis + [\" \", \",\"])\n\n        let trimmedLastSuggestionLine = nextLine.trimmingCharacters(in: .whitespacesAndNewlines)\n        guard !trimmedLastSuggestionLine.isEmpty else { return }\n\n        if trimmedLastSuggestionLine == \"```\"\n            || trimmedLastSuggestionLine == \"\\\"\\\"\\\"\"\n            || trimmedLastSuggestionLine.allSatisfy({ validCharacters.contains($0) })\n        {\n            if let lastIndex = lineBreakIndex {\n                suggestion.text = String(suggestion.text[..<lastIndex])\n            } else {\n                suggestion.text = \"\"\n            }\n            suggestion.middlewareComments.append(\"Removed redundant closing parenthesis.\")\n        }\n    }\n\n    static func checkIfSuggestionHasNoEffect(\n        _ suggestion: CodeSuggestion,\n        request: SuggestionRequest\n    ) -> Bool {\n        // We only check suggestions that are on a single line.\n        if suggestion.range.isOneLine {\n            let line = suggestion.range.start.line\n            if line >= 0, line < request.lines.count {\n                let replacingText = request.lines[line]\n\n                let start = suggestion.range.start.character\n                let end = suggestion.range.end.character\n                if let endIndex = replacingText.utf16.index(\n                    replacingText.startIndex,\n                    offsetBy: end,\n                    limitedBy: replacingText.endIndex\n                ),\n                    let startIndex = replacingText.utf16.index(\n                        replacingText.startIndex,\n                        offsetBy: start,\n                        limitedBy: endIndex\n                    ),\n                    startIndex < endIndex\n                {\n                    let replacingRange = startIndex..<endIndex\n                    // Build up the replaced text.\n                    let replacedText = replacingText.replacingCharacters(\n                        in: replacingRange,\n                        with: suggestion.text\n                    )\n\n                    // If it's identical to the original text, ignore the suggestion.\n                    if replacedText == replacingText { return false }\n                }\n            }\n        }\n\n        return true\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionProvider/String+Extension.swift",
    "content": "import Foundation\n\npublic extension String {\n    func removedTrailingWhitespacesAndNewlines() -> String {\n        var text = self[...]\n        while let last = text.last, last.isNewline || last.isWhitespace {\n            text = text.dropLast(1)\n        }\n        return String(text)\n    }\n    \n    func removedTrailingCharacters(in set: CharacterSet) -> String {\n        var text = self[...]\n        while let last = text.last, set.containsUnicodeScalars(of: last) {\n            text = text.dropLast(1)\n        }\n        return String(text)\n    }\n    \n    func removeLeadingCharacters(in set: CharacterSet) -> String {\n        var text = self[...]\n        while let first = text.first, set.containsUnicodeScalars(of: first) {\n            text = text.dropFirst()\n        }\n        return String(text)\n    }\n}\n\nextension CharacterSet {\n    func containsUnicodeScalars(of character: Character) -> Bool {\n        return character.unicodeScalars.allSatisfy(contains(_:))\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/SuggestionProvider/SuggestionProvider.swift",
    "content": "import AppKit\nimport struct CopilotForXcodeKit.SuggestionServiceConfiguration\nimport struct CopilotForXcodeKit.WorkspaceInfo\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport UserDefaultsObserver\n\npublic struct SuggestionRequest {\n    public var fileURL: URL\n    public var relativePath: String\n    public var content: String\n    public var originalContent: String\n    public var lines: [String]\n    public var cursorPosition: CursorPosition\n    public var cursorOffset: Int\n    public var tabSize: Int\n    public var indentSize: Int\n    public var usesTabsForIndentation: Bool\n    public var relevantCodeSnippets: [RelevantCodeSnippet]\n\n    public init(\n        fileURL: URL,\n        relativePath: String,\n        content: String,\n        originalContent: String,\n        lines: [String],\n        cursorPosition: CursorPosition,\n        cursorOffset: Int,\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool,\n        relevantCodeSnippets: [RelevantCodeSnippet]\n    ) {\n        self.fileURL = fileURL\n        self.relativePath = relativePath\n        self.content = content\n        self.originalContent = content\n        self.lines = lines\n        self.cursorPosition = cursorPosition\n        self.cursorOffset = cursorOffset\n        self.tabSize = tabSize\n        self.indentSize = indentSize\n        self.usesTabsForIndentation = usesTabsForIndentation\n        self.relevantCodeSnippets = relevantCodeSnippets\n    }\n}\n\npublic struct RelevantCodeSnippet: Codable {\n    public var content: String\n    public var priority: Int\n    public var filePath: String\n\n    public init(content: String, priority: Int, filePath: String) {\n        self.content = content\n        self.priority = priority\n        self.filePath = filePath\n    }\n}\n\npublic protocol SuggestionServiceProvider {\n    func getSuggestions(\n        _ request: SuggestionRequest,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async throws -> [CodeSuggestion]\n    func notifyAccepted(\n        _ suggestion: CodeSuggestion,\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async\n    func notifyRejected(\n        _ suggestions: [CodeSuggestion],\n        workspaceInfo: CopilotForXcodeKit.WorkspaceInfo\n    ) async\n    func cancelRequest(workspaceInfo: CopilotForXcodeKit.WorkspaceInfo) async\n\n    var configuration: SuggestionServiceConfiguration { get async }\n}\n\npublic typealias SuggestionServiceConfiguration = CopilotForXcodeKit.SuggestionServiceConfiguration\n"
  },
  {
    "path": "Tool/Sources/SuggestionProvider/SuggestionServiceEventHandler.swift",
    "content": "import CopilotForXcodeKit\nimport Foundation\nimport SuggestionBasic\n\npublic protocol SuggestionServiceEventHandler {\n    func didAccept(_ suggestion: SuggestionBasic.CodeSuggestion, workspaceInfo: WorkspaceInfo)\n    func didReject(_ suggestions: [SuggestionBasic.CodeSuggestion], workspaceInfo: WorkspaceInfo)\n}\n\npublic enum SuggestionServiceEventHandlerContainer {\n    static var builtinHandlers: [SuggestionServiceEventHandler] = []\n\n    static var customHandlers: [SuggestionServiceEventHandler] = []\n\n    public static var handlers: [SuggestionServiceEventHandler] {\n        builtinHandlers + customHandlers\n    }\n\n    public static func addHandler(_ handler: SuggestionServiceEventHandler) {\n        customHandlers.append(handler)\n    }\n\n    public static func addHandlers(_ handlers: [SuggestionServiceEventHandler]) {\n        customHandlers.append(contentsOf: handlers)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/SuggestionProvider/SuggestionServiceMiddleware.swift",
    "content": "import Foundation\nimport Logger\nimport SuggestionBasic\n\npublic protocol SuggestionServiceMiddleware {\n    typealias Next = (SuggestionRequest) async throws -> [CodeSuggestion]\n\n    func getSuggestion(\n        _ request: SuggestionRequest,\n        configuration: SuggestionServiceConfiguration,\n        next: Next\n    ) async throws -> [CodeSuggestion]\n}\n\npublic enum SuggestionServiceMiddlewareContainer {\n    static var builtInMiddlewares: [SuggestionServiceMiddleware] = [\n        DisabledLanguageSuggestionServiceMiddleware(),\n        PostProcessingSuggestionServiceMiddleware()\n    ]\n    \n    static var leadingMiddlewares: [SuggestionServiceMiddleware] = []\n\n    static var trailingMiddlewares: [SuggestionServiceMiddleware] = []\n\n    public static var middlewares: [SuggestionServiceMiddleware] {\n        leadingMiddlewares + builtInMiddlewares + trailingMiddlewares\n    }\n\n    public static func addMiddleware(_ middleware: SuggestionServiceMiddleware) {\n        trailingMiddlewares.append(middleware)\n    }\n    \n    public static func addMiddlewares(_ middlewares: [SuggestionServiceMiddleware]) {\n        trailingMiddlewares.append(contentsOf: middlewares)\n    }\n\n    public static func addLeadingMiddleware(_ middleware: SuggestionServiceMiddleware) {\n        leadingMiddlewares.append(middleware)\n    }\n    \n    public static func addLeadingMiddlewares(_ middlewares: [SuggestionServiceMiddleware]) {\n        leadingMiddlewares.append(contentsOf: middlewares)\n    }\n}\n\npublic struct DisabledLanguageSuggestionServiceMiddleware: SuggestionServiceMiddleware {\n    public init() {}\n    \n    struct DisabledLanguageError: Error, LocalizedError {\n        let language: String\n        var errorDescription: String? {\n            \"Suggestion service is disabled for \\(language).\"\n        }\n    }\n\n    public func getSuggestion(\n        _ request: SuggestionRequest,\n        configuration: SuggestionServiceConfiguration,\n        next: Next\n    ) async throws -> [CodeSuggestion] {\n        let language = languageIdentifierFromFileURL(request.fileURL)\n        if UserDefaults.shared.value(for: \\.suggestionFeatureDisabledLanguageList)\n            .contains(where: { $0 == language.rawValue })\n        {\n            throw DisabledLanguageError(language: language.rawValue)\n        }\n\n        return try await next(request)\n    }\n}\n\npublic struct DebugSuggestionServiceMiddleware: SuggestionServiceMiddleware {\n    public init() {}\n\n    public func getSuggestion(\n        _ request: SuggestionRequest,\n        configuration: SuggestionServiceConfiguration,\n        next: Next\n    ) async throws -> [CodeSuggestion] {\n        Logger.service.info(\"\"\"\n        Get suggestion for \\(request.fileURL) at \\(request.cursorPosition)\n        \"\"\")\n        do {\n            let suggestions = try await next(request)\n            Logger.service.info(\"\"\"\n            Receive \\(suggestions.count) suggestions for \\(request.fileURL) \\\n            at \\(request.cursorPosition)\n            \"\"\")\n            return suggestions\n        } catch {\n            Logger.service.info(\"\"\"\n            Error: \\(error.localizedDescription)\n            \"\"\")\n            throw error\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Terminal/Terminal.swift",
    "content": "import AppKit\nimport Foundation\n\npublic protocol TerminalType {\n    func streamCommand(\n        _ command: String,\n        arguments: [String],\n        currentDirectoryURL: URL?,\n        environment: [String: String]\n    ) -> AsyncThrowingStream<String, Error>\n\n    func streamLineForCommand(\n        _ command: String,\n        arguments: [String],\n        currentDirectoryURL: URL?,\n        environment: [String: String]\n    ) -> AsyncThrowingStream<String, Error>\n\n    func runCommand(\n        _ command: String,\n        arguments: [String],\n        currentDirectoryURL: URL?,\n        environment: [String: String]\n    ) async throws -> String\n\n    func terminate() async\n    func writeInput(_ input: String) async\n    var isRunning: Bool { get }\n}\n\npublic final class Terminal: TerminalType, @unchecked Sendable {\n    var process: Process?\n    var outputPipe: Pipe?\n    var inputPipe: Pipe?\n\n    public var isRunning: Bool { process?.isRunning ?? false }\n\n    public struct TerminationError: Error {\n        public let reason: Process.TerminationReason\n        public let status: Int32\n    }\n\n    public init() {}\n\n    func getEnvironmentVariables() -> [String: String] {\n        let env = ProcessInfo.processInfo.environment\n            .merging([\"LANG\": \"en_US.UTF-8\"], uniquingKeysWith: { $1 })\n        return env\n    }\n\n    public func streamCommand(\n        _ command: String = \"/bin/bash\",\n        arguments: [String],\n        currentDirectoryURL: URL? = nil,\n        environment: [String: String]\n    ) -> AsyncThrowingStream<String, Error> {\n        self.process?.terminate()\n        let process = Process()\n        self.process = process\n\n        process.launchPath = command\n        process.currentDirectoryURL = currentDirectoryURL\n        process.arguments = arguments\n        process.environment = getEnvironmentVariables()\n            .merging(environment, uniquingKeysWith: { $1 })\n\n        let outputPipe = Pipe()\n        process.standardOutput = outputPipe\n        process.standardError = outputPipe\n        self.outputPipe = outputPipe\n\n        let inputPipe = Pipe()\n        process.standardInput = inputPipe\n        self.inputPipe = inputPipe\n\n        var continuation: AsyncThrowingStream<String, Error>.Continuation!\n        let contentStream = AsyncThrowingStream<String, Error> { cont in\n            continuation = cont\n        }\n\n        Task { [continuation, process, self] in\n            _ = self\n            let notificationCenter = NotificationCenter.default\n            let notifications = notificationCenter.notifications(\n                named: FileHandle.readCompletionNotification,\n                object: outputPipe.fileHandleForReading\n            )\n            for await notification in notifications {\n                let userInfo = notification.userInfo\n                guard let object = notification.object as? FileHandle,\n                      object === outputPipe.fileHandleForReading\n                else {\n                    continue\n                }\n                if let data = userInfo?[NSFileHandleNotificationDataItem] as? Data,\n                   let content = String(data: data, encoding: .utf8),\n                   !content.isEmpty\n                {\n                    continuation?.yield(content)\n                }\n                if !process.isRunning {\n                    if let fileHandle = (process.standardOutput as? Pipe)?\n                        .fileHandleForReading,\n                        let data = try? fileHandle.readToEnd(),\n                        let content = String(data: data, encoding: .utf8),\n                        !content.isEmpty\n                    {\n                        continuation?.yield(content)\n                    }\n\n                    let status = process.terminationStatus\n\n                    if status == 0 {\n                        continuation?.finish()\n                    } else {\n                        let reason = process.terminationReason\n                        continuation?.finish(throwing: TerminationError(\n                            reason: reason,\n                            status: status\n                        ))\n                    }\n                    break\n                }\n                Task { @MainActor in\n                    outputPipe.fileHandleForReading.readInBackgroundAndNotify(forModes: [.common])\n                }\n            }\n        }\n\n        Task { @MainActor in\n            outputPipe.fileHandleForReading.readInBackgroundAndNotify(forModes: [.common])\n        }\n\n        do {\n            try process.run()\n        } catch {\n            continuation.finish(throwing: error)\n        }\n\n        return contentStream\n    }\n\n    public func streamLineForCommand(\n        _ command: String = \"/bin/bash\",\n        arguments: [String],\n        currentDirectoryURL: URL? = nil,\n        environment: [String: String]\n    ) -> AsyncThrowingStream<String, Error> {\n        let chunkStream = streamCommand(\n            command,\n            arguments: arguments,\n            currentDirectoryURL: currentDirectoryURL,\n            environment: environment\n        )\n\n        return AsyncThrowingStream<String, Error> { continuation in\n            Task {\n                var buffer = \"\"\n                do {\n                    for try await chunk in chunkStream {\n                        buffer.append(chunk)\n\n                        while let range = buffer.range(of: \"\\n\") {\n                            let line = String(buffer[..<range.lowerBound])\n                            buffer.removeSubrange(buffer.startIndex..<range.upperBound)\n                            continuation.yield(line)\n                        }\n                    }\n\n                    let trailing = buffer.trimmingCharacters(in: .whitespacesAndNewlines)\n                    if !trailing.isEmpty {\n                        continuation.yield(trailing)\n                    }\n\n                    continuation.finish()\n                } catch {\n                    continuation.finish(throwing: error)\n                }\n            }\n        }\n    }\n\n    public func runCommand(\n        _ command: String = \"/bin/bash\",\n        arguments: [String],\n        currentDirectoryURL: URL? = nil,\n        environment: [String: String]\n    ) async throws -> String {\n        let process = Process()\n        process.launchPath = command\n        process.currentDirectoryURL = currentDirectoryURL\n        process.arguments = arguments\n        process.environment = getEnvironmentVariables()\n            .merging(environment, uniquingKeysWith: { $1 })\n\n        let outputPipe = Pipe()\n        process.standardOutput = outputPipe\n        process.standardError = outputPipe\n        self.outputPipe = outputPipe\n\n        let inputPipe = Pipe()\n        process.standardInput = inputPipe\n        self.inputPipe = inputPipe\n\n        return try await withUnsafeThrowingContinuation { continuation in\n            do {\n                process.terminationHandler = { process in\n                    do {\n                        if let data = try outputPipe.fileHandleForReading.readToEnd(),\n                           let content = String(data: data, encoding: .utf8)\n                        {\n                            if process.terminationStatus == 0 {\n                                continuation.resume(returning: content)\n                            } else {\n                                struct LocalizedTerminationError: Error, LocalizedError {\n                                    let terminationError: TerminationError\n                                    let errorDescription: String?\n                                }\n                                continuation.resume(throwing: LocalizedTerminationError(\n                                    terminationError: .init(\n                                        reason: process.terminationReason,\n                                        status: process.terminationStatus\n                                    ),\n                                    errorDescription: content\n                                ))\n                            }\n                            return\n                        }\n                        continuation.resume(returning: \"\")\n                    } catch {\n                        continuation.resume(throwing: error)\n                    }\n                }\n                try process.run()\n            } catch {\n                continuation.resume(throwing: error)\n            }\n        }\n    }\n\n    public func writeInput(_ input: String) {\n        guard let data = input.data(using: .utf8) else {\n            return\n        }\n\n        inputPipe?.fileHandleForWriting.write(data)\n        inputPipe?.fileHandleForWriting.closeFile()\n    }\n\n    public func terminate() async {\n        process?.terminate()\n        process = nil\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Toast/Toast.swift",
    "content": "import ComposableArchitecture\nimport Dependencies\nimport Foundation\nimport SwiftUI\n\npublic enum ToastType {\n    case info\n    case warning\n    case error\n}\n\npublic struct ToastKey: EnvironmentKey {\n    public static var defaultValue: (String, ToastType) -> Void = { _, _ in }\n}\n\npublic extension EnvironmentValues {\n    var toast: (String, ToastType) -> Void {\n        get { self[ToastKey.self] }\n        set { self[ToastKey.self] = newValue }\n    }\n}\n\npublic struct ToastControllerDependencyKey: DependencyKey {\n    public static let liveValue = ToastController(messages: [])\n}\n\npublic extension DependencyValues {\n    var toastController: ToastController {\n        get { self[ToastControllerDependencyKey.self] }\n        set { self[ToastControllerDependencyKey.self] = newValue }\n    }\n\n    var toast: (String, ToastType) -> Void {\n        return { content, type in\n            toastController.toast(content: content, type: type, namespace: nil)\n        }\n    }\n\n    var namespacedToast: (String, ToastType, String) -> Void {\n        return {\n            content, type, namespace in\n            toastController.toast(content: content, type: type, namespace: namespace)\n        }\n    }\n}\n\npublic class ToastController: ObservableObject {\n    public struct Message: Identifiable, Equatable {\n        public struct MessageButton: Equatable {\n            public static func == (lhs: Self, rhs: Self) -> Bool {\n                lhs.label == rhs.label\n            }\n\n            public var label: Text\n            public var action: () -> Void\n            public init(label: Text, action: @escaping () -> Void) {\n                self.label = label\n                self.action = action\n            }\n        }\n\n        public var namespace: String?\n        public var id: UUID\n        public var type: ToastType\n        public var content: Text\n        public var buttons: [MessageButton]\n        public init(\n            id: UUID,\n            type: ToastType,\n            namespace: String? = nil,\n            content: Text,\n            buttons: [MessageButton] = []\n        ) {\n            self.namespace = namespace\n            self.id = id\n            self.type = type\n            self.content = content\n            self.buttons = buttons\n        }\n    }\n\n    @Published public var messages: [Message] = []\n\n    // Track removal tasks for each toast\n    private var removalTasks: [UUID: Task<Void, Error>] = [:]\n\n    public init(messages: [Message]) {\n        self.messages = messages\n    }\n\n    public func toast(\n        content: String,\n        type: ToastType,\n        namespace: String? = nil,\n        buttons: [Message.MessageButton] = [],\n        duration: TimeInterval = 4\n    ) {\n        Task { @MainActor in\n            // Find existing message with same content and type (and namespace)\n            if let existingIndex = messages.firstIndex(where: {\n                $0.type == type &&\n                $0.content == Text(content) &&\n                $0.namespace == namespace\n            }) {\n                let existingMessage = messages[existingIndex]\n                // Cancel previous removal task\n                removalTasks[existingMessage.id]?.cancel()\n                // Start new removal task for this message\n                removalTasks[existingMessage.id] = Task { @MainActor in\n                    try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                    withAnimation(.easeInOut(duration: 0.2)) {\n                        messages.removeAll { $0.id == existingMessage.id }\n                    }\n                    removalTasks.removeValue(forKey: existingMessage.id)\n                }\n                return\n            }\n            \n            let id = UUID()\n            let message = Message(\n                id: id,\n                type: type,\n                namespace: namespace,\n                content: Text(content),\n                buttons: buttons.map { b in\n                    Message.MessageButton(label: b.label, action: { [weak self] in\n                        b.action()\n                        withAnimation(.easeInOut(duration: 0.2)) {\n                            self?.messages.removeAll { $0.id == id }\n                        }\n                    })\n                }\n            )\n            \n            withAnimation(.easeInOut(duration: 0.2)) {\n                messages.append(message)\n                messages = messages.suffix(3)\n            }\n            \n            removalTasks[id] = Task { @MainActor in\n                try await Task.sleep(nanoseconds: UInt64(duration * 1_000_000_000))\n                withAnimation(.easeInOut(duration: 0.2)) {\n                    messages.removeAll { $0.id == id }\n                }\n                removalTasks.removeValue(forKey: id)\n            }\n        }\n    }\n}\n\n@Reducer\npublic struct Toast {\n    public typealias Message = ToastController.Message\n\n    @ObservableState\n    public struct State: Equatable {\n        var isObservingToastController = false\n        public var messages: [Message] = []\n\n        public init(messages: [Message] = []) {\n            self.messages = messages\n        }\n    }\n\n    public enum Action: Equatable {\n        case start\n        case updateMessages([Message])\n        case toast(String, ToastType, String?)\n    }\n\n    @Dependency(\\.toastController) var toastController\n\n    struct CancelID: Hashable {}\n\n    public init() {}\n\n    public var body: some ReducerOf<Self> {\n        Reduce { state, action in\n            switch action {\n            case .start:\n                guard !state.isObservingToastController else { return .none }\n                state.isObservingToastController = true\n                return .run { send in\n                    let stream = AsyncStream<[Message]> { continuation in\n                        let cancellable = toastController.$messages.sink { newValue in\n                            continuation.yield(newValue)\n                        }\n                        continuation.onTermination = { _ in\n                            cancellable.cancel()\n                        }\n                    }\n                    for await newValue in stream {\n                        try Task.checkCancellation()\n                        await send(.updateMessages(newValue), animation: .linear(duration: 0.2))\n                    }\n                }.cancellable(id: CancelID(), cancelInFlight: true)\n            case let .updateMessages(messages):\n                state.messages = messages\n                return .none\n            case let .toast(content, type, namespace):\n                toastController.toast(content: content, type: type, namespace: namespace)\n                return .none\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/TokenEncoder/CharacterTokenCounter.swift",
    "content": "import Foundation\n\npublic struct CharacterTokenCounter: TokenCounter {\n    public func countToken(text: String) -> Int {\n        text.count\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/TokenEncoder/GoogleAITokenCounter.swift",
    "content": "import GoogleGenerativeAI\n\npublic final class GoogleAITokenCounter: TokenCounter {\n    let model: GenerativeModel\n    \n    public init(model: GenerativeModel) {\n        self.model = model\n    }\n    \n    public func countToken(text: String) async -> Int {\n        (try? await model.countTokens(text))?.totalTokens ?? text.count\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/TokenEncoder/Resources/cl100k_base.tiktoken",
    "content": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ== 16\nMg== 17\nMw== 18\nNA== 19\nNQ== 20\nNg== 21\nNw== 22\nOA== 23\nOQ== 24\nOg== 25\nOw== 26\nPA== 27\nPQ== 28\nPg== 29\nPw== 30\nQA== 31\nQQ== 32\nQg== 33\nQw== 34\nRA== 35\nRQ== 36\nRg== 37\nRw== 38\nSA== 39\nSQ== 40\nSg== 41\nSw== 42\nTA== 43\nTQ== 44\nTg== 45\nTw== 46\nUA== 47\nUQ== 48\nUg== 49\nUw== 50\nVA== 51\nVQ== 52\nVg== 53\nVw== 54\nWA== 55\nWQ== 56\nWg== 57\nWw== 58\nXA== 59\nXQ== 60\nXg== 61\nXw== 62\nYA== 63\nYQ== 64\nYg== 65\nYw== 66\nZA== 67\nZQ== 68\nZg== 69\nZw== 70\naA== 71\naQ== 72\nag== 73\naw== 74\nbA== 75\nbQ== 76\nbg== 77\nbw== 78\ncA== 79\ncQ== 80\ncg== 81\ncw== 82\ndA== 83\ndQ== 84\ndg== 85\ndw== 86\neA== 87\neQ== 88\neg== 89\new== 90\nfA== 91\nfQ== 92\nfg== 93\noQ== 94\nog== 95\now== 96\npA== 97\npQ== 98\npg== 99\npw== 100\nqA== 101\nqQ== 102\nqg== 103\nqw== 104\nrA== 105\nrg== 106\nrw== 107\nsA== 108\nsQ== 109\nsg== 110\nsw== 111\ntA== 112\ntQ== 113\ntg== 114\ntw== 115\nuA== 116\nuQ== 117\nug== 118\nuw== 119\nvA== 120\nvQ== 121\nvg== 122\nvw== 123\nwA== 124\nwQ== 125\nwg== 126\nww== 127\nxA== 128\nxQ== 129\nxg== 130\nxw== 131\nyA== 132\nyQ== 133\nyg== 134\nyw== 135\nzA== 136\nzQ== 137\nzg== 138\nzw== 139\n0A== 140\n0Q== 141\n0g== 142\n0w== 143\n1A== 144\n1Q== 145\n1g== 146\n1w== 147\n2A== 148\n2Q== 149\n2g== 150\n2w== 151\n3A== 152\n3Q== 153\n3g== 154\n3w== 155\n4A== 156\n4Q== 157\n4g== 158\n4w== 159\n5A== 160\n5Q== 161\n5g== 162\n5w== 163\n6A== 164\n6Q== 165\n6g== 166\n6w== 167\n7A== 168\n7Q== 169\n7g== 170\n7w== 171\n8A== 172\n8Q== 173\n8g== 174\n8w== 175\n9A== 176\n9Q== 177\n9g== 178\n9w== 179\n+A== 180\n+Q== 181\n+g== 182\n+w== 183\n/A== 184\n/Q== 185\n/g== 186\n/w== 187\nAA== 188\nAQ== 189\nAg== 190\nAw== 191\nBA== 192\nBQ== 193\nBg== 194\nBw== 195\nCA== 196\nCQ== 197\nCg== 198\nCw== 199\nDA== 200\nDQ== 201\nDg== 202\nDw== 203\nEA== 204\nEQ== 205\nEg== 206\nEw== 207\nFA== 208\nFQ== 209\nFg== 210\nFw== 211\nGA== 212\nGQ== 213\nGg== 214\nGw== 215\nHA== 216\nHQ== 217\nHg== 218\nHw== 219\nIA== 220\nfw== 221\ngA== 222\ngQ== 223\ngg== 224\ngw== 225\nhA== 226\nhQ== 227\nhg== 228\nhw== 229\niA== 230\niQ== 231\nig== 232\niw== 233\njA== 234\njQ== 235\njg== 236\njw== 237\nkA== 238\nkQ== 239\nkg== 240\nkw== 241\nlA== 242\nlQ== 243\nlg== 244\nlw== 245\nmA== 246\nmQ== 247\nmg== 248\nmw== 249\nnA== 250\nnQ== 251\nng== 252\nnw== 253\noA== 254\nrQ== 255\nICA= 256\nICAgIA== 257\naW4= 258\nIHQ= 259\nICAgICAgICA= 260\nZXI= 261\nICAg 262\nb24= 263\nIGE= 264\ncmU= 265\nYXQ= 266\nc3Q= 267\nZW4= 268\nb3I= 269\nIHRo 270\nCgo= 271\nIGM= 272\nbGU= 273\nIHM= 274\naXQ= 275\nYW4= 276\nYXI= 277\nYWw= 278\nIHRoZQ== 279\nOwo= 280\nIHA= 281\nIGY= 282\nb3U= 283\nID0= 284\naXM= 285\nICAgICAgIA== 286\naW5n 287\nZXM= 288\nIHc= 289\naW9u 290\nZWQ= 291\naWM= 292\nIGI= 293\nIGQ= 294\nZXQ= 295\nIG0= 296\nIG8= 297\nCQk= 298\ncm8= 299\nYXM= 300\nZWw= 301\nY3Q= 302\nbmQ= 303\nIGlu 304\nIGg= 305\nZW50 306\naWQ= 307\nIG4= 308\nYW0= 309\nICAgICAgICAgICA= 310\nIHRv 311\nIHJl 312\nLS0= 313\nIHs= 314\nIG9m 315\nb20= 316\nKTsK 317\naW0= 318\nDQo= 319\nICg= 320\naWw= 321\nLy8= 322\nIGFuZA== 323\ndXI= 324\nc2U= 325\nIGw= 326\nZXg= 327\nIFM= 328\nYWQ= 329\nICI= 330\nY2g= 331\ndXQ= 332\naWY= 333\nKio= 334\nIH0= 335\nZW0= 336\nb2w= 337\nICAgICAgICAgICAgICAgIA== 338\ndGg= 339\nKQo= 340\nIHsK 341\nIGc= 342\naWc= 343\naXY= 344\nLAo= 345\nY2U= 346\nb2Q= 347\nIHY= 348\nYXRl 349\nIFQ= 350\nYWc= 351\nYXk= 352\nICo= 353\nb3Q= 354\ndXM= 355\nIEM= 356\nIHN0 357\nIEk= 358\ndW4= 359\ndWw= 360\ndWU= 361\nIEE= 362\nb3c= 363\nICc= 364\nZXc= 365\nIDw= 366\nYXRpb24= 367\nKCk= 368\nIGZvcg== 369\nYWI= 370\nb3J0 371\ndW0= 372\nYW1l 373\nIGlz 374\ncGU= 375\ndHI= 376\nY2s= 377\n4oA= 378\nIHk= 379\naXN0 380\nLS0tLQ== 381\nLgoK 382\naGU= 383\nIGU= 384\nbG8= 385\nIE0= 386\nIGJl 387\nZXJz 388\nIG9u 389\nIGNvbg== 390\nYXA= 391\ndWI= 392\nIFA= 393\nICAgICAgICAgICAgICAg 394\nYXNz 395\naW50 396\nPgo= 397\nbHk= 398\ndXJu 399\nICQ= 400\nOwoK 401\nYXY= 402\ncG9ydA== 403\naXI= 404\nLT4= 405\nbnQ= 406\nY3Rpb24= 407\nZW5k 408\nIGRl 409\nMDA= 410\naXRo 411\nb3V0 412\ndHVybg== 413\nb3Vy 414\nICAgICA= 415\nbGlj 416\ncmVz 417\ncHQ= 418\nPT0= 419\nIHRoaXM= 420\nIHdo 421\nIGlm 422\nIEQ= 423\ndmVy 424\nYWdl 425\nIEI= 426\naHQ= 427\nZXh0 428\nPSI= 429\nIHRoYXQ= 430\nKioqKg== 431\nIFI= 432\nIGl0 433\nZXNz 434\nIEY= 435\nIHI= 436\nb3M= 437\nYW5k 438\nIGFz 439\nZWN0 440\na2U= 441\ncm9t 442\nIC8v 443\nY29u 444\nIEw= 445\nKCI= 446\ncXU= 447\nbGFzcw== 448\nIHdpdGg= 449\naXo= 450\nZGU= 451\nIE4= 452\nIGFs 453\nb3A= 454\ndXA= 455\nZ2V0 456\nIH0K 457\naWxl 458\nIGFu 459\nYXRh 460\nb3Jl 461\ncmk= 462\nIHBybw== 463\nOw0K 464\nCQkJCQ== 465\ndGVy 466\nYWlu 467\nIFc= 468\nIEU= 469\nIGNvbQ== 470\nIHJldHVybg== 471\nYXJ0 472\nIEg= 473\nYWNr 474\naW1wb3J0 475\ndWJsaWM= 476\nIG9y 477\nZXN0 478\nbWVudA== 479\nIEc= 480\nYWJsZQ== 481\nIC0= 482\naW5l 483\naWxs 484\naW5k 485\nZXJl 486\nOjo= 487\naXR5 488\nICs= 489\nIHRy 490\nZWxm 491\naWdodA== 492\nKCc= 493\nb3Jt 494\ndWx0 495\nc3Ry 496\nLi4= 497\nIiw= 498\nIHlvdQ== 499\neXBl 500\ncGw= 501\nIG5ldw== 502\nIGo= 503\nICAgICAgICAgICAgICAgICAgIA== 504\nIGZyb20= 505\nIGV4 506\nIE8= 507\nMjA= 508\nbGQ= 509\nIFs= 510\nb2M= 511\nOgo= 512\nIHNl 513\nIGxl 514\nLS0tLS0tLS0= 515\nLnM= 516\newo= 517\nJyw= 518\nYW50 519\nIGF0 520\nYXNl 521\nLmM= 522\nIGNo 523\nPC8= 524\nYXZl 525\nYW5n 526\nIGFyZQ== 527\nIGludA== 528\n4oCZ 529\nX3Q= 530\nZXJ0 531\naWFs 532\nYWN0 533\nfQo= 534\naXZl 535\nb2Rl 536\nb3N0 537\nIGNsYXNz 538\nIG5vdA== 539\nb2c= 540\nb3Jk 541\nYWx1ZQ== 542\nYWxs 543\nZmY= 544\nKCk7Cg== 545\nb250 546\naW1l 547\nYXJl 548\nIFU= 549\nIHBy 550\nIDo= 551\naWVz 552\naXpl 553\ndXJl 554\nIGJ5 555\naXJl 556\nIH0KCg== 557\nLnA= 558\nIHNo 559\naWNl 560\nYXN0 561\ncHRpb24= 562\ndHJpbmc= 563\nb2s= 564\nX18= 565\nY2w= 566\nIyM= 567\nIGhl 568\nYXJk 569\nKS4= 570\nIEA= 571\naWV3 572\nCQkJ 573\nIHdhcw== 574\naXA= 575\ndGhpcw== 576\nIHU= 577\nIFRoZQ== 578\naWRl 579\nYWNl 580\naWI= 581\nYWM= 582\ncm91 583\nIHdl 584\namVjdA== 585\nIHB1YmxpYw== 586\nYWs= 587\ndmU= 588\nYXRo 589\nb2lk 590\nID0+ 591\ndXN0 592\ncXVl 593\nIHJlcw== 594\nKSk= 595\nJ3M= 596\nIGs= 597\nYW5z 598\neXN0 599\ndW5jdGlvbg== 600\nKioqKioqKio= 601\nIGk= 602\nIHVz 603\ncHA= 604\nMTA= 605\nb25l 606\nYWls 607\nPT09PQ== 608\nbmFtZQ== 609\nIHN0cg== 610\nIC8= 611\nICY= 612\nYWNo 613\nZGl2 614\neXN0ZW0= 615\nZWxs 616\nIGhhdmU= 617\nZXJy 618\nb3VsZA== 619\ndWxs 620\ncG9u 621\nIEo= 622\nX3A= 623\nID09 624\naWdu 625\nU3Q= 626\nLgo= 627\nIHBs 628\nKTsKCg== 629\nZm9ybQ== 630\ncHV0 631\nb3VudA== 632\nfQoK 633\nZGQ= 634\naXRl 635\nIGdldA== 636\ncnI= 637\nb21l 638\nIOKA 639\nYXJhbQ== 640\nY2M= 641\nICov 642\nRVI= 643\nSW4= 644\nbGVz 645\nX3M= 646\nb25n 647\naWU= 648\nIGNhbg== 649\nIFY= 650\nZXJ2 651\ncHI= 652\nIHVu 653\ncm93 654\nYmVy 655\nIGRv 656\nbGw= 657\nIGVs 658\nIHNlbGY= 659\nYXRlZA== 660\nYXJ5 661\nIC4= 662\nJ10= 663\ndWQ= 664\nIGVu 665\nIFRo 666\nICAgICAgICAgICAgICAgICAgICAgICA= 667\ndGU= 668\nX2M= 669\ndWN0 670\nIGFi 671\nb3Jr 672\nLmdldA== 673\nICM= 674\nYXc= 675\ncmVzcw== 676\nb2I= 677\nTmFtZQ== 678\nMjAx 679\nYXBw 680\nWyc= 681\nIGFsbA== 682\nb3J5 683\naXRpb24= 684\nYW5jZQ== 685\nZWFy 686\nIGNvbnQ= 687\ndmVudA== 688\naWE= 689\nIHdpbGw= 690\nSU4= 691\nICAgICAgICAg 692\ncmV0dXJu 693\nIDwv 694\nZGF0YQ== 695\nKQoK 696\nUmU= 697\ncGxl 698\naWxk 699\ndGhlcg== 700\nIHlvdXI= 701\nIgo= 702\nKCQ= 703\nIG91dA== 704\nKSw= 705\nIGhhcw== 706\nU3RyaW5n 707\nc28= 708\nIHVw 709\nYXg= 710\nIGRlZg== 711\nIGJv 712\nZ2U= 713\nYWxzZQ== 714\nT04= 715\ncGVy 716\nMTI= 717\naWNo 718\nIGJ1dA== 719\nIAo= 720\nIF8= 721\nX20= 722\nYWRk 723\ncXVlc3Q= 724\nb2RlbA== 725\nc2VsZg== 726\nZXJ5 727\nZnQ= 728\nZW5z 729\nLy8vLw== 730\nYWtl 731\nLkM= 732\nIGdv 733\nIGZ1bmN0aW9u 734\nIEs= 735\naXZhdGU= 736\nIGlt 737\nIGNvbnN0 738\nLnQ= 739\nICovCg== 740\nKTsNCg== 741\nIHZvaWQ= 742\nIHNldA== 743\nIFN5c3RlbQ== 744\nY3Jp 745\nKCkK 746\nbGk= 747\nCWlm 748\nLm0= 749\nYWxseQ== 750\nc2V0 751\nZXA= 752\n4oCZcw== 753\nYm8= 754\nZGVm 755\nJywK 756\nIG1l 757\nICE= 758\nYXRjaA== 759\nIj4= 760\nIiwK 761\nZWM= 762\nIElu 763\ncGg= 764\nIHw= 765\nX2Y= 766\nIHZhcg== 767\nZW5jZQ== 768\nSWQ= 769\ncmVl 770\naW5r 771\nbGVjdA== 772\ndWc= 773\nZXRo 774\nIGVsc2U= 775\nLS0tLS0tLS0tLS0tLS0tLQ== 776\nMTk= 777\nY29udA== 778\nIHNv 779\nYXRpYw== 780\nIGxv 781\ncHJv 782\ndG9u 783\nc3M= 784\nb3du 785\nYWJlbA== 786\nb2ludA== 787\nb3Vz 788\nZWxk 789\nU1Q= 790\nVGhl 791\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 792\nUkU= 793\nIjo= 794\nb2xvcg== 795\ndHA= 796\nZWc= 797\na2V5 798\ndWRl 799\nIFN0 800\nb3VuZA== 801\nIGFy 802\nIik7Cg== 803\nZW5lcg== 804\nc2Vy 805\nMTE= 806\nYmplY3Q= 807\nZXNzYWdl 808\nZmVy 809\nIG1vcmU= 810\nYXRpb25z 811\nZW50cw== 812\nIGhpcw== 813\nIHRoZXk= 814\nLlM= 815\nIFk= 816\ndXNl 817\nbmU= 818\naXNo 819\nb2xk 820\nX2Q= 821\naW8= 822\naWVsZA== 823\nIHBlcg== 824\nQ29udA== 825\naW5ncw== 826\nIyMjIw== 827\nIGRhdGE= 828\nIHNh 829\nZWY= 830\nZm8= 831\nIG9uZQ== 832\nZW5n 833\nIGRpcw== 834\nQVQ= 835\nIG5hbWU= 836\nIHRydWU= 837\ndmFs 838\nbGVk 839\nLmY= 840\nIG5l 841\nIGVuZA== 842\nMzI= 843\nLlQ= 844\nMTY= 845\nY3Jl 846\nYXJr 847\nbG9n 848\nRXg= 849\nZXJyb3I= 850\nX2lk 851\ndXJyZQ== 852\nYW5nZQ== 853\nIG51bGw= 854\ncnJheQ== 855\nIG15 856\ncGFu 857\naWN0 858\nYXRvcg== 859\nVmlldw== 860\nTGlzdA== 861\nCXJldHVybg== 862\n4oCd 863\nIHByZQ== 864\nIHg= 865\nY2x1ZGU= 866\nYXJn 867\nMTU= 868\nb3Y= 869\nLmg= 870\nID4= 871\nIHRoZWly 872\nJyk= 873\naXJzdA== 874\naWNr 875\nZ2g= 876\nTEU= 877\nT1I= 878\nIHByaXZhdGU= 879\ndGVt 880\nDQoNCg== 881\ndXNlcg== 882\nICk= 883\nY29t 884\nLkE= 885\nIjsK 886\nIGlk 887\ncmVhZA== 888\nIHdobw== 889\nX2I= 890\nIj4K 891\nIHRpbWU= 892\nIG1hbg== 893\ncnk= 894\nPT09PT09PT0= 895\ncm91cA== 896\ncm9w 897\ncHVibGlj 898\ndmVs 899\ndW1iZXI= 900\nYmxl 901\nIHdoaWNo 902\nKioqKioqKioqKioqKioqKg== 903\nIGFueQ== 904\nIGZhbHNl 905\nd2U= 906\nIHZhbHVl 907\nIGxp 908\nIik= 909\nbmRlcg== 910\nZ3I= 911\nIG5v 912\ncGFyYW0= 913\nMjU= 914\nZmln 915\nLmNvbQ== 916\nIGFwcA== 917\nX2w= 918\naW9ucw== 919\nLkQ= 920\nIENo 921\nIGFib3V0 922\nIGFkZA== 923\nIHN1 924\nIHN0cmluZw== 925\nSUQ= 926\nIG92ZXI= 927\nc3RyaW5n 928\nLmw= 929\nb3VyY2U= 930\nMDAw 931\nX0M= 932\nXQo= 933\nIHF1 934\nIFN0cmluZw== 935\nY2E= 936\nU0U= 937\nIHJv 938\nc2g= 939\ndWFs 940\nVHlwZQ== 941\nc29u 942\nbmV3 943\nZXJu 944\nIGFn 945\nQVI= 946\nXTsK 947\nXS4= 948\nID8= 949\naWNhbA== 950\nIGRlcw== 951\ndXRo 952\naXg= 953\nYXlz 954\nIHR5cGU= 955\nJ3Q= 956\nYXVsdA== 957\nIGludGVy 958\ndmFy 959\nLmI= 960\nIHBhcnQ= 961\nLmQ= 962\ndXJyZW50 963\nSVQ= 964\nRU4= 965\nMzA= 966\nZW5j 967\nKGY= 968\ncmE= 969\ndmFsdWU= 970\nY2hv 971\nMTg= 972\ndXR0b24= 973\nb3Nl 974\nMTQ= 975\nICE9 976\nYXRlcg== 977\nw6k= 978\ncmVhdGU= 979\nb2xs 980\ncG9z 981\neWxl 982\nbmc= 983\nQUw= 984\ndXNpbmc= 985\nYW1lcw== 986\nIHsNCg== 987\nYXRlcw== 988\nZWx5 989\nIHdvcms= 990\nIGVt 991\naW5hbA== 992\nIHNw 993\nIHdoZW4= 994\nLnNldA== 995\nICAgICAg 996\nKToK 997\ndG8= 998\ncXVpcmU= 999\naW5kb3c= 1000\nbGVtZW50 1001\ncGVjdA== 1002\nYXNo 1003\nW2k= 1004\nIHVzZQ== 1005\nLkY= 1006\ncGVj 1007\nIGFk 1008\nb3Zl 1009\nY2VwdGlvbg== 1010\nZW5ndGg= 1011\naW5jbHVkZQ== 1012\nYWRlcg== 1013\nICAgICAgICAgICAgICAgICAgICAgICAgICAg 1014\nYXR1cw== 1015\nVGg= 1016\naXRsZQ== 1017\ncml0 1018\ndm9pZA== 1019\nKCku 1020\nKAo= 1021\nIG9mZg== 1022\nIG90aGVy 1023\nICYm 1024\nJzsK 1025\nbXM= 1026\nIGJlZW4= 1027\nIHRl 1028\nbWw= 1029\nY28= 1030\nbmM= 1031\nMTM= 1032\nZXJ2aWNl 1033\nICU= 1034\nKioK 1035\nYW5u 1036\nYWRl 1037\nCgoKCg== 1038\nbG9jaw== 1039\nY29uc3Q= 1040\nMTAw 1041\ncG9uc2U= 1042\nIHN1cA== 1043\nKys= 1044\nZGF0ZQ== 1045\nIGFjYw== 1046\nIGhhZA== 1047\nIGJ1 1048\nMjAw 1049\nIFJl 1050\nIHdlcmU= 1051\nIGZpbGU= 1052\nIHdvdWxk 1053\nIOKAnA== 1054\ndmVu 1055\naXNz 1056\nIG91cg== 1057\nY2xhc3M= 1058\ncmF3 1059\nIHllYXI= 1060\nRGF0YQ== 1061\nIHZhbA== 1062\nIHNvbWU= 1063\nZnRlcg== 1064\neXM= 1065\nIC8vLw== 1066\ncm91bmQ= 1067\ndmlldw== 1068\nIHBl 1069\nIHRoZXJl 1070\nIHNhaWQ= 1071\nZHU= 1072\nb2Y= 1073\nbGluZQ== 1074\nLyo= 1075\nZHVjdA== 1076\nIGhlcg== 1077\nICAgICAgICAgICAgIA== 1078\nUmVz 1079\nIGNv 1080\nIGNvbW0= 1081\naXNl 1082\nbWlu 1083\nICAgIAo= 1084\nI2luY2x1ZGU= 1085\nZXRob2Q= 1086\nLlA= 1087\ndXRl 1088\nIGFzcw== 1089\nSW50 1090\nYXNr 1091\nbG9j 1092\nIGxpa2U= 1093\nb2R5 1094\nIGxldA== 1095\nbG9hZA== 1096\nIGFt 1097\ncm9s 1098\nIGdy 1099\neXA= 1100\nIGFsc28= 1101\nIEl0 1102\ndXJs 1103\naWZpYw== 1104\nb3Jz 1105\nX1A= 1106\nX24= 1107\naWdo 1108\nIHRoYW4= 1109\nQ29t 1110\nQU4= 1111\nVUw= 1112\nYXRpbmc= 1113\nMTc= 1114\nIFRoaXM= 1115\ncmVm 1116\nX1M= 1117\nIHN0YXRpYw== 1118\ncm9sbA== 1119\nIGp1c3Q= 1120\nIHJlc3VsdA== 1121\naWFu 1122\naWR0aA== 1123\nIHRoZW0= 1124\nKSk7Cg== 1125\nZGVy 1126\ncmVhaw== 1127\nQ29u 1128\nOi8v 1129\ndWxl 1130\nLi4u 1131\nYXJjaA== 1132\nZW1lbnQ= 1133\nIDw8 1134\nNTA= 1135\ndXNo 1136\nZW5zZQ== 1137\nYXJy 1138\nIGludG8= 1139\nY2Vzcw== 1140\nYW1w 1141\naWVk 1142\ndW1lbnQ= 1143\nIFw= 1144\nXSw= 1145\nd28= 1146\nYWxz 1147\nIHdoYXQ= 1148\nYW5j 1149\nVmFsdWU= 1150\nPSc= 1151\nb2x1bQ== 1152\nIHBvcw== 1153\nYWdlcw== 1154\nYXllcg== 1155\nIHNj 1156\ndWVz 1157\nIikK 1158\nX1Q= 1159\nIGxpc3Q= 1160\nKHM= 1161\nIGNhc2U= 1162\nQ2g= 1163\nCQkJCQk= 1164\nLy8vLy8vLy8= 1165\ncG9uZW50 1166\nIHo= 1167\nIGtu 1168\nbGV0 1169\nREU= 1170\ncmVk 1171\nIGZl 1172\nIH0sCg== 1173\nICw= 1174\nKHQ= 1175\nIGZpcnN0 1176\nJyk7Cg== 1177\nd29yZA== 1178\nIGltcG9ydA== 1179\nIGFjdA== 1180\nIGNoYXI= 1181\nQ1Q= 1182\nIFRy 1183\nb3BsZQ== 1184\nPXs= 1185\nCWY= 1186\nMjQ= 1187\naWVudA== 1188\nY2VudA== 1189\nLmo= 1190\nbGVjdGlvbg== 1191\nKSkK 1192\nIG9ubHk= 1193\nIHByaW50 1194\nbWVy 1195\nLlc= 1196\nb2Nr 1197\nIC0t 1198\nVGV4dA== 1199\nIG9w 1200\nYW5r 1201\nIGl0cw== 1202\nIGJhY2s= 1203\nWyI= 1204\nIG5lZWQ= 1205\nIGNs 1206\nIHN1Yg== 1207\nIGxh 1208\nKCg= 1209\nLiI= 1210\nT2JqZWN0 1211\nIHN0YXJ0 1212\nZmlsZQ== 1213\nKHNlbGY= 1214\nbmVy 1215\nZXk= 1216\nIHVzZXI= 1217\nIGVudA== 1218\nIENvbQ== 1219\naXRz 1220\nIENvbg== 1221\nb3VibGU= 1222\nb3dlcg== 1223\naXRlbQ== 1224\ndmVyeQ== 1225\nIFdl 1226\nNjQ= 1227\nbGljaw== 1228\nIFE= 1229\ncGhw 1230\ndHRw 1231\nJzo= 1232\naWNz 1233\nIHVuZGVy 1234\nICoK 1235\nLkw= 1236\nKTs= 1237\naWNlcw== 1238\nIHJlZw== 1239\nKQ0K 1240\nCXB1YmxpYw== 1241\nU1M= 1242\nIHRoZW4= 1243\ncmVhdA== 1244\naW91cw== 1245\nLkc= 1246\nZWs= 1247\naXJlY3Q= 1248\naGVjaw== 1249\nY3JpcHQ= 1250\nbmluZw== 1251\nIFVu 1252\nIG1heQ== 1253\nIFdo 1254\nQm8= 1255\nSXRlbQ== 1256\nc3RydWN0 1257\nLnN0 1258\ncmVhbQ== 1259\naWJsZQ== 1260\nbG9hdA== 1261\nIG9yZw== 1262\ndW5k 1263\nc3Vt 1264\nX2lu 1265\nLi4v 1266\nX00= 1267\nIGhvdw== 1268\ncml0ZQ== 1269\nJwo= 1270\nVG8= 1271\nNDA= 1272\nd3c= 1273\nIHBlb3BsZQ== 1274\naW5kZXg= 1275\nLm4= 1276\naHR0cA== 1277\nKG0= 1278\nZWN0b3I= 1279\nIGluZA== 1280\nIGphdg== 1281\nXSwK 1282\nIEhl 1283\nX3N0 1284\nZnVs 1285\nb2xl 1286\nKXsK 1287\nIHNob3VsZA== 1288\nb3B5 1289\nZWxw 1290\naWVy 1291\nX25hbWU= 1292\nZXJzb24= 1293\nSU9O 1294\nb3Rl 1295\nIHRlc3Q= 1296\nIGJldA== 1297\ncnJvcg== 1298\ndWxhcg== 1299\n44A= 1300\nINA= 1301\nYnM= 1302\ndGluZw== 1303\nIG1ha2U= 1304\nVHI= 1305\nIGFmdGVy 1306\nYXJnZXQ= 1307\nUk8= 1308\nb2x1bW4= 1309\ncmM= 1310\nX3Jl 1311\nZGVmaW5l 1312\nMjI= 1313\nIHJpZ2h0 1314\ncmlnaHQ= 1315\nZGF5 1316\nIGxvbmc= 1317\nW10= 1318\nKHA= 1319\ndGQ= 1320\nY29uZA== 1321\nIFBybw== 1322\nIHJlbQ== 1323\ncHRpb25z 1324\ndmlk 1325\nLmc= 1326\nIGV4dA== 1327\nIF9f 1328\nJykK 1329\ncGFjZQ== 1330\nbXA= 1331\nIG1pbg== 1332\nc3RhbmNl 1333\nYWly 1334\nYWN0aW9u 1335\nd2g= 1336\ndHlwZQ== 1337\ndXRpbA== 1338\nYWl0 1339\nPD8= 1340\nSUM= 1341\ndGV4dA== 1342\nIHBo 1343\nIGZs 1344\nLk0= 1345\nY2Nlc3M= 1346\nYnI= 1347\nZm9yZQ== 1348\nZXJzaW9u 1349\nKSwK 1350\nLnJl 1351\nYXRlZw== 1352\nIGxvYw== 1353\naW5z 1354\nLXM= 1355\ndHJpYg== 1356\nIEludA== 1357\nIGFycmF5 1358\nLCI= 1359\nUHJv 1360\nKGM= 1361\nZXNzaW9u 1362\nPgoK 1363\nIHNoZQ== 1364\nIl0= 1365\nYXBo 1366\nIGV4cA== 1367\nZXJ0eQ== 1368\nIFNl 1369\nIHBhcg== 1370\ndW5j 1371\nRVQ= 1372\nIHJlYWQ= 1373\ncHJpbnQ= 1374\nIHJlbA== 1375\nIGZvcm0= 1376\nIGRy 1377\nRXhjZXB0aW9u 1378\naW5wdXQ= 1379\nIHRyYW5z 1380\nIyMjIyMjIyM= 1381\nb3JkZXI= 1382\nQnk= 1383\nIGF3 1384\naXRpZXM= 1385\ndWZm 1386\ncGxheQ== 1387\nLmFkZA== 1388\nIOKAkw== 1389\nIHdhbnQ= 1390\nIGNvbXA= 1391\nbWVudHM= 1392\nIHx8 1393\nYXo= 1394\nYmU= 1395\nIG51bWJlcg== 1396\nIHJlcXVpcmU= 1397\nIEV4 1398\nNjA= 1399\nIGNvbA== 1400\nIGtleQ== 1401\nZW1iZXI= 1402\nIHR3bw== 1403\nIHNpemU= 1404\nIHdoZXJl 1405\nVVQ= 1406\ncmVzdWx0 1407\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 1408\nb3VnaA== 1409\nb3JsZA== 1410\nb29k 1411\ndWNo 1412\nYXRpdmU= 1413\nZ2Vy 1414\nYXJlbnQ= 1415\nIC8q 1416\nIGFyZw== 1417\nIHdoaWxl 1418\nMjM= 1419\nKHRoaXM= 1420\nIHJlYw== 1421\nIGRpZg== 1422\nU3RhdGU= 1423\nIHNwZWM= 1424\ncmlkZQ== 1425\nX0Y= 1426\nIGxvb2s= 1427\nQU0= 1428\naWxpdHk= 1429\nZXRlcg== 1430\n4oCZdA== 1431\nCgoK 1432\nYXlvdXQ= 1433\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 1434\nYWdlcg== 1435\nIGNvdWxk 1436\nIGJy 1437\nZW5kcw== 1438\ndXJlcw== 1439\nIGtub3c= 1440\nZXRz 1441\nIElm 1442\nIFNo 1443\nLnc= 1444\nYmFjaw== 1445\nIHNlcg== 1446\nICs9 1447\nIGZy 1448\nKCkpOwo= 1449\nIGhhbmQ= 1450\nSW5k 1451\nVUxM 1452\nSW0= 1453\nKCk7Cgo= 1454\nIG1vc3Q= 1455\nIHRyeQ== 1456\nIG5vdw== 1457\ncm91Z2g= 1458\nPg0K 1459\nYWNrYWdl 1460\nIGhpbQ== 1461\nLl8= 1462\naWZ5 1463\nIGJyZWFr 1464\nICk7Cg== 1465\ncmVu 1466\nI2RlZmluZQ== 1467\naXR0 1468\nIGFw 1469\nCWM= 1470\nKG4= 1471\nIFlvdQ== 1472\nOgoK 1473\nLW0= 1474\nIGV2ZXJ5 1475\ndXN0b20= 1476\nbGllbnQ= 1477\nb2N1bWVudA== 1478\nY3JpcHRpb24= 1479\nRXJyb3I= 1480\nLWI= 1481\n0L4= 1482\nXVs= 1483\nOTk= 1484\ndHJhbnM= 1485\nIHBvaW50 1486\nIHN0ZA== 1487\nIGZpbA== 1488\nVGltZQ== 1489\nODA= 1490\nIG1vZA== 1491\nIC0+ 1492\nIGVycm9y 1493\nYWg= 1494\nIHRleHQ= 1495\ncm9sbGVy 1496\nbG9zZQ== 1497\ncWw= 1498\nIHBvbA== 1499\nPjwv 1500\nIHNob3c= 1501\nVXNlcg== 1502\nYXNlZA== 1503\nIHsKCg== 1504\nIGZpbmQ= 1505\n0LA= 1506\nRUQ= 1507\nc3Bhbg== 1508\nZW51 1509\nIGN1cnJlbnQ= 1510\nIHVzZWQ= 1511\nY2VwdA== 1512\nY2x1ZA== 1513\nIHBsYXk= 1514\nIGxvZw== 1515\ndXRpb24= 1516\nZmw= 1517\nIHNlZQ== 1518\naW5kb3dz 1519\nIGhlbHA= 1520\nIHRoZXNl 1521\nIHBhc3M= 1522\nIGRvd24= 1523\nIGV2ZW4= 1524\nYXNvbg== 1525\ndWlsZA== 1526\nZnJvbQ== 1527\nKGQ= 1528\nIGJs 1529\nbGFiZWw= 1530\nZWxzZQ== 1531\n0LU= 1532\nICgh 1533\naXplZA== 1534\nKCks 1535\nIG9i 1536\nIGl0ZW0= 1537\ndW1w 1538\nVVI= 1539\nb3Ju 1540\nIGRvbg== 1541\nU2U= 1542\nbWFu 1543\nMjc= 1544\nYW1wbGU= 1545\ndG4= 1546\nPT09PT09PT09PT09PT09PQ== 1547\nSGU= 1548\nZ3JhbQ== 1549\nIGRpZA== 1550\nd24= 1551\nX2g= 1552\naXZlcg== 1553\nIHNt 1554\nIHRocm91Z2g= 1555\nIEFu 1556\nY2hl 1557\nIGludg== 1558\nb3VzZQ== 1559\nIGVz 1560\nIE5ldw== 1561\nZXhwb3J0 1562\nbWFyeQ== 1563\ndXRv 1564\nbGVy 1565\nIGxhc3Q= 1566\nIGV2ZW50 1567\ndHJ5 1568\n77w= 1569\naWx5 1570\naWduZWQ= 1571\naW5lcw== 1572\nb2xsb3c= 1573\naWNlbnNl 1574\nc29sZQ== 1575\nbGVhcg== 1576\nKGludA== 1577\nIGFnYWlu 1578\nIGhpZ2g= 1579\naHRtbA== 1580\nSW5kZXg= 1581\ndXRob3I= 1582\nIC8qKgo= 1583\nIGxpbmU= 1584\nRXZlbnQ= 1585\nX0Q= 1586\nIGRvZXM= 1587\naXRpYWw= 1588\nIGNy 1589\nYXJz 1590\nMjg= 1591\nIHRlbQ== 1592\nY2F1c2U= 1593\nZmFjZQ== 1594\nIGA= 1595\nX0E= 1596\nQnV0dG9u 1597\nYXR1cmU= 1598\nZWN0ZWQ= 1599\nRVM= 1600\naXN0ZXI= 1601\nCQo= 1602\nIGJlZm9yZQ== 1603\nYWxl 1604\nb3RoZXI= 1605\nIGJlY2F1c2U= 1606\ncm9pZA== 1607\nIGVk 1608\naWs= 1609\ncmVn 1610\nIERl 1611\nIGRpc3Q= 1612\nfSwK 1613\nIHN0YXRl 1614\nIGNvbnM= 1615\ncmludA== 1616\nYXR0 1617\nIGhlcmU= 1618\naW5lZA== 1619\nIGZpbmFs 1620\nICIi 1621\nS2V5 1622\nTE8= 1623\nIGRlbA== 1624\ncHR5 1625\ndGhpbmc= 1626\nMjY= 1627\nIEFuZA== 1628\nIHJ1bg== 1629\nIFg= 1630\neW0= 1631\nLmFwcA== 1632\nIHZlcnk= 1633\nY2Vz 1634\nX04= 1635\nYXJlZA== 1636\nd2FyZA== 1637\nbGlzdA== 1638\naXRlZA== 1639\nb2xvZw== 1640\naXRjaA== 1641\nQm94 1642\naWZl 1643\nMzM= 1644\nIGFj 1645\nIG1vZGVs 1646\nIG1vbg== 1647\nIHdheQ== 1648\nbGV0ZQ== 1649\nIGNhbGw= 1650\nIGF0dA== 1651\nIGNhbA== 1652\ndmVydA== 1653\nIGRlYw== 1654\nbGVhc2U= 1655\nb3Vu 1656\nIH0pOwo= 1657\nZnI= 1658\nZm9ybWF0aW9u 1659\nZXRhaWw= 1660\nIG51bQ== 1661\nYWo= 1662\ncXVlcnk= 1663\nIHdlbGw= 1664\nIG9iamVjdA== 1665\nIEFz 1666\nIHllYXJz 1667\nQ29sb3I= 1668\nSVM= 1669\nIGRlZmF1bHQ= 1670\nV2g= 1671\nIGlucw== 1672\nYWludA== 1673\nIGphdmE= 1674\nIHNpbQ== 1675\nIEFy 1676\nbW9u 1677\ndGls 1678\nKCk7DQo= 1679\nKTo= 1680\nU2V0 1681\nMjk= 1682\nYXR0ZXI= 1683\nIHZpZXc= 1684\nIHByZXM= 1685\nYXJyYXk= 1686\nV2U= 1687\nQXQ= 1688\nIGJlbA== 1689\nIG1hbnk= 1690\nMjE= 1691\nTWFu 1692\nZW5kZXI= 1693\nIGJlaW5n 1694\nIGdvb2Q= 1695\nCQkJCQkJ 1696\nYXRpb25hbA== 1697\nd2FyZQ== 1698\nLmxvZw== 1699\new0K 1700\nIHVzaW5n 1701\nX0I= 1702\nIDo9 1703\nX3c= 1704\naXN0cw== 1705\nbGlzaA== 1706\nIHN0dWQ= 1707\nIEFs 1708\nIGd1 1709\nY29uZmln 1710\ndXJpbmc= 1711\ndGltZQ== 1712\nb2tlbg== 1713\nYW1lc3BhY2U= 1714\nIHJlcXVlc3Q= 1715\nIGNoaWxk 1716\nIMM= 1717\nbG9i 1718\nIHBhcmFt 1719\nIH0NCg== 1720\nMDE= 1721\nIGVjaG8= 1722\nZnVuY3Rpb24= 1723\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 1724\ncHM= 1725\nRWxlbWVudA== 1726\nYWxr 1727\nbGljYXRpb24= 1728\nYnk= 1729\nU2l6ZQ== 1730\ncmF3aW5n 1731\nIHBlcnNvbg== 1732\nICAgICAgICAgICAgICAgICA= 1733\nXG4= 1734\nb2JqZWN0 1735\naW5jZQ== 1736\nRW4= 1737\nRmlsZQ== 1738\ndWY= 1739\nZmZlY3Q= 1740\nQUM= 1741\nIHN0eWxl 1742\nc3VtbWFyeQ== 1743\nIHF1ZQ== 1744\nX3I= 1745\nICgk 1746\nTW9kZWw= 1747\naWRlbnQ= 1748\nIG1ldGhvZA== 1749\nSUw= 1750\nb3R0 1751\nbGVzcw== 1752\nSU5H 1753\nICgp 1754\nIGV4cGVjdA== 1755\neW5j 1756\ncGFja2FnZQ== 1757\nMzU= 1758\ndXJz 1759\nIHByb3Q= 1760\nLi8= 1761\ncHJl 1762\nICkK 1763\nbWE= 1764\nIHN1cg== 1765\nIGZvdW5k 1766\nSW5mbw== 1767\ncGFy 1768\naW1lcw== 1769\nLmU= 1770\nYWlucw== 1771\nIHBvc3Q= 1772\nLWQ= 1773\nNDU= 1774\nb2xlYW4= 1775\nIHNs 1776\nUEU= 1777\nIHN1Y2g= 1778\nc2VsZWN0 1779\nYWluZXI= 1780\nIHRoaW5r 1781\nIGRpZmZlcg== 1782\nLnI= 1783\nLyoqCg== 1784\nRkY= 1785\nb29s 1786\ncGxhdGU= 1787\ncXVhbA== 1788\nIEZvcg== 1789\nIG11Y2g= 1790\ndWM= 1791\nKG5ldw== 1792\nb2R1bGU= 1793\nIHNvbQ== 1794\nIGh0dHA= 1795\nIExpc3Q= 1796\nIGNvdW50 1797\nIGluc3Q= 1798\nY2hhcg== 1799\nbWl0 1800\nLmlk 1801\nYWtpbmc= 1802\nIGdlbmVy 1803\ncHg= 1804\ndmljZQ== 1805\nMzc= 1806\nX2RhdGE= 1807\nIE5VTEw= 1808\nfQ0K 1809\naWRk 1810\n44CC 1811\nIG1lZA== 1812\nb3Jn 1813\naWRlcg== 1814\nYWNoZQ== 1815\nd29yaw== 1816\nIGNoZWNr 1817\nd2Vlbg== 1818\nICgo 1819\ndGhl 1820\nYW50cw== 1821\nPjw= 1822\nLkI= 1823\nLWM= 1824\nIG9wZW4= 1825\nIGVzdA== 1826\nICAgICAgICAK 1827\nIG5leHQ= 1828\nSU0= 1829\n0YI= 1830\nT1Q= 1831\nw7M= 1832\nIGZvbGxvdw== 1833\nY29udGVudA== 1834\nICAgICAgICAgICAg 1835\nIGluY2x1ZA== 1836\nSEU= 1837\nIFJlcw== 1838\nIGhyZWY= 1839\n0Lg= 1840\nIGNhcg== 1841\neXBlcw== 1842\naW1hZ2U= 1843\nVW4= 1844\nIGJvb2w= 1845\nQUQ= 1846\nIGdhbWU= 1847\nLkZvcm0= 1848\ncm93cw== 1849\nKi8= 1850\ndmVsb3A= 1851\nLkRyYXdpbmc= 1852\nIHBhdGg= 1853\naXNpb24= 1854\nIGVhY2g= 1855\nIFBs 1856\nX3R5cGU= 1857\nUGF0aA== 1858\nbmVjdGlvbg== 1859\nIGF2 1860\nJyku 1861\nIHN1cHBvcnQ= 1862\nRU5U 1863\ncmVt 1864\nIiku 1865\nIG93bg== 1866\nIGNvcg== 1867\nY291bnQ= 1868\nbWlzcw== 1869\ndWFsbHk= 1870\nIG1lbQ== 1871\nc3Rk 1872\naWVuY2U= 1873\nc2VhcmNo 1874\nIgoK 1875\nRm9ybQ== 1876\nIHNleA== 1877\nZW5hbWU= 1878\nIHNpZ24= 1879\nIGV0 1880\nICAgICAgICAgIA== 1881\nJywn 1882\nIEFwcA== 1883\nIHRob3Nl 1884\nb2Zm 1885\nIGVycg== 1886\nIHN5c3RlbQ== 1887\nIGJlc3Q= 1888\nY29kZQ== 1889\nIHNhbWU= 1890\nIGRp 1891\ndXNz 1892\nIGNyZWF0ZQ== 1893\nYXRoZXI= 1894\nQXJyYXk= 1895\nLmlu 1896\nZmU= 1897\nU2VydmljZQ== 1898\nVU4= 1899\nYXRz 1900\nIFo= 1901\nYWx0aA== 1902\nIG1hZGU= 1903\ndHJ1ZQ== 1904\nQUI= 1905\nIG1hcms= 1906\ncmlk 1907\naWZpZWQ= 1908\nLA0K 1909\neW4= 1910\ncHJlc3M= 1911\nIGdyb3Vw 1912\nIGZpbg== 1913\nIExpY2Vuc2U= 1914\nRmllbGQ= 1915\nZWdlcg== 1916\nIHdvcmxk 1917\naW5lc3M= 1918\ndHk= 1919\nIHByb2Nlc3M= 1920\nKGI= 1921\nIGNyZQ== 1922\nYXJu 1923\naXZlcw== 1924\nIG1haW4= 1925\naWRlbw== 1926\nMzY= 1927\nX2c= 1928\nQUc= 1929\ndmFsaWQ= 1930\naW1n 1931\nUEk= 1932\nIGNvbG9y 1933\nIHJlcG9ydA== 1934\nIHRha2U= 1935\ncmli 1936\nT00= 1937\nIGRheQ== 1938\nUmVxdWVzdA== 1939\nIHNr 1940\nYmVycw== 1941\nCXM= 1942\nLkFkZA== 1943\nb290 1944\nSW1hZ2U= 1945\nIGNvbXBsZQ== 1946\nb2xsZWN0aW9u 1947\nIHRvcA== 1948\nIGZyZWU= 1949\nQVM= 1950\nRGU= 1951\nIE9u 1952\nSUc= 1953\nOTA= 1954\nZXRh 1955\nRGF0ZQ== 1956\nIGFjdGlvbg== 1957\nMzQ= 1958\nT3Zlcg== 1959\naXRvcg== 1960\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 1961\nbm90 1962\nIGluZGV4 1963\naGVy 1964\naWNvbg== 1965\nT24= 1966\nOw0KDQo= 1967\naXZpdHk= 1968\nbWFuZA== 1969\nLldpbmRvd3M= 1970\nT0w= 1971\nIHJlYWw= 1972\nIG1heA== 1973\nbGFuZA== 1974\nLi4uLg== 1975\ncmFwaA== 1976\nIGJ1aWxk 1977\nbGVn 1978\nYXNzd29yZA== 1979\nPwoK 1980\n4oCm 1981\nb29r 1982\ndWNr 1983\nIG1lc3NhZ2U= 1984\ndGVzdA== 1985\naXZlcnM= 1986\nMzg= 1987\nIGlucHV0 1988\nIGFydA== 1989\nIGJldHdlZW4= 1990\nR2V0 1991\nZW50ZXI= 1992\nZ3JvdW5k 1993\nZW5l 1994\nw6E= 1995\nLmxlbmd0aA== 1996\nTm9kZQ== 1997\nKGk= 1998\nQ2xhc3M= 1999\nZm9y 2000\nIOKAlA== 2001\ndGVu 2002\nb2lu 2003\nIGtl 2004\ndWk= 2005\nIElO 2006\nIHRhYmxl 2007\nc3Vi 2008\nIExl 2009\nIGhlYWQ= 2010\nIG11c3Q= 2011\nLy8vLy8vLy8vLy8vLy8vLw== 2012\nLnV0aWw= 2013\nQ29udGV4dA== 2014\nIG9yZGVy 2015\nIG1vdg== 2016\nb3Zlcg== 2017\nIGNvbnRpbg== 2018\nIHNheQ== 2019\nc3RhdGlj 2020\nLlRleHQ= 2021\nIGNsYXNzTmFtZQ== 2022\ncGFueQ== 2023\nIHRlcg== 2024\naGVhZA== 2025\ncmc= 2026\nIHByb2R1Y3Q= 2027\nVGhpcw== 2028\nLuKAnQ== 2029\nIEJ1dA== 2030\nNzA= 2031\nbG95 2032\nIGRvdWJsZQ== 2033\nc2c= 2034\nIHBsYWNl 2035\nLng= 2036\nbWVzc2FnZQ== 2037\nIGluZm9ybWF0aW9u 2038\ncHJpdmF0ZQ== 2039\nIG9wZXI= 2040\nY2Vk 2041\nZGI= 2042\nIj48Lw== 2043\nUGFyYW0= 2044\naWNsZQ== 2045\nIHdlZWs= 2046\nIHByb3A= 2047\ndGFibGU= 2048\naWRnZXQ= 2049\ncGxhY2U= 2050\nUHJvcA== 2051\nIEFsbA== 2052\nZWxz 2053\nYm94 2054\nLgoKCgo= 2055\nLlI= 2056\nIFRv 2057\naXRlcg== 2058\nU2g= 2059\ndXJhdGlvbg== 2060\nb2xkZXI= 2061\nX2xpc3Q= 2062\nY29tZQ== 2063\nIHN3 2064\naXphdGlvbg== 2065\nCWZvcg== 2066\nYmw= 2067\nIHByb2dyYW0= 2068\nKGU= 2069\nYXBl 2070\nY2hlY2s= 2071\nLkZvcm1z 2072\nIHVuZA== 2073\nYXRlZ29yeQ== 2074\nNzU= 2075\nYWdz 2076\nIHJlc3BvbnNl 2077\nVVM= 2078\ncmVxdWVzdA== 2079\nIHN0cnVjdA== 2080\nZXNjcmlwdGlvbg== 2081\nIGNvZGU= 2082\nX0g= 2083\ndWZmZXI= 2084\nIHdpdGhvdXQ= 2085\nbG9iYWw= 2086\nTWFuYWdlcg== 2087\naWx0ZXI= 2088\nUE8= 2089\nCXRoaXM= 2090\nb3B0aW9u 2091\nIHNvbA== 2092\nID09PQ== 2093\nYWtlcw== 2094\nQ29udHJvbGxlcg== 2095\nNDQ= 2096\nTWVzc2FnZQ== 2097\nIHJlZg== 2098\nZXZlcg== 2099\nIFNv 2100\nYWluaW5n 2101\nLmFwcGVuZA== 2102\nIHN0aWxs 2103\nIHByb3ZpZA== 2104\nIGFzc2VydA== 2105\nbWVk 2106\nIGNhcA== 2107\ndXNpbmVzcw== 2108\nIHJlcA== 2109\ndGluZ3M= 2110\ndmVk 2111\nLk4= 2112\nYXBp 2113\nT0Q= 2114\nIGZpZWxk 2115\naXZlbg== 2116\nb3Rv 2117\n4oCc 2118\nY29s 2119\nKHg= 2120\nZ2h0 2121\nUmVzdWx0 2122\nQ29kZQ== 2123\nLmlz 2124\nbGluaw== 2125\nIGNvdXI= 2126\nQW4= 2127\nIHRlYW0= 2128\nCWludA== 2129\naWZ0 2130\nNTU= 2131\nIHNlY29uZA== 2132\nIGdvaW5n 2133\nIHJhbmdl 2134\nX0U= 2135\nbmVzcw== 2136\nMzk= 2137\nIGZhbQ== 2138\nIG5pbA== 2139\nIENvbnQ= 2140\nYWlsYWJsZQ== 2141\ndXRlcw== 2142\nYXRhYg== 2143\nIGZhY3Q= 2144\nIHZpcw== 2145\nKCY= 2146\nIEFO 2147\nMzE= 2148\nQWw= 2149\ndGl0bGU= 2150\nIGFuZHJvaWQ= 2151\nQ0U= 2152\nXCI= 2153\naXJ0 2154\nIHdyaXQ= 2155\n0L0= 2156\nCW0= 2157\nZnR3YXJl 2158\nb25k 2159\nIHJldA== 2160\nb3NpdGlvbg== 2161\nIGhvbWU= 2162\nIGxlZnQ= 2163\nYXJncw== 2164\nbWVyaWM= 2165\nNDg= 2166\nIGRpcmVjdA== 2167\nb2Np 2168\nUGw= 2169\nQXM= 2170\ncmV0 2171\nYWRv 2172\nT2Y= 2173\nY2hu 2174\nIEdldA== 2175\nZWU= 2176\ncm9zcw== 2177\nKCk7 2178\nX19fXw== 2179\nLnBo 2180\nSXQ= 2181\nb3V0ZQ== 2182\nIGV4cGVy 2183\nY2hvb2w= 2184\nd3d3 2185\nfSw= 2186\nIGFsbG93 2187\nIMI= 2188\nKCkp 2189\nc2l6ZQ== 2190\naXNt 2191\nYWk= 2192\ndHJhY3Q= 2193\nYW5l 2194\nLi4uCgo= 2195\nY29udGV4dA== 2196\nIGJlZw== 2197\nQ0g= 2198\nIHBhZ2U= 2199\naGlw 2200\nbm8= 2201\nY29yZQ== 2202\nc3A= 2203\nIGRpZmZlcmVudA== 2204\naWFibGU= 2205\nIE1l 2206\nX0lO 2207\nYnV0dG9u 2208\nIElz 2209\nZXJ2aWNlcw== 2210\nIGNh 2211\nIGFyb3VuZA== 2212\nQXBw 2213\ncmF0aW9u 2214\nIHJlY2U= 2215\nIHJlYWxseQ== 2216\nIGltYWdl 2217\nIHRhcmdldA== 2218\nIGRlcA== 2219\nb3B5cmlnaHQ= 2220\ndHJh 2221\naW5nbGU= 2222\naXRhbA== 2223\nTGF5b3V0 2224\nIGJvdGg= 2225\nT3ZlcnJpZGU= 2226\nYXJt 2227\nPT4= 2228\nYXRlcmlhbA== 2229\naWxlZA== 2230\nIHB1dA== 2231\nUXU= 2232\n0YA= 2233\ndW5n 2234\nbWFw 2235\nCQkJCQkJCQk= 2236\nIGxldmVs 2237\nQ29tcG9uZW50 2238\nYm9vaw== 2239\nY3JlZW4= 2240\nX1JF 2241\nIGNvbmZpZw== 2242\n44E= 2243\nT3I= 2244\nLmRhdGE= 2245\nIGRvY3VtZW50 2246\nIiwi 2247\ndHJpYnV0ZQ== 2248\ndXg= 2249\nTG9n 2250\nZmVyZW5jZQ== 2251\ncG9zdA== 2252\nX2U= 2253\nIGxvY2Fs 2254\nYW5kb20= 2255\nYXNzZXJ0 2256\nVmFs 2257\nbGVjdGVk 2258\naW5h 2259\nYXRhYmFzZQ== 2260\nQWRk 2261\nIGNvbnRlbnQ= 2262\nLnByaW50 2263\nc2lnbmVk 2264\ncmlj 2265\nLiIKCg== 2266\nIGZh 2267\nIQoK 2268\nLWY= 2269\naXZlZA== 2270\nIHF1ZXN0 2271\nLmV4 2272\nIGZsb2F0 2273\nIGRldmVsb3A= 2274\n0L7Q 2275\nTWFw 2276\nYWRpbmc= 2277\nIHBvc3M= 2278\nVUU= 2279\nbmFtZXNwYWNl 2280\nX08= 2281\nCWI= 2282\nLkdldA== 2283\nPig= 2284\nanNvbg== 2285\nZXRhaWxz 2286\nNjY= 2287\nIHRvbw== 2288\nIGV4dGVuZHM= 2289\nIE5vbmU= 2290\nIGZvcmU= 2291\nKFN0cmluZw== 2292\nZm9ybWF0 2293\nIGdyZWF0 2294\naW50ZXI= 2295\nY2FsZQ== 2296\n0YE= 2297\ncm9u 2298\naXZpbmc= 2299\nRW50 2300\nZW5jeQ== 2301\neHQ= 2302\nb3k= 2303\nMDU= 2304\nIG1vbnRo 2305\nIGhhcHA= 2306\nIHN1cGVy 2307\nYmFy 2308\nZGVmYXVsdA== 2309\nX2Rl 2310\nb3Jkcw== 2311\nbG4= 2312\nKHsK 2313\nIEluZA== 2314\nYXNlcw== 2315\nIHRpdGxl 2316\nIGNvbnRleHQ= 2317\nMDg= 2318\nb2g= 2319\nLXA= 2320\nRW0= 2321\nIG1ldA== 2322\nVGVzdA== 2323\nIGxpZmU= 2324\nX3Y= 2325\nIFVT 2326\nVUk= 2327\nb2NhdGlvbg== 2328\nbWQ= 2329\nIFsK 2330\nIF0= 2331\nc3c= 2332\nIGluY3Jl 2333\nc2NyaXB0 2334\nZW50aWFs 2335\nd2F5cw== 2336\nLmRl 2337\nIHNyYw== 2338\nIGNhdGNo 2339\nIEFtZXJpYw== 2340\nLy8K 2341\nICAgICAgICAgICAgICA= 2342\nIHBheQ== 2343\ncGxpdA== 2344\n4oCU 2345\nIGNvdW4= 2346\nb2Jq 2347\nLnBocA== 2348\nIGNoYW5nZQ== 2349\nZXRoaW5n 2350\nJ3Jl 2351\nYXN0ZXI= 2352\nbG9z 2353\nbGF0aW9u 2354\nICAK 2355\nTGU= 2356\nw6Q= 2357\nKHs= 2358\ncmVhZHk= 2359\nIE5v 2360\nIHBvc2l0aW9u 2361\nIG9sZA== 2362\nIGJvb2s= 2363\nYWJsZWQ= 2364\nYnVn 2365\nMjAy 2366\nSGFuZA== 2367\nfTsKCg== 2368\naXNwbGF5 2369\nYXZpbmc= 2370\nMDQ= 2371\nIGdvdmVy 2372\nIHZlcnNpb24= 2373\nU3lzdGVt 2374\nbmVjdA== 2375\ncmVzcG9uc2U= 2376\nU3R5bGU= 2377\nVXA= 2378\nYW5ndQ== 2379\nIHRocmVl 2380\naW5pdA== 2381\nZXJv 2382\nIGxhdw== 2383\nZW5kaWY= 2384\nIGJhc2U= 2385\nZW1haWw= 2386\nKGw= 2387\nX1Y= 2388\nIGNvbmY= 2389\nQVRF 2390\nIGR1cmluZw== 2391\ndGVz 2392\nIGNvbnNvbGU= 2393\nIFBy 2394\nIHNwZQ== 2395\ndmVz 2396\nNjU= 2397\ncGF0aA== 2398\naWFsb2c= 2399\nZGl0aW9u 2400\nX3Rv 2401\nYXJkcw== 2402\nIGFnYWluc3Q= 2403\nZXR3b3Jr 2404\nIFBo 2405\nX0w= 2406\nY3Vy 2407\naW1pdA== 2408\nV2l0aA== 2409\nIHBvd2Vy 2410\naXVt 2411\nJzsKCg== 2412\nIHdvbQ== 2413\nbGVmdA== 2414\nb3VyY2Vz 2415\nYXRyaQ== 2416\nIElt 2417\nIE1hbg== 2418\nb3J0aA== 2419\nJHs= 2420\nODg= 2421\ncXVhbHM= 2422\nZXNl 2423\nX3NpemU= 2424\nIGlzcw== 2425\nb3RhbA== 2426\nLWc= 2427\naXF1ZQ== 2428\ncmFtZQ== 2429\nIHdpZHRo 2430\nZXJn 2431\nKSg= 2432\naXR0bGU= 2433\nVFI= 2434\nIFRoZXk= 2435\nZW5jZXM= 2436\nMDI= 2437\ncmw= 2438\nb25z 2439\nIGxhYmVs 2440\nLnk= 2441\nLXQ= 2442\ndXBkYXRl 2443\nYW5lbA== 2444\nc2M= 2445\nLnRv 2446\nIHByb2plY3Q= 2447\nw7w= 2448\nIGVsZW1lbnQ= 2449\nIHN1Y2Nlc3M= 2450\nCQkK 2451\nLnNo 2452\ncmFt 2453\nY2hlZA== 2454\nKCkpCg== 2455\nICgK 2456\nIGRhdGU= 2457\nIHRvdA== 2458\nX1NU 2459\nQWxs 2460\naWZpY2F0aW9u 2461\nCXZhcg== 2462\nIHRyaQ== 2463\nY2hlbQ== 2464\nbXk= 2465\nIGJpZw== 2466\nIEFk 2467\nIEF0 2468\nb3Rz 2469\nbnVt 2470\nQWN0 2471\nIG1hcA== 2472\nZXJh 2473\nY29wZQ== 2474\nLiQ= 2475\nLOKAnQ== 2476\nIHBvcA== 2477\nIGZldw== 2478\nIGxlbg== 2479\ndWlk 2480\nZXRlcnM= 2481\ndWxlcw== 2482\nw60= 2483\nc291cmNl 2484\naHR0cHM= 2485\nIGRlbQ== 2486\nIGVhcg== 2487\nIyMjIyMjIyMjIyMjIyMjIw== 2488\nIG1hdGNo 2489\nb3JpZXM= 2490\nNDk= 2491\nYWNlcw== 2492\nIENs 2493\nIG5vZGU= 2494\nNzg= 2495\naXJj 2496\nbG9jYWw= 2497\ndW5pdHk= 2498\nfTsK 2499\nIGFub3RoZXI= 2500\nPDw= 2501\nb2dsZQ== 2502\nIHNpdA== 2503\nZXdvcms= 2504\nVEU= 2505\nLkk= 2506\nTlM= 2507\nb2xvZ3k= 2508\nb3VnaHQ= 2509\nLkNvbnQ= 2510\nPj4= 2511\nIGNhcmU= 2512\nc3RhdGU= 2513\nCXByaXZhdGU= 2514\nIGVmZmVjdA== 2515\nKysp 2516\nX2ZpbGU= 2517\nZW5kaW5n 2518\nTGluZQ== 2519\nRm9y 2520\naW9y 2521\nIFNj 2522\nIGZ1bg== 2523\nLlNpemU= 2524\nCWVsc2U= 2525\nXSk= 2526\nc3RhcnQ= 2527\ndmlvdXM= 2528\nIH0s 2529\nb3Vycw== 2530\nIGxlZw== 2531\nIHNlcnZpY2U= 2532\nIHNpbmNl 2533\naXJvbg== 2534\nTGFiZWw= 2535\nIG5vbg== 2536\nIGxvcw== 2537\naWN0aW9u 2538\nIGZ1bGw= 2539\nYWN0ZXI= 2540\nYm9hcmQ= 2541\nZ3Jlc3M= 2542\nIHR1cm4= 2543\naXRoZXI= 2544\nMDk= 2545\nLnNpemU= 2546\nIGJvZHk= 2547\ncmVzaA== 2548\nZXR1cm4= 2549\nMTk5 2550\nKF8= 2551\neWxlcw== 2552\nb3JtYWw= 2553\ncGk= 2554\nIHNvbWV0aGluZw== 2555\nIS0t 2556\ndWludA== 2557\nIHByb2R1 2558\nIHN0YW5k 2559\nIHByb2JsZQ== 2560\nIGF2YWlsYWJsZQ== 2561\nbXQ= 2562\nIEJs 2563\nIC4uLg== 2564\nIGJsb2Nr 2565\nSW5wdXQ= 2566\nIGtlZXA= 2567\nQ291bnQ= 2568\nb3Blbg== 2569\nIFsn 2570\nIHRocm93 2571\ndWlsZGVy 2572\nQWN0aW9u 2573\nIHRoaW5ncw== 2574\nVHJ1ZQ== 2575\nIHVybA== 2576\nIEJv 2577\ncHJpbnRm 2578\nIHJlZA== 2579\nanM= 2580\nLmNyZWF0ZQ== 2581\nIE9y 2582\nU3RhdHVz 2583\nSW5zdGFuY2U= 2584\nIGNvbnRyb2w= 2585\nIGNvbWU= 2586\nIGN1c3RvbQ== 2587\nbG9jYXRpb24= 2588\nMDc= 2589\nbW9kZWw= 2590\nIA0K 2591\nIHNvdXJjZQ== 2592\nIGVhcw== 2593\nLm91dA== 2594\nXQoK 2595\nb25leQ== 2596\nIGF3YWl0 2597\nIHBhcnRpYw== 2598\nQVA= 2599\ndWJsaXNo 2600\nb2Rlcw== 2601\nX3Bybw== 2602\ncGx5 2603\ncml0ZXI= 2604\nIHByb3Y= 2605\nIG1pbGw= 2606\nSFQ= 2607\nXSkK 2608\nIGNoYW5n 2609\nIGFzaw== 2610\nICAgICAgICAgICAgICAgICAgICAg 2611\nIG91dHB1dA== 2612\nIGVtYWls 2613\nNjg= 2614\nLnB1c2g= 2615\nIH0NCg0K 2616\naW5hdGlvbg== 2617\nNDc= 2618\nYXRyaXg= 2619\nVGFibGU= 2620\ndWNjZXNz 2621\nXSk7Cg== 2622\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 2623\nIGRpc2M= 2624\nKFs= 2625\nIGJ1c2luZXNz 2626\naGVpZ2h0 2627\nLmh0bWw= 2628\ndGE= 2629\nZmllbGQ= 2630\nIHJlcXVpcmVk 2631\nX1I= 2632\nIGdvdmVybg== 2633\nfQ0KDQo= 2634\nbGV4 2635\nNTAw 2636\nLiw= 2637\nIFNldA== 2638\ndXJjaA== 2639\nLy8v 2640\ndHM= 2641\nYWY= 2642\nIG1pZ2h0 2643\naXN0b3J5 2644\nU3Ry 2645\nIG5ldmVy 2646\nUmVzcG9uc2U= 2647\nYXJzZQ== 2648\nYWRh 2649\nIEhvdw== 2650\nICop 2651\nIDs= 2652\nIGhhcmQ= 2653\nQWQ= 2654\nIGludGVybg== 2655\ndXNlZA== 2656\nKGRhdGE= 2657\nbW9k 2658\nYW5uZWw= 2659\nIG5w 2660\ndWdn 2661\nIC8+Cg== 2662\nIGNhbGxlZA== 2663\nYm9keQ== 2664\nIGNobw== 2665\nKHI= 2666\nX3NldA== 2667\naXJk 2668\nID49 2669\nIH07Cg== 2670\nIG9wdGlvbnM= 2671\nIEdlbmVy 2672\nIGhlaWdodA== 2673\nUG9pbnQ= 2674\nWW91 2675\nZXR5 2676\nQ2xpY2s= 2677\nIHNtYWxs 2678\nIGlkZQ== 2679\nIGFjY2Vzcw== 2680\nYW5ndWFnZQ== 2681\nIHByb3RlY3RlZA== 2682\nIGpvYg== 2683\nIFRoZXJl 2684\nRGVm 2685\nIGFkZHJlc3M= 2686\nIHVpbnQ= 2687\nTm90 2688\nb28= 2689\nYXBz 2690\nPGRpdg== 2691\nYWluZWQ= 2692\nYXR1cg== 2693\nIHN1bQ== 2694\nLXc= 2695\nIERhdGU= 2696\nIGxpdHRsZQ== 2697\nIGZyaQ== 2698\nWVBF 2699\nIHBvcnQ= 2700\nZWg= 2701\ncHJpbmc= 2702\nX3BhdGg= 2703\nIHN0YXR1cw== 2704\nMDY= 2705\nYWlt 2706\nYm9vbA== 2707\nIGFwcGU= 2708\nIG9z 2709\nLm5hbWU= 2710\nZW5zaW9u 2711\nX0c= 2712\nIHVwZGF0ZQ== 2713\nQ29uZmln 2714\nYWZm 2715\nRVJS 2716\nIDw9 2717\nYXRlbHk= 2718\nI2lm 2719\ndWN0aW9u 2720\nOTU= 2721\nIFRl 2722\nIGxpbms= 2723\nIFVzZXI= 2724\nLmZpbmQ= 2725\nLm9yZw== 2726\nbWU= 2727\nIGdpdmVu 2728\nT3V0 2729\nI2VuZGlm 2730\nIGJldHRlcg== 2731\nUGFnZQ== 2732\nIGZlZWw= 2733\nZW5u 2734\nTUw= 2735\nIGFscmVhZHk= 2736\nIGluY2x1ZGluZw== 2737\nb29nbGU= 2738\ncnU= 2739\naWNhbGx5 2740\ncHJvcA== 2741\nbGVhbg== 2742\nb3V0ZXI= 2743\nIGFsd2F5cw== 2744\nb3JkaW5n 2745\nSWY= 2746\nb3JhZ2U= 2747\nIHBhcmVudA== 2748\ndmlz 2749\nCQkJCQkJCQ== 2750\nIGdvdA== 2751\nc3RhbmQ= 2752\nIGxlc3M= 2753\nL3M= 2754\nIEFzcw== 2755\nYXB0 2756\naXJlZA== 2757\nIEFkZA== 2758\nIGFjY291bnQ= 2759\ncGxveQ== 2760\nIGRlcg== 2761\ncmVzZW50 2762\nIGxvdA== 2763\nIHZhbGlk 2764\nCWQ= 2765\nIGJpdA== 2766\ncG9uZW50cw== 2767\nIGZvbGxvd2luZw== 2768\nX2V4 2769\nU09O 2770\nIHN1cmU= 2771\nb2NpYWw= 2772\nIHByb20= 2773\nZXJ0aWVz 2774\naGVhZGVy 2775\nLnBybw== 2776\nIGJvb2xlYW4= 2777\nIHNlYXJjaA== 2778\na2Vu 2779\nIG9yaWc= 2780\nIGVy 2781\nRWQ= 2782\nRU0= 2783\nYXV0 2784\nbGluZw== 2785\nYWxpdHk= 2786\nQnlJZA== 2787\nYmVk 2788\nCWNhc2U= 2789\nNDY= 2790\nZXRoZXI= 2791\ncG9zaXQ= 2792\nIGludmVzdA== 2793\nIE9S 2794\nIHNheXM= 2795\nbWlzc2lvbg== 2796\nQU1F 2797\nIHRlbXA= 2798\nb2Fk 2799\nIHJlc3Q= 2800\naW5mbw== 2801\nIGludGVyZXN0 2802\nQXJn 2803\nIHBlcmZvcm0= 2804\ncG9ucw== 2805\nIFZpZXc= 2806\nIHZlcg== 2807\nbGli 2808\nKGNvbnN0 2809\nVXRpbA== 2810\nTGlzdGVuZXI= 2811\nYXJnZQ== 2812\nNzc= 2813\nIG11bHQ= 2814\nIGRpZQ== 2815\nIHNpdGU= 2816\nLi4vLi4v 2817\nRUw= 2818\nIHZhbHVlcw== 2819\nIH0pCg== 2820\ncGVu 2821\nTm8= 2822\naWNybw== 2823\nIGJlaA== 2824\nICcuLw== 2825\nYWN5 2826\ncmVj 2827\nKCktPg== 2828\nCSAgIA== 2829\nIikp 2830\nQ29udGVudA== 2831\nX1c= 2832\ncGxlbWVudA== 2833\nIHdvbg== 2834\nIHZpZGVv 2835\nYWRp 2836\ncG9pbnQ= 2837\nJSU= 2838\nMDM= 2839\nIGds 2840\nZXJ2ZWQ= 2841\ndmlyb24= 2842\nSUY= 2843\ndXRlZA== 2844\n44M= 2845\nJ20= 2846\nIGNlcnQ= 2847\nIHByb2Y= 2848\nIGNlbGw= 2849\nYXJp 2850\nIHBsYXllcg== 2851\nYWlz 2852\nIGNvc3Q= 2853\nIGh1bQ== 2854\nKFI= 2855\nIG9mZmlj 2856\na3M= 2857\nLnRleHQ= 2858\nYXR1cmVz 2859\nIHRvdGFs 2860\nICovCgo= 2861\nb3Bl 2862\nIHN0YXQ= 2863\nVU0= 2864\nIGxvYWQ= 2865\naWdodHM= 2866\nIGNsZWFy 2867\ndXJv 2868\nIHRlY2hu 2869\ndXBwb3J0 2870\nSVI= 2871\nIHJvdw== 2872\nIHNlZW0= 2873\nIHE= 2874\nIHNob3J0 2875\nIE5vdA== 2876\naXBw 2877\nR3JvdXA= 2878\nc2VjdGlvbg== 2879\nbWF4 2880\naXJs 2881\nIG92ZXJyaWRl 2882\nIGNvbXBhbnk= 2883\nIGRvbmU= 2884\nIik7DQo= 2885\nIGdyZQ== 2886\nLlJl 2887\nIGJlbGll 2888\ncmlzdA== 2889\nIGhlYWx0aA== 2890\nQU5U 2891\nKCkKCg== 2892\nIEJl 2893\nLnZhbHVl 2894\nIEdy 2895\nb3R0b20= 2896\nIGFyZ3M= 2897\nUFQ= 2898\nc3RhdHVz 2899\nZnVuYw== 2900\ndW1lbnRz 2901\nLWg= 2902\nTnVtYmVy 2903\nOg0K 2904\nIExvZw== 2905\nZXJ2ZXI= 2906\nICksCg== 2907\nYW1lbnQ= 2908\nIG9iag== 2909\naW5j 2910\nIGNoaWxkcmVu 2911\naWN5 2912\nSVo= 2913\nYW5kcw== 2914\nYWJseQ== 2915\nIGRpc3RyaWI= 2916\nIGN1cg== 2917\nZXJpYWw= 2918\nIGRheXM= 2919\ncmVhdGVk 2920\ncmVjdA== 2921\nLWw= 2922\naXJt 2923\naWRkZW4= 2924\nb21i 2925\nIGluaXRpYWw= 2926\nLmpz 2927\nIOI= 2928\nUXVlcnk= 2929\nIG9ubGluZQ== 2930\naW1hbA== 2931\nLmNvbg== 2932\nYXU= 2933\nVXJs 2934\nY29udHJvbA== 2935\naXJlY3Rpb24= 2936\nIGluc3RhbmNl 2937\nT1JU 2938\nIEZy 2939\nd2hlcmU= 2940\nIGphdmF4 2941\nIG9yZ2Fu 2942\nYXB0ZXI= 2943\nIHJlYXNvbg== 2944\nb3B0aW9ucw== 2945\nNTk= 2946\nIE1hcg== 2947\nKGE= 2948\nIHdpdGhpbg== 2949\nLuKAnQoK 2950\nT0RF 2951\nX0RF 2952\nYWRtaW4= 2953\nZW5kZWQ= 2954\nIGRlc2lnbg== 2955\nIERhdGE= 2956\ndW5l 2957\nIEZpbGU= 2958\ncm9vdA== 2959\nIGNlbnQ= 2960\nIGFycg== 2961\nX2FkZA== 2962\nbGVu 2963\ncGFnZQ== 2964\nLCc= 2965\nX3N0cg== 2966\nIGJybw== 2967\nYWJpbGl0eQ== 2968\nb3V0aA== 2969\nNTg= 2970\nL2M= 2971\ncG9zZQ== 2972\naXJ0dWFs 2973\nZWFyY2g= 2974\nX3VybA== 2975\nYXJnaW4= 2976\nSHR0cA== 2977\nIHNjaG9vbA== 2978\nYXZh 2979\nIGNvbnNpZGVy 2980\nLmxhYmVs 2981\nIEFycmF5 2982\nNDI= 2983\nd2Vi 2984\nb3B0 2985\nLnByaW50bG4= 2986\ndWxhdGlvbg== 2987\nIGZ1bmM= 2988\nUEw= 2989\nICJc 2990\nIFRleHQ= 2991\nYWN0b3J5 2992\nKGZ1bmN0aW9u 2993\nbnVsbA== 2994\nIGVuZw== 2995\nZG93bg== 2996\nIGluY2x1ZGU= 2997\nIEVu 2998\nIERy 2999\nIGRi 3000\nISE= 3001\nc2lkZQ== 3002\nIGluaXQ= 3003\ncXVpcmVk 3004\nIFNoZQ== 3005\nQ29sdW1u 3006\ncmVhY3Q= 3007\nIGFubg== 3008\nIHN0b3A= 3009\nIGxhdGVy 3010\nIFRoYXQ= 3011\nZW50aW9u 3012\nZGY= 3013\nVUc= 3014\nSUxF 3015\nIGNsaWVudA== 3016\ncmFmdA== 3017\nZmZlcg== 3018\nUE9TVA== 3019\nZWxwZXI= 3020\nIGxvdmU= 3021\ncXVvdGU= 3022\nb3Vk 3023\nIGpzb24= 3024\nIGFibGU= 3025\nIG1lbg== 3026\nQVg= 3027\nIENvcHlyaWdodA== 3028\nw7Y= 3029\nYXZpZw== 3030\ncmVx 3031\nQ2xpZW50 3032\nfSk7Cg== 3033\nLkNvbQ== 3034\nZXJj 3035\naWx0 3036\ncGVjaWFs 3037\nX2NvbQ== 3038\ncm9vbQ== 3039\nLk5hbWU= 3040\nIGdpdmU= 3041\nYW1i 3042\naWtl 3043\nIGNvbmRpdGlvbg== 3044\nY2xpZW50 3045\nYXRvcnM= 3046\nOiI= 3047\nIGNvcHk= 3048\ndXR1cmU= 3049\naXZlcnNpdHk= 3050\nZXJuYWw= 3051\ne3s= 3052\nIENhbg== 3053\nb3VuYw== 3054\nZG8= 3055\nIG9jYw== 3056\nIGFwcHJv 3057\ndGhlcnM= 3058\nemU= 3059\nIGVpdGhlcg== 3060\nIEZs 3061\nIGltcG9ydGFudA== 3062\nIGxlYWQ= 3063\nYXR0cg== 3064\nQVJU 3065\nRXF1YWw= 3066\nIGRh 3067\nZXRjaA== 3068\nZW50aXR5 3069\nIGZhbWlseQ== 3070\nYWRkaW5n 3071\nIG9wdGlvbg== 3072\nIGV4aXN0 3073\naWNh 3074\nIE9iamVjdA== 3075\nNjk= 3076\nJ3Zl 3077\ndmVycw== 3078\naXRpb25hbA== 3079\nNjc= 3080\nb3V0cHV0 3081\nIFRydWU= 3082\nIE9G 3083\nX3RpbWU= 3084\nIG9mZmVy 3085\nIH0pOwoK 3086\nSEVS 3087\nZWdpbg== 3088\nIiI= 3089\nIHdhdGVy 3090\nIGNoZQ== 3091\nIE15 3092\nb3JlZA== 3093\nIHN0ZXA= 3094\nYW5jZXM= 3095\nQ0s= 3096\nQVk= 3097\n4Lg= 3098\nc3RydWN0aW9u 3099\nKEM= 3100\nMzAw 3101\nb3VjaA== 3102\nU3RyZWFt 3103\nYWN0aXZl 3104\nYW1h 3105\nRW50aXR5 3106\ncHJvZHVjdA== 3107\nKCl7Cg== 3108\nIGdvdmVybm1lbnQ= 3109\nIElE 3110\nYWpvcg== 3111\nQW5k 3112\nIGRpc3BsYXk= 3113\n0Ls= 3114\nIHRpbWVz 3115\nIGZvdXI= 3116\nIGZhcg== 3117\nIHByZXNlbnQ= 3118\nIE5T 3119\nIFwK 3120\ndWVzdA== 3121\nIGJhcw== 3122\nZWNobw== 3123\nY2hpbGQ= 3124\naWZpZXI= 3125\nSGFuZGxlcg== 3126\nIGxpYg== 3127\nUHJvcGVydHk= 3128\ndHJhbnNsYXRpb24= 3129\nIHJvb20= 3130\nIG9uY2U= 3131\nIFtd 3132\nY2VudGVy 3133\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 3134\nIHJlc3VsdHM= 3135\nIGNvbnRpbnVl 3136\nIHRhbGs= 3137\nX2dldA== 3138\nIGdyb3c= 3139\nLnN3 3140\nZWI= 3141\nIFB1YmxpYw== 3142\nT1A= 3143\nZWN1dGU= 3144\nb2xz 3145\nICoq 3146\nIik7Cgo= 3147\nIG1hc3M= 3148\ndXJlZA== 3149\nLmNsYXNz 3150\nb21pYw== 3151\nIG1lYW4= 3152\naXBz 3153\nIGF1dA== 3154\nKTsNCg0K 3155\nIHVudGls 3156\nIG1hcmtldA== 3157\nIGFyZWE= 3158\ndWl0 3159\nIGxlbmd0aA== 3160\nIFdpdGg= 3161\nc3RydWN0b3I= 3162\nZXZlbnQ= 3163\nIj48 3164\nIFNw 3165\nSVY= 3166\nIG11cw== 3167\naWZm 3168\nIGtpbmQ= 3169\nYXV0aG9y 3170\nb3VuZHM= 3171\nbWI= 3172\nX2tleQ== 3173\nNDE= 3174\nd2lkdGg= 3175\ncG9zaXRvcnk= 3176\nIGxpZ2h0 3177\ndWs= 3178\nUm93 3179\nb2hu 3180\nYWxm 3181\ndmlyb25tZW50 3182\nYXBwZXI= 3183\nb2xsZWN0aW9ucw== 3184\nIHNpZGU= 3185\nX2luZm8= 3186\nIGV4YW1wbGU= 3187\naW1hcnk= 3188\nIHdy 3189\nIGNhbXA= 3190\nY3JpYmU= 3191\nMjU1 3192\nIi8= 3193\nIG1pc3M= 3194\nd2F5 3195\nIGJhc2Vk 3196\nIHBsYW4= 3197\nVmlz 3198\nb21haW4= 3199\ndW5r 3200\nIGF3YXk= 3201\nVVA= 3202\nPFQ= 3203\nT1M= 3204\naW9k 3205\nIE1vbg== 3206\n4oCZcmU= 3207\nIGxpaw== 3208\nw6c= 3209\naXZlbHk= 3210\nLnY= 3211\naW1lcg== 3212\naXplcg== 3213\nU3Vi 3214\nIGJ1dHRvbg== 3215\nIFVw 3216\nIGV4cGVyaWVuY2U= 3217\nQ0w= 3218\nIHJlbmRlcg== 3219\nX3ZhbHVl 3220\nIG5lYXI= 3221\nVVJM 3222\nYWx0 3223\nIGNvdW50cnk= 3224\naWJpbGl0eQ== 3225\nNTc= 3226\nKCksCg== 3227\nZWFk 3228\nIGF1dGhvcg== 3229\nIHNwZWNpZmlj 3230\nYmFzZQ== 3231\nKG5hbWU= 3232\nb25lcw== 3233\nIERv 3234\nIGFsb25n 3235\neWVhcg== 3236\nIGV4cHJlc3M= 3237\nLic= 3238\nZW52 3239\nIGJlZ2lu 3240\nIHNvZnR3YXJl 3241\nIGltcA== 3242\nIHdpbg== 3243\nw7Nu 3244\nIHRoaW5n 3245\nVHJhbnM= 3246\nIFRIRQ== 3247\nIDw/ 3248\nIHdoeQ== 3249\nIGRvZXNu 3250\naWo= 3251\nZ2luZw== 3252\nCWc= 3253\nIHNpbmdsZQ== 3254\nb2Zmc2V0 3255\nYXJuaW5n 3256\nb2dyYXBo 3257\nbGV5 3258\nX2NvdW50 3259\nIGFuYWw= 3260\nY3JlYXRl 3261\nL20= 3262\nIFJlZw== 3263\nOTg= 3264\ndW5jaA== 3265\nPSQ= 3266\naXNr 3267\nIHJpZ2h0cw== 3268\nKE0= 3269\nICIiIgo= 3270\nYXBlcg== 3271\nLm1vZGVs 3272\nIHBv 3273\nZW1wdHk= 3274\nYXJ0bWVudA== 3275\nIGFudA== 3276\nIFdoZW4= 3277\nIHdvbWVu 3278\nIEVk 3279\nIHNlYXNvbg== 3280\nIGRlc3Q= 3281\nw6M= 3282\nKGg= 3283\nIHBvc3NpYmxl 3284\nIHNldmVy 3285\nIGJ0bg== 3286\nIGRpZG4= 3287\nIHNlbnQ= 3288\nIGVuYw== 3289\nIGNvbW1hbmQ= 3290\nIF0sCg== 3291\nX3g= 3292\nIHJlY2VudA== 3293\nb2x1dGlvbg== 3294\ndmVjdG9y 3295\nIEJ5 3296\nIE1heQ== 3297\nIEFjdA== 3298\nu78= 3299\nIG1vbmV5 3300\nSU5U 3301\nYnNpdGU= 3302\nCXA= 3303\nLg0K 3304\n77u/ 3305\nc2w= 3306\nYXR0ZXJu 3307\nIENsYXNz 3308\nIHRvbGQ= 3309\ndWRpbw== 3310\nY3VycmVudA== 3311\nIGVxdQ== 3312\nIGF1dG8= 3313\nIFN0YXRl 3314\nZGE= 3315\nbXNn 3316\nKSk7Cgo= 3317\nIHdvcmtpbmc= 3318\nIHF1ZXJ5 3319\nIEJy 3320\nIHdpbmRvdw== 3321\nYXV0aA== 3322\nb25seQ== 3323\nCXQ= 3324\nIGxlYXN0 3325\nYWdu 3326\nIGV4cGw= 3327\naXR0ZXI= 3328\nYXJpbmc= 3329\nIGNvbHVtbg== 3330\nIEdlbmVyYWw= 3331\nIjoi 3332\nZXJhbA== 3333\ncmlvcg== 3334\nIHJlY29yZA== 3335\nSUI= 3336\nRVg= 3337\nIGRhdA== 3338\nIG1ha2luZw== 3339\ndWVk 3340\nIENhcg== 3341\nZW1w 3342\nIi4= 3343\nIE1lZA== 3344\nIGNsb3Nl 3345\nIHBlcmNlbnQ= 3346\nIHBhc3Q= 3347\nKGc= 3348\nOig= 3349\nIHdyaXRl 3350\nIG1vdmU= 3351\nIHBhdA== 3352\nQ29udHJvbA== 3353\nLlRv 3354\nIHZp 3355\nKi8K 3356\naW5hdGU= 3357\nJ2xs 3358\nYWdlZA== 3359\nTnVsbA== 3360\nIHNwZWNpYWw= 3361\nSVpF 3362\nIGNpdHk= 3363\nLyoK 3364\nIEVuZw== 3365\naXhlZA== 3366\naW5hcnk= 3367\ncHk= 3368\nIGVmZg== 3369\nYXJpbw== 3370\nIHRlbGw= 3371\nYXZvcg== 3372\nIHNlbGVjdA== 3373\nbGV2ZWw= 3374\naW11bQ== 3375\nb3Blcg== 3376\nQnVpbGRlcg== 3377\nSVA= 3378\nJyksCg== 3379\nZXNj 3380\nIGZvbnQ= 3381\nIjsKCg== 3382\nIEFt 3383\naXNoZWQ= 3384\naWxscw== 3385\nSW50ZXI= 3386\nT1c= 3387\nIGNvdXJzZQ== 3388\nIGxhdGU= 3389\naWRkbGU= 3390\nNDM= 3391\nIGFtb3VudA== 3392\nIGFzeW5j 3393\naW5v 3394\nY3Vs 3395\nIOw= 3396\nYW5kbGU= 3397\nX3VzZXI= 3398\nIGJlbg== 3399\nIENhbA== 3400\nICRf 3401\nIFJlcA== 3402\nIGVub3VnaA== 3403\nVG9rZW4= 3404\nLnVzZXI= 3405\nKGo= 3406\nU2M= 3407\nV2lkdGg= 3408\nbm93 3409\nYXRmb3Jt 3410\nIGxvb2tpbmc= 3411\nIGhvbGQ= 3412\nTW9kdWxl 3413\nSVRZ 3414\ndm8= 3415\naXNvbg== 3416\nLkRhdGE= 3417\neWM= 3418\nIHBvdA== 3419\nIFRydW1w 3420\naWR1YWw= 3421\naWRlcw== 3422\ncnQ= 3423\nIHByb3BlcnR5 3424\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 3425\nYW1ld29yaw== 3426\nZ28= 3427\nIGxvdw== 3428\nIHBhcmE= 3429\nIHByaWNl 3430\ndXJ5 3431\nIHRvZGF5 3432\ncm95 3433\nICcv 3434\nIHBvbGl0 3435\nICcn 3436\neW1i 3437\nUGg= 3438\nIGFkdg== 3439\nIGF0dGFjaw== 3440\nIFN0ZQ== 3441\nUk9N 3442\nNDAw 3443\nYW5h 3444\nIG1lYW5z 3445\nIHN0b3J5 3446\naWRz 3447\nYWtlbg== 3448\nIG1lZXQ= 3449\nIG1vbQ== 3450\nIOKAmA== 3451\nID8+ 3452\nIGRlbg== 3453\nb2JpbGU= 3454\nY2hhbmdl 3455\nICAgICAgICAgICAgCg== 3456\naWNp 3457\nbmE= 3458\nIEZvcm0= 3459\nIHNvcnQ= 3460\nU2VsZWN0 3461\ncGFyZQ== 3462\nIHRob3VnaHQ= 3463\nX2Nvbg== 3464\nIHRhc2s= 3465\nb2N1cw== 3466\nIERF 3467\nIE1pbg== 3468\nIG9wdA== 3469\nCWJyZWFr 3470\ndW1lcg== 3471\nS0U= 3472\ndGhlbg== 3473\nIGRldA== 3474\nIFRlc3Q= 3475\ncG9ydHM= 3476\nIHJldmlldw== 3477\nKCcv 3478\nbW92ZQ== 3479\nIHN3aXRjaA== 3480\nRVJU 3481\ncGF0Y2g= 3482\nYW5ub3Q= 3483\n44I= 3484\nIGFib3Zl 3485\naXRpdmU= 3486\nNTY= 3487\nIHF1ZXN0aW9u 3488\nIFF1 3489\n44CCCgo= 3490\nZ2xl 3491\nIHdvcmQ= 3492\nIHByb3ZpZGU= 3493\nIFJldHVybg== 3494\nIHJlc2VhcmNo 3495\nw6Nv 3496\ndXN0cg== 3497\nIHB1Ymxpc2g= 3498\nY2hlbWE= 3499\nfX0= 3500\nIENPTg== 3501\nLWlu 3502\nYWxsYmFjaw== 3503\nIGNvdmVy 3504\nXFw= 3505\nY29sb3I= 3506\nIElT 3507\nIHdoZXRoZXI= 3508\naW1hdGU= 3509\naXNj 3510\nQmFy 3511\nIGRpdg== 3512\nQmU= 3513\nb3Vybg== 3514\nIGhhdmluZw== 3515\nbGVt 3516\ncGxheWVy 3517\nYWJz 3518\nYW1lcmE= 3519\nbmV5 3520\nIGV4Yw== 3521\nZ2V0aGVy 3522\ncGxpZWQ= 3523\nYW8= 3524\nWyQ= 3525\nICsr 3526\naXBl 3527\nc2hvdw== 3528\nL2Q= 3529\nWzo= 3530\nYWdlbWVudA== 3531\nbGV2 3532\nX0lE 3533\nOTc= 3534\ncmFyeQ== 3535\nYWRlcw== 3536\nX3Nl 3537\nYXVzZQ== 3538\nIGVtcGxveQ== 3539\nICovDQo= 3540\nIGZyZQ== 3541\nICdA 3542\nIGNvbXBsZXQ= 3543\nIGxhcmdl 3544\ncmFs 3545\nXHg= 3546\nIGZhYw== 3547\nPFN0cmluZw== 3548\nIGNyZWF0ZWQ= 3549\ndXBlcg== 3550\nLnN0YXRl 3551\nIGhvc3Q= 3552\nZW5lcmlj 3553\nL2I= 3554\nKCE= 3555\nd2hpbGU= 3556\naWFz 3557\nQlVH 3558\nICk7Cgo= 3559\nIHJvbGU= 3560\nUmVn 3561\nIENvbG9y 3562\nU3RhcnQ= 3563\nIHBvcm4= 3564\ndG9w 3565\nIHdlYg== 3566\nIGRldg== 3567\nIGRlYWw= 3568\nKyspCg== 3569\nSW50ZWdlcg== 3570\ncG9zaXRpb24= 3571\nLm9u 3572\nICgi 3573\n5Lg= 3574\nIHByb2JsZW0= 3575\nc3Y= 3576\nIHByZXNz 3577\nQUJMRQ== 3578\nQVRJT04= 3579\nIFNlZQ== 3580\nYW5jaA== 3581\nIHRob3VnaA== 3582\nbGVlcA== 3583\nIDwhLS0= 3584\nIHBvaW50cw== 3585\nICAgICAgICAgICAgICAgICAgICAgICAgIA== 3586\nLko= 3587\nIDo6 3588\ncHRy 3589\nREI= 3590\nKys7Cg== 3591\nLnBuZw== 3592\nbm9kZQ== 3593\nc29mdA== 3594\ncG9uZA== 3595\nIGV2ZXI= 3596\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 3597\nTWVudQ== 3598\nKCcj 3599\nIHNlcnZpY2Vz 3600\ncGc= 3601\nfSkK 3602\ncGFyYW1z 3603\nIGFjdHVhbGx5 3604\nICIv 3605\nRW1wdHk= 3606\nTWV0aG9k 3607\nIGlkZW50 3608\ndW5pYw== 3609\nIG1pbGxpb24= 3610\nIGFmZg== 3611\nc3R5bGU= 3612\nIGNvbmM= 3613\naW9z 3614\naWdubWVudA== 3615\nVUxU 3616\nUHI= 3617\nIjsNCg== 3618\nIHVuZGVyc3RhbmQ= 3619\ndWFyeQ== 3620\nIGhhcHBlbg== 3621\nIHNlcnZlcg== 3622\nIENv 3623\nU0M= 3624\nIGxlcw== 3625\nIGZpbGVz 3626\nR3JpZA== 3627\nc3Fs 3628\nIG9mdGVu 3629\nIGluZm8= 3630\nX3Ry 3631\nc3Jj 3632\nb255 3633\nIHNwYWNl 3634\ndW1i 3635\nIHBhc3N3b3Jk 3636\nIHN0b3Jl 3637\nLAoK 3638\nIFdoYXQ= 3639\nZ2Vk 3640\nIEZhbHNl 3641\nVXM= 3642\nc3dlcg== 3643\nX2luZGV4 3644\nIGZvcm1hdA== 3645\nbW9zdA== 3646\nc20= 3647\nTmV3 3648\nIGRldGFpbHM= 3649\nIHByb2I= 3650\nIEFORA== 3651\nKCkNCg== 3652\naWxhcg== 3653\nICR7 3654\ncnlwdA== 3655\nLkNvbGxlY3Rpb25z 3656\nJHRoaXM= 3657\nIEZyZWU= 3658\nX29m 3659\nKGZhbHNl 3660\nZGF0ZWQ= 3661\nID4+ 3662\nIGZhY2U= 3663\nQ1RJT04= 3664\nIHNhdmU= 3665\nIHR5cA== 3666\nZGV2 3667\nKCIj 3668\nQUdF 3669\nY29udGFpbmVy 3670\nZWRpdA== 3671\nUUw= 3672\nIGl0ZW1z 3673\nIHNvY2lhbA== 3674\naWVu 3675\nIFJlYWN0 3676\nKS4KCg== 3677\nIG1hcg== 3678\nIHJlZHU= 3679\nIFJF 3680\nLnB1dA== 3681\nIG1ham9y 3682\nQ2VsbA== 3683\nbmV4dA== 3684\nIGV4cGVjdGVk 3685\nIHlldA== 3686\nIGluZGl2 3687\ndHJpYnV0ZXM= 3688\nYXRpcw== 3689\nYW1lZA== 3690\nIGZvb2Q= 3691\nU291cmNl 3692\nKHN0cmluZw== 3693\nICsK 3694\naXRlcw== 3695\nZHI= 3696\nIG1lbWJlcnM= 3697\nIGNvbWI= 3698\naXRlbXM= 3699\nIFBlcg== 3700\nVEg= 3701\nPVRydWU= 3702\nIGJhcg== 3703\nX1NF 3704\nY29tbQ== 3705\nKHc= 3706\nKQoKCg== 3707\nIHNlbmQ= 3708\nIGluYw== 3709\ndW5zaWduZWQ= 3710\nRkE= 3711\nIHBhcmFtcw== 3712\nYXBwaW5n 3713\ncm9z 3714\ndWdpbg== 3715\nZmE= 3716\nIGNvbm5lY3Rpb24= 3717\nIH07Cgo= 3718\nIGJlY29tZQ== 3719\nTW9kZQ== 3720\nIGV2 3721\nIGRpZmY= 3722\nIFVuaXRlZA== 3723\nSGVpZ2h0 3724\nZnVsbHk= 3725\naW1hZ2Vz 3726\nIG1ha2Vz 3727\nIGdsb2JhbA== 3728\nIGNvbnRhY3Q= 3729\nJzoK 3730\nIGFicw== 3731\n0LDQ 3732\nZmxvYXQ= 3733\nIGV4Y2VwdA== 3734\nIFBvbA== 3735\nQ2hpbGQ= 3736\ndHlw 3737\nIGNlcnRhaW4= 3738\nacOzbg== 3739\nT1VU 3740\nIGltcHJv 3741\naWxlcw== 3742\nIC0tPgo= 3743\nIFBhcnQ= 3744\ndmFsdWVz 3745\nb3Nz 3746\nLyoq 3747\naWxpdA== 3748\nIEV2ZW50 3749\nY3VyaXR5 3750\nc3Rlcg== 3751\nIGNoYXJhY3Rlcg== 3752\nMTk4 3753\nIG5ld3M= 3754\nICIs 3755\nIGRldmljZQ== 3756\nY2Vs 3757\nbG9naW4= 3758\naGVldA== 3759\nRGVmYXVsdA== 3760\nQCI= 3761\nCSA= 3762\nY2xpY2s= 3763\nKHZhbHVl 3764\nIEFi 3765\nIHByZXZpb3Vz 3766\nRVJST1I= 3767\nb2NhbA== 3768\nIG1hdGVyaWFs 3769\nIGJlbG93 3770\nIENocmlzdA== 3771\nIG1lZGlh 3772\nY292ZXI= 3773\nIFVJ 3774\nIGZhaWw= 3775\nIGJsYWNr 3776\nIGNvbXBvbmVudA== 3777\nIEFtZXJpY2Fu 3778\nIGFkZGVk 3779\nIGJ1eQ== 3780\nc3RpdA== 3781\nIGNhbWU= 3782\nIGRlbGV0ZQ== 3783\ncHJvcGVydHk= 3784\nb2Rpbmc= 3785\nIGNhcmQ= 3786\ncm9wcw== 3787\nIGh0dHBz 3788\nIHJvb3Q= 3789\nIGhhbmRsZQ== 3790\nQ0M= 3791\nQmFjaw== 3792\nZW1wbGF0ZQ== 3793\nIGdldHRpbmc= 3794\nX2J5 3795\nbWFpbA== 3796\nX3No 3797\nLmFzc2VydA== 3798\nIERlYw== 3799\nKHRydWU= 3800\nIGNvbXB1dA== 3801\nIGNsYWlt 3802\nJz0+ 3803\nIFN1Yg== 3804\nIGFpcg== 3805\nb3Bz 3806\nbmF2 3807\nZW1lbnRz 3808\nKGlk 3809\nIGVudGVy 3810\nYW5nZWQ= 3811\nRW5k 3812\nIGxvY2F0aW9u 3813\nIG5pZ2h0 3814\nIGRvaW5n 3815\nIFJlZA== 3816\nbGlu 3817\nfQoKCg== 3818\ndmlkZXI= 3819\nIHBpY2s= 3820\nIHdhdGNo 3821\nZXNzYWdlcw== 3822\nIGh1bWFu 3823\nIGRhbQ== 3824\ncGVuZA== 3825\nZGly 3826\nIHRheA== 3827\nIGdpcmw= 3828\ncmVldA== 3829\nIGJveA== 3830\nIHN0cm9uZw== 3831\nKHY= 3832\ncmVs 3833\nIGludGVyZmFjZQ== 3834\nIG1zZw== 3835\nZmVjdA== 3836\nX2F0 3837\nIGhvdXNl 3838\nIHRyYWNr 3839\nJyk7Cgo= 3840\namU= 3841\nIEpvaG4= 3842\naXN0cg== 3843\nKFM= 3844\ndWJl 3845\nIGNl 3846\naXR0ZWQ= 3847\nVkVS 3848\nKik= 3849\ncGFyZW50 3850\nIGFwcGxpY2F0aW9u 3851\nYW55 3852\nLnN3aW5n 3853\nIHBhY2s= 3854\nXHU= 3855\nIHByYWN0 3856\nIHNlY3Rpb24= 3857\nY3R4 3858\nIHVuc2lnbmVk 3859\nLlBvaW50 3860\nIE9uZQ== 3861\nxLE= 3862\naXBsZQ== 3863\nYWlk 3864\n0YM= 3865\nVmVjdG9y 3866\nYnl0ZQ== 3867\nIHdhaXQ= 3868\nIMOg 3869\nw6U= 3870\nIHRvZ2V0aGVy 3871\nIHRocm93cw== 3872\nRk8= 3873\nJykp 3874\naG9zdA== 3875\naXNpbmc= 3876\nLnZpZXc= 3877\nIHRlcm1z 3878\nZnJhbWV3b3Jr 3879\nLXI= 3880\nIGFwcGx5 3881\nIHNlc3Npb24= 3882\nT3B0aW9ucw== 3883\ndWdnZXN0 3884\nIG90aGVycw== 3885\nd2l0dGVy 3886\nIGZ1bmQ= 3887\nSW5pdA== 3888\nX18o 3889\nZW5zb3I= 3890\nR0VU 3891\nIHNldmVyYWw= 3892\naWk= 3893\nW2o= 3894\nSU8= 3895\nIHRlbXBsYXRl 3896\nUG9zaXRpb24= 3897\nIGVjb24= 3898\nYWNoaW5l 3899\nIGls 3900\nLnNwcmluZw== 3901\nbWFpbg== 3902\nZWx0 3903\naW1lbnQ= 3904\nUmVj 3905\nbW0= 3906\nIFVuaXZlcnNpdHk= 3907\ndXJzb3I= 3908\nICAgICAgICAgICAgICAgICAgICA= 3909\nR0w= 3910\naWN0dXJl 3911\naXRodWI= 3912\nY2Vy 3913\nY2FzdA== 3914\nRnJvbQ== 3915\nYWxlcw== 3916\nIHN1YmplY3Q= 3917\ncGFzc3dvcmQ= 3918\nbnk= 3919\nIGVzYw== 3920\nLndyaXRl 3921\n77yM 3922\nV2hhdA== 3923\nLkg= 3924\nIGhpc3Rvcnk= 3925\nIEZl 3926\nIGluZGl2aWR1YWw= 3927\ndW5pdA== 3928\nIC0tPg== 3929\nIGR1 3930\nSVNU 3931\nIHVzZXJz 3932\nZnM= 3933\nZmFsc2U= 3934\ndW50 3935\nVGl0bGU= 3936\nIG1vdA== 3937\nIGZ1dHVyZQ== 3938\nYWNoZWQ= 3939\nIHN0YXJ0ZWQ= 3940\nIG1vZGU= 3941\nICc8 3942\nX2FycmF5 3943\nIGF4 3944\nJ107Cg== 3945\naXJlcw== 3946\nVGhlcmU= 3947\ndWdodA== 3948\ndG1s 3949\ncG9zZWQ= 3950\naWN1bHQ= 3951\nIHRvb2s= 3952\nIGdhbWVz 3953\nIH19 3954\nID8+Cg== 3955\nIHByb2R1Y3Rz 3956\nSXM= 3957\nIGJhZA== 3958\nIERlcw== 3959\nLnBhdGg= 3960\nJwoK 3961\nIFBvc3Q= 3962\nYXZlbA== 3963\nKDo= 3964\nMTUw 3965\nIG5lZWRz 3966\nIGtub3du 3967\nRmw= 3968\nIGV4ZWM= 3969\nIHNlZW4= 3970\nNTE= 3971\ndW1l 3972\nIGJvcmRlcg== 3973\nIGxpdmU= 3974\ndGVtcA== 3975\nUGVy 3976\nIHZhcmlhYmxl 3977\naWV0 3978\nIERlZg== 3979\nIGdl 3980\nZW1l 3981\nX2JhY2s= 3982\nZmlyc3Q= 3983\nIHByb3ZpZGVk 3984\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 3985\nIGZpbGVuYW1l 3986\nIGhvcGU= 3987\ndWx5 3988\nYXV0bw== 3989\nZmluZA== 3990\nX3N0cmluZw== 3991\nYnRu 3992\naXR1ZGU= 3993\nQXR0cmlidXRl 3994\nIHlvdW5n 3995\nLnR4dA== 3996\nIHdlYnNpdGU= 3997\nIFByb3A= 3998\nIGV5 3999\nPigpOwo= 4000\naW9uYWw= 4001\nQVJS 4002\naWN0aW9uYXJ5 4003\ndXJ0aGVy 4004\nLjwv 4005\nQUxM 4006\nIHN0dWR5 4007\naWxp 4008\nIG5ldHdvcms= 4009\neWw= 4010\naXN0YW5jZQ== 4011\nT0s= 4012\nTlU= 4013\ncmVzdA== 4014\nIFNU 4015\naWNyb3NvZnQ= 4016\nIGxpbWl0 4017\nIGN1dA== 4018\nKCk6Cg== 4019\nIGNvdQ== 4020\nb2du 4021\nIHNpemVvZg== 4022\naXZhbA== 4023\nIHdlbnQ= 4024\nLno= 4025\nTGluaw== 4026\nIGZpcmU= 4027\nIGFjcm9zcw== 4028\nIGNvbW11bml0eQ== 4029\ncmVnaW9u 4030\nTkU= 4031\nUmVm 4032\nIG9mZmljaWFs 4033\nIHZpc2l0 4034\nb2x2ZQ== 4035\nIHJlY2VpdmVk 4036\nIHRva2Vu 4037\nIG1vbnRocw== 4038\nIGFuaW0= 4039\nIHBhcnRpY3VsYXI= 4040\nc3R5bGVz 4041\naWNv 4042\nIGVzcw== 4043\nODc= 4044\nLkNvbnRyb2w= 4045\nIMOp 4046\nYmFsbA== 4047\nIGxlYXJu 4048\naW5kaW5n 4049\nVmFy 4050\nIGRlY2w= 4051\nKGVycg== 4052\nTEVDVA== 4053\nT25l 4054\ncGhh 4055\nIH4= 4056\nZm9ydA== 4057\nYXN1cmU= 4058\nIG1pbmQ= 4059\nIEVuZA== 4060\nQ2hlY2s= 4061\nIHF1aWNr 4062\nIiks 4063\nQU5E 4064\ndXRpb25z 4065\nQmFzZQ== 4066\nX19fX19fX18= 4067\nIGNvbW1lbnQ= 4068\nSU5F 4069\n4oCZdmU= 4070\nQnV0 4071\nIEVs 4072\nIFVz 4073\nIGFkbWlu 4074\nbWFyaw== 4075\nIE5hbWU= 4076\nYAo= 4077\nIFR5cGU= 4078\nYW1pYw== 4079\ncGM= 4080\nbG9vcg== 4081\nRlQ= 4082\nIG9wcA== 4083\nY2tldA== 4084\nKS0+ 4085\ndHg= 4086\nIHB1cg== 4087\ndWVs 4088\neW1ib2w= 4089\ndWF0aW9u 4090\nYW5nZXI= 4091\nIGJhY2tncm91bmQ= 4092\nZWNlc3M= 4093\nZWZpbmVk 4094\nLi4uLi4uLi4= 4095\nIGRlc2NyaXB0aW9u 4096\nIHJlcHJlc2VudA== 4097\nIikpOwo= 4098\ncHJlc3Npb24= 4099\ncm93c2Vy 4100\nIHNlcmllcw== 4101\nd2FyZHM= 4102\nNTI= 4103\nKCRf 4104\nYWlzZQ== 4105\nIGhvdA== 4106\nYWNpdHk= 4107\ncmllcw== 4108\nYWN0aW9ucw== 4109\nQ3JlYXRl 4110\nYWRpbw== 4111\nYW1wbGVz 4112\nIG9yaWdpbmFs 4113\nZW5zaXZl 4114\nZm9udA== 4115\nc3RyZWFt 4116\n77u/dXNpbmc= 4117\nLnNwcmluZ2ZyYW1ld29yaw== 4118\nMDAx 4119\nc2VydmVy 4120\nIGJpbGw= 4121\nQUNL 4122\naWxlbmFtZQ== 4123\nIGZyYW1l 4124\nID0K 4125\nRWRpdA== 4126\nYWRpdXM= 4127\nIGRyYXc= 4128\nYW5rcw== 4129\nIGRldGVy 4130\nIGNvbWVz 4131\nX2ludA== 4132\nIGZvcmVhY2g= 4133\nYW5nbGU= 4134\nIGVsZWN0 4135\ncGVjdGVk 4136\nSGVhZGVy 4137\naXN0cmF0aW9u 4138\nRmFsc2U= 4139\nIEdhbWU= 4140\nIGZpbHRlcg== 4141\nQWN0aXZpdHk= 4142\nIGxhcmc= 4143\naW5pdGlvbg== 4144\nICI8 4145\nMjU2 4146\naXNlZA== 4147\nIHJlbW92ZQ== 4148\nIFRyYW5z 4149\nbWV0 4150\nc2Vl 4151\nRm9ybWF0 4152\nQ29tbWFuZA== 4153\nIEVY 4154\nTm9uZQ== 4155\nIGZyb250 4156\nQVNF 4157\nIFJlYw== 4158\nb3VuZGF0aW9u 4159\nIHZv 4160\nOTY= 4161\nPVwi 4162\nKCo= 4163\nQ2hhbmdl 4164\nLldyaXRl 4165\nZ3JvdXA= 4166\naWVudHM= 4167\ndXk= 4168\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 4169\nIGRpZw== 4170\naHI= 4171\nKC0= 4172\nIGdlbg== 4173\nbnVtYmVy 4174\ndmVj 4175\ndXJvcGU= 4176\nZW50cnk= 4177\nTEw= 4178\nIHN0ZQ== 4179\nVmFsaWQ= 4180\nJ10s 4181\nX3BhcmFt 4182\nIHNlbGVjdGVk 4183\nIGFjY29yZGluZw== 4184\nIERpcw== 4185\nIHV0aWw= 4186\nQnVmZmVy 4187\nX2Vycm9y 4188\nIGFzc29jaQ== 4189\nX1NJWkU= 4190\nIHdvcg== 4191\nIHByaW50Zg== 4192\ncmFn 4193\nwqA= 4194\nREQ= 4195\nIFZhbA== 4196\nIGFjdGl2 4197\nRW5n 4198\nZXRpbWU= 4199\nIHZpcnR1YWw= 4200\nYWlnbg== 4201\nYXVy 4202\nIFByZXM= 4203\nIEV4Y2VwdGlvbg== 4204\nIGFueXRoaW5n 4205\nIE9mZg== 4206\nIGhvdXJz 4207\nIHdhcg== 4208\nQXJncw== 4209\nYWdpbmc= 4210\nIG1vZGVscw== 4211\nIFRpbWU= 4212\nT2I= 4213\nYW1z 4214\nam95 4215\nIGVhcmx5 4216\nLnJlYWQ= 4217\nODY= 4218\nIGNlbnRlcg== 4219\nIEluaXRpYWw= 4220\nIGxhbmd1YWdl 4221\nbGVuZ3Ro 4222\neHk= 4223\nIHNu 4224\nIGluZg== 4225\nUG9zdA== 4226\nIGFnbw== 4227\nIGVhc3k= 4228\nX2NvZGU= 4229\nIEFOWQ== 4230\nX2No 4231\nIGRvd25sb2Fk 4232\nKFQ= 4233\nYXZlZA== 4234\n4oCT 4235\nIHN0dWRlbnRz 4236\nIGZpZw== 4237\nbGlnaHQ= 4238\neHg= 4239\nIGJ1ZmZlcg== 4240\nIERlcA== 4241\nIE1hdGg= 4242\nSVRI 4243\nIHZhcmk= 4244\nIGR1ZQ== 4245\nRmFjdG9yeQ== 4246\nIHBvcg== 4247\nIGVw 4248\nb3R5cGU= 4249\nIGNhbm5vdA== 4250\nIHdoaXRl 4251\nPGludA== 4252\ndGVybg== 4253\nIHJlZ2lzdGVy 4254\nIHByZWQ= 4255\nY2x1cw== 4256\nX2RhdGU= 4257\nIC8qKg== 4258\nIGF1dGg= 4259\nIFtdCg== 4260\nIHBlcmlvZA== 4261\nbm93bg== 4262\nIHZvdA== 4263\nIHNjcmVlbg== 4264\nJ2Q= 4265\nVHlwZXM= 4266\nIHRtcA== 4267\n0LXQ 4268\ndXJhbA== 4269\nIGJlbmVm 4270\nX3k= 4271\nIG5ldA== 4272\nIFN0YXRlcw== 4273\nJ11bJw== 4274\nIE5l 4275\nIE5PVA== 4276\nIG5lZw== 4277\nMTAy 4278\nIGNvbW1vbg== 4279\nc2NvcGU= 4280\nIGNyZWQ= 4281\nZ2Vz 4282\nX1RZUEU= 4283\nIHN1Z2dlc3Q= 4284\nb29t 4285\nLgoKCg== 4286\nIGFjY2VwdA== 4287\nIHJhbmRvbQ== 4288\nZXJt 4289\nIFZlY3Rvcg== 4290\nd2l0aA== 4291\nVEVS 4292\nKHN0cg== 4293\nIHJlc3BvbnM= 4294\nIGhpdA== 4295\nLlNldA== 4296\nZ3JpZA== 4297\ncmlh 4298\nIGNsaWNr 4299\ndW5kbGU= 4300\nQ2FzZQ== 4301\naW5zZXJ0 4302\nVXRpbHM= 4303\nICIiIg== 4304\nIGltcGxlbWVudA== 4305\nYXRhbA== 4306\ndGVtcHQ= 4307\ndGVtcGxhdGU= 4308\nb2Ny 4309\ncmV0dXJucw== 4310\nIHBsYXllcnM= 4311\ndXNlcnM= 4312\nZWRlZg== 4313\nIFRoZXNl 4314\nIGFtb25n 4315\nIGRlYg== 4316\naGE= 4317\nLmdldEVsZW1lbnQ= 4318\nIGNpcmM= 4319\nIGFuc3dlcg== 4320\nIHdhbGs= 4321\nIHRyZWF0 4322\nIEdl 4323\nIENyZWF0ZQ== 4324\nIGFnZQ== 4325\nIHJlcQ== 4326\nT1NU 4327\nYW5ndWxhcg== 4328\n0Y8= 4329\nIGZpdmU= 4330\nNTM= 4331\nIGRpc3RyaWJ1dGVk 4332\nIGZyaWVuZA== 4333\nVFA= 4334\nIGNsZWFu 4335\nb3dz 4336\nLkNvbnRyb2xz 4337\nZGlz 4338\nIHdvcmRz 4339\nLmlv 4340\nenk= 4341\nIGhlYWRlcg== 4342\nIENoZWNr 4343\n4oCZbQ== 4344\nanVzdA== 4345\naG9sZGVy 4346\nPSI8Pw== 4347\nIEdOVQ== 4348\nIENvbA== 4349\naW1lc3Q= 4350\nZW50aWM= 4351\newoK 4352\nIHRyZQ== 4353\nbGFzdA== 4354\nbGE= 4355\nIFlvcms= 4356\nTG8= 4357\nIGRpc2N1c3M= 4358\nIEdvZA== 4359\nIGlzc3Vl 4360\ncmV3 4361\nV2luZG93 4362\nIGxhbmQ= 4363\nMTIw 4364\nIHN0cmVhbQ== 4365\nIFBhcg== 4366\nIHF1YWxpdHk= 4367\nUGFy 4368\nX251bQ== 4369\nNTQ= 4370\nIHNhbA== 4371\nZWx2ZXM= 4372\nT1JE 4373\nKHVzZXI= 4374\nIHdvcmtz 4375\nIGhhbGY= 4376\nZW5zZXM= 4377\ndmFz 4378\nIHBvbGljZQ== 4379\nKCIv 4380\ndWE= 4381\nIHNpbXBsZQ== 4382\nQWRkcmVzcw== 4383\nIGVtcHR5 4384\nZXNo 4385\nMTI4 4386\nVXBkYXRl 4387\nIENyZWF0ZWQ= 4388\nKCcu 4389\nKS4K 4390\nICAgICAgICAgICAgICAgICAg 4391\nIGFncmU= 4392\nIEZST00= 4393\nIGNvb2s= 4394\nIGV2ZXJ5dGhpbmc= 4395\naWxpdGllcw== 4396\nLnN0YXR1cw== 4397\nIHJlbGF0aW9ucw== 4398\nZXh0ZXJu 4399\nIG5vdGhpbmc= 4400\nIHJ1bm5pbmc= 4401\nCXZvaWQ= 4402\nUkk= 4403\nX2E= 4404\nX0NPTg== 4405\ncG9y 4406\nLnN1Yg== 4407\ncmVxdWlyZQ== 4408\nIENpdHk= 4409\nIFdlc3Q= 4410\nIG1vcg== 4411\nc3RvcmU= 4412\nRXF1YWxz 4413\nb2Rlcg== 4414\nIG5h 4415\nIFtb 4416\nICgn 4417\nIERvbg== 4418\nRVJT 4419\nL3A= 4420\nLmpzb24= 4421\nYWJvcg== 4422\nIHNvbWVvbmU= 4423\nX3RleHQ= 4424\nLmNzcw== 4425\nLlRhYg== 4426\nIFNvbWU= 4427\nYXRv 4428\nZG91Ymxl 4429\nIHNoYXJl 4430\nKHZvaWQ= 4431\nX2Rpcg== 4432\nIHVy 4433\nU3RhY2s= 4434\nIFdvcmxk 4435\nLlg= 4436\nc3RyYWN0 4437\nSG93 4438\nLkdlbmVyaWM= 4439\naWNsZXM= 4440\nIGVudHJ5 4441\nIGNoYW5nZXM= 4442\nIHBlcnNvbmFs 4443\nKEE= 4444\nIG9mZnNldA== 4445\nX3B0cg== 4446\nIHBpZQ== 4447\nIEphbg== 4448\nLWdyb3Vw 4449\nbW9kdWxl 4450\nSXRlbXM= 4451\nIEhvd2V2ZXI= 4452\ndmVyYWdl 4453\nLkZvbnQ= 4454\nIGV2ZW50cw== 4455\nLm1pbg== 4456\nIGludm9s 4457\nemE= 4458\nIHdob2xl 4459\nIG5lZWRlZA== 4460\nIGxpa2VseQ== 4461\ncmllZg== 4462\nT1JN 4463\ndmVyc2lvbg== 4464\nIGZpZ2h0 4465\nIGVpbg== 4466\nRnJhbWU= 4467\nMTk3 4468\nZ2Vu 4469\nIE91dA== 4470\nYXZpZ2F0aW9u 4471\nTGVuZ3Ro 4472\naWxsZWQ= 4473\ncXVlbmNl 4474\nICE9PQ== 4475\nIFNvZnR3YXJl 4476\nIHdyaXRpbmc= 4477\nIHJhdGU= 4478\nJ10sCg== 4479\nUGFuZWw= 4480\naW5uZXI= 4481\nIFsi 4482\nIHR3 4483\nY2Q= 4484\nIDsK 4485\nX3N0YXRl 4486\nIFNt 4487\nIE1hcms= 4488\nKSkKCg== 4489\ncHJvdA== 4490\nIE1y 4491\nbWV0aG9k 4492\ndXN0b21lcg== 4493\nSWNvbg== 4494\nIGNvcnJlY3Q= 4495\nKG9iamVjdA== 4496\nIE1vcmU= 4497\nIGZhbGw= 4498\nIHZvbA== 4499\nIGRldmVsb3BtZW50 4500\nZW50bHk= 4501\nIHNp 4502\nbWVkaQ== 4503\ndmluZw== 4504\nUFA= 4505\nYWtlcg== 4506\nIGluZHU= 4507\nIGVsaWY= 4508\nIHByZXQ= 4509\nIGJlbGlldmU= 4510\nbnM= 4511\nb21ldA== 4512\nMTIz 4513\nIEludGVybg== 4514\nUmVjdA== 4515\nU28= 4516\nLmVycm9y 4517\nUmVhZA== 4518\nIGZlYXR1cmVz 4519\nIG1pbnV0ZXM= 4520\nLS0t 4521\nYXNpbmc= 4522\nY3JldA== 4523\nIj4NCg== 4524\nLmFubm90 4525\nIGNvbGxlY3Rpb24= 4526\nJy4= 4527\nIHNpbWlsYXI= 4528\nIHRha2Vu 4529\nKCIl 4530\nT3JkZXI= 4531\nJ10K 4532\nLW1k 4533\nIFRI 4534\nYWNlZA== 4535\nIGlzbg== 4536\nL2o= 4537\nIHNvbg== 4538\nZ3JhcGg= 4539\nIEludGVnZXI= 4540\nIG5lY2Vzcw== 4541\ncmVlbg== 4542\nIHVt 4543\nIFw8 4544\nIG1vbWVudA== 4545\nIGJyaW5n 4546\nIGluZGlj 4547\neXNpcw== 4548\nTGV2ZWw= 4549\ndmVyc2U= 4550\ndXJyZW5j 4551\nX3Rlc3Q= 4552\nIGVudGlyZQ== 4553\nRG93bg== 4554\nIH0KCgo= 4555\nKHJlc3VsdA== 4556\nIFJlYWQ= 4557\nw6g= 4558\nTW9k 4559\nIHRyeWluZw== 4560\nIiksCg== 4561\nIG1lbWJlcg== 4562\nIENvcg== 4563\nT0RP 4564\nLWNvbnRyb2w= 4565\ndW50aW1l 4566\nIFNpbQ== 4567\nRGlhbG9n 4568\ncGxvdA== 4569\nX29u 4570\nIHBoeXM= 4571\nfS8= 4572\nIG5hbWVzcGFjZQ== 4573\nCQ0K 4574\nYWNj 4575\nUGxheWVy 4576\nQVJF 4577\nODk= 4578\nIGZvb3Q= 4579\nIGJvYXJk 4580\ncGFydA== 4581\nIHN1cw== 4582\nd2lzZQ== 4583\nIE1j 4584\nIHB1c2g= 4585\nQVRB 4586\nIHBsZWFzZQ== 4587\ncmllZA== 4588\nd2VldA== 4589\nYml0 4590\naWRlZA== 4591\nVkU= 4592\nIFN3 4593\nVUI= 4594\nIHR5cGVz 4595\nZWRpYQ== 4596\nIGNsb3M= 4597\nYWNlYm9vaw== 4598\nV2hlbg== 4599\nIGVkaXQ= 4600\naWdnZXI= 4601\nIGVuZXJn 4602\nQ29udGFpbmVy 4603\nIHBob3Q= 4604\nIENvdW50 4605\nIEV1cm9wZQ== 4606\nLklz 4607\nIFJ1c3M= 4608\ncGVlZA== 4609\nIFN0cg== 4610\nIHB5 4611\nIGN1bHQ= 4612\nIGRlZmluZWQ= 4613\nY2NvdW50 4614\nIG9idA== 4615\nLkxvY2F0aW9u 4616\nIHRocmVhZA== 4617\naWxsZQ== 4618\nIGluc3RlYWQ= 4619\nc3Ryb25n 4620\nIFNlYw== 4621\nVVJF 4622\nIGlkZWE= 4623\nLnNl 4624\nZW15 4625\nc2VsZWN0ZWQ= 4626\nQ29ubmVjdGlvbg== 4627\nYWNpbmc= 4628\ndGhyZWFk 4629\nLm5leHQ= 4630\nIGNvbGw= 4631\nIGZpbG0= 4632\naXN0aWM= 4633\nIGNvbXBldA== 4634\nIGNvbm4= 4635\ndGhvdWdo 4636\nIGNvbXBhbg== 4637\nb2NrZXQ= 4638\nIHRlYWNo 4639\nPSg= 4640\nIHBob25l 4641\nIGFjdGl2ZQ== 4642\nNzk= 4643\nZGVsZXRl 4644\nMTAx 4645\ndHJpZXM= 4646\nIG1v 4647\nIGRlYXRo 4648\nfSk7Cgo= 4649\nb2NvbA== 4650\nV2lkZ2V0 4651\nIGFydGljbGU= 4652\ncm9kdQ== 4653\nYW5kaWQ= 4654\n0Ys= 4655\nIENy 4656\na2E= 4657\nKCk6 4658\nbG9vZA== 4659\nCQkJCg== 4660\nIGFsbW9zdA== 4661\nIHNlbGw= 4662\nZXJ2bGV0 4663\ncmlw 4664\nVW5pdA== 4665\nIGFwcGxpYw== 4666\nIGNvbm5lY3Q= 4667\nIGZlYXR1cmU= 4668\nIHZpYQ== 4669\nJyks 4670\nIGxpbQ== 4671\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4672\nIEd1 4673\nRW5naW5l 4674\nIGVucw== 4675\nIGVudmlyb25tZW50 4676\nYmxvY2s= 4677\nSEVSRQ== 4678\nTlVMTA== 4679\nZ3k= 4680\ndGFn 4681\nKSku 4682\nZXhw 4683\nIGNvbXBs 4684\nIGluc3RhbGw= 4685\nIGNvbXBsZXRl 4686\ncXVldWU= 4687\nYXR1cmFs 4688\nIGdlbmVyYWw= 4689\ndGhvbg== 4690\nIGFza2Vk 4691\nb3Jlcw== 4692\nKHJlcw== 4693\nIHJlc2VydmVk 4694\nU1A= 4695\nIOKApg== 4696\nxYI= 4697\nIHNpZ25pZmlj 4698\nT2Zm 4699\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4700\nIEFn 4701\nIEp1c3Q= 4702\nIEVycm9y 4703\nIGluZmw= 4704\nYWRhdGE= 4705\nIGljb24= 4706\nYXNrcw== 4707\nJyc= 4708\nX0xP 4709\nPy4= 4710\nYWNjb3VudA== 4711\nICgq 4712\nJykKCg== 4713\ncmFw 4714\nX3Zhcg== 4715\nIEZPUg== 4716\nIHBhcnR5 4717\nIFlvdXI= 4718\nY2F0 4719\nc3RyeQ== 4720\nLm5ldw== 4721\nYm9vdA== 4722\nIE5vdg== 4723\nIHZlY3Rvcg== 4724\nIG5vcm1hbA== 4725\nIGZ1cnRoZXI= 4726\nUmVwb3NpdG9yeQ== 4727\nODAw 4728\nIGRhdGFiYXNl 4729\nYXR0bGU= 4730\nIG11c2lj 4731\nIHNwZWVk 4732\nIGRvYw== 4733\ncHJvY2Vzcw== 4734\nSUdIVA== 4735\nLnBhcnNl 4736\nIHRha2luZw== 4737\nIHZpb2w= 4738\nY2VlZA== 4739\nIEFmdGVy 4740\nIGZvcndhcmQ= 4741\nIGNyaXQ= 4742\nIi8+Cg== 4743\ncm90 4744\nIGZhaWxlZA== 4745\nZWZvcmU= 4746\nIGNvbmNlcm4= 4747\nb2U= 4748\nYmE= 4749\nIHNlbmRlcg== 4750\nIHRlcm0= 4751\naGFz 4752\nPSIj 4753\nIHBvdGVudGlhbA== 4754\nTnVt 4755\nIHB1Ymxpc2hlZA== 4756\nLmNsb3Nl 4757\nIEltYWdl 4758\nc3RyYWludA== 4759\nVUQ= 4760\nIE9i 4761\nIHByb2JhYmx5 4762\nbGlt 4763\nIjoK 4764\nb2x1bWU= 4765\nIGNvbnN1bQ== 4766\nNzY= 4767\nYWd1ZQ== 4768\nZW5zaW9ucw== 4769\nIGludmVzdGln 4770\nLXllYXI= 4771\nJyk7 4772\nLXNt 4773\nIGVuam95 4774\nb3JpZw== 4775\nZXJpbmc= 4776\nY3A= 4777\nbGVhc2Vk 4778\ncGxlbWVudHM= 4779\nIHJldHVybnM= 4780\ncGF0 4781\nQk8= 4782\nIEhvdXNl 4783\nLkxhYmVs 4784\nIHdlaWdodA== 4785\naWdoYg== 4786\nIGNvbmRpdGlvbnM= 4787\nIGV4Y2VwdGlvbg== 4788\nZGVzY3JpcHRpb24= 4789\nIHRyYWQ= 4790\nLXRv 4791\nIHt9 4792\nIG1vZHVsZQ== 4793\nRU5E 4794\nLmFw 4795\nLnByb3Bz 4796\nIGNvbnN0cnVjdG9y 4797\nYXZlcw== 4798\nIGZhdm9y 4799\nIE5vdw== 4800\nO2k= 4801\nIE1haW4= 4802\nX2s= 4803\nZXJpZXM= 4804\n4oCZbGw= 4805\ndHJhbnNmb3Jt 4806\naW1lc3RhbXA= 4807\nUHJl 4808\nIG1lcg== 4809\nLnJlcw== 4810\nc3RhbnQ= 4811\nTG9jYXRpb24= 4812\nX05BTUU= 4813\nIGxvc3M= 4814\nIAoK 4815\nbmV0 4816\nIGVuZ2luZQ== 4817\nQmxvY2s= 4818\nIGlzc3Vlcw== 4819\nIHBhcnNl 4820\nIEJhcg== 4821\nIHN0YXk= 4822\nIEpTT04= 4823\nIGRvbQ== 4824\nYWlycw== 4825\nd25lcg== 4826\nIGxvd2Vy 4827\nIiwNCg== 4828\nIERlbQ== 4829\ndWZhY3Q= 4830\nIHBz 4831\nIHBlcmZlY3Q= 4832\nUkw= 4833\nIGVkdWM= 4834\nbHM= 4835\nZW1vcnk= 4836\nQVJSQU5U 4837\ndWdl 4838\nIGV4YWN0 4839\nLmtleQ== 4840\nYWxsZWQ= 4841\nZWNo 4842\naWVm 4843\nXC8= 4844\nb2tl 4845\nIGZvcm1lcg== 4846\nYWxsb2M= 4847\nIHNpeA== 4848\naWRh 4849\nIG1hcmdpbg== 4850\nIGhlYXJ0 4851\nYWxk 4852\ncGFjaw== 4853\nLmdldEVsZW1lbnRCeUlk 4854\nIFdBUlJBTlQ= 4855\nIHJhdGhlcg== 4856\nIGJ1aWxkaW5n 4857\nZXJtYW4= 4858\nbGljZQ== 4859\nIHF1ZXN0aW9ucw== 4860\naXplcw== 4861\nbGVnZQ== 4862\naXJlY3Rvcnk= 4863\nIGpl 4864\nIGNhcw== 4865\ncHJvcHM= 4866\ndXRm 4867\nIHNlY3VyaXR5 4868\nIGhvd2V2ZXI= 4869\nd2VpZ2h0 4870\nIGluc2lkZQ== 4871\nIHByZXNpZGVudA== 4872\nQ2hhcg== 4873\nIFdJVEg= 4874\nLm1hcA== 4875\nIGdyYXBo 4876\nIHRhZw== 4877\nX3N0YXR1cw== 4878\nIGF0dGVtcHQ= 4879\nb3Bw 4880\ndXNlcw== 4881\nCWNvbnN0 4882\nIHJvdW5k 4883\nLCQ= 4884\nIGZyaWVuZHM= 4885\nRW1haWw= 4886\nPz4= 4887\nUmVzb3VyY2U= 4888\nS0VZ 4889\nb3Nw 4890\nLnF1ZXJ5 4891\nIE5vcnRo 4892\nYWJsZXM= 4893\naXN0cmli 4894\nX2NsYXNz 4895\nZWxsbw== 4896\nVGhhdA== 4897\n0Lo= 4898\ncGVjaWFsbHk= 4899\nIFByZXNpZGVudA== 4900\nIGNhbXBhaWdu 4901\nIGFsdA== 4902\nYXJlYQ== 4903\nIGNoYWxs 4904\nIG9wcG9ydA== 4905\nLkNvbg== 4906\nIGVuZXJneQ== 4907\nbGlrZQ== 4908\nLnN0cmluZw== 4909\naW5ndG9u 4910\nKSo= 4911\neXk= 4912\nIHByb2Zlc3Npb24= 4913\naXJ0aA== 4914\nIHNlZw== 4915\n5pw= 4916\nIGhvcg== 4917\naWVycw== 4918\nY2Fu 4919\nIGJlaGluZA== 4920\nUHJvZHVjdA== 4921\nZmc= 4922\nIFNr 4923\nLmpwZw== 4924\nPzo= 4925\nXTsKCg== 4926\nIGNhbGxiYWNr 4927\nIEh0dHA= 4928\n0Yw= 4929\nbG9uZw== 4930\nTVM= 4931\nQVRI 4932\nIHJhaXNl 4933\nIHdhbnRlZA== 4934\ncm93bg== 4935\ndXRvcg== 4936\nbHQ= 4937\nXT0= 4938\nZWxpbmU= 4939\nTUE= 4940\nIHNlcGFy 4941\nY3M= 4942\nc2VtYg== 4943\nRGlz 4944\nYnNlcnY= 4945\nIFdpbGw= 4946\nIHBvbGljeQ== 4947\nIHRoaXJk 4948\ncGhvbmU= 4949\nIGJlZA== 4950\nL2c= 4951\nLl9f 4952\nIEluYw== 4953\naXppbmc= 4954\nLnJlbW92ZQ== 4955\naW5zdGFuY2U= 4956\nLnR5cGU= 4957\nIHNlcnY= 4958\nRWFjaA== 4959\nIGhhcg== 4960\nIE1lc3NhZ2U= 4961\nKGtleQ== 4962\nU0VMRUNU 4963\nUG9z 4964\nKSk7DQo= 4965\nIHJlY29tbQ== 4966\nIHRyYWluaW5n 4967\nIEVudA== 4968\nIENoYXI= 4969\naWNodA== 4970\nKGZpbGU= 4971\nIHByaW9y 4972\nR2FtZQ== 4973\nIGV4aXQ= 4974\nUGFyYW1z 4975\nLmNvcmU= 4976\nUEM= 4977\nbmVz 4978\nYW5jZWQ= 4979\nKHJlcXVlc3Q= 4980\nUGFzc3dvcmQ= 4981\nfT4K 4982\nIG1hZw== 4983\nIHJlbGVhc2U= 4984\nIHNoYWxs 4985\ndWRlbnQ= 4986\nIFNvdXRo 4987\nYW5kbw== 4988\nOic= 4989\nLlRhYkluZGV4 4990\nc2s= 4991\nYW5uZXI= 4992\naXNzZXQ= 4993\nIG91dHNpZGU= 4994\nbGVkZ2U= 4995\nIOU= 4996\nIFJvYg== 4997\nIGltbQ== 4998\nIQo= 4999\nIFdlYg== 5000\nRGVz 5001\nQkM= 5002\nYW5jaWFs 5003\nUm91dGU= 5004\nRGVj 5005\nZmVyZW5jZXM= 5006\nIHB1cmNo 5007\nIE1vZGVs 5008\nY3Rvcg== 5009\nZ24= 5010\nX3N0YXJ0 5011\nX3Vu 5012\nLio= 5013\naXNlcw== 5014\nIGdyb3VuZA== 5015\nIHVuaXF1ZQ== 5016\nIGJlYXV0 5017\neyI= 5018\nIHBvdXI= 5019\nIE9jdA== 5020\nIHRyZWU= 5021\nc2V0cw== 5022\nX3Jlcw== 5023\nJyktPg== 5024\nX3JlZw== 5025\nKCJc 5026\nIGJ5dGU= 5027\nQmw= 5028\nIGRhdGluZw== 5029\nIG1hdHRlcg== 5030\nIFJlbQ== 5031\nICcuLi8= 5032\nIEF1Zw== 5033\nIExh 5034\nICQo 5035\nb3VybmFs 5036\nMTEx 5037\naWFt 5038\nIHNob3dz 5039\nd3JpdGU= 5040\nIGJhbGw= 5041\nIHNpbXBseQ== 5042\nIGZhc3Q= 5043\nIG1lbW9yeQ== 5044\nQVNT 5045\nIE9m 5046\nb3ZlZA== 5047\nYW50ZQ== 5048\nYXVs 5049\naXN0cnk= 5050\nKSkpOwo= 5051\nIGZpdA== 5052\nPHN0cmluZw== 5053\nIHBvbGl0aWNhbA== 5054\nYW5jZWw= 5055\nXy4= 5056\nY2FyZA== 5057\nLmN1cnJlbnQ= 5058\nb2No 5059\nX2ltYWdl 5060\nXHQ= 5061\nIwo= 5062\nKEw= 5063\nIGluZHVzdHJ5 5064\nY29taW5n 5065\nIGV4dHJh 5066\nNjAw 5067\nIHJlcG9ydGVk 5068\nLnN0YXJ0 5069\nIHJlc291cmNlcw== 5070\nIGltZw== 5071\nZmxvdw== 5072\nX0VY 5073\nKG51bGw= 5074\nIFByZQ== 5075\nIHdyb25n 5076\naW50ZXJmYWNl 5077\nUGFyYW1ldGVy 5078\nbmVycw== 5079\n4bs= 5080\ndHVyZQ== 5081\nZXJzaXN0 5082\nb3VudHJ5 5083\nIHNlZW1z 5084\nYWxhbmNl 5085\nZGVzdA== 5086\nCVN0cmluZw== 5087\nIG1haW50 5088\nIHVuaXQ= 5089\nYWN0ZXJz 5090\nIFRS 5091\naWZ1bA== 5092\nZXhwb3J0cw== 5093\ncHJvamVjdA== 5094\nQXBwbGljYXRpb24= 5095\nbGVnYXRl 5096\nIHRha2Vz 5097\ndGVybQ== 5098\nIGV0Yw== 5099\ndXN0ZXI= 5100\nIGFwcGVhcg== 5101\nYWRkcmVzcw== 5102\nIGZlbQ== 5103\naHM= 5104\nIGhvbQ== 5105\nLC0= 5106\nIGRpZmZpY3VsdA== 5107\nIGNvbWluZw== 5108\nT3Blbg== 5109\nIHNldHRpbmdz 5110\nIFdhcg== 5111\nIFRoZW4= 5112\nIGF1dG9t 5113\nIEZvdW5kYXRpb24= 5114\nIHF1aXRl 5115\nRGVzY3JpcHRpb24= 5116\nIGJsb2c= 5117\naXF1 5118\nUFM= 5119\nMTEw 5120\nX2ZpZWxk 5121\nSnNvbg== 5122\nU1NJT04= 5123\nIFNjaA== 5124\nIExP 5125\nIGRlc2NyaQ== 5126\nIGV2ZXJ5b25l 5127\nIHByZXR0eQ== 5128\nIGxvbmdlcg== 5129\nIG1lbnU= 5130\nIGN1cnJlbnRseQ== 5131\nc2Vj 5132\nIHJlbGF0aW9uc2hpcA== 5133\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 5134\nIE1hcA== 5135\nYXNldA== 5136\nIHBhcmFtZXRlcnM= 5137\nIGNydXNo 5138\nIg0K 5139\nSUxJVFk= 5140\naWdyYXRpb24= 5141\nIGNvdXQ= 5142\ndG90YWw= 5143\nIG5hbWVz 5144\nbmRlZg== 5145\nIik7 5146\ncmllbmQ= 5147\neW5hbWlj 5148\nIGVmZm9ydA== 5149\nIGFjdHVhbA== 5150\nIGZpZWxkcw== 5151\nT1VO 5152\ndGVycw== 5153\nMjUw 5154\nIGZpeA== 5155\nX21vZGVs 5156\nIGNhc2Vz 5157\nQ0E= 5158\nTXk= 5159\nSW50ZXJmYWNl 5160\nIFNF 5161\nMTk2 5162\nXV0= 5163\nYWxsZQ== 5164\nIE5hdGlvbmFs 5165\nIEFycmF5TGlzdA== 5166\naW5saW5l 5167\nLlY= 5168\nYXJh 5169\ncmVmaXg= 5170\nYXNj 5171\nUmVhZGVy 5172\nINC/ 5173\nYXN0aWM= 5174\nKCgp 5175\nQ2w= 5176\nLmFubm90YXRpb24= 5177\nIHBlcmZvcm1hbmNl 5178\nYWlseQ== 5179\nLnRvU3RyaW5n 5180\nLm5ldA== 5181\ndmlld3M= 5182\nLmVuZA== 5183\nYXllcnM= 5184\nbGF0ZQ== 5185\nIEFwcg== 5186\nZWRlcmFs 5187\nJ10p 5188\nLmJvZHk= 5189\nIGhpZ2hlcg== 5190\nX2Zs 5191\nY3I= 5192\nYWxlcnQ= 5193\nX25vZGU= 5194\nIEdvb2dsZQ== 5195\nIGl0c2VsZg== 5196\nQXV0aA== 5197\ndXJyZW5jeQ== 5198\nIHNpZ25pZmljYW50 5199\nYXBwZW5k 5200\nIHJlc3BlY3Q= 5201\nc3RyYXA= 5202\nIHVuYQ== 5203\ncml0ZXJpYQ== 5204\nUE9SVA== 5205\nLmFwYWNoZQ== 5206\nT3V0cHV0 5207\nIHByb2dyZXNz 5208\nIG1pZA== 5209\nIE1pY3Jvc29mdA== 5210\nIHJlc291cmNl 5211\nYWJsaXNo 5212\nIGRpbQ== 5213\nLmxvYWQ= 5214\nLkFwcA== 5215\nIGRpcmVjdGlvbg== 5216\nIGFkZGl0aW9uYWw= 5217\nICAgICAgICAgICAgICAgICAgICAgICAg 5218\nIG51bWJlcnM= 5219\nIGNvbXBhbmllcw== 5220\nLlRo 5221\nIHNvdW5k 5222\ndXNlcm5hbWU= 5223\nIHN0YXRlbWVudA== 5224\nIGFsZXJ0 5225\nIGNvbnRyYWN0 5226\naG9tZQ== 5227\nX2xlbmd0aA== 5228\nLkNvbXBvbmVudA== 5229\nZXY= 5230\nLkV4 5231\n77ya 5232\nIjs= 5233\nIEhpZ2g= 5234\nICkKCg== 5235\nIFBvaW50 5236\nb3Bo 5237\nIGxpbmVz 5238\nLT5f 5239\nIikKCg== 5240\nb3g= 5241\nYXBwbGljYXRpb24= 5242\nIF0K 5243\nCgoKCgoK 5244\nMTgw 5245\nIHNvb24= 5246\nY3Rpb25z 5247\naW5nZXI= 5248\nIGpvaW4= 5249\nIFBl 5250\nIOs= 5251\nIGxhcw== 5252\nLkU= 5253\nY3Nz 5254\nL29y 5255\nIFN0YXJ0 5256\nIFRP 5257\nIHN1YnM= 5258\nY29ubg== 5259\nY29tcG9uZW50cw== 5260\nREVCVUc= 5261\ncXVhcmU= 5262\nRnVuY3Rpb24= 5263\nZW5kYXI= 5264\nLmluZGV4 5265\nIGZpbGw= 5266\nxJk= 5267\nIGNob29zZQ== 5268\naG93 5269\nIEFtZXJpY2E= 5270\nYXNzZXRz 5271\nLS0tLS0tLS0tLS0t 5272\nIFZhbHVl 5273\nIG9mZmljZQ== 5274\nIHZlaA== 5275\nIHRyYW5zZm9ybQ== 5276\nIEFydA== 5277\nIGluZGU= 5278\nIGZu 5279\nIGltcGxlbWVudHM= 5280\nYW5nbw== 5281\ncGxldGU= 5282\nKyI= 5283\ndG1w 5284\nYW1pbHk= 5285\nIGhhc2g= 5286\nbWlzc2lvbnM= 5287\nRVNU 5288\nZ3Q= 5289\nUHJvdmlkZXI= 5290\nICAgICAgICAgICAgICAgICAgICAgIA== 5291\nIGZsYWc= 5292\nIHBhcnRpY2lw 5293\nZGVu 5294\nIFJldHVybnM= 5295\nIG5vdGU= 5296\nw7xy 5297\ncG0= 5298\naWRlb3M= 5299\nIHNwZWNpZmllZA== 5300\nIEVO 5301\nZXN0ZXI= 5302\nb2xpZA== 5303\nIHVwb24= 5304\nKHN0ZA== 5305\nCXY= 5306\nICdc 5307\ndXo= 5308\nIHZlcnQ= 5309\nIHZpY3Q= 5310\nCXNlbGY= 5311\nICIk 5312\nODU= 5313\nLms= 5314\nIGdyb3Vwcw== 5315\nZ2l0aHVi 5316\nbGFuZw== 5317\nIG11dA== 5318\nVE8= 5319\nIHZl 5320\nIFBsZWFzZQ== 5321\nOwoKCg== 5322\nYWNjZXNz 5323\nIHsi 5324\ncmVh 5325\nIHJpc2s= 5326\naWNrZXI= 5327\nb2dnbGU= 5328\nCXdoaWxl 5329\nQU5H 5330\nLnNlbmQ= 5331\nNzI= 5332\nIHdvbWFu 5333\nIGdldHM= 5334\nIGlnbg== 5335\nIElk 5336\nX2xvZw== 5337\nT05F 5338\nIGV2aWQ= 5339\nIEhhcg== 5340\nX3N1Yg== 5341\nIGVuZGw= 5342\nIGluY2x1ZGVk 5343\nKCkpOwoK 5344\nIEFw 5345\naWdy 5346\nIHNlbQ== 5347\nIEJsYWNr 5348\nZG9j 5349\nX3RhYmxl 5350\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 5351\nLXVw 5352\nIGNhdXNl 5353\nIC4u 5354\nIHZhbg== 5355\nX2RpY3Q= 5356\nIGZvY3Vz 5357\nSU5E 5358\nQ0VTUw== 5359\nLkxvZw== 5360\nIG11bHRpcGxl 5361\naWRv 5362\nIHJlZ2FyZA== 5363\nLU0= 5364\nYW5kbGVy 5365\nb3Vyc2U= 5366\nIGRlZw== 5367\nLlU= 5368\nIGFkZGl0aW9u 5369\nIHZhcmlvdXM= 5370\nIHJlY2VpdmU= 5371\n0LXQvQ== 5372\nIEhU 5373\nT2Jq 5374\nREY= 5375\nIGluY3JlYXNl 5376\nIE9wZW4= 5377\nXTs= 5378\nIGNvbW1pdA== 5379\nPwo= 5380\nYXRlZ29yaWVz 5381\nYXRvcnk= 5382\nc2hpcA== 5383\nIE1pY2g= 5384\nIGh0bWw= 5385\ncm9taXNl 5386\nIGxlYXZl 5387\nIHN0cmF0ZWc= 5388\nYXZlbg== 5389\nIENvbnNvbGU= 5390\na25vd24= 5391\nLW4= 5392\nX0xF 5393\nLmNvbXBvbmVudA== 5394\nIGJyZQ== 5395\nU2Vzc2lvbg== 5396\naWFuY2U= 5397\nIGFsaWdu 5398\ndHlwZWRlZg== 5399\nX3Jlc3VsdA== 5400\nIFdIRVJF 5401\nLnNwbGl0 5402\nIHJlYWRpbmc= 5403\nRkFVTFQ= 5404\nIGNsbw== 5405\nIG5vdGljZQ== 5406\nX3By 5407\nYXJ0ZXI= 5408\nIGxvY2s= 5409\nIHN0YW5kYXJk 5410\nZXRpYw== 5411\nZWxsb3c= 5412\nIHBhZGRpbmc= 5413\nIEhpcw== 5414\nIHN0YXRlcw== 5415\nX2Nhc3Q= 5416\nKFA= 5417\nYWE= 5418\nIGludGVybmFs 5419\nZWFu 5420\nIFBSTw== 5421\nIEtleQ== 5422\nIGVzcGVjaWFsbHk= 5423\nbWluZw== 5424\nIGNyb3Nz 5425\nIG5hdGlvbmFs 5426\nX29iamVjdA== 5427\nZmlsdGVy 5428\nIHNjcmlwdA== 5429\nLnVwZGF0ZQ== 5430\nX2k= 5431\nIEFzc2VydA== 5432\nL2NvcmU= 5433\nJSUlJQ== 5434\nIHByb2JsZW1z 5435\naXN0b3I= 5436\nIC49 5437\nIGFyY2g= 5438\nIHdyaXR0ZW4= 5439\nIG1pbGl0 5440\nTUVOVA== 5441\nLmNo 5442\nY2FwZQ== 5443\nIE11cw== 5444\nX2NvbmZpZw== 5445\nIEFQSQ== 5446\nZm9vdA== 5447\nIGltYWdlcw== 5448\nZW5kbA== 5449\nLklu 5450\nRmlyc3Q= 5451\nIHBsYXRmb3Jt 5452\nLnByb3Q= 5453\nT3B0aW9u 5454\nc3Rl 5455\nIFRPRE8= 5456\nIGZvcmNl 5457\nLmNvbnQ= 5458\nCWVjaG8= 5459\nIERhdg== 5460\nUHRy 5461\nKEI= 5462\nUlQ= 5463\nIEJhc2U= 5464\nXVsn 5465\nIGFubm91bmM= 5466\nY29uc29sZQ== 5467\nIFB5 5468\nZHM= 5469\nLmFz 5470\nIHByZXZlbnQ= 5471\nYXBhbg== 5472\nIHsn 5473\nfTwv 5474\nIFNlcnZpY2U= 5475\nIFNlbg== 5476\nYWRvcg== 5477\ncHJvZmlsZQ== 5478\nVG9w 5479\nIGl0ZXI= 5480\ncG8= 5481\nSUVT 5482\nSlNPTg== 5483\nSUU= 5484\naWFudA== 5485\n44CB 5486\nX2o= 5487\nIFNlcHQ= 5488\nX21hcA== 5489\nYnVt 5490\nKGNvbnRleHQ= 5491\nIEhvbWU= 5492\naWFucw== 5493\nR0I= 5494\nNjM= 5495\nIGxpdmluZw== 5496\nIHBhdHRlcm4= 5497\nKGlucHV0 5498\naWNpZW50 5499\nOTk5 5500\nQ29yZQ== 5501\nIGVudGl0eQ== 5502\nIGludGVn 5503\nQ2hhbmdlZA== 5504\nIHVzZWZ1bA== 5505\nLmluZm8= 5506\nIHRvb2w= 5507\nKGl0ZW0= 5508\nIG9r 5509\nIGZlZWQ= 5510\nSVg= 5511\nw6lz 5512\nIE5ld3M= 5513\ncmVtb3Zl 5514\nZXJyeQ== 5515\nCQkJCQkJCQkJ 5516\naXBtZW50 5517\nYXJlcw== 5518\nRG8= 5519\nQ3VycmVudA== 5520\nLmNvbnRlbnQ= 5521\nLkdyb3Vw 5522\ndXN0cmFs 5523\nINGB 5524\nfSk= 5525\nIHBvcHVsYXI= 5526\nIHN0cmU= 5527\nIG1ldGhvZHM= 5528\nX0VSUk9S 5529\nTGVmdA== 5530\nY2Fs 5531\nYnNw 5532\nLlRvU3RyaW5n 5533\nIGRpcg== 5534\nIGFsbG93ZWQ= 5535\nIGltcGFjdA== 5536\nIildCg== 5537\nNjI= 5538\nLmNvbmZpZw== 5539\nIGVsZW1lbnRz 5540\nIHByb3Rl 5541\nIHRyYWlu 5542\nLnRy 5543\ncnM= 5544\nIFJlcHVibGlj 5545\nIFRhc2s= 5546\nNjE= 5547\nYXJpZXM= 5548\nKEQ= 5549\nKGdldA== 5550\n4oCmCgo= 5551\nIHJlbGF0ZWQ= 5552\nIHZlcnM= 5553\nIHNpbA== 5554\nICIiOwo= 5555\nIGNtZA== 5556\nIHRlY2hub2xvZ3k= 5557\nLndpZHRo 5558\nRmxvYXQ= 5559\nIFVzZQ== 5560\nQm9keQ== 5561\nc2hvdWxk 5562\nLmpvaW4= 5563\nRm9udA== 5564\nbGx1bQ== 5565\neWNsZQ== 5566\nIEJyaXQ= 5567\nIG1pdA== 5568\nIHNjYWxl 5569\nIChf 5570\nZXJuZWw= 5571\nIikpCg== 5572\nIHNjb3Jl 5573\nL3Y= 5574\nIHN0dWRlbnQ= 5575\nVUM= 5576\nLnNob3c= 5577\nIGF2ZXJhZ2U= 5578\nRW5hYmxlZA== 5579\nKGV4 5580\nY29tbW9u 5581\naW1hdGlvbg== 5582\nOkAi 5583\nY2hpZQ== 5584\nIC4uLgoK 5585\ncml2ZXI= 5586\nIE1hcmNo 5587\nY2F0ZWdvcnk= 5588\nZmlu 5589\nIGNvdXJ0 5590\n0LI= 5591\nU2VydmVy 5592\nIGNvbnRhaW5lcg== 5593\nLXN0 5594\nX2Zvcg== 5595\nIHBhcnRz 5596\nIGRlY2lzaW9u 5597\nb2Jz 5598\nb3Vi 5599\nbWl0dGVk 5600\nICQoJyM= 5601\nIHNhdw== 5602\nIGFwcHJvYWNo 5603\nSUNF 5604\nIHNheWluZw== 5605\nIGFueW9uZQ== 5606\nbWV0YQ== 5607\nU0Q= 5608\nIHNvbmc= 5609\nZGlzcGxheQ== 5610\nT3Blcg== 5611\nb3V0ZXM= 5612\nIGNoYW5uZWw= 5613\nIGNoYW5nZWQ= 5614\nw6o= 5615\nIGZpbmFsbHk= 5616\nX251bWJlcg== 5617\nUGxlYXNl 5618\n4KQ= 5619\nb3Jpbmc= 5620\nLXJl 5621\nIGtpbGw= 5622\nIGRydWc= 5623\nd2luZG93 5624\nIGNvbnZlcnQ= 5625\nb21icmU= 5626\nIHdheXM= 5627\nSGVscGVy 5628\nIEZpcnN0 5629\nKF9f 5630\ndXJpdHk= 5631\nIFdpbmRvd3M= 5632\nZWVz 5633\nIG1hdA== 5634\ncmFwcGVy 5635\nIHBsdXM= 5636\nYW5nZXM= 5637\nIl0u 5638\nYXpvbg== 5639\nL3Q= 5640\nbGF0 5641\nYXN0ZQ== 5642\nIHByb2ZpbGU= 5643\nIHJlYWR5 5644\nI2lmbmRlZg== 5645\ncm90ZQ== 5646\nIHNlbnNl 5647\nR2VuZXI= 5648\nIENvbmZpZw== 5649\nb215 5650\nIEp1bmU= 5651\nIGxhdGVzdA== 5652\nIHNhZg== 5653\nIHJlZ2lvbg== 5654\nIGRlZXA= 5655\nd2l0Y2g= 5656\nIFBhcms= 5657\nfWA= 5658\nIEZyb20= 5659\nSUk= 5660\nIGN2 5661\nIHJlYWNo 5662\nIGNvdW50ZXI= 5663\nIFdvcms= 5664\nIFVSTA== 5665\nIFVwZGF0ZQ== 5666\nJywNCg== 5667\nIGltbWVkaQ== 5668\nY2xvc2U= 5669\nYWRvcw== 5670\nZmVycmVk 5671\nIHdlZWtz 5672\ndXJn 5673\nIGRhbWFnZQ== 5674\nIGxvc3Q= 5675\nYW5p 5676\nX2xv 5677\nIGhpbXNlbGY= 5678\nIGRvZw== 5679\nKV0K 5680\n778= 5681\ncGly 5682\ndHQ= 5683\nIHBhcGVy 5684\nIHRoZW1z 5685\nc2Vjb25k 5686\nIHN0YWZm 5687\nIElucHV0 5688\nIis= 5689\nIEZhY2Vib29r 5690\nIGFsbG9j 5691\nIHNjaGVk 5692\nQUNF 5693\nIHRoZW1zZWx2ZXM= 5694\nIENvbXBvbmVudA== 5695\nIGRyaXZlcg== 5696\namE= 5697\nKHBhdGg= 5698\nIGNhdGVnb3J5 5699\nYWxscw== 5700\ncHU= 5701\nbGx1bWluYXRl 5702\nIEFjdGlvbg== 5703\nLmJ1dHRvbg== 5704\nIEdM 5705\naXN0aWNz 5706\nIG9pbA== 5707\nIHN0b2Nr 5708\nPic= 5709\nIGRlYWQ= 5710\nVkFM 5711\nUVVF 5712\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 5713\nIGNoYXJn 5714\nUmV0dXJu 5715\nIGZ1bA== 5716\nZG9t 5717\nIHJ1bGVz 5718\nIG1vZGlmeQ== 5719\nIGV2YWw= 5720\naGFt 5721\nYXRlbWVudA== 5722\nXDw= 5723\ndWxh 5724\nPUZhbHNl 5725\nUkE= 5726\nIGNvbnRhaW5z 5727\nNzQ= 5728\nIHN0YWNr 5729\nbWFy 5730\nIHt9Cg== 5731\nIHVuZGVmaW5lZA== 5732\nQXNz 5733\nIENoaW5h 5734\ndmV5 5735\nKgo= 5736\nIHBsYXlpbmc= 5737\nKS8= 5738\nYWN0b3I= 5739\nIGJvdHRvbQ== 5740\nbGllcg== 5741\nIE51bWJlcg== 5742\nIGNvdXBsZQ== 5743\nREM= 5744\nIFNP 5745\nZ29y 5746\nLnNldFRleHQ= 5747\nc3VjY2Vzcw== 5748\nY29tbWFuZA== 5749\nRmlsdGVy 5750\nIE91cg== 5751\nX2l0ZW0= 5752\nIGN0eA== 5753\nIHJvYWQ= 5754\nVmVyc2lvbg== 5755\nY2FzZQ== 5756\ndXJ0 5757\nYXZpb3I= 5758\neWNo 5759\nc2VtYmx5 5760\nIFByb2R1Y3Q= 5761\nIGhlbGQ= 5762\nYWZl 5763\nIGluY2x1ZGVz 5764\nPHF1b3Rl 5765\nIGF2b2lk 5766\nIEZpbg== 5767\nIE1vZA== 5768\nIHRhYg== 5769\nYW5v 5770\nw7E= 5771\naXBwaW5n 5772\nLWU= 5773\nIGluc2VydA== 5774\ndGFyZ2V0 5775\nY2hhbg== 5776\nLk1vZGVs 5777\nSU1F 5778\nXAo= 5779\nIG1hY2hpbmU= 5780\nYXZ5 5781\nIE5P 5782\nIEludGVy 5783\nIG9wZXJhdGlvbg== 5784\nbW9kYWw= 5785\nVGFn 5786\nXTo= 5787\nIHByb2R1Y3Rpb24= 5788\nIGFyZWFz 5789\nIHJlbg== 5790\nX2Zyb20= 5791\nbmJzcA== 5792\nIG9wZXJhdG9y 5793\nbWVu 5794\nYXBwZWQ= 5795\nX3Blcg== 5796\nemVu 5797\nKCIu 5798\nLnNhdmU= 5799\nPSJ7ew== 5800\nIHRvcg== 5801\nKHJlc3BvbnNl 5802\nIGNhbmRpZA== 5803\nIGNvbnY= 5804\nYWlsZWQ= 5805\nIExpYg== 5806\nY29tcA== 5807\ndXJh 5808\n77+9 5809\nIEhlcmU= 5810\nIGFyZ3VtZW50 5811\naG9vZA== 5812\nIGVzdGFibGlzaA== 5813\nb2dyYXBoeQ== 5814\nIG9uQ2xpY2s= 5815\nYW1iZGE= 5816\nIHNjaA== 5817\nIG1vdmll 5818\nIHNlYw== 5819\nIGFjdGl2aXR5 5820\n2Kc= 5821\nIHNxbA== 5822\nX2FsbA== 5823\naW5jaXA= 5824\nIHByb3ZpZGVz 5825\nIHN5cw== 5826\nYWNrZXQ= 5827\nIHdhc24= 5828\nIHVzZXM= 5829\nIEZ1bmN0aW9u 5830\nLmdvb2dsZQ== 5831\nIFJlc3VsdA== 5832\nODQ= 5833\nVmlzaWJsZQ== 5834\nYWdtYQ== 5835\nZWxjb21l 5836\nIFN5 5837\nIENlbnQ= 5838\nQUxTRQ== 5839\nYWNpw7Nu 5840\nRVhU 5841\nIGxpY2Vuc2U= 5842\nIExvbmc= 5843\nIGFjY29t 5844\nIGFiaWxpdHk= 5845\nLmhlaWdodA== 5846\nQWN0aXZl 5847\nb2xvZ2ljYWw= 5848\nb2x5 5849\nKSks 5850\nLlNl 5851\nIHBhcmFtZXRlcg== 5852\ncHJpdGU= 5853\nQUJJTElUWQ== 5854\nLnNlcnZpY2U= 5855\nIEdyb3Vw 5856\nX3F1ZXJ5 5857\nIEl0ZW0= 5858\naW5pbmc= 5859\nIGp1ZA== 5860\naW1z 5861\nZml4 5862\naW5kZXI= 5863\nYWdyYW0= 5864\nIGZ1bmN0aW9ucw== 5865\nIGV4cGVyaQ== 5866\nIEVt 5867\nIHJvdA== 5868\nIHBlbg== 5869\nLmJ0bg== 5870\nIEFT 5871\nI2lmZGVm 5872\nIGNob2ljZQ== 5873\nIFBhZ2U= 5874\nX1BSTw== 5875\nUVU= 5876\n5Y8= 5877\nYW50aXR5 5878\nwq0= 5879\nd29yZHM= 5880\nIHJlYWRvbmx5 5881\nIGZsZXg= 5882\ncHJvdGVjdGVk 5883\nIEFueQ== 5884\nIGNoYXJhY3RlcnM= 5885\nZW5jZWQ= 5886\nIEp1bHk= 5887\naWxlcg== 5888\nQ2FyZA== 5889\ndXJhbmNl 5890\nIHJldg== 5891\nLmV2ZW50 5892\nYWx5 5893\nMTMw 5894\nIHdvbmRlcg== 5895\nIFBvcnQ= 5896\nIGxlZ2Fs 5897\ncm9sZQ== 5898\nIHRlbg== 5899\nIGdvZXM= 5900\nTVA= 5901\nd2hpdGU= 5902\nKToNCg== 5903\nKSkNCg== 5904\nIHJlZmVyZW5jZQ== 5905\nIG1pcw== 5906\nIFByb2plY3Q= 5907\naWNrcw== 5908\nPiY= 5909\nQ09O 5910\nIHJlcGw= 5911\nIHJlZ3VsYXI= 5912\nU3RvcmFnZQ== 5913\ncmFtZXdvcms= 5914\nIGdvYWw= 5915\nIHRvdWNo 5916\nLndpZGdldA== 5917\nIGJ1aWx0 5918\nZGVz 5919\nUGFydA== 5920\nKHJl 5921\nIHdvcnRo 5922\naGli 5923\nZ2FtZQ== 5924\nOTE= 5925\nMTky 5926\nINCy 5927\nYWNpb24= 5928\nIFdoaXRl 5929\nKHR5cGU= 5930\nKGA= 5931\nODE= 5932\nIG5hdHVyYWw= 5933\nIGluag== 5934\nIGNhbGN1bA== 5935\nIEFwcmls 5936\nLkxpc3Q= 5937\nIGFzc29jaWF0ZWQ= 5938\nCVN5c3RlbQ== 5939\nfn4= 5940\nPVs= 5941\nIHN0b3JhZ2U= 5942\nIGJ5dGVz 5943\nIHRyYXZlbA== 5944\nIHNvdQ== 5945\nIHBhc3NlZA== 5946\nIT0= 5947\nYXNjcmlwdA== 5948\nLm9wZW4= 5949\nIGdyaWQ= 5950\nIGJ1cw== 5951\nIHJlY29nbg== 5952\nQWI= 5953\nIGhvbg== 5954\nIENlbnRlcg== 5955\nIHByZWM= 5956\nYnVpbGQ= 5957\nNzM= 5958\nSFRNTA== 5959\nIFNhbg== 5960\nIGNvdW50cmllcw== 5961\nYWxlZA== 5962\ndG9rZW4= 5963\na3Q= 5964\nIHF1YWw= 5965\nTGFzdA== 5966\nYWRvdw== 5967\nIG1hbnVmYWN0 5968\naWRhZA== 5969\namFuZ28= 5970\nTmV4dA== 5971\neGY= 5972\nLmE= 5973\nIHBvcm5v 5974\nIFBN 5975\nZXJ2ZQ== 5976\naXRpbmc= 5977\nX3Ro 5978\nY2k= 5979\nPU5vbmU= 5980\nZ3M= 5981\nIGxvZ2lu 5982\nYXRpdmVz 5983\nJ10pOwo= 5984\nxIU= 5985\nIGlsbA== 5986\nSUE= 5987\nY2hpbGRyZW4= 5988\nRE8= 5989\nIGxldmVscw== 5990\nIHt7 5991\nIGxvb2tz 5992\nICIj 5993\nVG9TdHJpbmc= 5994\nIG5lY2Vzc2FyeQ== 5995\nICAgCg== 5996\nY2VsbA== 5997\nRW50cnk= 5998\nICcj 5999\nIGV4dHJlbQ== 6000\nU2VsZWN0b3I= 6001\nIHBsYWNlaG9sZGVy 6002\nTG9hZA== 6003\nIHJlbGVhc2Vk 6004\nT1JF 6005\nRW51bWVy 6006\nIFRW 6007\nU0VU 6008\naW5x 6009\nUHJlc3M= 6010\nIERlcGFydG1lbnQ= 6011\nIHByb3BlcnRpZXM= 6012\nIHJlc3BvbmQ= 6013\nU2VhcmNo 6014\nYWVs 6015\nIHJlcXU= 6016\nIEJvb2s= 6017\nLwo= 6018\nKHN0 6019\nIGZpbmFuY2lhbA== 6020\naWNrZXQ= 6021\nX2lucHV0 6022\nIHRocmVhdA== 6023\nKGlu 6024\nU3RyaXA= 6025\n7J0= 6026\nw6fDo28= 6027\nNzE= 6028\nIGV2aWRlbmNl 6029\nKSk7 6030\nIEJybw== 6031\nIFtdOwo= 6032\nIG91 6033\nYnVm 6034\nU2NyaXB0 6035\nZGF0 6036\nIHJ1bGU= 6037\nI2ltcG9ydA== 6038\nPSIv 6039\nU2VyaWFs 6040\nIHN0YXJ0aW5n 6041\nW2luZGV4 6042\nYWU= 6043\nIGNvbnRyaWI= 6044\nc2Vzc2lvbg== 6045\nX25ldw== 6046\ndXRhYmxl 6047\nb2Jlcg== 6048\nICIuLw== 6049\nIGxvZ2dlcg== 6050\nIHJlY2VudGx5 6051\nIHJldHVybmVk 6052\nDQ0K 6053\nKSkpCg== 6054\naXRpb25z 6055\nIHNlZWs= 6056\nIGNvbW11bmlj 6057\nICIu 6058\nIHVzZXJuYW1l 6059\nRUNU 6060\nRFM= 6061\nIG90aGVyd2lzZQ== 6062\nIEdlcm1hbg== 6063\nLmF3 6064\nQWRhcHRlcg== 6065\naXhlbA== 6066\nIHN5c3RlbXM= 6067\nIGRyb3A= 6068\nODM= 6069\nIHN0cnVjdHVyZQ== 6070\nICQoIiM= 6071\nZW5jaWVz 6072\nYW5uaW5n 6073\nIExpbms= 6074\nIFJlc3BvbnNl 6075\nIHN0cmk= 6076\nxbw= 6077\nIERC 6078\n5pc= 6079\nYW5kcm9pZA== 6080\nc3VibWl0 6081\nb3Rpb24= 6082\nOTI= 6083\nKEA= 6084\nLnRlc3Q= 6085\nODI= 6086\nCgoKCgoKCgo= 6087\nXTsNCg== 6088\nIGRpcmVjdGx5 6089\nICIl 6090\ncmlz 6091\nZWx0YQ== 6092\nQUlM 6093\nKXsNCg== 6094\nbWluZQ== 6095\nICAgICAgICAgICAgICAgICAgICAgICAgICA= 6096\nKGs= 6097\nYm9u 6098\nYXNpYw== 6099\ncGl0ZQ== 6100\nX19f 6101\nTWF4 6102\nIGVycm9ycw== 6103\nIFdoaWxl 6104\nIGFyZ3VtZW50cw== 6105\nIGVuc3VyZQ== 6106\nUmlnaHQ= 6107\nLWJhc2Vk 6108\nV2Vi 6109\nIC09 6110\nIGludHJvZHU= 6111\nIEluc3Q= 6112\nIFdhc2g= 6113\nb3JkaW4= 6114\nam9pbg== 6115\nRGF0YWJhc2U= 6116\nIGdyYWQ= 6117\nIHVzdWFsbHk= 6118\nSVRF 6119\nUHJvcHM= 6120\nPz4K 6121\nIEdv 6122\nQE92ZXJyaWRl 6123\nUkVG 6124\nIGlw 6125\nIEF1c3RyYWw= 6126\nIGlzdA== 6127\nVmlld0J5SWQ= 6128\nIHNlcmlvdXM= 6129\nIGN1c3RvbWVy 6130\nLnByb3RvdHlwZQ== 6131\nb2Rv 6132\nY29y 6133\nIGRvb3I= 6134\nIFdJVEhPVVQ= 6135\nIHBsYW50 6136\nIGJlZ2Fu 6137\nIGRpc3RhbmNl 6138\nKCkpLg== 6139\nIGNoYW5jZQ== 6140\nIG9yZA== 6141\nY2FtZQ== 6142\ncHJhZ21h 6143\nIHByb3RlY3Q= 6144\ncmFnbWVudA== 6145\nIE5vZGU= 6146\nZW5pbmc= 6147\n0Yc= 6148\nIHJvdXRl 6149\nIFNjaG9vbA== 6150\naGk= 6151\nIG5laWdoYg== 6152\nQWZ0ZXI= 6153\nbGljaXQ= 6154\nIGNvbnRy 6155\nIHByaW1hcnk= 6156\nQUE= 6157\nLldyaXRlTGluZQ== 6158\ndXRpbHM= 6159\nIGJp 6160\nUmVk 6161\nLkxpbnE= 6162\nLm9iamVjdA== 6163\nIGxlYWRlcnM= 6164\ndW5pdGllcw== 6165\nIGd1bg== 6166\nb250aA== 6167\nIERldg== 6168\nRklMRQ== 6169\nIGNvbW1lbnRz 6170\nX2xlbg== 6171\nYXJyb3c= 6172\nYW1vdW50 6173\nUmFuZ2U= 6174\nc2VydA== 6175\nR3JpZFZpZXc= 6176\nIHVwZGF0ZWQ= 6177\nIE1v 6178\nIGluZm9ybQ== 6179\nb2NpZXR5 6180\nYWxh 6181\nQWNjZXNz 6182\nIGhhYg== 6183\nIGNyZWF0 6184\nX2FyZw== 6185\nIEphbnVhcnk= 6186\nIERheQ== 6187\nIikNCg== 6188\ndXBsZQ== 6189\nZG9jdW1lbnQ= 6190\nZ29yaXRo 6191\nbWVudQ== 6192\nIE92ZXI= 6193\nYmI= 6194\nLnRpdGxl 6195\nX291dA== 6196\nIGxlZA== 6197\ndXJp 6198\nID8+PC8= 6199\nZ2w= 6200\nIGJhbms= 6201\nYXltZW50 6202\nCXByaW50Zg== 6203\nTUQ= 6204\nIHNhbXBsZQ== 6205\nIGhhbmRz 6206\nIFZlcnNpb24= 6207\ndWFyaW8= 6208\nIG9mZmVycw== 6209\naXR5RW5naW5l 6210\nIHNoYXBl 6211\nIHNsZWVw 6212\nX3BvaW50 6213\nU2V0dGluZ3M= 6214\nIGFjaGll 6215\nIHNvbGQ= 6216\nb3Rh 6217\nLmJpbmQ= 6218\nQW0= 6219\nIHNhZmU= 6220\nU3RvcmU= 6221\nIHNoYXJlZA== 6222\nIHByaXY= 6223\nX1ZBTA== 6224\nIHNlbnM= 6225\nKXs= 6226\nIHJlbWVtYmVy 6227\nc2hhcmVk 6228\nZWxlbWVudA== 6229\nIHNob290 6230\nVmVydA== 6231\nY291dA== 6232\nIGVudg== 6233\nX2xhYmVs 6234\nID4K 6235\ncnVu 6236\nIHNjZW5l 6237\nKGFycmF5 6238\nZGV2aWNl 6239\nX3RpdGxl 6240\nYWdvbg== 6241\nXQ0K 6242\nYWJ5 6243\nIGJlY2FtZQ== 6244\nYm9vbGVhbg== 6245\nIHBhcms= 6246\nIENvZGU= 6247\ndXBsb2Fk 6248\ncmlkYXk= 6249\nIFNlcHRlbWJlcg== 6250\nRmU= 6251\nIHNlbg== 6252\nY2luZw== 6253\nRkw= 6254\nQ29s 6255\ndXRz 6256\nX3BhZ2U= 6257\naW5u 6258\nIGltcGxpZWQ= 6259\nYWxpbmc= 6260\nIHlvdXJzZWxm 6261\nLkNvdW50 6262\nY29uZg== 6263\nIGF1ZA== 6264\nX2luaXQ= 6265\nLik= 6266\nIHdyb3Rl 6267\nMDAz 6268\nTkc= 6269\nLkVycm9y 6270\n5Ls= 6271\nLmZvcg== 6272\nIGVxdWFs 6273\nIFJlcXVlc3Q= 6274\nIHNlcmlhbA== 6275\nIGFsbG93cw== 6276\nWFg= 6277\nIG1pZGRsZQ== 6278\nY2hvcg== 6279\nMTk1 6280\nOTQ= 6281\nw7g= 6282\nZXJ2YWw= 6283\nLkNvbHVtbg== 6284\ncmVhZGluZw== 6285\nIGVzY29ydA== 6286\nIEF1Z3VzdA== 6287\nIHF1aWNrbHk= 6288\nIHdlYXA= 6289\nIENH 6290\ncm9wcmk= 6291\naG8= 6292\nIGNvcA== 6293\nKHN0cnVjdA== 6294\nIEJpZw== 6295\nIHZz 6296\nIGZyZXF1 6297\nLlZhbHVl 6298\nIGFjdGlvbnM= 6299\nIHByb3Blcg== 6300\nIGlubg== 6301\nIG9iamVjdHM= 6302\nIG1hdHJpeA== 6303\nYXZhc2NyaXB0 6304\nIG9uZXM= 6305\nLmdyb3Vw 6306\nIGdyZWVu 6307\nIHBhaW50 6308\nb29scw== 6309\neWNs 6310\nZW5jb2Rl 6311\nb2x0 6312\nY29tbWVudA== 6313\nLmFwaQ== 6314\nRGly 6315\nIHVuZQ== 6316\naXpvbnQ= 6317\nLnBvc2l0aW9u 6318\nIGRlc2lnbmVk 6319\nX3ZhbA== 6320\nYXZp 6321\naXJpbmc= 6322\ndGFi 6323\nIGxheWVy 6324\nIHZpZXdz 6325\nIHJldmU= 6326\ncmFlbA== 6327\nIE9O 6328\ncmljcw== 6329\nMTYw 6330\nbnA= 6331\nIGNvcmU= 6332\nKCkpOw0K 6333\nTWFpbg== 6334\nIGV4cGVydA== 6335\nCQkNCg== 6336\nX2Vu 6337\nIC8+ 6338\ndXR0ZXI= 6339\nSUFM 6340\nYWlscw== 6341\nIEtpbmc= 6342\nKi8KCg== 6343\nIE1ldA== 6344\nX2VuZA== 6345\nYWRkcg== 6346\nb3Jh 6347\nIGly 6348\nTWlu 6349\nIHN1cnBy 6350\nIHJlcGU= 6351\nIGRpcmVjdG9yeQ== 6352\nUFVU 6353\nLVM= 6354\nIGVsZWN0aW9u 6355\naGFwcw== 6356\nLnByZQ== 6357\nY20= 6358\nVmFsdWVz 6359\nICIK 6360\nY29sdW1u 6361\naXZpbA== 6362\nTG9naW4= 6363\naW51ZQ== 6364\nOTM= 6365\nIGJlYXV0aWZ1bA== 6366\nIHNlY3JldA== 6367\nKGV2ZW50 6368\nIGNoYXQ= 6369\ndW1z 6370\nIG9yaWdpbg== 6371\nIGVmZmVjdHM= 6372\nIG1hbmFnZW1lbnQ= 6373\naWxsYQ== 6374\ndGs= 6375\nIHNldHRpbmc= 6376\nIENvdXI= 6377\nIG1hc3NhZ2U= 6378\nCWVuZA== 6379\nIGhhcHB5 6380\nIGZpbmlzaA== 6381\nIGNhbWVyYQ== 6382\nIFZlcg== 6383\nIERlbW9jcg== 6384\nIEhlcg== 6385\nKFE= 6386\nY29ucw== 6387\naXRh 6388\nICcu 6389\ne30= 6390\nCUM= 6391\nIHN0dWZm 6392\nMTk0 6393\nIDoK 6394\nIEFS 6395\nVGFzaw== 6396\naGlkZGVu 6397\nZXJvcw== 6398\nSUdO 6399\nYXRpbw== 6400\nIEhlYWx0aA== 6401\nb2x1dGU= 6402\nRW50ZXI= 6403\nJz4= 6404\nIFR3aXR0ZXI= 6405\nIENvdW50eQ== 6406\nc2NyaWJl 6407\nID0+Cg== 6408\nIGh5 6409\nZml0 6410\nIG1pbGl0YXJ5 6411\nIHNhbGU= 6412\ncmVxdWlyZWQ= 6413\nbm9u 6414\nYm9vdHN0cmFw 6415\naG9sZA== 6416\ncmlt 6417\nLW9sZA== 6418\nIERvd24= 6419\nIG1lbnRpb24= 6420\nY29udGFjdA== 6421\nX2dyb3Vw 6422\nb2RheQ== 6423\nIHRvd24= 6424\nIHNvbHV0aW9u 6425\ndWF0ZQ== 6426\nZWxsaW5n 6427\nXS0+ 6428\nb3Rlcw== 6429\nZW50YWw= 6430\nb21lbg== 6431\nb3NwaXRhbA== 6432\nIFN1cA== 6433\nX0VO 6434\nIHNsb3c= 6435\nU0VTU0lPTg== 6436\nIGJsdWU= 6437\nYWdv 6438\nIGxpdmVz 6439\nIF4= 6440\nLnVu 6441\naW5zdA== 6442\nZW5nZQ== 6443\nIGN1c3RvbWVycw== 6444\nIGNhc3Q= 6445\ndWRnZXQ= 6446\n77yB 6447\naWNlbnM= 6448\nIGRldGVybWlu 6449\nU2VsZWN0ZWQ= 6450\nX3Bs 6451\ndWV1ZQ== 6452\nIGRhcms= 6453\nLy8KCg== 6454\nc2k= 6455\ndGhlcm4= 6456\nIEphcGFu 6457\nL3c= 6458\nUFU= 6459\nIEVhc3Q= 6460\nb3ZpZQ== 6461\nIHBhY2thZ2U= 6462\nIG5vcg== 6463\nIGFwaQ== 6464\nYm90 6465\nIl07Cg== 6466\nX3Bvc3Q= 6467\ndWxhdGU= 6468\nIGNsdWI= 6469\nJykpOwo= 6470\nIGxvb3A= 6471\nUElP 6472\naW9uZQ== 6473\nc2hvdA== 6474\nSW5pdGlhbA== 6475\nIHBsYXllZA== 6476\ncmVnaXN0ZXI= 6477\ncm91Z2h0 6478\nX21heA== 6479\nYWNlbWVudA== 6480\nbWF0Y2g= 6481\ncmFwaGljcw== 6482\nQVNU 6483\nIGV4aXN0aW5n 6484\nIGNvbXBsZXg= 6485\nREE= 6486\nLkNo 6487\nLmNvbW1vbg== 6488\nbW8= 6489\nICcuLi8uLi8= 6490\naXRv 6491\nIGFuYWx5c2lz 6492\nIGRlbGl2ZXI= 6493\nICAgICAgICAgICAgICAgIAo= 6494\naWR4 6495\nw6A= 6496\nb25nbw== 6497\nIEVuZ2xpc2g= 6498\nPCEtLQ== 6499\nIGNvbXB1dGVy 6500\nRU5TRQ== 6501\nIHBhcw== 6502\nIHJhaXM= 6503\nSGFzaA== 6504\nIG1vYmlsZQ== 6505\nIG93bmVy 6506\nRklH 6507\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6508\ndGhlcw== 6509\nIGF0dHI= 6510\nd2Q= 6511\nLnRpbWU= 6512\nYXdu 6513\nIHRyZWF0bWVudA== 6514\nIEFj 6515\nLlZpZXc= 6516\naW1wbA== 6517\nbW9yZQ== 6518\ncGFzcw== 6519\nIGhh 6520\nLmZyb20= 6521\nIGxlYWRpbmc= 6522\nRkZGRg== 6523\nKGVycm9y 6524\nLnVp 6525\nYXRhcg== 6526\nYWRlcnM= 6527\nZGF0ZXM= 6528\nIHp1 6529\nIGZsb3c= 6530\nVGFyZ2V0 6531\nIGludm9sdmVk 6532\nIGlv 6533\ncGFyc2U= 6534\nJF8= 6535\naGVzdA== 6536\nLmludA== 6537\nLWl0ZW0= 6538\nYXN5 6539\nU3A= 6540\nIHNoaWZ0 6541\nTlQ= 6542\nIHRm 6543\nX1RS 6544\nLndlYg== 6545\nQ1M= 6546\nIH0p 6547\nIGV5ZXM= 6548\nMTI1 6549\nMTA1 6550\nX3o= 6551\nJyk7DQo= 6552\naWZvcm4= 6553\nIHtA 6554\nIG5pY2U= 6555\nLmxpc3Q= 6556\nICAgIA0K 6557\nIGZsb29y 6558\nIHJlZGlyZWN0 6559\nIFVL 6560\nKFsn 6561\nIHdpc2g= 6562\nIGNhcHQ= 6563\nbGVnYWw= 6564\nIElP 6565\nIHN0YWdl 6566\nLlN0cmluZw== 6567\nIEFmcg== 6568\naWdlbg== 6569\nIFNI 6570\nRGVsZXRl 6571\nZWxscw== 6572\nIHNvbGlk 6573\nIG1lZXRpbmc= 6574\nIHdvcmtlZA== 6575\nIGVkaXRvcg== 6576\naW55 6577\n0Lw= 6578\nX3JlYWQ= 6579\nLklk 6580\nZWZm 6581\nT2Zmc2V0 6582\nY2hh 6583\nVVNFUg== 6584\nCQkgICA= 6585\naXBwZWQ= 6586\nIGRpY3Q= 6587\nIFJ1bg== 6588\nLmhwcA== 6589\nIGFuZw== 6590\neG1s 6591\naW1wbGU= 6592\nIG1lZGljYWw= 6593\nX3Rva2Vu 6594\nY29ubmVjdA== 6595\nIGhvdXI= 6596\nIGNvbnRyb2xsZXI= 6597\nX21lc3NhZ2U= 6598\nVUlE 6599\nR3I= 6600\nYW5kZWQ= 6601\nX0NI 6602\nIGJvb2tz 6603\nIHNwZWFr 6604\nYW1pbmc= 6605\nIG1vdW50 6606\nUmVjb3Jk 6607\nCXN0cnVjdA== 6608\nLldlYg== 6609\nb25kb24= 6610\nIC8vCg== 6611\nIGZlbHQ= 6612\nLkF1dG8= 6613\naWRnZQ== 6614\nX3Bvcw== 6615\nUFI= 6616\nIG1vZGVybg== 6617\nQ29sbGVjdGlvbg== 6618\nX21zZw== 6619\nQ0Q= 6620\nIExv 6621\nIHNlY29uZHM= 6622\naWJseQ== 6623\nLmVxdWFscw== 6624\nIGludGVybmF0aW9uYWw= 6625\nI3ByYWdtYQ== 6626\nb290aA== 6627\nV3JpdGVy 6628\naWF0ZQ== 6629\nIGNlbGU= 6630\nIEJpdA== 6631\naXZv 6632\naXZlcnk= 6633\ncmQ= 6634\nSEVDSw== 6635\nIGNhY2hl 6636\nLmNvdW50 6637\nIHJvbGw= 6638\nLlJlYWQ= 6639\nMTA4 6640\nUkVE 6641\nIHNldHVw 6642\naXpvbnRhbA== 6643\nbW9kZWxz 6644\nYXJndg== 6645\nIGNvbnNpZGVyZWQ= 6646\nPSIuLi8= 6647\nc2V0dGluZ3M= 6648\nIFJlbA== 6649\nIGdyb3d0aA== 6650\nIG1peA== 6651\nIFdhc2hpbmd0b24= 6652\nIHBsdA== 6653\nIElN 6654\n4bo= 6655\nIHR1cm5lZA== 6656\nIERhdGVUaW1l 6657\nIFdlZA== 6658\nKHVybA== 6659\nICIt 6660\nIGxldHRlcg== 6661\nQXN5bmM= 6662\nICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 6663\nIE9jdG9iZXI= 6664\nX2xpbmU= 6665\nIGF0dGVudGlvbg== 6666\nIGNvbGxlY3Q= 6667\nIEhhc2g= 6668\nIGltYWc= 6669\nVHJlZQ== 6670\nIHNpdHVhdGlvbg== 6671\nZXR0ZQ== 6672\nX25v 6673\nSVZF 6674\nIHZvbg== 6675\nLnRhcmdldA== 6676\nIGtub3dsZWRnZQ== 6677\nIGRyaXZl 6678\nLnBvc3Q= 6679\nIGJsb29k 6680\nIGNpdA== 6681\ncHJpbWFyeQ== 6682\nIGNvbmZpZ3VyYXRpb24= 6683\ndGVl 6684\nIHBob3Rv 6685\naXNvZGU= 6686\nVHJhY2U= 6687\nIGdhdmU= 6688\nIHNob3Q= 6689\nIEFpcg== 6690\nIG1vdGhlcg== 6691\ncHJpY2U= 6692\nIG1vcm5pbmc= 6693\nKSl7Cg== 6694\nLXg= 6695\nIHRyYWRl 6696\nIGRlc2M= 6697\nICYmCg== 6698\nIHBhcmVudHM= 6699\nQXBp 6700\n5Yg= 6701\ndGVk 6702\nd2Vy 6703\nIOY= 6704\nIHN5 6705\nIEtl 6706\nUGFyc2Vy 6707\n5YU= 6708\nYW5jeQ== 6709\nIHBpZWNl 6710\naWZvcm5pYQ== 6711\ndG9TdHJpbmc= 6712\ncmFu 6713\naWRpbmc= 6714\nUFRJT04= 6715\nY29tZXM= 6716\nL2xpYw== 6717\nLmNsaWVudA== 6718\nRWw= 6719\nTG9uZw== 6720\nIHByb2Zlc3Npb25hbA== 6721\ncnVwdA== 6722\ndmE= 6723\nIGNvbXBsZXRlbHk= 6724\nIHByYWN0aWNl 6725\nMDAy 6726\nIHNlbGVjdGlvbg== 6727\nUmVt 6728\naW5p 6729\nIGNhbQ== 6730\nUkVF 6731\nIHNpdGVz 6732\ncGE= 6733\nQVRVUw== 6734\n0YHRgg== 6735\nYXJyYW50 6736\nKig= 6737\nX0tFWQ== 6738\nIEJ1dHRvbg== 6739\nIEZyaWRheQ== 6740\nc2VxdQ== 6741\nIHJlYWRlcg== 6742\nIG1lc3NhZ2Vz 6743\n6K8= 6744\nIGJ1Zg== 6745\nS2U= 6746\nIG5vdg== 6747\nSFA= 6748\nTXNn 6749\nYWxpZ24= 6750\nYXJpbHk= 6751\nICcs 6752\nX3dpdGg= 6753\nIGRhcw== 6754\nIGhlYXJk 6755\nYXRvbWlj 6756\ncmlhbA== 6757\nKVs= 6758\nIGRpc2U= 6759\nQGVuZA== 6760\nIGdvbGQ= 6761\nIGZhaXI= 6762\nIHNhbGVz 6763\nLkJ1dHRvbg== 6764\nc3RyaWN0 6765\nc2F2ZQ== 6766\nIG1lYXN1cmU= 6767\nICIr 6768\nZWNhdXNl 6769\nVmlld0NvbnRyb2xsZXI= 6770\nIFRhYmxl 6771\nLnBhcmFt 6772\nIGRlY2lkZWQ= 6773\nKCgo 6774\nSU5GTw== 6775\nIG9wcG9ydHVuaXR5 6776\nVGU= 6777\nSUNFTlNF 6778\nY2NvcmRpbmc= 6779\na2k= 6780\nIFVO 6781\nIGNvbnRhaW4= 6782\nIG1hbmFnZXI= 6783\nIHBhaW4= 6784\nIEZpcmU= 6785\ncm9tZQ== 6786\nIHBsYW5z 6787\nRm91bmQ= 6788\nbGF5 6789\nIERlY2VtYmVy 6790\nIGluZmx1 6791\nw7o= 6792\ncmVuY2g= 6793\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6794\nYXppbmc= 6795\nYnJpZWY= 6796\nY2FsbA== 6797\nd29vZA== 6798\nIGxvYWRlZA== 6799\nIGdyYW5k 6800\nL2Y= 6801\naW1w 6802\nX1U= 6803\nMTI3 6804\nU1RS 6805\n4oCi 6806\nIGNyZWRpdA== 6807\nLkNvbG9y 6808\nb3JnZQ== 6809\nUVVFU1Q= 6810\nIGRpZmZlcmVuY2U= 6811\nIFBD 6812\nd2FyZ3M= 6813\nIHB1Yg== 6814\ndW5kYXk= 6815\nIGZyYQ== 6816\nLm1heA== 6817\nIHRyaWVk 6818\nYW5uZWxz 6819\nc2VuZA== 6820\nIHJlcG9ydHM= 6821\nIGFkdWx0 6822\n5Lo= 6823\nIGNvbnNpc3Q= 6824\nIFN0cmVldA== 6825\nIFByb2dyYW0= 6826\nU1FM 6827\nTWF0cml4 6828\nb3VuY2ls 6829\nLUE= 6830\nCXc= 6831\nIHdob3Nl 6832\nIHJlbGln 6833\nIFNleA== 6834\nIGdpdmVz 6835\nbm9uZQ== 6836\nLm1lc3NhZ2U= 6837\nKEc= 6838\nLmF3dA== 6839\nLXJpZ2h0 6840\nIE5vdmVtYmVy 6841\nZWxsaWc= 6842\nMzYw 6843\ndXRpdmU= 6844\nxIM= 6845\nb3Zlcm4= 6846\nIGVhc2lseQ== 6847\nIGlkZWFz 6848\nMTA0 6849\nINC9 6850\nL2Nzcw== 6851\nbHlpbmc= 6852\nZWxsZQ== 6853\nQ2Fu 6854\nX2NvbG9y 6855\n0L7Qsg== 6856\nIHBhaXI= 6857\nbmd0aA== 6858\nIHNwbGl0 6859\nMTQw 6860\nZHJvcA== 6861\nYXJ0eQ== 6862\nb25h 6863\nIGNhcGl0YWw= 6864\nIGhlYXI= 6865\nIGV4aXN0cw== 6866\nCWxvZw== 6867\nZW1v 6868\nUnVu 6869\nb2k= 6870\nIHBhcnNlcg== 6871\nIE1ldGhvZA== 6872\nIGVkdWNhdGlvbg== 6873\nW2s= 6874\nIGxpYnJhcnk= 6875\nPiI7Cg== 6876\nX1VO 6877\nCXN0ZA== 6878\nb2RlZA== 6879\nIGNhbGxz 6880\naGVyZQ== 6881\nUmVs 6882\nIGJyYW5k 6883\nYmFja2dyb3VuZA== 6884\nZ2E= 6885\nX2FkZHJlc3M= 6886\nX3BhcmFtcw== 6887\nQ2F0ZWdvcnk= 6888\nMTAz 6889\nIEluZGlh 6890\nX2V2ZW50 6891\nIGluZw== 6892\nUmVuZGVy 6893\nLmNs 6894\ndW1weQ== 6895\nIHBldA== 6896\nRkM= 6897\nIEFudA== 6898\nRXh0 6899\nIGNoYXJnZQ== 6900\nZW5lZA== 6901\nZ3JhZA== 6902\nRU8= 6903\nIGRlcGVuZA== 6904\nIC4KCg== 6905\nZnJhbWU= 6906\nIGRm 6907\nIGh1Z2U= 6908\nIFBBUlQ= 6909\nZWRz 6910\nOzs= 6911\nIEFN 6912\nIGJhc2lj 6913\nIExldA== 6914\nbGljaA== 6915\nIGFybQ== 6916\nIHN0YXI= 6917\nIGZlZGVyYWw= 6918\nV29yaw== 6919\nIGNhcnJ5 6920\nIElzcmFlbA== 6921\nKG9iag== 6922\nPXt7 6923\nIHNhdmVk 6924\nIHN5bg== 6925\nIGNvbnN0YW50 6926\nVkVOVA== 6927\nIHBvc2l0aXZl 6928\nIGNvbmR1Y3Q= 6929\nIHNraW4= 6930\nIGVhcmxpZXI= 6931\nIGxheW91dA== 6932\nIElQ 6933\nT1VS 6934\nIHRpbQ== 6935\nc3R5bGVzaGVldA== 6936\nX2Ns 6937\nIENhcmQ= 6938\nKyspewo= 6939\nIHRlbXBlcg== 6940\nIERhdmlk 6941\nCXRyeQ== 6942\nLmRhcnQ= 6943\nIHdhbnRz 6944\nIHBpY3R1cmU= 6945\nIHZpZGVvcw== 6946\nIENvbW0= 6947\naXNpb25z 6948\nX01BWA== 6949\nTWFwcGluZw== 6950\nLWNvbnRlbnQ= 6951\nIEVhcg== 6952\nLWRl 6953\nIHByZW0= 6954\nYnJ1YXJ5 6955\nIGNvbXBvbmVudHM= 6956\nIHRocm91Z2hvdXQ= 6957\nIHB1bGw= 6958\nIHBhZ2Vz 6959\nZW50ZQ== 6960\ncmVzcG9uZA== 6961\nIGdhcw== 6962\nY3JpcHRvcg== 6963\nIGVkZ2U= 6964\nIGJvdW5k 6965\nQUNU 6966\nKioqKioq 6967\nIGNyZWF0aW5n 6968\nIENI 6969\nIG51bGxwdHI= 6970\nQnI= 6971\nKyc= 6972\nLmNv 6973\nPjo6 6974\nIGxlYXJuaW5n 6975\nLkxlbmd0aA== 6976\nX1NI 6977\nIHBhdGllbnRz 6978\nQUlO 6979\nIGtpZHM= 6980\nIGNvbWZvcnQ= 6981\nIHNob3du 6982\ndWdpbnM= 6983\nIEJhY2s= 6984\nZWxsYQ== 6985\nX0NM 6986\nIGxhdA== 6987\nIGRpc3BhdGNo 6988\nIGNsYXNzZXM= 6989\nLmF0 6990\nLmJlZ2lu 6991\nIHN1Y2Nlc3NmdWw= 6992\nYmFu 6993\nIG9idGFpbg== 6994\nIFNs 6995\nIGxhY2s= 6996\naXRlcmF0b3I= 6997\nVGhyZWFk 6998\nKHNpemU= 6999\nIG5vbmU= 7000\nLmhhcw== 7001\nX1g= 7002\nc29ydA== 7003\nbmFw 7004\ncGV0 7005\nYmlu 7006\nNzAw 7007\nIENhbmFkYQ== 7008\nVGhleQ== 7009\nIGRhbnM= 7010\nIE1hdA== 7011\nPHRk 7012\nIGhhaXI= 7013\nICcnLAo= 7014\nIGN1 7015\nIGxhd3M= 7016\nbGV0ZWQ= 7017\ncGVk 7018\nIHBvdw== 7019\nIGtuZXc= 7020\nX0NPTQ== 7021\nXyw= 7022\nIE1hZw== 7023\naWRlbnRz 7024\nKHJlcQ== 7025\nICks 7026\nLWNlbnRlcg== 7027\nMTkw 7028\nIHdpZGU= 7029\nIEF1dGhvcg== 7030\nc3RhbnRz 7031\nIGpvYnM= 7032\nIG1hdGg= 7033\nZXRpbWVz 7034\nQm9vbGVhbg== 7035\nIHNjb3Bl 7036\nX2lz 7037\nIG1lYXM= 7038\nIGtleXM= 7039\nZWxheQ== 7040\nIGV4YWN0bHk= 7041\nJz0+Jw== 7042\nIFBhdWw= 7043\nbWFz 7044\nCXByaW50 7045\nKGxlbg== 7046\nZmQ= 7047\nICk7 7048\nLkV2ZW50 7049\ncWxp 7050\naXJpdA== 7051\naWVsZHM= 7052\nb21hbg== 7053\nIFRvcA== 7054\nIHZvdGU= 7055\nIG1hc2s= 7056\nIHRoZW1l 7057\nLQo= 7058\nIHByb3Bz 7059\nIGZpbmU= 7060\nIHdyaXRlcg== 7061\nX29mZnNldA== 7062\nY2Fy 7063\nIGFsdGVybg== 7064\nIGNvcHlyaWdodA== 7065\nIGRlc3Ryb3k= 7066\ncHBlcg== 7067\nIGdlbmVyYXRl 7068\ncHBlZA== 7069\n4oCZZA== 7070\nICAgICAgCg== 7071\nbWFrZQ== 7072\nIFNob3c= 7073\nIGJyb3dzZXI= 7074\nIGZhdm9yaXRl 7075\nIGNhcmVlcg== 7076\nIGhhcHBlbmVk 7077\nKGNoYXI= 7078\nIHJlY29tbWVuZA== 7079\nIGxpdGVy 7080\nLmZpbHRlcg== 7081\nZ3JhZGU= 7082\nIMKj 7083\nUGhvbmU= 7084\nb21z 7085\nIG5hbWVk 7086\nLWxhYmVs 7087\naXBv 7088\nIE90aGVy 7089\nIHBhbmVs 7090\nIHJvY2s= 7091\nU2NhbGU= 7092\nCWFzc2VydA== 7093\n0LQ= 7094\nIHRydXN0 7095\nZnJvbnQ= 7096\nIGRlbW9u 7097\nQXI= 7098\nTmV0 7099\nIGVjb25vbWlj 7100\nZm9vdGVy 7101\nIHJhY2U= 7102\nKG5vZGU= 7103\nIE9wdGlvbg== 7104\nc3BsaXQ= 7105\nIHBoeXNpY2Fs 7106\naWZlc3Q= 7107\nIHJlbW92ZWQ= 7108\nLmh0dHA= 7109\nKSksCg== 7110\nIGxvb2tlZA== 7111\nJzs= 7112\nZGluZw== 7113\nZ2VzdA== 7114\nYXR1cmRheQ== 7115\nL2xpY2Vuc2Vz 7116\nUHJpY2U= 7117\nIGRybw== 7118\nIHRvd2FyZHM= 7119\nIHVucw== 7120\nIENM 7121\nCXN0YXRpYw== 7122\nIHJvd3M= 7123\nIGRlZmluZQ== 7124\nLnJlcGxhY2U= 7125\nIGZhdGhlcg== 7126\nIERlc2lnbg== 7127\nYXNzaWdu 7128\nbXV0 7129\nRGV2aWNl 7130\nRGlk 7131\nJykpCg== 7132\nb21ldHJ5 7133\nYXlsb2Fk 7134\nIGhpc3Rvcg== 7135\nIFBhcmFt 7136\nIEJvb2xlYW4= 7137\nIG5hdHVyZQ== 7138\nIGpz 7139\nIG5hdGlvbg== 7140\naWg= 7141\nIGRpc2NvdmVy 7142\nc2Vt 7143\nSGFuZGxl 7144\nCXI= 7145\nIFRlY2hu 7146\nIHdhbGw= 7147\neyQ= 7148\nQHByb3BlcnR5 7149\nICIuLi8= 7150\nIGV4YW0= 7151\nLmRyYXc= 7152\nb3BwaW5n 7153\nIG5lYXJseQ== 7154\nIGNvb2w= 7155\nIGluZGVwZW5k 7156\nUkVT 7157\nIGhhbmRsZXI= 7158\nIE1vbmRheQ== 7159\nIHN1bg== 7160\nU3R5bGVz 7161\nb3VzbHk= 7162\nIAk= 7163\ndmVzdA== 7164\nRGlzcGxheQ== 7165\nKHk= 7166\nYXRpY2FsbHk= 7167\nIHByZWRpY3Q= 7168\neWluZw== 7169\nIHNvbWV0aW1lcw== 7170\nIl0K 7171\nIGRyaW5r 7172\nIGJ1bA== 7173\naWZpY2F0aW9ucw== 7174\nLmluc2VydA== 7175\nLnJlZw== 7176\nIHRlc3Rz 7177\nQWxpZ25tZW50 7178\nIGFsbGVn 7179\nIGF0dHJpYnV0ZQ== 7180\nIE5vdGU= 7181\nIG15c2VsZg== 7182\nYXJ0cw== 7183\nTm93 7184\nIGludGVyZXN0aW5n 7185\nbGllbnRz 7186\nIHBvcHVsYXRpb24= 7187\nIENhbGlmb3JuaWE= 7188\nIkk= 7189\n5bk= 7190\nIGdyZWF0ZXI= 7191\ndWVzZGF5 7192\nIHRob3Vz 7193\nIGNvc3Rz 7194\nIGxhdW5jaA== 7195\nXEh0dHA= 7196\na2Vy 7197\nYmFuZA== 7198\nIFBsYXk= 7199\nIGJhbmQ= 7200\nLnNoYXBl 7201\nZXNvbWU= 7202\nYXJ0aWNsZQ== 7203\nLnJm 7204\nIHdlcg== 7205\nw6Fz 7206\nZW1iZXJz 7207\ndXNy 7208\nQkE= 7209\naWNhbg== 7210\nZXR0 7211\ndmFsaWRhdGU= 7212\ndWx0aQ== 7213\nIGltbWVkaWF0ZWx5 7214\nemVy 7215\nIGZpZ3VyZQ== 7216\nb2Vz 7217\nZWxsZXI= 7218\naXJjbGU= 7219\nIFNpZ24= 7220\nLmRi 7221\nIHJhbms= 7222\nQnl0ZXM= 7223\nIHByb2plY3Rz 7224\nX3JlYw== 7225\nVUxBUg== 7226\nQVBJ 7227\nIExpbmU= 7228\nUG9ydA== 7229\nIHBvbGw= 7230\nIGdpdmluZw== 7231\naWRlbmNl 7232\nLS0K 7233\nIHBsb3Q= 7234\naWNpYWw= 7235\nIHdhcnJhbnQ= 7236\nSVRJT04= 7237\nIERvdWJsZQ== 7238\nIGJpbGxpb24= 7239\nZ29yaXRobQ== 7240\nIGVxdWlwbWVudA== 7241\nREFURQ== 7242\nIEAi 7243\nRUU= 7244\nIHBsZQ== 7245\naWF0aW9u 7246\nIGhlYWRlcnM= 7247\nIHByb2NlZA== 7248\nLkNvbXBvbmVudE1vZGVs 7249\nIE9iYW1h 7250\nIHBh 7251\nIEJlc3Q= 7252\naW1hdGVseQ== 7253\nLmdldFN0cmluZw== 7254\nLlw= 7255\nbXBsb3k= 7256\nIHJhdw== 7257\nX2Jsb2Nr 7258\ndW5kcmVk 7259\nIn0sCg== 7260\nMTEy 7261\nLkdyb3VwTGF5b3V0 7262\nIGJyb3VnaHQ= 7263\nTlNTdHJpbmc= 7264\ndGhyb3c= 7265\nY3JlYXRlZA== 7266\nLk5ldw== 7267\nX3ZpZXc= 7268\nQ1A= 7269\nZXBz 7270\nT3A= 7271\nIGdyYXRpcw== 7272\nICci 7273\nIGludGVydmlldw== 7274\nIiIiCg== 7275\nIHBhcnRpYWw= 7276\nIGFyaWE= 7277\nYmluZw== 7278\nQXV0aG9y 7279\nQm9vaw== 7280\nIFBhdA== 7281\ndW1hbg== 7282\nVXNlcnM= 7283\ncGx1cw== 7284\nMTkz 7285\nIERpcmVjdA== 7286\ndmVudWU= 7287\nYWxwaGE= 7288\nVUNDRVNT 7289\nIENhbGw= 7290\nICk7DQo= 7291\naW1hdGVk 7292\nIHJlbWFpbg== 7293\nIGFudGk= 7294\nIExvbmRvbg== 7295\nIHNhZmV0eQ== 7296\nUE9TRQ== 7297\nb2xlcw== 7298\nY29udHJvbGxlcg== 7299\nQnl0ZQ== 7300\nIENvdXJ0 7301\nIFBoaWw= 7302\nIEFzc29jaQ== 7303\nZW5h 7304\n5ZA= 7305\nX1NUUg== 7306\nY29pbg== 7307\ncmVzaG9sZA== 7308\nIGJhdGNo 7309\nX0NsaWNr 7310\nZW50aWNhdGlvbg== 7311\nPic7Cg== 7312\nZW50eQ== 7313\nIGJlZ2lubmluZw== 7314\nIHplcm8= 7315\nIENvbnZlcnQ= 7316\nIHRlcnI= 7317\nIHBhaWQ= 7318\nIGluY3JlYXNlZA== 7319\nY2F0Y2g= 7320\nLXNpemU= 7321\nMTE1 7322\nYWN0aXZpdHk= 7323\nZXF1YWxz 7324\nIHF1ZXVl 7325\nICIn 7326\nIEludGVybmF0aW9uYWw= 7327\nIGbDvHI= 7328\ndXJzZGF5 7329\nIHNjaWVudA== 7330\nYWxsb3c= 7331\nYXhpcw== 7332\nIGFwcHJvcHJp 7333\nZWRnZQ== 7334\nIGlkeA== 7335\nU3VjY2Vzcw== 7336\nZW50aWZpZXI= 7337\nOlw= 7338\neGlz 7339\nIG1heGltdW0= 7340\nYXJrcw== 7341\nIGJpcnRo 7342\nKGluZGV4 7343\nIG1heWJl 7344\nLnB5 7345\nZmlsZXM= 7346\nIGxpbWl0ZWQ= 7347\nX2NoZWNr 7348\nbG9vaw== 7349\ncGxpZXM= 7350\nIG1vdmVtZW50 7351\nJ10u 7352\nIGJyb2Fk 7353\nIEJF 7354\nIFVuaXR5RW5naW5l 7355\nLmNwcA== 7356\nIEV2ZXJ5 7357\nQWRtaW4= 7358\nIGZhbnM= 7359\ncGFyZWQ= 7360\nCiAgICAK 7361\nIGZvcmVpZ24= 7362\nIHBhbg== 7363\nIHRvdXI= 7364\nIE9yZGVy 7365\nIG1vdmluZw== 7366\nIGF1Zg== 7367\nQ2FsbA== 7368\nY2I= 7369\nxZ8= 7370\ndmVudG9yeQ== 7371\nIFNxbA== 7372\nIGZ1bGx5 7373\nQ2xpY2tMaXN0ZW5lcg== 7374\nV09SRA== 7375\nIGFubm91bmNlZA== 7376\nKQ0KDQo= 7377\nIGFncmVlZA== 7378\ncmll 7379\nIGVhcm4= 7380\nX2xpbms= 7381\nLmFycmF5 7382\nKHRleHQ= 7383\nIG1hdGVyaWFscw== 7384\nLHA= 7385\nZmZmZg== 7386\ndmc= 7387\nIMKp 7388\nIHVubGVzcw== 7389\nYWpheA== 7390\nTE9H 7391\nIHNleHVhbA== 7392\nIFwi 7393\nLXRpbWU= 7394\nIGNvYWNo 7395\nIHN1cHBvcnRlZA== 7396\nIHBob3Rvcw== 7397\naWZvcm0= 7398\nLkNyZWF0ZQ== 7399\nKV0= 7400\ncmllcg== 7401\nIGRpYWxvZw== 7402\nYXZlcg== 7403\naWdl 7404\nKSs= 7405\nX2lkeA== 7406\nOls= 7407\nX21pbg== 7408\nIENvbmc= 7409\nIHByZXNzdXJl 7410\nIHRlYW1z 7411\nU2lnbg== 7412\nYmVnaW4= 7413\ncmlhbg== 7414\nTkVTUw== 7415\nTFM= 7416\nIGltcHJvdmU= 7417\nIFN1bmRheQ== 7418\nIGRlZmluaXRpb24= 7419\naWdlcg== 7420\ncm9sbGVycw== 7421\nIHRoaW5raW5n 7422\nVGVtcGxhdGU= 7423\nLUY= 7424\nIGVtZXJn 7425\ncGxhdGVz 7426\nIFVTQQ== 7427\nLnNldFN0YXRl 7428\nIEFsc28= 7429\ncmV2 7430\nIGVuYWJsZQ== 7431\nIENP 7432\nUEVDVA== 7433\nIGNvbmNlcHQ= 7434\nKS0= 7435\nIOKAog== 7436\nIHNldHM= 7437\nIG1lYW5pbmc= 7438\nZW1vbg== 7439\nIENvbnM= 7440\nY21w 7441\nZWRlcg== 7442\nYW5uZWQ= 7443\naWNlbnNlZA== 7444\nIFN1cGVy 7445\nIGRhaWx5 7446\nIG11bHRp 7447\nX3U= 7448\nIGNoYWxsZW5n 7449\nX21vZGU= 7450\nIFByb21pc2U= 7451\nIHN0cmljdA== 7452\nam8= 7453\naW50b24= 7454\nKGxpc3Q= 7455\nT25seQ== 7456\nPns= 7457\nIHZlaGljbGU= 7458\n7ZU= 7459\nIFBsYXllcg== 7460\nMTA2 7461\nIERlbA== 7462\nIHBvb2w= 7463\nLnVybA== 7464\nbmVzZGF5 7465\nKCk7DQoNCg== 7466\nOTAw 7467\nICIpOwo= 7468\nTG9jYWw= 7469\nLiIpOwo= 7470\nIG9yZ2FuaXphdGlvbg== 7471\ncmVuZGVy 7472\nIEFwcGxpY2F0aW9u 7473\nIHN1bW1lcg== 7474\nZXhwZWN0ZWQ= 7475\nTkE= 7476\nIHJhcA== 7477\nX29iag== 7478\nIHN1cmZhY2U= 7479\nIFBVUg== 7480\nIH0sCgo= 7481\nIHZhcmlhYmxlcw== 7482\nKG1lc3NhZ2U= 7483\nIG9waW4= 7484\nLmJhY2s= 7485\n0LDQvQ== 7486\nIHdvcmtlcnM= 7487\ndm0= 7488\nQ28= 7489\ndWdodGVy 7490\nIG1hc3Rlcg== 7491\nICIiLA== 7492\nIHN0b3JpZXM= 7493\nLlVzZXI= 7494\nIGNlbGVicg== 7495\naW5lc2U= 7496\nQlM= 7497\nIENvbW1hbmQ= 7498\nYXNoYm9hcmQ= 7499\nIG9n 7500\na2c= 7501\nLmltYWdl 7502\nLnN0eWxl 7503\nIHN0ZXBz 7504\nIEJlbg== 7505\nKGFyZ3M= 7506\nNDA0 7507\nIFBlcnNvbg== 7508\nLHk= 7509\nIG9mZmljaWFscw== 7510\nfAo= 7511\nIHNraWxscw== 7512\ndmM= 7513\nIGJ1aWxkZXI= 7514\nIGdhcg== 7515\nQWNjb3VudA== 7516\nIEF1dGg= 7517\n55Q= 7518\nJ10pCg== 7519\nIEFU 7520\nbm4= 7521\nLkludA== 7522\nU1NFUlQ= 7523\nIGVmZmVjdGl2ZQ== 7524\nTEVURQ== 7525\nIHRvb2xz 7526\nQVJE 7527\nIGRpZ2l0YWw= 7528\nMTkx 7529\nRG91Ymxl 7530\nIEZpbmQ= 7531\nUkM= 7532\nIGlubGluZQ== 7533\nL3I= 7534\nQVJBTQ== 7535\nQVNL 7536\nIGludGVudA== 7537\nYWlnaHQ= 7538\nX2FkZHI= 7539\nIHJlcXVlc3Rz 7540\nLmZpcnN0 7541\nIGRlYnVn 7542\nIHNwZW50 7543\nKCkpKTsK 7544\nxZs= 7545\nIHByaW5jaXA= 7546\nTG9nZ2Vy 7547\nY2x1ZGVz 7548\nLnVzZQ== 7549\nIHN1cnY= 7550\nbWVkaWE= 7551\nIEZlYnJ1YXJ5 7552\nIE1hYw== 7553\nIG1pc3Npbmc= 7554\nIHdpZmU= 7555\nIHRhbGtpbmc= 7556\nIE1ha2U= 7557\nIGNhcnQ= 7558\nIGxvY2F0ZWQ= 7559\nRW5j 7560\nLWE= 7561\nY2hyb24= 7562\nIGNhcmRz 7563\nIGd1eQ== 7564\nIHBlcnM= 7565\nIFllcw== 7566\nYXRldmVy 7567\nIEFuZw== 7568\nb2xhcg== 7569\nIEV2ZW4= 7570\nIGFjY3Vy 7571\nIFBvd2Vy 7572\nIEdvbGQ= 7573\nY2xlYXI= 7574\nUHJvY2Vzcw== 7575\nIHJlY29yZHM= 7576\nIGtpbGxlZA== 7577\nLmNsZWFy 7578\nIFdBUlJBTlRJRVM= 7579\nIHB1cnBvc2U= 7580\ncGFuZWw= 7581\nSkVDVA== 7582\nw61h 7583\nIGV4ZXJj 7584\nV1M= 7585\nL0w= 7586\nLmV4cG9ydHM= 7587\nIF9fXw== 7588\nIHNpbg== 7589\nU2VydmxldA== 7590\nIGTDqQ== 7591\nLmRlbGV0ZQ== 7592\ncm9rZQ== 7593\nU2w= 7594\ndWdo 7595\nZWFycw== 7596\nIHBvaW50ZXI= 7597\nIGhvcA== 7598\nYWxsZXJ5 7599\nIG9icw== 7600\nY292ZXJ5 7601\nCWNoYXI= 7602\nCQkJCQkJCQkJCQ== 7603\nCWRlZg== 7604\nb2NpdHk= 7605\naXRjaGVu 7606\ndWxhdGlvbnM= 7607\nIEZJVA== 7608\nICku 7609\nc3RyYWludHM= 7610\ndmVudGlvbg== 7611\nIHJlcXVpcmVz 7612\nIE9wZXI= 7613\nTUU= 7614\nT1VOVA== 7615\nYWxsZXQ= 7616\nIG5vcm0= 7617\nSVJF 7618\nZXhhcw== 7619\nIHByb2dyYW1z 7620\nIHdlYWs= 7621\nJy4k 7622\ndWluZw== 7623\nCSAgICAgICA= 7624\nIG1pbA== 7625\nIGZpcm0= 7626\naW5pdGVseQ== 7627\nX1ZBTFVF 7628\nYXBzZQ== 7629\nYXRpc2Y= 7630\nIGRlbWFuZA== 7631\nX21vZA== 7632\nIGRlc2NyaWJlZA== 7633\nIHBsYWNlcw== 7634\nVklE 7635\nIGFsb25l 7636\nIGV4cG9ydA== 7637\nIHZlYw== 7638\nIE1heA== 7639\nIGFjdGl2aXRpZXM= 7640\naWN0dXJlcw== 7641\nZ2VuZXI= 7642\nIG1h 7643\ngqw= 7644\nIGV4cHJlc3Npb24= 7645\nQ2FsbGJhY2s= 7646\nX2NvbnRlbnQ= 7647\nIE1vc3Q= 7648\nIHRlc3Rpbmc= 7649\nRUM= 7650\nQ0hBTlQ= 7651\nIGFkanVzdA== 7652\nLlRocmVhZGluZw== 7653\nKGN0eA== 7654\nIGFncmVl 7655\naWdoZXN0 7656\nIHVp 7657\nIExhdw== 7658\nLlk= 7659\nPjw/ 7660\nIHBvZA== 7661\nLWxn 7662\n4oCdCgo= 7663\nIGRlc2NyaWJl 7664\nIEV1cm9wZWFu 7665\nLXNo 7666\nIFBVUlBPU0U= 7667\nT1JZ 7668\nIGNvbnZlcnM= 7669\nIElsbHVtaW5hdGU= 7670\nIEF2 7671\nKGNo 7672\nPyI= 7673\nY2hlbg== 7674\naW1h 7675\nRG9jdW1lbnQ= 7676\nIG9wZXJhdGlvbnM= 7677\nd2lu 7678\nCWZ1bmN0aW9u 7679\nLkltYWdl 7680\nIHNjZW4= 7681\nL2g= 7682\nIFND 7683\nIGV4cGxv 7684\nOiU= 7685\nLyoqDQo= 7686\nTkFNRQ== 7687\n5og= 7688\nKHZhcg== 7689\nIGRpcmVjdG9y 7690\nT05H 7691\nIHlpZWxk 7692\nIGZlZXQ= 7693\nIFNlYXJjaA== 7694\nIEls 7695\nIHJlc3RhdXI= 7696\nZHVj 7697\nIGludGVnZXI= 7698\nMTA3 7699\nICcnOwo= 7700\nIGhpZ2hseQ== 7701\nY2hlY2tlZA== 7702\nIFBBUlRJQw== 7703\nRVJDSEFOVA== 7704\n77yJ 7705\nIG9wdGlt 7706\nUXVldWU= 7707\nIExJ 7708\naXRhdGlvbg== 7709\nIHRyYW5zcG9ydA== 7710\naXNzaW9u 7711\nZmlsbA== 7712\ndXNpb24= 7713\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 7714\nCWJvb2w= 7715\nLXRo 7716\ndXB0 7717\nIGVzc2VudGlhbA== 7718\nYW50ZWQ= 7719\nIGJlbmVmaXRz 7720\nCVM= 7721\nJzsNCg== 7722\naWtp 7723\nIGdpcmxz 7724\naWNlZA== 7725\nYnVmZmVy 7726\nXSs= 7727\nIHNvY2tldA== 7728\nIHByaWNlcw== 7729\nIEZyZQ== 7730\nIHNhdA== 7731\nIHdvb2Q= 7732\nTWVudUl0ZW0= 7733\nQVJH 7734\nIEFkbWlu 7735\nT1dO 7736\nZGs= 7737\nIHJlc2V0 7738\nIGZvcm1z 7739\nINC4 7740\n5pY= 7741\nIFR1ZXNkYXk= 7742\nMTA5 7743\nIEluaXRpYWxpemVk 7744\nX3RyYWlu 7745\nb3Jhcnk= 7746\nYXRlZ29y 7747\nIGR0 7748\nVG90YWw= 7749\nY29uc3RydWN0 7750\naWxpZXM= 7751\nIGd1eXM= 7752\n0LXRgA== 7753\nIGluc3RydWN0aW9u 7754\nMDEw 7755\neWxlZA== 7756\nIGludGVybmV0 7757\nZXRhZGF0YQ== 7758\nYWR5 7759\nZmFjZXM= 7760\namVjdGlvbg== 7761\nIEphY2s= 7762\nIHJlY3Q= 7763\nWy0= 7764\nIExlZw== 7765\nIGRldmljZXM= 7766\nT0M= 7767\nICoNCg== 7768\nb3JhdGlvbg== 7769\nZXJ0YWlu 7770\nIGd1YXJk 7771\nb3N0cmVhbQ== 7772\nIGVudW0= 7773\nLmxheW91dA== 7774\nICI7Cg== 7775\ndm9rZQ== 7776\nIE9r 7777\nSG9tZQ== 7778\nKHRy 7779\nRVRI 7780\nIGRlbGF5 7781\nIHB1cmNoYXNl 7782\nZGM= 7783\nIGFyZW4= 7784\nX29uY2U= 7785\nCQkJCQo= 7786\ncm9y 7787\nZHJhdw== 7788\nLnJ1bg== 7789\nKG1vZGVs 7790\nVGltZW91dA== 7791\nbGlr 7792\nIEFyZw== 7793\nLmVu 7794\nIGZpc2g= 7795\nY3B5 7796\nX2Zl 7797\nRVJDSEFOVEFCSUxJVFk= 7798\nKFg= 7799\nX291dHB1dA== 7800\nPz8= 7801\nIGpv 7802\nYW5kYXJk 7803\nIGRvbGw= 7804\nZXJyb3Jz 7805\nX2Jhc2U= 7806\nIFBBUlRJQ1VMQVI= 7807\nIGxlYWRlcg== 7808\nIGNvbXBhcg== 7809\nIGRvdWI= 7810\nIFZpcw== 7811\nU3RhY2tUcmFjZQ== 7812\nLUM= 7813\nIFN0dWQ= 7814\nc3RpdHV0ZQ== 7815\nTW9yZQ== 7816\nIERlc2NyaXB0aW9u 7817\nV0FSRQ== 7818\nYWRz 7819\nINC6 7820\nYmluZA== 7821\nPXNlbGY= 7822\nZW1wbG95 7823\nW24= 7824\nLmFsbA== 7825\nLUI= 7826\nJiY= 7827\nYWxt 7828\nIGN1bHR1cmU= 7829\naG91c2U= 7830\nIHN1ZmZlcg== 7831\nICcl 7832\nIHN0cmFpZ2h0 7833\nIFN0YXI= 7834\ndWRv 7835\nIGRlZA== 7836\nIENPTQ== 7837\nIGNvbmZpcm0= 7838\nIEdvb2Q= 7839\nLnNj 7840\nX19fX19fX19fX19fX19fXw== 7841\nRFI= 7842\nQ29uZmlndXJhdGlvbg== 7843\nRGF0ZVRpbWU= 7844\nIGFkdmVydA== 7845\nIGNvdWxkbg== 7846\nYXN5bmM= 7847\nc3RhY2s= 7848\nJykNCg== 7849\nS2l0 7850\nIGhvdXM= 7851\nIG1lY2hhbg== 7852\ncmF0ZQ== 7853\nMjA0 7854\nIGF1ZGlv 7855\nCWNvdXQ= 7856\nY29yZXM= 7857\nIHNwb3Q= 7858\nIGluY3JlYXNpbmc= 7859\nICMj 7860\nKSkp 7861\ncG9pbnRz 7862\nIGNvbXBhcmVk 7863\nbGln 7864\nIGJlaGF2aW9y 7865\nIEJZ 7866\nIEF0dA== 7867\nY3JhZnQ= 7868\naGVhZGVycw== 7869\nZXRl 7870\nZW5kcmVnaW9u 7871\nIGRldGFpbA== 7872\nVUxF 7873\nIENvbW1vbg== 7874\nCXByb3RlY3RlZA== 7875\nc3Rvbg== 7876\nIEZJVE5FU1M= 7877\nIGZyZXNo 7878\nIj4KCg== 7879\nLmV4YW1wbGU= 7880\nYmVyZw== 7881\nIG1vdmVk 7882\nCWU= 7883\nIFNhdHVyZGF5 7884\nIHBheWxvYWQ= 7885\nxIc= 7886\nKToKCg== 7887\nIGJleQ== 7888\ndXJlcg== 7889\nPHNjcmlwdA== 7890\nIHN5bWJvbA== 7891\nIGFzc3Vt 7892\nIHB1bA== 7893\nRWZmZWN0 7894\nIGh1bmRyZWQ= 7895\nVG9vbA== 7896\nYWtlZA== 7897\nY29ubmVjdGlvbg== 7898\nIHZvaWNl 7899\nIHBk 7900\nIHRyYW5zYWN0aW9u 7901\nIGxpbmtz 7902\nRXJy 7903\nIEluZGlhbg== 7904\nVEM= 7905\nYXRhbG9n 7906\nbmk= 7907\nc2lnbg== 7908\nPDwi 7909\namk= 7910\neWE= 7911\nIGRlbW9uc3Ry 7912\ndWxhdGVk 7913\nLlN0 7914\nIGluc3RpdA== 7915\nIGJvb3N0 7916\nIGNlbGxz 7917\nb2xpYw== 7918\nLlBybw== 7919\nOjwv 7920\nRXZlbnRMaXN0ZW5lcg== 7921\naWZ5aW5n 7922\nIERp 7923\nb3Jyb3c= 7924\nLmV4ZWN1dGU= 7925\nIGNvbGxlZ2U= 7926\nWW91cg== 7927\nIGxhcmdlc3Q= 7928\nLmRpcw== 7929\nIHF1aQ== 7930\nIGluZGl2aWR1YWxz 7931\nX2J1ZmZlcg== 7932\nIG5n 7933\nU0E= 7934\nIENvbnRyb2w= 7935\nIHNpbmc= 7936\nIHN1aXQ= 7937\nICAgIAk= 7938\nU0c= 7939\nIGp1bXA= 7940\nIHNtYXJ0 7941\nb21h 7942\nIEV4cA== 7943\nICct 7944\nIGFzc2lzdA== 7945\nIHN1Y2Nlc3NmdWxseQ== 7946\nc3lz 7947\nIENyZQ== 7948\nX3JlZg== 7949\nIFRodXJzZGF5 7950\nIGJ1cg== 7951\nINC0 7952\nIGJleW9uZA== 7953\nIG5vZGVz 7954\nRGV0YWlscw== 7955\naW5jdA== 7956\nIEphbWVz 7957\nIGFmZmVjdA== 7958\nZXhjZXB0aW9u 7959\nIHR5cGVvZg== 7960\nKA0K 7961\nLXNl 7962\nIGZldGNo 7963\nYCw= 7964\nIGNydXNoZXI= 7965\nfS4= 7966\nIEJP 7967\nU2hvdw== 7968\nIHJhdGVz 7969\nIGJvbg== 7970\nLWljb24= 7971\nIE1lZGlh 7972\nUkVTUw== 7973\nIFZhbGlk 7974\n0L7Quw== 7975\nIGZ1Y2s= 7976\nYWNrcw== 7977\nIHN0dWRpZXM= 7978\nTWU= 7979\nIG93bmVycw== 7980\nfWVsc2U= 7981\nIGdyb3dpbmc= 7982\nVmFyaWFibGU= 7983\nIEJlbA== 7984\nLnJhbmRvbQ== 7985\ndmVtZW50 7986\nb255bQ== 7987\nKEY= 7988\nIEZBTFNF 7989\nIHRvcmNo 7990\nKHJvdw== 7991\naWdv 7992\nc3RydWN0dXJl 7993\nMTIx 7994\nIGNlcnRhaW5seQ== 7995\nRGVw 7996\nIEdyZWVu 7997\ncXVlc3Rpb24= 7998\nIGFkZGluZw== 7999\nIERldmVsb3A= 8000\nX2RlZg== 8001\nIG1hY2g= 8002\nPSU= 8003\nCQkg 8004\nY29uZHM= 8005\nUHJvamVjdA== 8006\nIHJlamVjdA== 8007\nIM4= 8008\nIHBvb3I= 8009\nIGF3YXJl 8010\nMTE0 8011\nIEJ1aWxk 8012\nIEJyaXRpc2g= 8013\nIE5F 8014\nIG51bWVy 8015\ncmVlcw== 8016\nY2xhaW0= 8017\nIG1vY2s= 8018\nIG9t 8019\nIHNjcmU= 8020\nT0xE 8021\nLnBs 8022\nZWxlcg== 8023\nIGNvcnJlc3BvbmQ= 8024\nX0hF 8025\nIGJpbmFyeQ== 8026\nMTE2 8027\nX29yZGVy 8028\nIFNRTA== 8029\nIGFkdmFudA== 8030\nIHByZXY= 8031\nLls= 8032\nLmFzc2VydEVxdWFs 8033\ncGxpZXI= 8034\nYXJw 8035\nIGNsb3NlZA== 8036\nIGVuY291cg== 8037\nIFFTdHJpbmc= 8038\nYXVk 8039\nIGRldmVsb3BlZA== 8040\nIHBlcm1pc3Npb24= 8041\nLmRlYnVn 8042\nb3BlcmF0b3I= 8043\nICcK 8044\nIHN5bQ== 8045\nYXRpdmVseQ== 8046\nw6ll 8047\nLWNvbG9y 8048\nIEdFVA== 8049\na3k= 8050\nIGFsdGhvdWdo 8051\nX3JlcXVlc3Q= 8052\nX2VsZW1lbnQ= 8053\nLi4uLi4uLi4uLi4uLi4uLg== 8054\nX0RBVEE= 8055\nIGFtYXppbmc= 8056\nIHNi 8057\nIERlZmF1bHQ= 8058\nRXZlbnRz 8059\nIGZhaWx1cmU= 8060\nYWNsZQ== 8061\nUHJvcGVydGllcw== 8062\nIGRyZWFt 8063\nIGRpc3Ry 8064\nIGF1 8065\nIGdlbmVyYXRlZA== 8066\n5pU= 8067\nIFRlYW0= 8068\nVVNF 8069\nIGluY29tZQ== 8070\nIGV5ZQ== 8071\nX25vdA== 8072\nIl0s 8073\nX2Zvcm0= 8074\nU3VwcG9ydA== 8075\nb3JkZXJz 8076\nLlByaW50 8077\ndmlsbGU= 8078\nIFdlZG5lc2RheQ== 8079\nb2x2ZXI= 8080\nIG9wcG9z 8081\naXNhdGlvbg== 8082\nb2xh 8083\nQ2xvc2U= 8084\nPHA= 8085\nX3dpZHRo 8086\nSW52YWxpZA== 8087\neGI= 8088\nIHN0cnVnZw== 8089\nX2FjdGlvbg== 8090\nIHR4dA== 8091\nIFBhdGg= 8092\nYWxhcg== 8093\nIE1FUkNIQU5UQUJJTElUWQ== 8094\nc2VydmljZQ== 8095\nIE1pY2hhZWw= 8096\nYWJsZVZpZXc= 8097\nRGVidWc= 8098\nb2tlcw== 8099\nU2hl 8100\nIGd1ZXNz 8101\nIEphdmE= 8102\nX1BBVEg= 8103\nIHBhcnRpY3VsYXJseQ== 8104\nIElJ 8105\nIGRvbWFpbg== 8106\n5bm0 8107\nIHJlZHVjZQ== 8108\nLWxlZnQ= 8109\ncmVhbA== 8110\nIGFwcGVhcnM= 8111\nIGNvbW8= 8112\nIFVuaXQ= 8113\nIEdvdmVybg== 8114\nYWxp 8115\nYWxsZWw= 8116\nIEpldw== 8117\nX0k= 8118\nIGNvcw== 8119\nLmNvbG9y 8120\nIEdsb2JhbA== 8121\nIHRlbGU= 8122\nYmVu 8123\nX3RyYW5z 8124\nIHJlYXNvbnM= 8125\nIGVtYg== 8126\nZW5zaXR5 8127\nbGluZXM= 8128\nb21pbg== 8129\nU2NyZWVu 8130\n0LDRgg== 8131\ncGVjdHM= 8132\nY2xpcA== 8133\nZm9v 8134\ncmVudA== 8135\nIGFm 8136\nIGRhbmdlcg== 8137\naWxpbmc= 8138\nTmFtZXM= 8139\nT3Vy 8140\nIGRpc3RyaWJ1dGlvbg== 8141\nV2hpbGU= 8142\nU0w= 8143\nV3JpdGU= 8144\nIGdvdG8= 8145\nIGNvbG9ycw== 8146\nIHBvd2VyZnVs 8147\na2lu 8148\nIGRlcHRo 8149\nZXJjaWFs 8150\nIENvbmdyZXNz 8151\nIE1hcmtldA== 8152\nRGI= 8153\ndW5kZXI= 8154\nIExhc3Q= 8155\nw58= 8156\nZ3JlZw== 8157\nIHBvc3Rz 8158\nX1VSTA== 8159\nb3Rvcw== 8160\nRG9u 8161\nIG1pY3Jv 8162\nIGFycmVzdA== 8163\n0L8= 8164\nIChA 8165\nIEhvdA== 8166\nIEluZGV4 8167\nOyY= 8168\nIyE= 8169\nIE5vcg== 8170\nIENhcA== 8171\nLSg= 8172\nIGludGVyZXN0ZWQ= 8173\ncGVhcg== 8174\nIHJlbnQ= 8175\nIGFsYnVt 8176\nb2xpY3k= 8177\nLmxhbmc= 8178\nLnRyYW5z 8179\nLmZvcm1hdA== 8180\nIHsNCg0K 8181\ncGhlcmU= 8182\nIGF4aXM= 8183\nIEJ1c2luZXNz 8184\nZXJzaXN0ZW5jZQ== 8185\ndXJy 8186\nIG1pbmltdW0= 8187\nZW5kb3I= 8188\nIFNE 8189\nMTEz 8190\nIEludGVybmV0 8191\n5aQ= 8192\nRXhw 8193\naXZlcnNl 8194\nTU0= 8195\nIG9idmlvdXM= 8196\nIGJhc2lz 8197\nIHNjaWVuY2U= 8198\nIGJ1ZGdldA== 8199\naXphdGlvbnM= 8200\nUEE= 8201\nIGZsYWdz 8202\ncHJldA== 8203\nTE9DSw== 8204\nIHZhcmlldHk= 8205\nIHRydXRo 8206\nZHQ= 8207\nIGdvbmU= 8208\nIGJhdHRsZQ== 8209\nPHN0ZA== 8210\nIFNpbA== 8211\ncmY= 8212\ndWRh 8213\nIGVyb3Q= 8214\nIENhbQ== 8215\nIHN0YXRpb24= 8216\nICc8Lw== 8217\nY2hlbWU= 8218\nIFN1bg== 8219\nIGZpbmlzaGVk 8220\nIHNob3A= 8221\nIEtvcmU= 8222\nIGVpZ2h0 8223\nX1JFRw== 8224\nTkQ= 8225\nPiw= 8226\nIj48Pw== 8227\nKG51bQ== 8228\nCWlubGluZQ== 8229\nVHJhbnNhY3Rpb24= 8230\nLk9u 8231\nIG1haWw= 8232\ncmV5 8233\ncmVzdWx0cw== 8234\nIG5hdg== 8235\nSU1JVA== 8236\nX2lkcw== 8237\nTWFrZQ== 8238\n5Yo= 8239\nTW9kYWw= 8240\nIExPRw== 8241\nIFN1cg== 8242\nIGluc3RhbmNlb2Y= 8243\nIG92ZXJhbGw= 8244\nIEluZm9ybWF0aW9u 8245\nIGNvbnN0cnVjdGlvbg== 8246\nX0ZJTEU= 8247\nYnV0 8248\nIG1lZGlj 8249\nIGR1cmF0aW9u 8250\naXRuZXNz 8251\nYWdlbnQ= 8252\nQVY= 8253\nIHNldmVu 8254\nb2xm 8255\nIH19Cg== 8256\nIl0sCg== 8257\nMTcw 8258\nMTIy 8259\nIGNhbGxpbmc= 8260\nIGFucw== 8261\ndGhyb3dz 8262\nb3Jpem9udGFs 8263\nIHVzZVN0YXRl 8264\nLmZs 8265\nIFN0YXR1cw== 8266\nIE9ubGluZQ== 8267\nUlI= 8268\nIFJpY2g= 8269\nIEhpbGw= 8270\nIGJyYWlu 8271\nIGZvbGxvd2Vk 8272\nMjQw 8273\nZW1pYw== 8274\nIHNsaWdodA== 8275\nIGluc3VyYW5jZQ== 8276\nLkFycmF5 8277\nIGFic3RyYWN0 8278\nIFN1bQ== 8279\ncmVkaXJlY3Q= 8280\nb3duZXI= 8281\nKG1zZw== 8282\nIENsaW50b24= 8283\nTm9u 8284\nCWV4 8285\nIHZvbHVtZQ== 8286\nIEV2ZW50QXJncw== 8287\nLUw= 8288\nIERpbQ== 8289\nIE1hcnQ= 8290\nIGN1cnNvcg== 8291\nIGltcGxlbWVudGF0aW9u 8292\ndXJyZWQ= 8293\nIGxhcmdlcg== 8294\nKTsKCgo= 8295\nJys= 8296\nLnRyYW5zZm9ybQ== 8297\nIHVwbG9hZA== 8298\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8299\nRHJhdw== 8300\nbmVs 8301\nCWZsb2F0 8302\ncXJ0 8303\nIE5ldHdvcms= 8304\nIHRpdA== 8305\nQXhpcw== 8306\nLmFuZHJvaWQ= 8307\nIGNvbXBsZXRlZA== 8308\nIG11cg== 8309\nIGNvbHVtbnM= 8310\neGM= 8311\nIHN1cHBseQ== 8312\naW1pbmFs 8313\nIHNwcg== 8314\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 8315\nIHVuaXRz 8316\nKHU= 8317\nbWk= 8318\ncmVwbGFjZQ== 8319\nW2tleQ== 8320\n4Lk= 8321\nYW50aWM= 8322\nIHBheW1lbnQ= 8323\nLEI= 8324\nIEFwcGxl 8325\nZ2lu 8326\nUmVxdWlyZWQ= 8327\nIys= 8328\nbGFuZHM= 8329\nIHNxdQ== 8330\nIGZhY3Rvcg== 8331\nZGVj 8332\nIHN0cmVuZ3Ro 8333\nIGJveQ== 8334\nIGJhbGFuY2U= 8335\nIHNvdXJjZXM= 8336\nc2NyZWVu 8337\nLXRvcA== 8338\nIEFtYXpvbg== 8339\nIGhpZGRlbg== 8340\n0LXRgg== 8341\nX2NsaWVudA== 8342\nIGVhdA== 8343\nLmRpc3BsYXk= 8344\nIMK7 8345\nIHRyaWdnZXI= 8346\nYW5hZ2Vy 8347\nIHRybw== 8348\nIGNsYWltcw== 8349\nZm9yZA== 8350\nIENvbXBhbnk= 8351\nIGdpZnQ= 8352\nLDo= 8353\nX2FwcA== 8354\naGFuZGxl 8355\nIHByb2R1Y2U= 8356\nL2xpYg== 8357\nNTEy 8358\nIC0q 8359\nCXNldA== 8360\nJ107 8361\nYXJj 8362\nYW5kZXI= 8363\nIEVuZ2luZQ== 8364\nIGF0dHJpYnV0ZXM= 8365\ndGFzaw== 8366\nPD0= 8367\nKE4= 8368\nIHdhcm0= 8369\nd2hpY2g= 8370\nIEZvcmU= 8371\nYWdub3N0 8372\nbXlz 8373\nIHRhbA== 8374\nIFNhbA== 8375\nZ2k= 8376\nIFByaW50 8377\nIFRSVUU= 8378\nINC+ 8379\nLlVJ 8380\nIGZsYXNo 8381\ncm9wZXJ0eQ== 8382\nLmxvY2F0aW9u 8383\nIE1pbGw= 8384\nYmk= 8385\nY29udHI= 8386\nLnJlcXVlc3Q= 8387\nIFNhbQ== 8388\nIG5lZ2F0aXZl 8389\na2l0 8390\nIHNldHQ= 8391\nLnByaW50U3RhY2tUcmFjZQ== 8392\nYWJl 8393\nCWk= 8394\nIGJ1cm4= 8395\nIHNvY2lldHk= 8396\nQ2FjaGU= 8397\nIFNlY3VyaXR5 8398\nLm1vZGVscw== 8399\nIFdBUlJBTlRZ 8400\nX3Vw 8401\nY2VpdmU= 8402\nIGNsaWVudHM= 8403\nLlRy 8404\nIHByb3ZpZGluZw== 8405\nIHJvdXQ= 8406\nbWF0ZXJpYWw= 8407\nIHx8Cg== 8408\nIFNlcg== 8409\nIE9mZmljZQ== 8410\nRlRXQVJF 8411\nICck 8412\nIGZvYw== 8413\nIGV4Y2VsbA== 8414\nIGNhdA== 8415\nbm9ybWFs 8416\nIGRldGVybWluZQ== 8417\nCXVpbnQ= 8418\nUGFuZQ== 8419\nIGVtcGxveWVlcw== 8420\nIFRleGFz 8421\nIHRyYWZm 8422\nIFJlcG9ydA== 8423\nYW50YQ== 8424\nIEJveA== 8425\nIGRqYW5nbw== 8426\nIHBhcnRuZXI= 8427\nRUI= 8428\nTElORQ== 8429\nIGZlZWxpbmc= 8430\nIGNpdmls 8431\nKGZsb2F0 8432\nU3Fs 8433\nIHdvdWxkbg== 8434\nLmluaXQ= 8435\nLmxlZnQ= 8436\nLXY= 8437\nX2xldmVs 8438\nJ30= 8439\nQUY= 8440\nIGxvYWRpbmc= 8441\nIE9ubHk= 8442\nIGNvb2tpZXM= 8443\nIEds 8444\nQ08= 8445\nIHN0cmF0ZWd5 8446\nKCcuLw== 8447\nIHNoaXA= 8448\ncG9zZXM= 8449\nIHNpZ25hbA== 8450\nIGFscGhh 8451\nLnBvcA== 8452\nUmFkaXVz 8453\nIHJlcGxhY2U= 8454\nX0RJUg== 8455\nY291bnRlcg== 8456\nYnNlcnZhYmxl 8457\nZWxh 8458\nV2VpZ2h0 8459\naGFzaA== 8460\nYm9zZQ== 8461\nZng= 8462\nIEVtYWls 8463\nIHJlZmVy 8464\nbG9jYWxob3N0 8465\nX1JP 8466\naXF1ZXM= 8467\nU3RlcA== 8468\nIGFoZWFk 8469\nKFZpZXc= 8470\nIFNlcnZpY2Vz 8471\nIEpzb24= 8472\nZXNzb3I= 8473\nIHB1bg== 8474\nIGFwcHJvcHJpYXRl 8475\nYWtlcnM= 8476\nb3Nlbg== 8477\ncG9zaW5n 8478\nIGFnZW50 8479\nZmM= 8480\nIHRyYW5zZmVy 8481\nIGludmFsaWQ= 8482\nIFJlc2VhcmNo 8483\nVmVydGV4 8484\nIGdheQ== 8485\nIGpvdXJuYWw= 8486\nW3g= 8487\nICIiLAo= 8488\nIFdlbGw= 8489\nLlRhc2tz 8490\nU3BlYw== 8491\nIG9s 8492\nIHNwZW5k 8493\nIEF1c3RyYWxpYQ== 8494\nTWF0Y2g= 8495\nLmp1bml0 8496\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8497\nIE1BWA== 8498\naXphYmxl 8499\nY2x1c2l2ZQ== 8500\nX3ZhbGlk 8501\nIHF1YXJ0ZXI= 8502\neWFu 8503\nMDA1 8504\nIEVkaXQ= 8505\nYXJkZW4= 8506\nPW5ldw== 8507\nIGZyYWc= 8508\nQml0 8509\nemk= 8510\nYWluZQ== 8511\ndWRk 8512\nLk9iamVjdA== 8513\nZGVidWc= 8514\nIGNhc2g= 8515\nX0lN 8516\nIGVlbg== 8517\nIGNvbW1lcmNpYWw= 8518\nIFZpZGVv 8519\nbG9hZGVy 8520\nIGZpeGVk 8521\nIGFwcGxpY2F0aW9ucw== 8522\nIF8s 8523\nIFJ1c3NpYQ== 8524\naXRlY3Q= 8525\nXyg= 8526\nIEJsb2Nr 8527\nIHNhbg== 8528\nIFRvbQ== 8529\nIHBlcmhhcHM= 8530\nIHNpZw== 8531\nbGV2YW50 8532\nIGNvcnBvcg== 8533\nYXRhc2V0 8534\ncm9uaWM= 8535\neGU= 8536\nIGV0aA== 8537\nU29tZQ== 8538\ncG9w 8539\nX09L 8540\nIHRlbmQ= 8541\nLlJlcw== 8542\nX2FuZA== 8543\nIHJldmlld3M= 8544\nIHdpbGQ= 8545\nMTE3 8546\nIGRlZ3JlZQ== 8547\nLk8= 8548\nLm9iamVjdHM= 8549\nX2FyZ3M= 8550\nbmls 8551\nIGRpc2FibGVk 8552\nUGFyZW50 8553\nIG5vdGVz 8554\nICIiCg== 8555\nKHN0YXRl 8556\naXN0cmljdA== 8557\nIGxvZ2dpbmc= 8558\nLklP 8559\nIE1hbA== 8560\nRE0= 8561\nIHhtbA== 8562\nIFJvYmVydA== 8563\nZWxlbg== 8564\nbGF5b3V0 8565\nZm9s 8566\nJ10pKQ== 8567\nLGI= 8568\nIEplcg== 8569\nZmlsZW5hbWU= 8570\nIGZhbg== 8571\nIEN1c3RvbQ== 8572\nPSIi 8573\nIERpZQ== 8574\nQnVuZGxl 8575\nLnV0aWxz 8576\nIHRyaXA= 8577\nTUI= 8578\nIHNvZnQ= 8579\nX01PREU= 8580\nIGFwcGxpY2FibGU= 8581\nIHVwcGVy 8582\nRVJWRVI= 8583\nX2Fs 8584\nX0xPRw== 8585\nSGVyZQ== 8586\nd3A= 8587\nIFNlcnZlcg== 8588\nIENsaWVudA== 8589\nIGNoZW0= 8590\nU2Nyb2xs 8591\nIGhpZ2hlc3Q= 8592\nIFNlbGVjdA== 8593\nICJA 8594\nIFdoeQ== 8595\nU2Vj 8596\naGVlbA== 8597\nT3BlcmF0aW9u 8598\nIGNvbm5lY3RlZA== 8599\naXJtZWQ= 8600\nIGNpdGl6 8601\nIENoZQ== 8602\nIGZvcmNlcw== 8603\nIHd3dw== 8604\nUm9vdA== 8605\nQU5DRQ== 8606\nTWFueQ== 8607\naWNpcA== 8608\ncmdhbg== 8609\nMjIw 8610\nIFRvcg== 8611\nIFByZXNz 8612\nIE1vcg== 8613\nLWxpbmU= 8614\ndWxlZA== 8615\nPlw= 8616\nIHRodXM= 8617\nIFJlZ2lzdGVy 8618\naG9s 8619\nIENoaW5lc2U= 8620\nIHBvc3RlZA== 8621\nIG1hZ24= 8622\nYWJpbGl0aWVz 8623\nIGRpc2Vhc2U= 8624\nIHJlbWFpbnM= 8625\nIFByb2Y= 8626\nLWZvcm0= 8627\nIGNpbg== 8628\nb3JnYW4= 8629\naWNhdGU= 8630\nIHN0cmVzcw== 8631\nXSo= 8632\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 8633\nX2NvbnRleHQ= 8634\nb3JyeQ== 8635\nIGRpZWQ= 8636\nbWF0 8637\nIHN0YXJ0cw== 8638\nLk1lc3NhZ2U= 8639\nIHJ1bnM= 8640\nIGd1aWRl 8641\nIHdhcnJhbnR5 8642\nZW50aWFscw== 8643\nZGljdA== 8644\nIFNpemU= 8645\ndWxlcg== 8646\nIHJlc3BvbnNpYmxl 8647\nX1NFVA== 8648\nIGNvbnRhaW5pbmc= 8649\nIFByaWNl 8650\nfHw= 8651\nMzUw 8652\nRlM= 8653\nIGVtcA== 8654\nX2J1dHRvbg== 8655\nKHVpbnQ= 8656\nIHN1ZmY= 8657\ncHRo 8658\nIGRlZmluaXRlbHk= 8659\ncHV0ZQ== 8660\nIG1hcmtldGluZw== 8661\nIFdI 8662\nIFNpZQ== 8663\nKz0= 8664\nT0xPUg== 8665\nIGNvbnN1bHQ= 8666\nIHNpZ25lZA== 8667\nIHNlcXVlbmNl 8668\nbGVl 8669\nIHJlcXVpcmVtZW50cw== 8670\naHk= 8671\nRXhwcmVzcw== 8672\nTVQ= 8673\nc2V5 8674\nIHVsdA== 8675\n5a4= 8676\nZWxsaWdlbmNl 8677\nIGFuYWx5 8678\nIGRyZXNz 8679\nZW5naW5l 8680\nIEdyZWF0 8681\nIEFuZHJvaWQ= 8682\nIEFsZXg= 8683\nbW9kZQ== 8684\nRGljdGlvbmFyeQ== 8685\nLkRhdGU= 8686\n5L0= 8687\nVklDRQ== 8688\nIGZhbWlsaWVz 8689\nIFJ1c3NpYW4= 8690\nIFRpbWVz 8691\nLmNhbGw= 8692\nJCg= 8693\nUHJvZmlsZQ== 8694\nIGZvbGRlcg== 8695\nY2hlcw== 8696\nIGxlZ2lz 8697\nX3Jvdw== 8698\ndW5lcw== 8699\n2YQ= 8700\nIH0pLg== 8701\nQXNzZXJ0 8702\nYWdlbg== 8703\nIEhhbmQ= 8704\nSXRlcg== 8705\nIGJpZ2dlc3Q= 8706\nb3JlYWNo 8707\nIHBvbGlj 8708\nIHBlcm1pc3Npb25z 8709\nIHNob3dlZA== 8710\nIEVsZW1lbnQ= 8711\nIHRvcGlj 8712\n4oCU4oCU 8713\ncm9hZA== 8714\nIEJhbms= 8715\ncmVjb3Jk 8716\nIHBhcnRuZXJz 8717\nIFJlZg== 8718\nZXNzaW9ucw== 8719\nIGFzc2Vzcw== 8720\nVVNU 8721\nIFBhcnR5 8722\ncHJvZHU= 8723\nTEM= 8724\nIHVs 8725\nLmZvcm0= 8726\naGlkZQ== 8727\nY29weQ== 8728\nVVRG 8729\nIFNPRlRXQVJF 8730\nDQoNCg0K 8731\nIExpbg== 8732\ndW5h 8733\ndWdhcg== 8734\nIGFkbWluaXN0cmF0aW9u 8735\nIG9wZW5pbmc= 8736\nIHNjYW4= 8737\nIGNvbnRpbnVlZA== 8738\nY29tcG9uZW50 8739\nLnNw 8740\nIGhhcHBlbnM= 8741\ndW1teQ== 8742\nIFBS 8743\nLkZpbGU= 8744\nIERvd25sb2Fk 8745\nTG9hZGluZw== 8746\nZGk= 8747\nIHdhaXRpbmc= 8748\nX0FERA== 8749\nVGFi 8750\nLnF1ZXJ5U2VsZWN0b3I= 8751\nIGVjb25vbXk= 8752\nIEZyZW5jaA== 8753\ndHh0 8754\nIGZhbnQ= 8755\nXzsK 8756\nSG9sZGVy 8757\nU0g= 8758\nMDA0 8759\nIG51bXB5 8760\nIHN0cmVldA== 8761\nIG1hbGU= 8762\nXE1vZGVs 8763\nYW5naW5n 8764\nMzMz 8765\nIEJpbGw= 8766\nIHByZXZpb3VzbHk= 8767\nQkk= 8768\nIFNlY3JldA== 8769\nIG1pc3Q= 8770\nIEZpZWxk 8771\ndXBz 8772\nIFByb2Nlc3M= 8773\nIGtlcHQ= 8774\nIE9U 8775\nIHRyYWRpdGlvbmFs 8776\nLmk= 8777\nYW1pbg== 8778\nIGhlbHBz 8779\nQW55 8780\nb3JpZ2lu 8781\naWx0ZXJz 8782\nanU= 8783\nZGVzYw== 8784\nIEFjY291bnQ= 8785\nICkNCg== 8786\na3RvcA== 8787\nb2xseQ== 8788\nIGZz 8789\nIOo= 8790\nIHV0 8791\nIGNlbnRyYWw= 8792\nKHRlc3Q= 8793\nLkFu 8794\nIHNhdGlzZg== 8795\nR1I= 8796\nIEZ1bGw= 8797\nIGhlYXQ= 8798\naWJlcg== 8799\nIG9udG8= 8800\nbW9z 8801\nU2NoZW1h 8802\nIGZhY3Rvcnk= 8803\nIi4k 8804\nYXdz 8805\nU3RhdGVtZW50 8806\nKHRhcmdldA== 8807\nCW5ldw== 8808\nLmJl 8809\nIGd1ZXN0 8810\nIG1hbA== 8811\nQVJZ 8812\nIHJlYWNoZWQ= 8813\nIG1vdXNl 8814\nIGNoYWxsZW5nZQ== 8815\nCWRvdWJsZQ== 8816\nIFRlbQ== 8817\nIHRlcnJvcg== 8818\nIGV4dHJhY3Q= 8819\nX1RP 8820\nIHNlcGFyYXRl 8821\nIG1pcg== 8822\naGVscA== 8823\nIGNhcGFjaXR5 8824\nIFByb3BlcnR5 8825\na2Fu 8826\nX2NyZWF0ZQ== 8827\nIExpZ2h0 8828\nLnBhcmVudA== 8829\nIHVuZGVyc3RhbmRpbmc= 8830\nIGVhc2llcg== 8831\nIHw9 8832\nIGVuaA== 8833\nIGZhdA== 8834\nIHByb3Rlc3Q= 8835\nYW1t 8836\nX0FU 8837\nLW9m 8838\naWxz 8839\nIE9o 8840\nIHBzeWNo 8841\nICQu 8842\naW5kcw== 8843\nIHJlbGF0aXZl 8844\nc2hvcA== 8845\nc2hvcnQ= 8846\nIFNhbmQ= 8847\nMjEw 8848\ndWVzdGlvbg== 8849\nIGZlYXI= 8850\nLwoK 8851\nLmNvbnRleHQ= 8852\nIHNjaG9vbHM= 8853\nIHNlcnZl 8854\nem9uZQ== 8855\nX2Ri 8856\nIG1ham9yaXR5 8857\nZXhhbXBsZQ== 8858\nIGxhbmc= 8859\nCSAg 8860\nUmVnaXN0ZXI= 8861\nZW5kbw== 8862\nIHByb2Nlc3Npbmc= 8863\nX3RlbXBsYXRl 8864\nLXVzZXI= 8865\nIGVn 8866\nQ09N 8867\nIEJsdWU= 8868\naXJv 8869\nIHJlbW90ZQ== 8870\nIElU 8871\nIyEv 8872\nIHJlZGlzdHJpYg== 8873\nMTI0 8874\ncmF6 8875\nIFNpbmNl 8876\nIFR1cg== 8877\nMTM1 8878\nQmFja2dyb3VuZA== 8879\nPT09 8880\nIHJlZmxlY3Q= 8881\nIHByb3M= 8882\nY21k 8883\nIHdob20= 8884\nQ29tcGF0 8885\nIEFyZQ== 8886\nSWRlbnRpZmllcg== 8887\nIFRob20= 8888\nX3BvcnQ= 8889\nZ3U= 8890\nIG1vbml0b3I= 8891\ncm0= 8892\nIHBhdGllbnQ= 8893\ndmVydGVy 8894\nIGdhaW4= 8895\nLXVp 8896\nSW5zdA== 8897\nIGRpZXM= 8898\nMTE4 8899\nQXJlYQ== 8900\nX2ZpbHRlcg== 8901\nIGdyYXQ= 8902\nIHJlYWxpdHk= 8903\nb3JkaW5hdGU= 8904\nb2x2ZWQ= 8905\nQ29udGFjdA== 8906\nIGNvbXBsaWFuY2U= 8907\nX29y 8908\nIFZhcg== 8909\nZGw= 8910\nIGFwcGVuZA== 8911\nR0VS 8912\nKG1heA== 8913\nLnJlbmRlcg== 8914\nIGR5bmFtaWM= 8915\nb3JkaW5hdGVz 8916\nX29wdGlvbnM= 8917\nX2NvbHVtbg== 8918\nIGJhdHRlcg== 8919\nc3BhY2U= 8920\nTGE= 8921\nIFNvdXJjZQ== 8922\nL2Jpbg== 8923\nIGRvcw== 8924\nIEJvYXJk 8925\nIFRocmVhZA== 8926\nIEFM 8927\nKGNvbmZpZw== 8928\nMTQ0 8929\nIE1lcg== 8930\nIG1pbGVz 8931\nX2hlYWRlcg== 8932\nRVRIT0Q= 8933\naXp6 8934\nIGJlbmVmaXQ= 8935\nIGludGVncg== 8936\nKGN1cnJlbnQ= 8937\ndWxv 8938\nLmRlZmF1bHQ= 8939\nIERpdg== 8940\nIHRvbg== 8941\nb3Ro 8942\nZXJ2YXRpb24= 8943\nZWRvbQ== 8944\nIGJhYnk= 8945\nY2VpdmVk 8946\nLnRvcA== 8947\ncmlvcml0eQ== 8948\nIExvY2Fs 8949\ncmlhZ2U= 8950\nIGF0dGFja3M= 8951\nIGhvc3BpdGFs 8952\nMTY4 8953\nIGZlbWFsZQ== 8954\nIExvZ2lu 8955\nIEZsb3I= 8956\nIGNoYWlu 8957\nYXNoaW9u 8958\nVGV4dHVyZQ== 8959\nU2F2ZQ== 8960\nIGZhcm0= 8961\nLmNvbnRhaW5z 8962\nLlRlc3Q= 8963\nIGtub3dz 8964\nIGdlbmVyYWxseQ== 8965\naXBlbGluZQ== 8966\nIG1lYW50 8967\nZW5jaWE= 8968\nIG5pY2h0 8969\nIGNvbnRlbnRz 8970\nUE0= 8971\nY2hlZHVsZQ== 8972\nKGxpbmU= 8973\nQ0c= 8974\nam9i 8975\nIFJlYWw= 8976\ndWVy 8977\nZmlybQ== 8978\nINg= 8979\nZXRybw== 8980\nImAK 8981\nIHNwZWVjaA== 8982\nIHRocg== 8983\nZm9yZWFjaA== 8984\nIHdhcm4= 8985\nCWw= 8986\nIGhlYXZ5 8987\nPGxp 8988\nTmU= 8989\nIGludmVzdGlnYXRpb24= 8990\nTWF0aA== 8991\nLXRpdGxl 8992\nIGNodXJjaA== 8993\nIGRlc3BpdGU= 8994\nY2hhaW4= 8995\nIHdoYXRldmVy 8996\nYXJpYW4= 8997\nZm4= 8998\nIG1ldGE= 8999\nfSkKCg== 9000\nVUZG 9001\nIHJlZ2FyZGluZw== 9002\nX1NVQ0NFU1M= 9003\nbWVz 9004\nIEludGVudA== 9005\nIHJlc29sdmU= 9006\ncG9zcw== 9007\naXJh 9008\nZm9yY2U= 9009\nb2ljZQ== 9010\nw6I= 9011\nIHBt 9012\nIHVwZGF0ZXM= 9013\nQXJy 9014\nINE= 9015\ndGVzdGluZw== 9016\nIHRvd2FyZA== 9017\nbnRheA== 9018\n64s= 9019\nIGxpc3Rlbg== 9020\nIGdvYWxz 9021\nSW5zdGFuY2VTdGF0ZQ== 9022\nRHI= 9023\nIHJhcmU= 9024\nIHRyYWls 9025\nS2V5cw== 9026\nQ2Fs 9027\nQ2Fy 9028\nIFBlb3BsZQ== 9029\nCWxvY2Fs 9030\nY2xhc3Nlcw== 9031\nUmVmZXJlbmNl 9032\nLmZvckVhY2g= 9033\nZW1i 9034\nYWN0aXY= 9035\nIHByaW0= 9036\ncmVkaWN0 9037\nIHJhZA== 9038\n5pWw 9039\nLkJhY2s= 9040\nIHNwcmVhZA== 9041\nIGNsb2Nr 9042\nIHZpcg== 9043\nZWRpdG9y 9044\nIGVmZm9ydHM= 9045\nIGJyYW5jaA== 9046\nIGluZHVzdA== 9047\nIG1vdG9y 9048\nIGFtYg== 9049\nIGRhdGV0aW1l 9050\nIHJlbmNvbnQ= 9051\nIENocmlzdGlhbg== 9052\nIEFtZXJpY2Fucw== 9053\nZnVsbA== 9054\nIGZtdA== 9055\nLm1haW4= 9056\nIGNhdXNlZA== 9057\nX3VwZGF0ZQ== 9058\nIENvbnRlbnQ= 9059\nQVRDSA== 9060\nIGJhdGg= 9061\nIEVhY2g= 9062\nIHJhZGlv 9063\nYWNobWVudA== 9064\ndXp6 9065\nU3VibWl0 9066\nIHJlc3RyaWN0 9067\nYWJpbg== 9068\nIExvYWQ= 9069\nIGV4dGVuc2lvbg== 9070\nIGVzc2F5 9071\nIGhhdA== 9072\nYXZpb3Vy 9073\ndG9CZQ== 9074\nIjpb 9075\nIG9mZmVyZWQ= 9076\nIHZpbGw= 9077\nKGRvdWJsZQ== 9078\nMTE5 9079\n5pel 9080\nYmM= 9081\nX2ZyZWU= 9082\nIE1pc3M= 9083\nIEJlcg== 9084\nIOg= 9085\nIExpa2U= 9086\nIGhlbHBlZA== 9087\nLmdldE5hbWU= 9088\nX0FM 9089\nIHNwaXJpdA== 9090\nIEFwYWNoZQ== 9091\nd3M= 9092\nIHRoZXJlZm9yZQ== 9093\nKHBhcmFtcw== 9094\nX2ltZw== 9095\nIHBlYWNl 9096\nIGluY29y 9097\nIEVYUEVDVA== 9098\nIG1pbm9y 9099\naXBlcw== 9100\nCWRhdGE= 9101\nc2VsZWN0b3I= 9102\nY2l0eQ== 9103\ndHJpZQ== 9104\nLmJhc2U= 9105\nX2ZyYW1l 9106\nIG9wZW5lZA== 9107\nL2pzb24= 9108\nTFk= 9109\nbnU= 9110\nLkRl 9111\ndGY= 9112\nbWFyZ2lu 9113\nLlBhcnNl 9114\nIHBp 9115\nIGVx 9116\nYmQ= 9117\nRmllbGRz 9118\nIFRyZWU= 9119\nIGJhbg== 9120\naXN0YW4= 9121\nCiAgICAgICAgCg== 9122\nCWds 9123\nIHByb2R1Y2Vk 9124\nc3lzdGVt 9125\nTWFyaw== 9126\nX2hhc2g= 9127\nIGJn 9128\nIGNvbnN0aXQ= 9129\nIExlYWd1ZQ== 9130\nIG1pc3Npb24= 9131\nX2Zvcm1hdA== 9132\nKFsK 9133\nY2x1c2lvbg== 9134\nISI= 9135\n0Lc= 9136\nYnJlYWs= 9137\nCXN3aXRjaA== 9138\nIHRoZXI= 9139\nVHJhbnNmb3Jt 9140\nIGZvb3RiYWxs 9141\nLWxpbms= 9142\ncm91dGU= 9143\nLmF1dGg= 9144\nIGJhZw== 9145\nb3ZlcnM= 9146\nIGVuYWJsZWQ= 9147\nIHJhYw== 9148\nKEk= 9149\nQ1I= 9150\nYW5jaW5n 9151\nIG1hbmFnZWQ= 9152\nX3E= 9153\nTkdUSA== 9154\nIG1hYw== 9155\nIEF1dG8= 9156\nYW1lbnRl 9157\nICcnLA== 9158\nLkFwcGVuZA== 9159\nIHBpbg== 9160\nLml0ZW0= 9161\nYWNraW5n 9162\nIG9jY2Fz 9163\ncGVyc29u 9164\nIHRp 9165\nLlJlZw== 9166\nIGhhdmVu 9167\nIGdsYXNz 9168\nICI8Lw== 9169\nIFNpbXBsZQ== 9170\nUHJpbnQ= 9171\nIHN1cnJvdW5k 9172\nTk8= 9173\n44CCCg== 9174\nICAgICAgICANCg== 9175\nIE1hbnk= 9176\nICJf 9177\nIHdlZWtlbmQ= 9178\nIHNvbWV3 9179\nLnBhcmFtcw== 9180\nc21hbGw= 9181\nQVRFRA== 9182\nIHBsdWdpbg== 9183\nZmllbGRz 9184\nIEluaXRpYWxpemU= 9185\nb29u 9186\nYXRpbGU= 9187\neWU= 9188\nIHZvdXM= 9189\nTEFH 9190\nIG9sZGVy 9191\nIGdhbQ== 9192\nIGV4dHJlbWVseQ== 9193\nIGhldA== 9194\nZW51bQ== 9195\nIFNFVA== 9196\neGZm 9197\nIHRpbWVy 9198\nL2luZGV4 9199\nIGNyaXRpY2Fs 9200\nUm93cw== 9201\nX2FyZ3VtZW50 9202\nIGV4ZWN1dGU= 9203\nIHNob3dpbmc= 9204\nLnhtbA== 9205\nLWxpc3Q= 9206\nUm9sZQ== 9207\ndHlwZW5hbWU= 9208\nX21ldGhvZA== 9209\ndGhhdA== 9210\nY2hlcg== 9211\nIOKG 9212\nWFQ= 9213\nIHRob3VzYW5kcw== 9214\nCW4= 9215\nIHJlc3A= 9216\nX3ByaWNl 9217\nb2x1dA== 9218\nQWc= 9219\nIFR3bw== 9220\nIGJlY29tZXM= 9221\nIGh1cw== 9222\nLlVzZQ== 9223\ndGhlbWU= 9224\ndXJi 9225\nIC8qCg== 9226\nZXJpYWxpemU= 9227\nQVJO 9228\nIGxvc2U= 9229\nTG93ZXI= 9230\nIHZlbA== 9231\nIGRlZmVuc2U= 9232\nY29uZGl0aW9u 9233\nIGJlcw== 9234\nIGRyeQ== 9235\nIHNjcm9sbA== 9236\nLlNob3c= 9237\nSUVM 9238\n0L7RgA== 9239\nIFJlc3Q= 9240\nV2hlcmU= 9241\nb29kcw== 9242\nIEplcw== 9243\nIHdpcmU= 9244\nX0lORk8= 9245\nIHN0cmluZ3M= 9246\nZ21lbnQ= 9247\nIG1hdGNoZXM= 9248\nIGVsZWN0cmlj 9249\nIGV4Y2VsbGVudA== 9250\nIENvdW5jaWw= 9251\naWRhZGU= 9252\nIHd4 9253\ncHVzaA== 9254\nX2VudHJ5 9255\nIHRhc2tz 9256\nIHJpY2g= 9257\nc2E= 9258\nIFNtaXRo 9259\nVU5DVElPTg== 9260\nUG9pbnRlcg== 9261\ncGVjdGl2ZQ== 9262\nMTMx 9263\nIHdpZGdldA== 9264\naXN0YQ== 9265\nIGFnZW5jeQ== 9266\nIHNpY2g= 9267\nb2xvZ2llcw== 9268\nIHRyaWFs 9269\nYWx5c2lz 9270\nLmNoZWNr 9271\nQVJL 9272\nIG9uQ2hhbmdl 9273\nYWJvdXQ= 9274\nJywk 9275\nKHZhbA== 9276\nIHBsYWNlZA== 9277\nX05P 9278\nIGRhbg== 9279\nLmVxdWFs 9280\nCSAgICAg 9281\nIHdlYXRoZXI= 9282\nLmdhbWU= 9283\nIGRlc3RpbmF0aW9u 9284\nX1VTRVI= 9285\naWVjZQ== 9286\nIHByb3ZpZGVy 9287\nLmxhc3Q= 9288\ncGxleA== 9289\nTm90ZQ== 9290\nL2pz 9291\nIHDDpQ== 9292\nIHBsYW5uaW5n 9293\nYXR0cmlidXRl 9294\nUFJP 9295\nYXRjaGVz 9296\nIDwt 9297\nIHNlZWluZw== 9298\nIGNhbmNlbA== 9299\nX2luZA== 9300\nLmtleXM= 9301\nIHZpc3VhbA== 9302\nIEN1cnJlbnQ= 9303\nIENvbGxlZ2U= 9304\nIFJvY2s= 9305\nIGFncmVlbWVudA== 9306\nIFN0b3Jl 9307\nb3Zpbmc= 9308\nIGNvcm5lcg== 9309\nYW1waW9ucw== 9310\nSVNF 9311\nRmlu 9312\nIHByb3RlY3Rpb24= 9313\nIGZp 9314\nUGxheQ== 9315\ncGx1Z2lu 9316\nKX0= 9317\nLmZyYW1l 9318\nLXo= 9319\nIHRyYW5zaXRpb24= 9320\naWdpbg== 9321\nIGNhbmRpZGF0ZQ== 9322\nIFVuaW9u 9323\nX3ZhbHVlcw== 9324\nKG1hcA== 9325\nY2xl 9326\nIHRyZW5k 9327\nd2lkZQ== 9328\nYXJlbg== 9329\nTG9j 9330\nVVRI 9331\nIEJheQ== 9332\nIHNtYWxsZXI= 9333\naXVz 9334\nMTQx 9335\nd2VsbA== 9336\nIGNyaW1pbmFs 9337\nIGNvbmZsaWM= 9338\nYmVydA== 9339\nX0lOVA== 9340\nIGludmVzdG1lbnQ= 9341\nY3VzdG9t 9342\nIFNlc3Npb24= 9343\nX3dyaXRl 9344\nYW5pYQ== 9345\nIE1hc3M= 9346\nX0VR 9347\nX05PVA== 9348\nIHZpb2xlbmNl 9349\nQXJndW1lbnQ= 9350\nX2VtYWls 9351\nIGJlbG9uZw== 9352\nX2Z1bmN0aW9u 9353\nIGVuZW15 9354\nZW1h 9355\nIEFkZHJlc3M= 9356\nLmVtcHR5 9357\nIGlubmVy 9358\nIENvbnRhY3Q= 9359\nTG9hZGVy 9360\nPGlucHV0 9361\nIENB 9362\nbG90 9363\nIHBpY3R1cmVz 9364\nIFN1cHBvcnQ= 9365\nX25hbWVz 9366\nMTg4 9367\nTGF5ZXI= 9368\nIENsaWNr 9369\nU3Vt 9370\nw6Y= 9371\nIExvb2s= 9372\ndW91cw== 9373\nTGli 9374\nRmxhZ3M= 9375\ndGVhbQ== 9376\nRVA= 9377\nMTg5 9378\naGF0 9379\nb3ZlcnJpZGU= 9380\nYXBzZWQ= 9381\nIGxhYmVscw== 9382\ncXVpcw== 9383\nIFN0cmVhbQ== 9384\nX2RldmljZQ== 9385\nIENvbW1pdA== 9386\nKHJvb3Q= 9387\nIn0= 9388\nLmlzRW1wdHk= 9389\nMTI2 9390\nCU0= 9391\nIGFuZ2xl 9392\nIEJlY2F1c2U= 9393\nJSUlJSUlJSU= 9394\nIGFpbQ== 9395\nIHN0aWNr 9396\nc3RtdA== 9397\nYWdyYXBo 9398\nYW5zd2Vy 9399\nIGNsaW4= 9400\nIElzbA== 9401\nLmV4dA== 9402\nIElOVA== 9403\nIHN0eWxlcw== 9404\nIGJvcm4= 9405\nIHNjcg== 9406\nIGV4cGFuZA== 9407\nIHJhaXNlZA== 9408\nVGV4dEJveA== 9409\nSUxM 9410\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 9411\nSFRUUA== 9412\nMTMy 9413\nPik= 9414\nX2NoYXI= 9415\ncmVzb3VyY2U= 9416\nIGVwaXNvZGU= 9417\nICdf 9418\nIEVz 9419\nIEVhcnRo 9420\nwqDCoA== 9421\nVVBEQVRF 9422\nMTMz 9423\nIFNvdQ== 9424\ndWlz 9425\ndHlwZXM= 9426\nIG1hcw== 9427\nIGZhdg== 9428\nIGNvbnN0cnVjdA== 9429\nX3JhdGU= 9430\nZXJhcw== 9431\nIHwK 9432\ncm9wZXJ0aWVz 9433\nIGV4dGVybmFs 9434\nIGFwcGxpZWQ= 9435\nIHByZWZpeA== 9436\nb3RlZA== 9437\nbGVycw== 9438\nIGNvbGQ= 9439\nIFNQ 9440\nIENodXJjaA== 9441\nIE91dHB1dA== 9442\nbG9zZWQ= 9443\n55o= 9444\naWZpY2F0ZQ== 9445\nb3BlcmF0aW9u 9446\naGVyaXQ= 9447\neEZG 9448\nLmVudg== 9449\nX2Vycg== 9450\nb3No 9451\nRGlyZWN0aW9u 9452\nQ2FuY2Vs 9453\nIEZyYW5r 9454\nIGZpbmRpbmc= 9455\nLikKCg== 9456\nIHJvdXRlcg== 9457\n44O7 9458\nc2Vz 9459\nIGNyb3c= 9460\nPT0n 9461\nIHNhbmQ= 9462\nIHJpZA== 9463\naXR1cmU= 9464\nIGVudHJl 9465\nIG9ic2Vydg== 9466\nIHZhYw== 9467\n8J8= 9468\nLVQ= 9469\nQXJ0 9470\nbmlnaHQ= 9471\nLnNlYXJjaA== 9472\nIGV4Y2hhbmdl 9473\nIGRpc3RyaWN0 9474\nLm9z 9475\nIGRlcGFydG1lbnQ= 9476\nIGRvY3VtZW50cw== 9477\nIGNlbnR1cnk= 9478\nIE5leHQ= 9479\nSG9zdA== 9480\nIEtJTkQ= 9481\nIHN1c3A= 9482\nLVA= 9483\ncmVuZA== 9484\nLmVt 9485\ndWl0ZQ== 9486\naXN0ZXJz 9487\nKGpzb24= 9488\nIEFubg== 9489\nd3Q= 9490\nYXRp 9491\nIEhUTUw= 9492\nd2hlbg== 9493\nRGlyZWN0b3J5 9494\nIHNodXQ= 9495\nPGE= 9496\nZWR5 9497\nIGhlYWx0aHk= 9498\nIHRlbXBlcmF0dXJl 9499\nIEdlbg== 9500\nIG1ldGFs 9501\nIHN1Ym1pdA== 9502\nIERP 9503\nIGF0dHJhY3Q= 9504\nIHt9Owo= 9505\nIFdvcmQ= 9506\nIGxs 9507\nIHNlZW1lZA== 9508\na28= 9509\nSUVE 9510\nIGxhYm9y 9511\nLkNvbnRleHQ= 9512\nIGFzc2V0 9513\neW91 9514\nIGNhcnM= 9515\nIENvbHVtbg== 9516\nIHLDqQ== 9517\nIHNxdWFyZQ== 9518\nIE5TU3RyaW5n 9519\n4oCdLA== 9520\nYXBlcw== 9521\nLi4uCg== 9522\nIHRoYW5rcw== 9523\nKHByb3Bz 9524\nIHRpY2s= 9525\nIGV4cGVyaW1lbnQ= 9526\nIHByaXNvbg== 9527\ndHJlZQ== 9528\nLXRleHQ= 9529\nIElPRXhjZXB0aW9u 9530\nLXdpZHRo 9531\nX1NUQVRVUw== 9532\nZmFzdA== 9533\nLWJvZHk= 9534\nLWhlYWRlcg== 9535\nIGd1YXI= 9536\nY3JldGU= 9537\nIFRpbQ== 9538\nIGNsZWFybHk= 9539\nIFJlcHVibGljYW4= 9540\nIGp1c3RpZnk= 9541\n0LjRgg== 9542\nCSAgICA= 9543\nY2FjaGU= 9544\nOy8v 9545\nIHByZXNlbmNl 9546\nIGZhY3RvcnM= 9547\nIGVtcGxveWVl 9548\nXSkp 9549\nTWVtYmVy 9550\nIHNlbGVjdG9y 9551\nYm9y 9552\nIE1leA== 9553\n55qE 9554\ndXRleA== 9555\nX3RhZw== 9556\nYWlsdXJl 9557\nIE5ldA== 9558\nIHJlbGk= 9559\nRUc= 9560\nIGZwcmludGY= 9561\nIHRlZW4= 9562\nbG9zcw== 9563\nIGxlYXZpbmc= 9564\nMTM0 9565\nRGVsZWdhdGU= 9566\nIGJlYXQ= 9567\nIG1pbnV0ZQ== 9568\nc3Vic2NyaWJl 9569\nIHJlZGlzdHJpYnV0ZQ== 9570\nQ29uc3RhbnRz 9571\nIGNhbmNlcg== 9572\nL3s= 9573\nQkw= 9574\nIHNwYW4= 9575\nIENoaWxk 9576\nQ2VudGVy 9577\nIGVhcnRo 9578\nWVM= 9579\nIExldmVs 9580\nIHNlYQ== 9581\nLnN1cHBvcnQ= 9582\nLmlubmVy 9583\nLkl0ZW0= 9584\naWxsaW5n 9585\nICAgIAogICAgCg== 9586\nIExhYmVs 9587\nMzIw 9588\nIEVzdA== 9589\nKGFyZw== 9590\nMTQ1 9591\nYm9Cb3g= 9592\nCWZvcmVhY2g= 9593\nY29z 9594\nRmFpbGVk 9595\nc3dlcnM= 9596\nRWRpdG9y 9597\ncm9udA== 9598\nIE1Q 9599\nZXhwcg== 9600\nIExpZmU= 9601\nID8/ 9602\nw7Zy 9603\nIGF0dGVuZA== 9604\nIFF1ZQ== 9605\nIHNwZWNpZXM= 9606\nLUQ= 9607\nIGF1cw== 9608\nU3RydWN0 9609\nIGFkdmFudGFnZQ== 9610\nb3N0b24= 9611\nLWJsb2Nr 9612\naW5pdGlhbA== 9613\nQ1JF 9614\nIHRydWx5 9615\nIGNvbXBhcmU= 9616\nb3JuZXk= 9617\nIHNwZWN0 9618\nRnVsbA== 9619\nYmVz 9620\nIHZpc2libGU= 9621\nIG1lc3M= 9622\nc3RhbmNlcw== 9623\nIGNsb3Vk 9624\nX3ZlcnNpb24= 9625\nIGZ1cm4= 9626\naWNhZ28= 9627\nTE9X 9628\nIHRyYWZmaWM= 9629\nIGZvbA== 9630\ncnlwdG8= 9631\nIGRlY2xhcg== 9632\nIHNsb3Q= 9633\nIEV4dA== 9634\nIEVuZ2xhbmQ= 9635\nIFVuZGVy 9636\nIHRh 9637\nbGV0dGVy 9638\nMjAz 9639\nIG9mZmljZXI= 9640\nIERvbmFsZA== 9641\nWWVz 9642\nX2pzb24= 9643\nSVRhYmxlVmlldw== 9644\nIFVTRQ== 9645\nbXBsb3llZQ== 9646\nIG9waW5pb24= 9647\nIEF1dA== 9648\nYm9yZGVy 9649\nIGFkdmljZQ== 9650\nIGF1dG9tYXRpY2FsbHk= 9651\naXNjbw== 9652\nIG1t 9653\nLnZpcw== 9654\nYW1s 9655\nIGluaXRpYWxpemU= 9656\nICh7 9657\nIDsKCg== 9658\nIGdlbmVyYXRpb24= 9659\nIGJpdHM= 9660\nY2xpcHNl 9661\nIHVuZg== 9662\ndXRvcnM= 9663\ncGx0 9664\nIGRlbHRh 9665\nZXN0cm95 9666\naXNpcw== 9667\nPGJy 9668\nIGxpbWl0YXRpb25z 9669\nIGVuZGVk 9670\nIE1hZA== 9671\naWxt 9672\nVGhlc2U= 9673\nMTg3 9674\nIE1pbmlzdGVy 9675\nIGNoYXJ0 9676\nRnJhZ21lbnQ= 9677\nIGluZGVwZW5kZW50 9678\nWWVhcg== 9679\nIGluc3Ry 9680\nIHRhZ3M= 9681\nQVZF 9682\nIEFyY2g= 9683\nc3RvcA== 9684\nUHJvZ3Jlc3M= 9685\nIG1p 9686\nIGxlYXJuZWQ= 9687\nR2U= 9688\nIGhvdGVs 9689\nMTUx 9690\nU00= 9691\nVFlQRQ== 9692\nIGN5 9693\nRVJTSU9O 9694\ndW5hdGVseQ== 9695\nbGltaXQ= 9696\nc2Vs 9697\nIG1vdmllcw== 9698\nIHN0ZWVs 9699\nb3o= 9700\nZ2I= 9701\nIENhbXA= 9702\nc2l0ZQ== 9703\nIExvZ2dlcg== 9704\nUExF 9705\n0L7QtA== 9706\nLnJpZ2h0 9707\nIENvcmU= 9708\nIG1peGVk 9709\nc3RlcA== 9710\nIHB1dHM= 9711\nc3VwZXI= 9712\nUm91dGVy 9713\nMTg2 9714\nLkh0dHA= 9715\nMjIy 9716\nbHlwaA== 9717\nIENvbG9ycw== 9718\nIGFuZHJvaWR4 9719\nLnN0cg== 9720\nIGlubm92 9721\nIGRlY2s= 9722\nJz4K 9723\nYXBlcnM= 9724\nXSg= 9725\nY29udGludWU= 9726\nc3BlYw== 9727\nIFJvYWQ= 9728\nQVNI 9729\naWxpYXI= 9730\nIGNvbnRpbnVlcw== 9731\nIGFwcG9pbnQ= 9732\nICMK 9733\nIFZpcg== 9734\nID8+Ig== 9735\nIGJpbg== 9736\nfSIs 9737\nZ29pbmc= 9738\nZWFjaA== 9739\nQkQ= 9740\nMTg1 9741\nIEFjY2Vzcw== 9742\nRG9j 9743\nIE1hbmFnZW1lbnQ= 9744\nQkVS 9745\nYXNrZXQ= 9746\nLmdldEluc3RhbmNl 9747\nMTI5 9748\nIGVzdGFibGlzaGVk 9749\nc29ja2V0 9750\nSU5T 9751\nCXZpcnR1YWw= 9752\nCXJlc3VsdA== 9753\nUkVBRA== 9754\nX2hlaWdodA== 9755\nMTUy 9756\nIEZvbnQ= 9757\nICgpOwo= 9758\nX2h0bWw= 9759\nIG5laWdoYm9y 9760\nbG9y 9761\nIGdhdGhlcg== 9762\nIH0pCgo= 9763\nIGlkZW50aXR5 9764\nIGZhYg== 9765\ncGFkZGluZw== 9766\nIFJvdXRl 9767\nRW51bWVyYWJsZQ== 9768\nw7Q= 9769\nIGZvcmNlZA== 9770\nL2pxdWVyeQ== 9771\nLgoKCgoKCg== 9772\ncmVzZW50cw== 9773\nX2xlZnQ= 9774\nLlBhcmFt 9775\nCXRocm93 9776\nIEhhbQ== 9777\nIGV2ZW50dWFsbHk= 9778\nYWNlcg== 9779\ncHVi 9780\nIHRyYQ== 9781\ndW5pcXVl 9782\nZGVs 9783\nIEZsb3JpZGE= 9784\nIENsZWFu 9785\neGE= 9786\nIMK3 9787\nIHZhbGlkYXRl 9788\nVmlzdWFs 9789\nRXhwcmVzc2lvbg== 9790\nX2Z1bmM= 9791\nbWVtYmVy 9792\nCWg= 9793\ndHJs 9794\nMTM2 9795\nCUc= 9796\nbmFwc2hvdA== 9797\nIFByb3BUeXBlcw== 9798\ndmlu 9799\nMTUz 9800\nXSkKCg== 9801\nb3ds 9802\naWZpZXM= 9803\nICQoJy4= 9804\nIENvbnRleHQ= 9805\nIFRvYXN0 9806\nLktleQ== 9807\nIG9mZmljZXJz 9808\nL24= 9809\nc24= 9810\ndW5kZWZpbmVk 9811\nLml0ZW1z 9812\ndXRvdw== 9813\nYW1hZ2U= 9814\nIGFjY291bnRz 9815\nb29raWU= 9816\nU2VjdGlvbg== 9817\naWNpYW5z 9818\nIGFkdmlz 9819\nKGlz 9820\nWzos 9821\nIEZyYW5jZQ== 9822\nRnVuYw== 9823\naWNpb3Vz 9824\nIHRvaw== 9825\nQ2hhbm5lbA== 9826\nIEFE 9827\nX05VTQ== 9828\nIHRpbWVvdXQ= 9829\nbGVtbWE= 9830\ncmVtZQ== 9831\ndWo= 9832\nLkFs 9833\ndWNsZWFy 9834\nKG9z 9835\nKCI8 9836\nWwo= 9837\nZmV0Y2g= 9838\nIGJhbA== 9839\nIGd1aWQ= 9840\nLWFsaWdu 9841\nIFdyaXRl 9842\nIE9uY2U= 9843\ndXRvd2lyZWQ= 9844\nT0RVTEU= 9845\nIHBpdGNo 9846\nQ0Y= 9847\nYnl0ZXM= 9848\nIENvbW1pc3Npb24= 9849\nIGluY3JlZA== 9850\nUEVS 9851\nX3Jlc3BvbnNl 9852\nIExvcw== 9853\ncGFyc2Vy 9854\nIGFzc3VtZQ== 9855\nLlJlcXVlc3Q= 9856\nIFRva2Vu 9857\nX3Bvc2l0aW9u 9858\nIG5vbQ== 9859\nLXRlcm0= 9860\nIHJlbWFpbmluZw== 9861\naW9zdHJlYW0= 9862\nIHBpZWNlcw== 9863\nYXB5 9864\nIExlc3M= 9865\ncmFuZ2U= 9866\ndW1ibg== 9867\ncHJpc2U= 9868\nX29wdGlvbg== 9869\nMjMw 9870\nSW1wbA== 9871\na3dhcmdz 9872\nIGJ1c2luZXNzZXM= 9873\nQWxlcnQ= 9874\nIHBhcnRpZXM= 9875\nIENvbnRhaW5lcg== 9876\nIFByaXZhdGU= 9877\nIFBsYW4= 9878\nIHJlZ2lzdGVyZWQ= 9879\nIGpvdXI= 9880\nYWNrZXI= 9881\n0LXQvdC4 9882\nLz4= 9883\nY2hhdA== 9884\nc2VjdA== 9885\nIGNyZWF0aW9u 9886\nb2x1dGVseQ== 9887\nIGluc3RhbnQ= 9888\nIGRlbGl2ZXJ5 9889\naWNrZW4= 9890\neWVz 9891\nMTYz 9892\nIEZyYW5j 9893\nYmxpbmc= 9894\nZW5kYQ== 9895\nWyg= 9896\nX3Jhbmdl 9897\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 9898\nIHNjaGVkdWxl 9899\nQ29ubg== 9900\nIHRoYW5r 9901\neGQ= 9902\nIGhvb2s= 9903\nIGRvY3VtZW50YXRpb24= 9904\nUGFyYW1ldGVycw== 9905\nSGVsbG8= 9906\ndnQ= 9907\nIGFydGljbGVz 9908\nIHdlc3Q= 9909\nZGVmaW5lZA== 9910\nLnNlbGVjdA== 9911\nb2tlbnM= 9912\nIFZBTA== 9913\nLmZpbGU= 9914\ncmVzZXQ= 9915\nIG15cw== 9916\nIE1B 9917\nXSks 9918\nIGNpdGllcw== 9919\ncmVsYXRlZA== 9920\n5Zs= 9921\nIGFwcGVhcmVk 9922\nIHdpZA== 9923\nLnBhbmVs 9924\nIElucw== 9925\nLmVudGl0eQ== 9926\nIGRlY3Jl 9927\nIExvdQ== 9928\nKHRpbWU= 9929\nIFRoYW5r 9930\nLmNyZWF0ZUVsZW1lbnQ= 9931\nIG1lbnRpb25lZA== 9932\nb3VuY2U= 9933\nIFRyeQ== 9934\nIFdhbGw= 9935\nL2ltYWdlcw== 9936\nIE1lbnU= 9937\nJw0K 9938\nIEVy 9939\nIGNyaXRpYw== 9940\nIFllYXI= 9941\nKHBhcmFt 9942\nIGZsbw== 9943\nTk4= 9944\nb290ZXI= 9945\nIF07Cg== 9946\nIEFmZg== 9947\nImdpdGh1Yg== 9948\ncm9vbXM= 9949\nIGh5cA== 9950\nZ2xvYmFs 9951\nIGF2ZWM= 9952\n5pyI 9953\nIGNvbXBsZXRpb24= 9954\nIGNvbmQ= 9955\nb255bW91cw== 9956\nKHRlbXA= 9957\nIHN0YXJz 9958\nIHJlbGV2YW50 9959\nIGNvdmVyZWQ= 9960\nIGVsaW0= 9961\nX3R5cGVz 9962\nKGJvb2w= 9963\nIHR1 9964\nX2V4aXN0cw== 9965\nIHNlY3VyZQ== 9966\nIHN0b3JlZA== 9967\nXS8= 9968\neEY= 9969\nIENvbnRyb2xsZXI= 9970\nIG1pZ3I= 9971\nTUk= 9972\nIERlbg== 9973\nIGFubnVhbA== 9974\nVUlM 9975\nLWFuZA== 9976\nIGNyaW1l 9977\nYmVs 9978\nIGtpdGNoZW4= 9979\nQGc= 9980\nX3Bo 9981\nb3VybmFtZW50 9982\nIFNvY2lhbA== 9983\nIFNwZWNpYWw= 9984\nbG9nZ2Vy 9985\nIHRhaWw= 9986\nIHVua25vd24= 9987\nZGVk 9988\nIGFwcHJlYw== 9989\nKGRi 9990\nY2Y= 9991\nMTU1 9992\nIGFzc2lnbg== 9993\nLW91dA== 9994\nIE1vbnQ= 9995\nZHA= 9996\nd2lkZ2V0 9997\nIHN0b25l 9998\nLXByaW1hcnk= 9999\nLmdyaWQ= 10000\nUmVzdWx0cw== 10001\nYXp6 10002\nIGRhdWdodGVy 10003\nIGN1cnI= 10004\nMTc1 10005\nIGxpbg== 10006\nIHNvdXRo 10007\nZm9ybXM= 10008\nIE9VVA== 10009\nbGV0dGU= 10010\nYWtz 10011\naWd1cmU= 10012\nIEVV 10013\ndmFyaWFibGU= 10014\nIGJyaWVm 10015\nIFNjb3R0 10016\nIGNvbmZlcmVuY2U= 10017\nYW5kYQ== 10018\nX2xvY2s= 10019\nb3JhbA== 10020\nIGVpbmU= 10021\nT1JT 10022\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 10023\nZXNzbw== 10024\nIHJpcw== 10025\nIGdlbmRlcg== 10026\nZXN0aWM= 10027\nTGljZW5zZQ== 10028\nKG91dA== 10029\nIG1z 10030\nU2Vl 10031\nIHdpbGxpbmc= 10032\nYXpl 10033\nIHNwb3J0cw== 10034\nIHllcw== 10035\nbHU= 10036\nIHB1cnM= 10037\nL2phdmFzY3JpcHQ= 10038\nLXBybw== 10039\nbmF2YmFy 10040\nX3Byb2R1Y3Q= 10041\nL2Jvb3RzdHJhcA== 10042\nIGRyaXZpbmc= 10043\nIMQ= 10044\nIHByb3Bvcw== 10045\ndWx0aXA= 10046\ndXBsaWM= 10047\nLmVtYWls 10048\nIGFwcHJveA== 10049\nKGNs 10050\nIHdlYXI= 10051\nIHJlcGx5 10052\nYXNzZXQ= 10053\nIGljZQ== 10054\nIHR4 10055\na3I= 10056\nIEdlcm1hbnk= 10057\nIEdlb3JnZQ== 10058\nIGNi 10059\nCWVycg== 10060\nTW92ZQ== 10061\nIHBvbHk= 10062\ndm9pY2U= 10063\nfSI= 10064\nIGFuaW1hbA== 10065\nQXY= 10066\nIExvY2F0aW9u 10067\nIG5hdGl2ZQ== 10068\nXVsi 10069\nPGRvdWJsZQ== 10070\nIG1haXM= 10071\nLGludA== 10072\nIHByZXBhcg== 10073\nIGludGVydmFs 10074\ncGxlbWVudGF0aW9u 10075\nX0VSUg== 10076\nIGJ1Zw== 10077\nPiI= 10078\nc3RhdA== 10079\nIH0sDQo= 10080\nPHNwYW4= 10081\nIGZhaXRo 10082\nIHJvbQ== 10083\ncHJldg== 10084\nIEVsZWN0 10085\nRmluZA== 10086\nIGdvZA== 10087\nb3Rvcg== 10088\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 10089\nb3JpZ2luYWw= 10090\nQ3Bw 10091\nIFNlbmF0ZQ== 10092\nIHBvc2l0aW9ucw== 10093\nIHdlYXBvbnM= 10094\nIGNvZmY= 10095\nIHB1cnBvc2Vz 10096\ncG9s 10097\nIGltcHJlc3M= 10098\nIGFuaW1hbHM= 10099\nLkVudGl0eQ== 10100\nKG5w 10101\nIG11cmRlcg== 10102\nIGBg 10103\nZmxhZw== 10104\nIHNvbHV0aW9ucw== 10105\nIEFjdGl2ZQ== 10106\nIGJyaWdodA== 10107\nLmRhdGU= 10108\nIHNpdHU= 10109\n77yI 10110\nLklE 10111\nIHNpZQ== 10112\nKSwNCg== 10113\nYWt0 10114\nU3BhY2U= 10115\nLmRhdA== 10116\nLmluZGV4T2Y= 10117\naGFu 10118\nYXppbmU= 10119\nIFpl 10120\nIGNyYXNo 10121\nKC8= 10122\nPj0= 10123\n0LE= 10124\nMTM5 10125\naXZh 10126\nLkF1dG9TaXpl 10127\nIExhdA== 10128\nX2V4dA== 10129\nSW5pdGlhbGl6ZQ== 10130\nLnJlZ2lzdGVy 10131\nMTU2 10132\nT1BZ 10133\nIHJldmVyc2U= 10134\nX2Rpcw== 10135\nJ11b 10136\nIHByb21wdA== 10137\nb250bw== 10138\nIEpvdXJuYWw= 10139\ncm91dGVy 10140\nIG15c3FsaQ== 10141\nI2Vsc2U= 10142\nKSI= 10143\nLXhz 10144\nbGV0cw== 10145\ncGhhbg== 10146\nLkxF 10147\nMTM3 10148\nV2lsbA== 10149\nIGFmZm9yZA== 10150\nIHNraWxs 10151\nLXRvZ2dsZQ== 10152\nTkM= 10153\nQmluZA== 10154\nVFM= 10155\nSnVzdA== 10156\naXRlcmFs 10157\nWVA= 10158\nCXVuc2lnbmVk 10159\nIHdpbmQ= 10160\nMTQ5 10161\nKSk6Cg== 10162\nIHdhcm5pbmc= 10163\nIFdhdGVy 10164\nIGRyYWZ0 10165\nIGNt 10166\nIHNhbQ== 10167\nIGhvbGRpbmc= 10168\nemlw 10169\nIFNjaWVuY2U= 10170\nIHN1cHBvc2Vk 10171\nR2Vu 10172\nIGRpZXQ= 10173\nPGg= 10174\nIFBhc3M= 10175\ndmk= 10176\nIGh1c2JhbmQ= 10177\n77+977+9 10178\nbm90ZQ== 10179\nIEFib3V0 10180\nIEluc3RpdHV0ZQ== 10181\nIGNsaW1hdGU= 10182\nLkZvcm1hdA== 10183\nIG51dA== 10184\nZXN0ZWQ= 10185\nIGFwcGFyZW50 10186\nIGhvbGRz 10187\nZmk= 10188\nbmV3cw== 10189\nQ00= 10190\ndmlkZW8= 10191\nJzon 10192\nRElUSU9O 10193\ncGluZw== 10194\nIHNlbmlvcg== 10195\nd2E= 10196\nLS0+Cg== 10197\nX2RlZmF1bHQ= 10198\nIERhdGFiYXNl 10199\ncmVw 10200\nRVNT 10201\nbmVyZ3k= 10202\nLkZpbmQ= 10203\nX21hc2s= 10204\nIHJpc2U= 10205\nIGtlcm5lbA== 10206\nOjok 10207\nLlE= 10208\nIG9mZmVyaW5n 10209\nZGVjbA== 10210\nIENT 10211\nIGxpc3RlZA== 10212\nIG1vc3RseQ== 10213\nZW5nZXI= 10214\nIGJsb2Nrcw== 10215\nb2xv 10216\nIGdvdmVybmluZw== 10217\nXEY= 10218\nIGNvbmNlbnQ= 10219\nLmdldFRleHQ= 10220\nIG1i 10221\nIG9jY3VycmVk 10222\nIGNoYW5naW5n 10223\nU2NlbmU= 10224\nX0NPREU= 10225\nQmVo 10226\nIlRoZQ== 10227\nIHRpbGU= 10228\nIEFzc29jaWF0aW9u 10229\nCVA= 10230\nYWx0eQ== 10231\nX2Fk 10232\nb2RpZXM= 10233\naWF0ZWQ= 10234\nIHByZXBhcmVk 10235\ncG9zc2libGU= 10236\nIG1vcnQ= 10237\nVEVTVA== 10238\nMTQy 10239\nIGlnbm9yZQ== 10240\nIGNhbGM= 10241\nIHJz 10242\nIGFzc2VydEVxdWFscw== 10243\nIHN6 10244\nIFRISVM= 10245\nLiIK 10246\nIGNhbnZhcw== 10247\namF2YQ== 10248\nIGR1dA== 10249\nVkFMSUQ= 10250\nLnNxbA== 10251\nLmlucHV0 10252\nIGF1eA== 10253\nU3Vw 10254\nIGFydGlzdA== 10255\nVmVj 10256\nX1RJTUU= 10257\nLnN0cmluZ2lmeQ== 10258\nZXR3ZWVu 10259\nIENhdGVnb3J5 10260\nIFst 10261\nIERldkV4cHJlc3M= 10262\nIEp1bA== 10263\nIHJpbmc= 10264\nLmVk 10265\nWVk= 10266\nTGV0 10267\nVGV4dEZpZWxk 10268\nIGZsYXQ= 10269\nX3ByaW50 10270\nIE9USEVS 10271\nYWRpYW4= 10272\nIGNoZWNrZWQ= 10273\nZWxl 10274\nQWxpZ24= 10275\nc3RhbmRpbmc= 10276\nIFtdLA== 10277\nIGxhYg== 10278\ndWNreQ== 10279\nIENocmlzdG1hcw== 10280\nKGltYWdl 10281\nLm1vZHVsZQ== 10282\nIGxvdHM= 10283\nIHNsaWdodGx5 10284\nKGZpbmFs 10285\nZXJnZQ== 10286\n6L8= 10287\nMTQ3 10288\nIFBvbGljZQ== 10289\nMTQz 10290\nIFJpZ2h0 10291\nIGF3YXJk 10292\nIE9T 10293\nIHt9Cgo= 10294\nIHB0cg== 10295\nb3Zlcw== 10296\naWNhdGVk 10297\n0LXQvA== 10298\nIG1hbmFnZQ== 10299\nb2xpZGF5 10300\nQW1vdW50 10301\nb29sU3RyaXA= 10302\ndGJvZHk= 10303\nTmF2 10304\nd3JhcA== 10305\nQkI= 10306\nIHdhdGNoaW5n 10307\nYXJpb3M= 10308\nIG9wdGlvbmFs 10309\nX0s= 10310\nIExpY2Vuc2Vk 10311\nLk1hcA== 10312\nVGltZXI= 10313\nIEFQ 10314\nIFJldg== 10315\nKG8= 10316\nLGM= 10317\ndW1pbg== 10318\nZXRhaWxlZA== 10319\nIEh5 10320\nIGJsYW5r 10321\nYWdnZXI= 10322\nIFNlbGY= 10323\nKClb 10324\nLm1ha2U= 10325\nZWFybg== 10326\nY2hhbm5lbA== 10327\nPHByZQ== 10328\nYmxlbQ== 10329\nX3Bhc3N3b3Jk 10330\nX3Nw 10331\naWNpbmc= 10332\nZXo= 10333\nIHRoZW9yeQ== 10334\nIFRlcg== 10335\nMTg0 10336\nLG4= 10337\nbG9nbw== 10338\nIEhUVFA= 10339\nKCkpKQ== 10340\nLmhhbmRsZQ== 10341\nPjsK 10342\nV29ybGQ= 10343\nIHB5dGhvbg== 10344\nIGxpZg== 10345\nIHRyYXY= 10346\nIGNvbnZlbg== 10347\nY29tcGFueQ== 10348\nIENsdWI= 10349\nMTM4 10350\nVmVy 10351\nQnRu 10352\nIHpvbmU= 10353\ncHJvZHVjdHM= 10354\nIEVkdWM= 10355\nIHZlcmlmeQ== 10356\nIE1pbA== 10357\nb25v 10358\nXSk7Cgo= 10359\nRU5DRQ== 10360\nIHBhY2tldA== 10361\nIGNlcg== 10362\nIGVudW1lcg== 10363\nIHBhcnM= 10364\nZm9ybWVk 10365\nIG9jY3Vw 10366\ndHJl 10367\nIGV4ZXJjaXNl 10368\nRGF5 10369\nX3N1bQ== 10370\nIGFza2luZw== 10371\nYXB0aW9u 10372\nIG9yZGVycw== 10373\nIHNwZW5kaW5n 10374\nIEVSUg== 10375\nLkRpcw== 10376\nIFV0aWw= 10377\n4oCcSQ== 10378\nXCc= 10379\nPyk= 10380\nLz4K 10381\nIGVtb3Q= 10382\nIGluZmx1ZW5jZQ== 10383\nIEFmcmljYQ== 10384\nYXR0ZXJz 10385\n2YU= 10386\nLnNlc3Npb24= 10387\nIGNoaWVm 10388\nCQkJCQkJCQkJCQk= 10389\nIHRvbQ== 10390\nY2x1ZGVk 10391\nc2VyaWFs 10392\nX2hhbmRsZXI= 10393\nLlR5cGU= 10394\nYXBlZA== 10395\nIHBvbGljaWVz 10396\nLWV4 10397\nLXRy 10398\nYmxhbms= 10399\nbWVyY2U= 10400\nIGNvdmVyYWdl 10401\nIHJj 10402\nX21hdHJpeA== 10403\nX2JveA== 10404\nIGNoYXJnZXM= 10405\nIEJvc3Rvbg== 10406\nUGU= 10407\nIGNpcmN1bQ== 10408\nIGZpbGxlZA== 10409\nMTQ4 10410\nIG5vcnRo 10411\naWN0dXJlQm94 10412\nCXJlcw== 10413\n6K4= 10414\nIHRlcm1pbg== 10415\nIFvigKY= 10416\nSVJFQ1Q= 10417\nIGJlcg== 10418\nICIuLi8uLi8= 10419\ncmV0Y2g= 10420\nLmNvZGU= 10421\nX2NvbA== 10422\nIEdvdmVybm1lbnQ= 10423\nIGFyZ3Y= 10424\nIExvcmQ= 10425\nYXNp 10426\nRXhlYw== 10427\nCWxldA== 10428\ndmVydGlz 10429\nIGRpc2N1c3Npb24= 10430\nZW5hbmNl 10431\nb3V0dWJl 10432\ndHlwZW9m 10433\nIHNlcnZlZA== 10434\nIFB1dA== 10435\nCXg= 10436\nIHN3ZWV0 10437\nQmVmb3Jl 10438\nYXRlZ3k= 10439\nLm9m 10440\nIE1hdGVyaWFs 10441\nU29ydA== 10442\nT05U 10443\naWdpdGFs 10444\nV2h5 10445\nIHN1c3Q= 10446\nIOc= 10447\nYWJldA== 10448\nIHNlZ21lbnQ= 10449\nIFtdLAo= 10450\nIE11c2xpbQ== 10451\nIGZpbmRWaWV3QnlJZA== 10452\nY3V0 10453\nX1RFWFQ= 10454\nIE1hcnk= 10455\nIGxvdmVk 10456\nIGxpZQ== 10457\nIEpP 10458\nIGlzc2V0 10459\nbW9udGg= 10460\nIHByaW1l 10461\ndGk= 10462\nIENhcm9s 10463\nVXNl 10464\nMTQ2 10465\nIFBvcA== 10466\nIFNhdmU= 10467\nSW50ZXJ2YWw= 10468\nZXhlY3V0ZQ== 10469\nZHk= 10470\nIElyYW4= 10471\nX2NvbnQ= 10472\nCVQ= 10473\nIHBoYXNl 10474\nY2hlY2tib3g= 10475\nd2Vlaw== 10476\nIGhpZGU= 10477\nIHRpbA== 10478\nIGp1 10479\nQ3VzdG9t 10480\nYnVyZw== 10481\nL00= 10482\nVE9O 10483\nIHF1YW50 10484\nIHJ1Yg== 10485\naXhlbHM= 10486\nIGluc3RhbGxlZA== 10487\nIGR1bXA= 10488\nIHByb3Blcmx5 10489\nKExpc3Q= 10490\nIGRlY2lkZQ== 10491\nYXBwbHk= 10492\nSGFz 10493\nIGtlZXBpbmc= 10494\nIGNpdGl6ZW5z 10495\nIGpvaW50 10496\ncG9vbA== 10497\nU29ja2V0 10498\nX29w 10499\nIHdlYXBvbg== 10500\nZ25vcmU= 10501\nIEV4ZWM= 10502\nb3R0ZW4= 10503\nIE1T 10504\nICgt 10505\nIFJldmlldw== 10506\nIGV4YW1wbGVz 10507\nIHRpZ2h0 10508\nISg= 10509\nRFA= 10510\nIE1lc3NhZ2VCb3g= 10511\nIHBob3RvZ3JhcGg= 10512\nMTY0 10513\nVVJJ 10514\nw6l0 10515\nbG93 10516\nIEdyYW5k 10517\nLnBlcnNpc3RlbmNl 10518\nIG1haW50YWlu 10519\nIG51bXM= 10520\nIHppcA== 10521\naWFscw== 10522\nIEdldHM= 10523\ncGVn 10524\nIEJ1ZmZlcg== 10525\nfn5+fg== 10526\ncmFzdHJ1Y3R1cmU= 10527\nIFBM 10528\ndWVu 10529\nb2JieQ== 10530\nc2l6ZW9m 10531\nIHBpYw== 10532\nIHNlZWQ= 10533\nIGV4cGVyaWVuY2Vk 10534\nIG9kZA== 10535\nIGtpY2s= 10536\nIHByb2NlZHVyZQ== 10537\nYXZpZ2F0b3I= 10538\nLW9u 10539\nLGo= 10540\nIEFsdGhvdWdo 10541\nIHVzZXJJZA== 10542\nYWNjZXB0 10543\nQmx1ZQ== 10544\nSUNvbG9y 10545\nbGF5ZXI= 10546\nYXZhaWxhYmxl 10547\nIGVuZHM= 10548\nLnRhYmxl 10549\nIGRhdGFzZXQ= 10550\nYnVz 10551\nIGV4cGxhaW4= 10552\nKHBybw== 10553\nIENvbW1pdHRlZQ== 10554\nIG5vdGVk 10555\nXToK 10556\nRGlt 10557\nc3RkaW8= 10558\nMTU0 10559\nLiIsCg== 10560\nX3NvdXJjZQ== 10561\nMTgx 10562\nIFdlZWs= 10563\nIEVkZ2U= 10564\nIG9wZXJhdGluZw== 10565\nIGVzdGU= 10566\naXBs 10567\nMzMw 10568\nYWdpbmF0aW9u 10569\nIHByb2NlZWQ= 10570\nIGFuaW1hdGlvbg== 10571\nLk1vZGVscw== 10572\nIFdhdGNo 10573\naWF0 10574\nIG9wcG9u 10575\nL0E= 10576\nUmVwb3J0 10577\nIHNvdW5kcw== 10578\nX2J1Zg== 10579\nSUVMRA== 10580\nIGJ1bmQ= 10581\nCWdldA== 10582\nLnBy 10583\nKHRtcA== 10584\nIGtpZA== 10585\nPgoKCg== 10586\nIHlhbmc= 10587\nTm90Rm91bmQ= 10588\n0YY= 10589\nbWF0aA== 10590\nQGdtYWls 10591\nIExJTUlU 10592\ncmVkaWVudHM= 10593\nIHZlbnQ= 10594\nYXZpZ2F0ZQ== 10595\nTG9vaw== 10596\nIHJlbGlnaW91cw== 10597\nIHJhbmQ= 10598\ncmlv 10599\nKEdM 10600\nX2lw 10601\ndWFu 10602\naWNpZW5jeQ== 10603\nIENoYW5nZQ== 10604\nPg0KDQo= 10605\nIEVudGl0eQ== 10606\nIHJlbmNvbnRyZQ== 10607\nIFJldA== 10608\ncGxhbg== 10609\nw6lu 10610\nQk9PTA== 10611\ndXJpZXM= 10612\ndHJhaW4= 10613\nRGVmaW5pdGlvbg== 10614\nPT09PT09PT09PT09 10615\neno= 10616\nNDUw 10617\nQW5pbWF0aW9u 10618\nIE9L 10619\nX21lbnU= 10620\nLmJs 10621\nX3Njb3Jl 10622\nIGFjYWQ= 10623\nKFN5c3RlbQ== 10624\nIHJlZnJlc2g= 10625\nJz0+JA== 10626\nLkdyYXBoaWNz 10627\nYW1lbnRv 10628\ncGlk 10629\ndGM= 10630\nIHRpcHM= 10631\nIGhvbWVz 10632\nIGZ1ZWw= 10633\n4pY= 10634\nX2hlbHBlcg== 10635\nICANCg== 10636\nIFJvb20= 10637\nLkNsb3Nl 10638\nX2F0dHI= 10639\nIE1vdW50 10640\nIEV2 10641\nYXJzZXI= 10642\nX3RvcA== 10643\nZWFo 10644\nIERlbGV0ZQ== 10645\n44CN 10646\ndWtl 10647\nIHVzYWdl 10648\nYXJpYQ== 10649\nX2Rldg== 10650\nIHRleHR1cmU= 10651\nIGNvbnZlcnNhdGlvbg== 10652\nZXBlcg== 10653\nQmVhbg== 10654\nZG9uZQ== 10655\nbm9uYXRvbWlj 10656\nIFNlY29uZA== 10657\nIHNob290aW5n 10658\nX3ByZQ== 10659\nQ29tcG9uZW50cw== 10660\nIF0KCg== 10661\nX18s 10662\nc3RpdHV0aW9u 10663\nLkNoYXI= 10664\nPigpOwoK 10665\nIHByZXNlbnRlZA== 10666\nIHdh 10667\nb2tlcg== 10668\nLQoK 10669\naW5lcg== 10670\nIGJlY29taW5n 10671\nIGluY2lkZW50 10672\nQXR0 10673\nMTYy 10674\nIHJldmVhbGVk 10675\nZm9yYw== 10676\nIGJvb3Q= 10677\nLnBhZ2U= 10678\nRW51bWVyYXRvcg== 10679\nMTY1 10680\nXy0+ 10681\nUGhvdG8= 10682\nIHNwcmluZw== 10683\nLiIs 10684\nIERpY3Rpb25hcnk= 10685\nQkpFQ1Q= 10686\nIGxvY2F0aW9ucw== 10687\nIHNhbXBsZXM= 10688\nSW5wdXRTdHJlYW0= 10689\nIEJyb3du 10690\nIHN0YXRz 10691\ncXVhbGl0eQ== 10692\n0YU= 10693\nLWRpcw== 10694\nIGhlbHBpbmc= 10695\nIHBlZA== 10696\nMjI0 10697\nKHNl 10698\nIFdobw== 10699\nYWxpYW4= 10700\naW50ZXJuYWw= 10701\nIGZ0 10702\nPigpLg== 10703\nLT57 10704\nIG1pbmU= 10705\nIHNlY3Rvcg== 10706\nIGdybw== 10707\nIG9wcG9ydHVuaXRpZXM= 10708\nIMO8 10709\nIG1w 10710\nIGFsbGVnZWQ= 10711\nIGRvdWJ0 10712\nTW91c2U= 10713\nQWJvdXQ= 10714\nX3BhcnQ= 10715\nIGNoYWly 10716\nIHN0b3BwZWQ= 10717\nMTYx 10718\nbG9vcA== 10719\nZW50aXRpZXM= 10720\nIGFwcHM= 10721\nYW5zaW9u 10722\nIG1lbnRhbA== 10723\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 10724\nRlI= 10725\nIGRlZmVuZA== 10726\nY2FyZQ== 10727\nIGlkZWFs 10728\nL2FwaQ== 10729\ndXJmYWNl 10730\nMDEx 10731\nIGVsZQ== 10732\ndWxhdG9y 10733\nIFJpZ2h0cw== 10734\nYW5ndWFnZXM= 10735\nIGZ1bmRz 10736\nIGFkYXB0 10737\nQXR0cmlidXRlcw== 10738\nIGRlcGxveQ== 10739\nb3B0cw== 10740\nIHZhbGlkYXRpb24= 10741\nIGNvbmNlcm5z 10742\ndWNl 10743\nLm51bQ== 10744\ndWx0dXJl 10745\naWxh 10746\nIGN1cA== 10747\nIHB1cmU= 10748\nLkZvcmU= 10749\nMTgz 10750\nIEhhc2hNYXA= 10751\nLnZhbHVlT2Y= 10752\nYXNt 10753\nTU8= 10754\nIGNz 10755\nIHN0b3Jlcw== 10756\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 10757\nIGNvbW11bmljYXRpb24= 10758\nbWVt 10759\nLkV2ZW50SGFuZGxlcg== 10760\nLlN0YXR1cw== 10761\nX3JpZ2h0 10762\nLnNldE9u 10763\nU2hlZXQ= 10764\nIGlkZW50aWZ5 10765\nZW5lcmF0ZWQ= 10766\nb3JkZXJlZA== 10767\nICJb 10768\nIHN3ZQ== 10769\nQ29uZGl0aW9u 10770\nIEFjY29yZGluZw== 10771\nIHByZXBhcmU= 10772\nIHJvYg== 10773\nUG9vbA== 10774\nIHNwb3J0 10775\ncnY= 10776\nIFJvdXRlcg== 10777\nIGFsdGVybmF0aXZl 10778\nKFtd 10779\nIENoaWNhZ28= 10780\naXBoZXI= 10781\naXNjaGU= 10782\nIERpcmVjdG9y 10783\na2w= 10784\nIFdpbA== 10785\na2V5cw== 10786\nIG15c3Fs 10787\nIHdlbGNvbWU= 10788\na2luZw== 10789\nIE1hbmFnZXI= 10790\nIGNhdWdodA== 10791\nKX0K 10792\nU2NvcmU= 10793\nX1BS 10794\nIHN1cnZleQ== 10795\naGFi 10796\nSGVhZGVycw== 10797\nQURFUg== 10798\nIGRlY29y 10799\nIHR1cm5z 10800\nIHJhZGl1cw== 10801\nZXJydXB0 10802\nQ29y 10803\nIG1lbA== 10804\nIGludHI= 10805\nKHE= 10806\nIEFD 10807\nYW1vcw== 10808\nTUFY 10809\nIEdyaWQ= 10810\nIEplc3Vz 10811\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 10812\nLkRF 10813\nIHRz 10814\nIGxpbmtlZA== 10815\nZnJlZQ== 10816\nIFF0 10817\nIC8qKg0K 10818\nIGZhc3Rlcg== 10819\nY3Ry 10820\nX0o= 10821\nRFQ= 10822\nLkNoZWNr 10823\nIGNvbWJpbmF0aW9u 10824\nIGludGVuZGVk 10825\nLXRoZQ== 10826\nLXR5cGU= 10827\nMTgy 10828\nZWN0b3Jz 10829\nYW1p 10830\ndXRpbmc= 10831\nIHVtYQ== 10832\nWE1M 10833\nVUNU 10834\nQXA= 10835\nIFJhbmRvbQ== 10836\nIHJhbg== 10837\nLnNvcnQ= 10838\nIHNvcnRlZA== 10839\nLlVu 10840\nNDAx 10841\nX1BFUg== 10842\naXRvcnk= 10843\nIHByaW9yaXR5 10844\nIEdhbA== 10845\nIE9sZA== 10846\naG90 10847\nIERpc3BsYXk= 10848\nKHN1Yg== 10849\nX1RI 10850\nX1k= 10851\nIENhcmU= 10852\nbG9hZGluZw== 10853\nS2luZA== 10854\nX2hhbmRsZQ== 10855\nLCw= 10856\ncmFzZQ== 10857\nX3JlcGxhY2U= 10858\nLmFkZEV2ZW50TGlzdGVuZXI= 10859\nIFJU 10860\nMTcy 10861\nIGVudGVyZWQ= 10862\nZ2Vycw== 10863\nIGljaA== 10864\nKHN0YXJ0 10865\nMjA1 10866\nL2FwcA== 10867\nIGJyb3RoZXI= 10868\nTWVtb3J5 10869\nT3V0bGV0 10870\nIHV0Zg== 10871\ncHJlYw== 10872\nIG5hdmlnYXRpb24= 10873\nT1JL 10874\nIGRzdA== 10875\nRGV0YWls 10876\nIGF1ZGllbmNl 10877\nIGR1cg== 10878\nIGNsdXN0ZXI= 10879\ndW5jaGVk 10880\nIF0s 10881\nIGNvbWZvcnRhYmxl 10882\nLnZhbHVlcw== 10883\nIFRvdGFs 10884\nIHNuYXA= 10885\nIHN0YW5kYXJkcw== 10886\nIHBlcmZvcm1lZA== 10887\naGFuZA== 10888\nKCJA 10889\n5a0= 10890\nIHBoaWw= 10891\naWJy 10892\ndHJpbQ== 10893\nIGZvcmdldA== 10894\nMTU3 10895\nIGRvY3Rvcg== 10896\nLlRleHRCb3g= 10897\nMzc3 10898\naWNvbnM= 10899\nLHM= 10900\nIE9w 10901\nU20= 10902\nU3RvcA== 10903\nCUxpc3Q= 10904\nCXU= 10905\nQ29tbWVudA== 10906\nX1ZFUlNJT04= 10907\nLlh0cmE= 10908\nUGVyc29u 10909\ncmI= 10910\nTE9C 10911\nICAgICAgICAgICAgICAgICAgICAK 10912\nIENlbnRyYWw= 10913\nMjcw 10914\nSUNL 10915\ncmFx 10916\nIHB1dHRpbmc= 10917\nIG1k 10918\nIExvdmU= 10919\nUHJvZ3JhbQ== 10920\nQm9yZGVy 10921\nb29y 10922\nIGFsbG93aW5n 10923\nYWZ0ZXI= 10924\nIGVudHJpZXM= 10925\nIE1heWJl 10926\nXSku 10927\nIFNob3J0 10928\nKVw= 10929\nLm5vdw== 10930\nZnJpZW5k 10931\nIHByZWZlcg== 10932\nIEdQSU8= 10933\nb3Npcw== 10934\nIEdhbWVPYmplY3Q= 10935\nIHNraXA= 10936\nIGNvbXBldGl0aW9u 10937\nX21hdGNo 10938\nbGljYXRpb25z 10939\nX0NPTlQ= 10940\nLmdyb3VwQm94 10941\nIGFscw== 10942\nNjY2 10943\nIldl 10944\nX2Vx 10945\nbGFu 10946\nX3NlYXJjaA== 10947\nIE11c2lj 10948\nYXNpcw== 10949\nIGJpbmQ= 10950\nIElzbGFuZA== 10951\ncnVt 10952\nKEU= 10953\nIHNlYXQ= 10954\nVmlkZW8= 10955\nIGFjaw== 10956\ncmVlaw== 10957\nPXsoKQ== 10958\nIHJhdGluZw== 10959\nIHJlc3RhdXJhbnQ= 10960\nNDU2 10961\nREVY 10962\nKGJ1Zg== 10963\ncHBpbmc= 10964\ndWFsaXR5 10965\nIGxlYWd1ZQ== 10966\nMTc2 10967\nIGZvY3VzZWQ= 10968\nYXBvbg== 10969\nJGRhdGE= 10970\nQ0xVRA== 10971\nQ0xVRElORw== 10972\nIGFic29sdXRl 10973\nKHF1ZXJ5 10974\nIHRlbGxz 10975\nQW5n 10976\nIGNvbW11bml0aWVz 10977\nIGhvbmVzdA== 10978\nb2tpbmc= 10979\nIGFwYXJ0 10980\nYXJpdHk= 10981\nLyQ= 10982\nX21vZHVsZQ== 10983\nIEVuYw== 10984\nLmFu 10985\nLkNvbmZpZw== 10986\nQ3Jl 10987\nIHNob2Nr 10988\nIEFyYWI= 10989\nSUVOVA== 10990\nL3Jl 10991\nIHJldHJpZQ== 10992\neWNsZXI= 10993\naXNh 10994\nIE9yZ2Fu 10995\nLmdyYXBo 10996\nIO0= 10997\nIEJBUw== 10998\nRW51bQ== 10999\nIHBvc3NpYmx5 11000\n0YDQsNA= 11001\nIEphcGFuZXNl 11002\nIGNyYWZ0 11003\nIFBsYWNl 11004\nIHRhbGVudA== 11005\nIGZ1bmRpbmc= 11006\nIGNvbmZpcm1lZA== 11007\nIGN5Y2xl 11008\nL3g= 11009\nR0U= 11010\nIGhlYXJpbmc= 11011\nIHBsYW50cw== 11012\nIG1vdXRo 11013\ncGFnZXM= 11014\nb3JpYQ== 11015\nIFJlbW92ZQ== 11016\nX3RvdGFs 11017\nIG9k 11018\nb2xsYXBzZQ== 11019\nZG9vcg== 11020\nIGJvdWdodA== 11021\nIGFkZHI= 11022\nQVJDSA== 11023\nX2RpbQ== 11024\nZGRlbg== 11025\nIGRlY2FkZXM= 11026\nUkVRVUVTVA== 11027\nIHZlcnNpb25z 11028\nZmlyZQ== 11029\nMDA2 11030\nIG1vdmVz 11031\nZmI= 11032\nIGNvZmZlZQ== 11033\nLmNvbm5lY3Q= 11034\nIFJvdw== 11035\nIHNjaGVtYQ== 11036\nU2NvcGU= 11037\nLVR5cGU= 11038\nIGZpZ2h0aW5n 11039\nIHJldGFpbA== 11040\nIG1vZGlmaWVk 11041\nVEY= 11042\nRmlsZXM= 11043\nbmll 11044\nX2NvbW1hbmQ= 11045\nc3RvbmU= 11046\nINGC 11047\nX3RocmVhZA== 11048\nIGJvbmQ= 11049\nIERldmVsb3BtZW50 11050\nIHB0 11051\nRk9STQ== 11052\ncGxldA== 11053\nIGlkZW50aWZpZWQ= 11054\nY3Bw 11055\nMjA2 11056\nMjI1 11057\nIGNvZGluZw== 11058\nb2tlZA== 11059\nIE1hc3Rlcg== 11060\nSURUSA== 11061\nIHJlc2lkZW50cw== 11062\ncmVkaXQ= 11063\nIFBob3Rv 11064\nPS0= 11065\ndW50ZQ== 11066\nYXRldXI= 11067\nMTU5 11068\nX1NUQVRF 11069\nIFNpbmc= 11070\nIHNoZWV0 11071\nLnZhbA== 11072\nb3JzZQ== 11073\nIGhlcnM= 11074\nIGRldGVybWluZWQ= 11075\nQ29tbW9u 11076\nIHdlZA== 11077\nX3F1ZXVl 11078\nUEg= 11079\nIEF0bA== 11080\nY3JlZA== 11081\nL0xJQ0VOU0U= 11082\nIG1lcw== 11083\nIGFkdmFuY2Vk 11084\nLmphdmE= 11085\nLlNo 11086\nR28= 11087\na2lsbA== 11088\nZnA= 11089\nX3NldHRpbmdz 11090\nIHBhbA== 11091\nIHRydWNr 11092\nIGNvbWJpbmVk 11093\nICIkew== 11094\nIENvcnBvcg== 11095\nIGpvaW5lZA== 11096\nIEpvc2U= 11097\nIEN1cA== 11098\ndW5z 11099\nZXN0aXZhbA== 11100\nbGV2aXNpb24= 11101\nIGJyb2tlbg== 11102\nIG1hcnJpYWdl 11103\nIFdlc3Rlcm4= 11104\nIHJlcHJlc2VudHM= 11105\nIFRpdGxl 11106\nIHNz 11107\nLkFzcw== 11108\nb25nb29zZQ== 11109\naWVudG8= 11110\nPD4oKTsK 11111\nIGFic29sdXRlbHk= 11112\nIHNtb290aA== 11113\nVEVSTg== 11114\nIFVubGVzcw== 11115\nV29yZA== 11116\nIG1lcmdl 11117\naWdhbg== 11118\nIFZvbA== 11119\nIG5u 11120\nLmdldElk 11121\nINC3 11122\nMTcx 11123\nIHNleHk= 11124\nIHNlZWtpbmc= 11125\nU2luZ2xl 11126\nLnRoaXM= 11127\nMTc5 11128\nIGtvbQ== 11129\nYm91bmQ= 11130\nOyI= 11131\nIGZvbnRTaXpl 11132\nX2Rm 11133\nIGluanVyeQ== 11134\nKEg= 11135\nIGlzc3VlZA== 11136\nX0VORA== 11137\nOnNlbGY= 11138\nMDIw 11139\nIHBhdGNo 11140\nIGxlYXZlcw== 11141\nIGFkb3B0 11142\nRmlsZU5hbWU= 11143\n44CQ 11144\nIGV4ZWN1dGl2ZQ== 11145\nIEJ5dGU= 11146\nXSkpCg== 11147\nIG51 11148\nb3V0aW5n 11149\nY2x1ZGluZw== 11150\nLVI= 11151\nLm9wdGlvbnM= 11152\nIHN1YnN0YW50 11153\nYXZheA== 11154\nIEJVVA== 11155\nIHRlY2huaWNhbA== 11156\nIHR3aWNl 11157\nIG3DoXM= 11158\nIHVuaXZlcnM= 11159\neXI= 11160\nIGRyYWc= 11161\nIERD 11162\nIHNlZA== 11163\nIGJvdA== 11164\nIFBhbA== 11165\nIEhhbGw= 11166\nZm9yY2VtZW50 11167\nIGF1Y2g= 11168\nLm1vZA== 11169\nbm90YXRpb24= 11170\nX2ZpbGVz 11171\nLmxpbmU= 11172\nX2ZsYWc= 11173\nW25hbWU= 11174\nIHJlc29sdXRpb24= 11175\nIGJvdHQ= 11176\nKCJb 11177\nZW5kZQ== 11178\nKGFycg== 11179\nRnJlZQ== 11180\nKEAi 11181\nIERpc3RyaWN0 11182\nUEVD 11183\nOi0= 11184\nUGlja2Vy 11185\nIEpv 11186\nICAgICAK 11187\nIFJpdmVy 11188\nX3Jvd3M= 11189\nIGhlbHBmdWw= 11190\nIG1hc3NpdmU= 11191\nLS0tCg== 11192\nIG1lYXN1cmVz 11193\nMDA3 11194\nIFJ1bnRpbWU= 11195\nIHdvcnJ5 11196\nIFNwZWM= 11197\nCUQ= 11198\n44CR 11199\nICl7Cg== 11200\nIHdvcnNl 11201\nKGZpbGVuYW1l 11202\nIGxheQ== 11203\nIG1hZ2lj 11204\nIFRoZWly 11205\nb3Vs 11206\nc3Ryb3k= 11207\nIFdoZXJl 11208\nMjgw 11209\nIHN1ZGRlbg== 11210\nIGRlZmU= 11211\nIGJpbmRpbmc= 11212\nIGZsaWdodA== 11213\nIE9uSW5pdA== 11214\nIFdvbWVu 11215\nIFBvbGljeQ== 11216\nIGRydWdz 11217\naXNoaW5n 11218\nKCcuLi8= 11219\nIE1lbA== 11220\ncGVhdA== 11221\ndG9y 11222\nIHByb3Bvc2Vk 11223\nIHN0YXRlZA== 11224\nX1JFUw== 11225\nIGVhc3Q= 11226\nMjEy 11227\nIENPTkRJVElPTg== 11228\nX2Rlc2M= 11229\nIHdpbm5pbmc= 11230\nZm9saW8= 11231\nTWFwcGVy 11232\nIFBhbg== 11233\nIEFuZ2U= 11234\nLnNlcnZsZXQ= 11235\nIGNvcGllcw== 11236\nTE0= 11237\nIHZt 11238\n5Y0= 11239\nIGRpY3Rpb25hcnk= 11240\nU2Vn 11241\nMTc3 11242\nZWxpbmVz 11243\nIFNlbmQ= 11244\nIGlyb24= 11245\nIEZvcnQ= 11246\nMTY2 11247\nLmRvbWFpbg== 11248\nIGRlYmF0ZQ== 11249\nTm90TnVsbA== 11250\nZXE= 11251\nYWNoZXI= 11252\nbGY= 11253\nCWZtdA== 11254\nIGxhd3k= 11255\nMTc4 11256\nxJ8= 11257\nIE1lbg== 11258\nIHRyaW0= 11259\nKE5VTEw= 11260\nICEh 11261\nIHBhZA== 11262\nIGZvbGxvd3M= 11263\nIl1bIg== 11264\ncmVxdQ== 11265\nIEVw 11266\nLmdpdGh1Yg== 11267\nKGltZw== 11268\nZXRv 11269\nKCdc 11270\nU2VydmljZXM= 11271\ndW1ibmFpbA== 11272\nX21haW4= 11273\ncGxldGVk 11274\nZm9ydHVuYXRlbHk= 11275\nIHdpbmRvd3M= 11276\nIHBsYW5l 11277\nIENvbm5lY3Rpb24= 11278\nLmxvY2Fs 11279\ndWFyZA== 11280\nfVw= 11281\nPT0i 11282\nYW5kb24= 11283\nIFJveQ== 11284\nd2VzdA== 11285\nMTU4 11286\naWdpbmFs 11287\nZW1pZXM= 11288\naXR6 11289\nJyk6Cg== 11290\nIFBldGVy 11291\nIHRvdWdo 11292\nIHJlZHVjZWQ= 11293\nIGNhbGN1bGF0ZQ== 11294\nIHJhcGlk 11295\nY3VzdG9tZXI= 11296\nIGVmZmljaWVudA== 11297\nIG1lZGl1bQ== 11298\nIGZlbGw= 11299\nLnJlZg== 11300\nIENhcw== 11301\nIGZlZWRiYWNr 11302\nU3BlZWQ= 11303\nKG91dHB1dA== 11304\nYWpl 11305\nIGNhdGVnb3JpZXM= 11306\nIGZlZQ== 11307\nfTs= 11308\nIGRlbGV0ZWQ= 11309\ncmVo 11310\nIHByb29m 11311\nRGVzYw== 11312\nQnVpbGQ= 11313\nIHNpZGVz 11314\nLkFycmF5TGlzdA== 11315\nLSU= 11316\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 11317\n2LE= 11318\nLm1hdGNo 11319\n0LvQuA== 11320\nIGZlZWxz 11321\nIGFjaGlldmU= 11322\nIGNsaW0= 11323\nX09O 11324\nIENE 11325\nIHRlYWNoZXI= 11326\nX2N1cnJlbnQ= 11327\nYm4= 11328\nX1BM 11329\naXN0aW5n 11330\nRW5hYmxl 11331\nR0VO 11332\nIHR2 11333\nIHNvY2s= 11334\nIHBsYXlz 11335\nIGRpc2NvdW50 11336\nIEtF 11337\nIERlYnVn 11338\nRm9yZQ== 11339\nIElyYXE= 11340\nIGFwcGVhcmFuY2U= 11341\nTW9u 11342\nIHN0eWxlZA== 11343\nIEh1bWFu 11344\naW90 11345\nIEhpc3Rvcnk= 11346\nIHNhYw== 11347\nIENvbGxlY3Rpb24= 11348\nIHJlY29tbWVuZGVk 11349\nLlNlbGVjdGVk 11350\nIG9yZ2FuaXphdGlvbnM= 11351\nIGRpc2NvdmVyZWQ= 11352\nY29ob2w= 11353\nYWRhcw== 11354\nIFRob21hcw== 11355\nTWF5 11356\nIGNvbnNlcnY= 11357\nIGRvbWlu 11358\nIEZvbGxvdw== 11359\nIFNlY3Rpb24= 11360\nIFRoYW5rcw== 11361\nVXNlcm5hbWU= 11362\nIHJlY2lwZQ== 11363\nIHdvbmRlcmZ1bA== 11364\nLnNsZWVw 11365\nX2lm 11366\nCQoJCg== 11367\nb3Jubw== 11368\nIHJ1 11369\nX3RhcmdldA== 11370\nLiIi 11371\n4KY= 11372\nRXZlbnRBcmdz 11373\nIGlucHV0cw== 11374\nIGZpZg== 11375\nIHZpc2lvbg== 11376\nY3k= 11377\nIFNlcmllcw== 11378\nKSgoKA== 11379\nIHRyYWRpbmc= 11380\nIG1hcmtlcg== 11381\nQmVnaW4= 11382\nIHR5cGljYWxseQ== 11383\nIGNhdXNlcw== 11384\nZHJvcGRvd24= 11385\nX0RFQlVH 11386\nMjYw 11387\nIGRldGVjdA== 11388\nY291bnRyeQ== 11389\nISIpOwo= 11390\nCVI= 11391\nYXBweQ== 11392\nIGNyZWY= 11393\nKCc8 11394\nIj0+ 11395\nIExF 11396\ncmVhZGVy 11397\nIGFkbWluaXN0cg== 11398\nw7U= 11399\ndWNrZXQ= 11400\nIGZhc2hpb24= 11401\nLmNoYXI= 11402\naXphcg== 11403\nIGRpc2FibGU= 11404\nIHN1Yw== 11405\nIExpdmU= 11406\naXNzdWU= 11407\nIG1ldGFkYXRh 11408\nZmxhZ3M= 11409\nIPCf 11410\nIGNvbW1pdHRlZA== 11411\nIHZh 11412\nIHJvdWdo 11413\nICcnJwo= 11414\nIGhpZ2hsaWdodA== 11415\nX3ZhcnM= 11416\nVk8= 11417\nIGVuY29kaW5n 11418\nLVo= 11419\nX3NpZ24= 11420\nJCgiIw== 11421\nIHJhaW4= 11422\ncmVhdGVzdA== 11423\nIEVORA== 11424\nU2VsZWN0aW9u 11425\nIGNhbmRpZGF0ZXM= 11426\nIHNhdg== 11427\nLkVtcHR5 11428\nIGRlY2lzaW9ucw== 11429\nIGNvbGxhYm9y 11430\ncmlkZ2U= 11431\nZmVlZA== 11432\ncmVzc2lvbg== 11433\nIHBlcnNvbnM= 11434\nVk0= 11435\nMDA4 11436\nZWdh 11437\nX0JJVA== 11438\nQWNjb3JkaW5n 11439\nYWNrZWQ= 11440\nIGRvbGxhcnM= 11441\nX2xvc3M= 11442\nIENvc3Q= 11443\nfSIK 11444\nTm90aWZpY2F0aW9u 11445\nIHByb3N0aXQ= 11446\nIGF1dGhvcml0eQ== 11447\nLnJlYw== 11448\nIHNwb2tlcw== 11449\nIFRvZGF5 11450\naXN0YW50 11451\nIEhlYWQ= 11452\n4oCdLg== 11453\nZXJ0YWlubWVudA== 11454\nY2Vhbg== 11455\nY3VsYXRl 11456\nIHZlbg== 11457\nSG93ZXZlcg== 11458\nX2Fycg== 11459\nIHRva2Vucw== 11460\nR3JhcGg= 11461\nIEp1ZA== 11462\nIFZpcmdpbg== 11463\nIFNlcmlhbA== 11464\ndW5uaW5n 11465\nTXV0YWJsZQ== 11466\nYWdlcnM= 11467\nLmNzdg== 11468\nIGRldmVsb3Bpbmc= 11469\nIGluc3RydWN0aW9ucw== 11470\nIHByb21pc2U= 11471\nIHJlcXVlc3RlZA== 11472\nX2VuY29kZQ== 11473\nLyI= 11474\nIEljb24= 11475\ndWlsdA== 11476\nLWRheQ== 11477\nIGludGVsbGlnZW5jZQ== 11478\nLklT 11479\nIE9ic2VydmFibGU= 11480\nIEhhcmQ= 11481\nQm9vbA== 11482\nMjEx 11483\naWRlbnRpYWw= 11484\nLkFuY2hvcg== 11485\nIHNlbGxpbmc= 11486\nQ0k= 11487\nQUdFUw== 11488\ndGxl 11489\nYnVy 11490\nVUZGRVI= 11491\nUlk= 11492\nIGJpZ2dlcg== 11493\nIHJhdA== 11494\nIGZhbW91cw== 11495\nIHR5cGVuYW1l 11496\nIGV4cGxhaW5lZA== 11497\nfX0K 11498\nIG51Y2xlYXI= 11499\nLU4= 11500\nIGNyaXNpcw== 11501\nIEVudGVy 11502\nIGFuc3dlcnM= 11503\nLyR7 11504\nL3Bs 11505\nIHNlcXU= 11506\nX25leHQ= 11507\nbWFzaw== 11508\nIHN0YW5kaW5n 11509\nIHBsZW50eQ== 11510\nIENyb3Nz 11511\nCXJldA== 11512\nZHJv 11513\nIENhc3Q= 11514\nMTY3 11515\nPXRydWU= 11516\nIENocmlz 11517\naWNpbw== 11518\nIE1pa2U= 11519\nRGVjaW1hbA== 11520\nYWRkQ29tcG9uZW50 11521\nTGVu 11522\nIGNvY2s= 11523\nICN7 11524\nVVJO 11525\nPHRy 11526\nIGF1dGhvcml0aWVz 11527\nUmVzb3VyY2Vz 11528\nLUg= 11529\nQm90dG9t 11530\nMDEy 11531\nX3F1 11532\ncHV0ZXI= 11533\nZXN0ZXJkYXk= 11534\nRGlzcGF0Y2g= 11535\nc2luY2U= 11536\nIGZhbWlsaWFy 11537\nLGk= 11538\nVkM= 11539\nIG1lbnQ= 11540\nLEM= 11541\nIGZyZWVkb20= 11542\nIHJvdXRlcw== 11543\nIEJ1eQ== 11544\nIGNvbW1hbmRz 11545\nIG1lc2g= 11546\nL0M= 11547\nIFNldHRpbmdz 11548\nLXN0eWxl 11549\nIHdpdG5lc3M= 11550\nIGNsZQ== 11551\nIHVuaW9u 11552\nZWZhdWx0 11553\nYXJldA== 11554\nIHRob3VnaHRz 11555\nIC0tLS0= 11556\nX3Byb2Nlc3M= 11557\nX3Vz 11558\naW5nbHk= 11559\nVUVT 11560\nVG91Y2g= 11561\nINC8 11562\nX29wZW4= 11563\nIFZlYw== 11564\nIHJld2FyZA== 11565\nLkNsaWNr 11566\nLzo= 11567\nIG5pZQ== 11568\nQ2hhbmdlcw== 11569\nTW9udGg= 11570\n77yf 11571\nIGV4ZWN1dGlvbg== 11572\nIGJlYWNo 11573\nKEludGVnZXI= 11574\nCWE= 11575\nLyc= 11576\nLkZvbnRTdHlsZQ== 11577\nIGFib3J0 11578\nIFNpbmdsZQ== 11579\nKGlzc2V0 11580\nIGRw 11581\nIH19PC8= 11582\nIE1h 11583\nMjE0 11584\nLlJvd3M= 11585\nIFBldA== 11586\nJSk= 11587\ncmFuZA== 11588\n6YA= 11589\nUnVsZQ== 11590\nIGhlbA== 11591\nMDIx 11592\nUklURQ== 11593\nIHF1aWV0 11594\nIHJhdGlv 11595\nIENPTkRJVElPTlM= 11596\nb3NvcGg= 11597\nIElM 11598\nIGFkdmVudA== 11599\nY2Fw 11600\nOzwv 11601\nIFVTQg== 11602\nRHJpdmVy 11603\nIG91cnM= 11604\nIEpvaG5zb24= 11605\nLks= 11606\nX2RlbGV0ZQ== 11607\nLnE= 11608\nCXN0cg== 11609\nL2NvbW1vbg== 11610\nCXN0cmluZw== 11611\nIFBERg== 11612\nYWN0cw== 11613\nLkFjdGlvbg== 11614\nIFF1ZXJ5 11615\nLnJlc3BvbnNl 11616\nIEdpcmw= 11617\nIHByb2Nlc3Nlcw== 11618\nPEludGVnZXI= 11619\naW1v 11620\nIGFkZHM= 11621\nIGVudGlyZWx5 11622\nIHdhc2g= 11623\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 11624\nIGFuaW1hdGVk 11625\nIHByb2ZpdA== 11626\nZW5jaW5n 11627\nL1M= 11628\nIFN5bQ== 11629\nIG1hbnVhbA== 11630\nRG93bmxvYWQ= 11631\nICghJA== 11632\nIG1vdGlvbg== 11633\nd2VicGFjaw== 11634\nLWJvdHRvbQ== 11635\nIGdyYXR1aXQ= 11636\nUEc= 11637\nKDos 11638\nIGVyYQ== 11639\nIGhv 11640\nIEppbQ== 11641\ncXVpcg== 11642\nIEJBU0lT 11643\nw6Fu 11644\nREVS 11645\nIGV4cGVuc2l2ZQ== 11646\nX2Nv 11647\nQm91bmRz 11648\nV2VsbA== 11649\nIERlbW9jcmF0aWM= 11650\nIOKGkg== 11651\nLlJlbQ== 11652\nX1NZ 11653\nbmFtZXM= 11654\nIFZp 11655\nIGlzaW5zdGFuY2U= 11656\nXCI+ 11657\nICo9 11658\nIFBT 11659\nIGRhbmdlcm91cw== 11660\nW3A= 11661\nT01F 11662\nT3RoZXI= 11663\nIFN0cmluZ0J1aWxkZXI= 11664\nUG9pbnRz 11665\naGVhZGluZw== 11666\nIGN1cnJlbmN5 11667\nIHBlcmNlbnRhZ2U= 11668\nX0FQSQ== 11669\nIGNsYXNzaWM= 11670\ndGhlYWQ= 11671\nIE1P 11672\nRkU= 11673\nSWR4 11674\nYXdhaXQ= 11675\nIMOo 11676\nIGFjY2lkZW50 11677\nIHZhcmlhbnQ= 11678\nIG15c3Q= 11679\nIExhbmQ= 11680\nIEJyZQ== 11681\nIGhhcm0= 11682\nIEFjYw== 11683\nIGNoYXJnZWQ= 11684\naW9uZXM= 11685\nVmlzaWJpbGl0eQ== 11686\nYXJyeQ== 11687\nIExhbmd1YWdl 11688\nIHdhbGtpbmc= 11689\nIi4KCg== 11690\naWZlcg== 11691\nIGxlYWRlcnNoaXA= 11692\nLkZyb20= 11693\neW5hbQ== 11694\nIHRpbWVzdGFtcA== 11695\naXB0 11696\nIEhhcw== 11697\nUkVGRVI= 11698\nIEl0cw== 11699\nIGxpc3RlbmVy 11700\nVVRF 11701\nMjEz 11702\nX2Rlc2NyaXB0aW9u 11703\nIGV4cGVyaWVuY2Vz 11704\nIGNyZWF0ZXM= 11705\nUlM= 11706\nY2FydA== 11707\nYmxhY2s= 11708\nIGNob2ljZXM= 11709\nd2Fy 11710\nNzUw 11711\nICcnJw== 11712\nIG9yZGVyZWQ= 11713\nIGV2ZW5pbmc= 11714\nIHBpbA== 11715\nIHR1bg== 11716\nIEJhZA== 11717\nKGFwcA== 11718\ncmFuZG9t 11719\nIGV4cGxpY2l0 11720\nIGFycml2ZWQ= 11721\nIGZseQ== 11722\nIGVjb25vbQ== 11723\nLW1haWw= 11724\nIGxpc3Rz 11725\nIGFyY2hpdGVjdA== 11726\nMjM0 11727\nIFBheQ== 11728\nIGRz 11729\nIFNvbA== 11730\nIHZlaGljbGVz 11731\nSHo= 11732\nLWNvbQ== 11733\nIGtpbmc= 11734\nX2VxdWFs 11735\nIEhlbHA= 11736\nIGFidXNl 11737\nNDgw 11738\nMTY5 11739\nLS07Cg== 11740\nIGV4dHI= 11741\nIGNoZW1pY2Fs 11742\n5L8= 11743\nIG9yaWVudA== 11744\nIGJyZWF0aA== 11745\nIFNwYWNl 11746\nKGVsZW1lbnQ= 11747\nd2FpdA== 11748\nREVE 11749\naWdtYQ== 11750\nIGVudHI= 11751\nIHNvYg== 11752\nLW5hbWU= 11753\nIGFmZmVjdGVk 11754\naWth 11755\nIGNvYWw= 11756\nX3dvcms= 11757\nIGh1bmRyZWRz 11758\nIHBvbGl0aWNz 11759\nc3ViamVjdA== 11760\nIGNvbnN1bWVy 11761\nQU5HRQ== 11762\nIHJlcGVhdGVk 11763\nU2VuZA== 11764\nICNb 11765\nIHByb3RvY29s 11766\nIGxlYWRz 11767\ndXNldW0= 11768\nRXZlcnk= 11769\nODA4 11770\nMTc0 11771\nSW1wb3J0 11772\nKGNvdW50 11773\nIGNoYWxsZW5nZXM= 11774\nIG5vdmVs 11775\nIGRlcGFydA== 11776\nYml0cw== 11777\nLkN1cnJlbnQ= 11778\nIGAkew== 11779\nb3Rpbmc= 11780\nKFw= 11781\nIGNyZWF0aXZl 11782\nIGJ1ZmY= 11783\nIGludHJvZHVjZWQ= 11784\ndXNpYw== 11785\nbW9kdWxlcw== 11786\nQXJl 11787\nLWRvYw== 11788\nbGFuZ3VhZ2U= 11789\nX2NhY2hl 11790\nIHRvZA== 11791\nPz48Lw== 11792\nb21ldGhpbmc= 11793\nIGh1bg== 11794\n5bo= 11795\nYXRlcnM= 11796\nSW50ZW50 11797\nIGltcGxlbWVudGVk 11798\nIENhc2U= 11799\nQ2hpbGRyZW4= 11800\nIG5vdGlmaWNhdGlvbg== 11801\nUmVuZGVyZXI= 11802\nV3JhcHBlcg== 11803\nT2JqZWN0cw== 11804\ndGw= 11805\nLkNvbnRhaW5z 11806\nUGx1Z2lu 11807\nLnJvdw== 11808\nIGZvcmc= 11809\nIHBlcm1pdA== 11810\nIHRhcmdldHM= 11811\nIElG 11812\nIHRpcA== 11813\nc2V4 11814\nIHN1cHBvcnRz 11815\nIGZvbGQ= 11816\ncGhvdG8= 11817\nfSwNCg== 11818\nIGdvb2dsZQ== 11819\nJCgnIw== 11820\nIHNoYXJpbmc= 11821\nIGdvb2Rz 11822\ndnM= 11823\nIERhbg== 11824\nUmF0ZQ== 11825\nIE1hcnRpbg== 11826\nIG1hbm5lcg== 11827\nbGll 11828\nLlRoZQ== 11829\nSW50ZXJuYWw= 11830\nIENPTlRS 11831\nTW9jaw== 11832\nUklHSFQ= 11833\nICd7 11834\nIGNvbnRyb2xz 11835\nTWF0 11836\nIG1hbmQ= 11837\nIGV4dGVuZGVk 11838\nT2s= 11839\nIGVtYmVk 11840\nIHBsYW5ldA== 11841\nIE5vbg== 11842\nLWNo 11843\nKSIs 11844\nZXBhcg== 11845\nIGJlbGlldmVk 11846\nIEVudmlyb25tZW50 11847\nIEZyaWVuZA== 11848\nLXJlcw== 11849\nIGhhbmRsaW5n 11850\nbmlj 11851\nLWxldmVs 11852\nc2NyaQ== 11853\nWG1s 11854\nQkU= 11855\ndW5nZW4= 11856\nIGFsdGVy 11857\nW2lkeA== 11858\nUG9w 11859\nY2Ft 11860\nICgoKA== 11861\nIHNoaXBwaW5n 11862\nIGJhdHRlcnk= 11863\naWRkbGV3YXJl 11864\nTUM= 11865\nIGltcGw= 11866\nb3RhdGlvbg== 11867\nIExhYg== 11868\nPGZvcm0= 11869\nCW5hbWU= 11870\nIEdhbWVz 11871\ncmF5 11872\nRXh0cmE= 11873\nVHdv 11874\nKHBsYXllcg== 11875\nIExlcw== 11876\nwrA= 11877\nIGNoYXJzZXQ= 11878\nIGpvdXJuZXk= 11879\nZXRpbmc= 11880\n5pg= 11881\n4pQ= 11882\n55So 11883\nIGRpbg== 11884\nIHBlcm1hbg== 11885\nIHNvbHZl 11886\nIGxhdW5jaGVk 11887\nIG5pbmU= 11888\nIHNlbmRpbmc= 11889\nIHRlbGxpbmc= 11890\nLnBhc3N3b3Jk 11891\nIE1hdHJpeA== 11892\nZXJpYw== 11893\nIGdyYWI= 11894\nLnU= 11895\nIExpYnJhcnk= 11896\nIGRlYnQ= 11897\nSU5L 11898\nLmZpbmRWaWV3QnlJZA== 11899\nIGZyZXF1ZW5jeQ== 11900\nLmFk 11901\nX1RFU1Q= 11902\nIG5lZ290 11903\nIEFmcmljYW4= 11904\nc2VuZGVy 11905\nxaE= 11906\nR2xvYmFs 11907\nMTcz 11908\nIGV4cGVydHM= 11909\nKyspDQo= 11910\nIGRlcGVuZGluZw== 11911\nZ3JheQ== 11912\nIGp1ZGdl 11913\nIHNlbnRlbmNl 11914\nbG9zdXJl 11915\nQWM= 11916\nIHRyYWNl 11917\nRWRnZQ== 11918\nIGZyaWVuZGx5 11919\nIGNvbmNlcm5lZA== 11920\nYmxvZw== 11921\nIGNsYWltZWQ= 11922\nfSc= 11923\naW50ZWdlcg== 11924\nX3RyZWU= 11925\nCWNvbnRpbnVl 11926\neGk= 11927\nIGFjY2VwdGVk 11928\nX29uZQ== 11929\nIEVkdWNhdGlvbg== 11930\ndWJsaXNoZWQ= 11931\nZ29u 11932\nYXBwb2ludA== 11933\nb3V0cw== 11934\nIG1pbmluZw== 11935\nIHNvbmdz 11936\nIGhlcnNlbGY= 11937\nIGdyYW50ZWQ= 11938\nIHBhc3Npb24= 11939\nIExha2U= 11940\nIGxvYW4= 11941\ndWVudA== 11942\nY2hhbnQ= 11943\nIGRldGFpbGVk 11944\nZXhjZXB0 11945\nX2NtZA== 11946\nIEhF 11947\nUmVsYXRlZA== 11948\nenQ= 11949\nJ30sCg== 11950\nIHNwZWNpZmljYWxseQ== 11951\nU3RhdGlj 11952\nIGNhcnJpZWQ= 11953\nQU5T 11954\nXCI6 11955\nQ3JlYXRlZA== 11956\nIGN1bA== 11957\nXS0= 11958\nX2FwaQ== 11959\nRlA= 11960\nIHNpdHRpbmc= 11961\nICIiKQ== 11962\nCWdvdG8= 11963\nIEVxdQ== 11964\nIGFzc2F1bHQ= 11965\na2lucw== 11966\nYW5jZXI= 11967\nb2dlbg== 11968\nIHZvdGVycw== 11969\nIFByb3Q= 11970\nRGVzY3JpcHRvcg== 11971\n44O8 11972\nLkFzc2VydA== 11973\nYnNpdGVz 11974\nb3N0ZXI= 11975\nLW1lbnU= 11976\nIGFybXM= 11977\nLkNsaWVudA== 11978\nLmJhY2tncm91bmQ= 11979\nYXZpdHk= 11980\nIHZ1bA== 11981\nX01BU0s= 11982\nIGhvdXNpbmc= 11983\nIGJlYXI= 11984\nX2l0ZXI= 11985\ncGlyZWQ= 11986\nIG1hcmtldHM= 11987\nIFN0dWRlbnQ= 11988\nIHRpY2tldA== 11989\nIG1pbGxpb25z 11990\nZmxhdGVy 11991\nKT0= 11992\nIHJlY292ZXI= 11993\nIEZvcmNl 11994\nIEJvdGg= 11995\nIHZpY3RpbQ== 11996\nIERpc2M= 11997\ncmVwb3J0 11998\nIGZvdXJ0aA== 11999\nIEFzc2VtYmx5 12000\nL3VzZXI= 12001\nTnVsbE9y 12002\ndGV4dGFyZWE= 12003\nIGF0aA== 12004\nIChb 12005\nIGNoYW5uZWxz 12006\nIEp1c3RpY2U= 12007\nY2hvaWNl 12008\nTE9CQUw= 12009\nZXhlYw== 12010\nZW1hbGU= 12011\nIGVsZW0= 12012\nX2xl 12013\nIHJlc3BvbnNpYmlsaXR5 12014\nIFR3 12015\nSUNBVElPTg== 12016\nIGVsc2VpZg== 12017\nIGZv 12018\nYXN0cw== 12019\nIHRyZWF0ZWQ= 12020\nc2Vu 12021\nIFZpY3Q= 12022\nc3VtZXI= 12023\nX0JBU0U= 12024\nIGFzdA== 12025\nPnt7 12026\nIFJlc291cmNl 12027\nIFN0YW5kYXJk 12028\nIFByZW0= 12029\ndXBkYXRlZA== 12030\naXZhbGVudA== 12031\nIGFzc2V0cw== 12032\nX3RlbXA= 12033\nIGludGVyZXN0cw== 12034\nIGhhcmR3YXJl 12035\nIFJvbQ== 12036\nIFNoYXJl 12037\nICcnCg== 12038\nICos 12039\nIFRha2U= 12040\nIEltYWdlcw== 12041\nX0NIRUNL 12042\nKHR5cGVvZg== 12043\nIEp1bg== 12044\nXDxe 12045\nIGxpcXU= 12046\nIHdvcnN0 12047\neW1ib2xz 12048\nCQkJICAg 12049\nIGRyaXZlcnM= 12050\nIERvY3VtZW50 12051\nZW5v 12052\nIFRlY2hub2xvZ3k= 12053\nIGFwcHJvdmVk 12054\ndW1wcw== 12055\nIHNub3c= 12056\nZm9ybWFuY2U= 12057\nX0FTU0VSVA== 12058\ndWl0cw== 12059\nMjA3 12060\n2YY= 12061\nIGRpZmZlcmVuY2Vz 12062\nLlZpc2libGU= 12063\nCQkJDQo= 12064\nIFBz 12065\nX2ZldGNo 12066\nIHRvZG8= 12067\nLicsCg== 12068\nIHNlbA== 12069\ndXJlcnM= 12070\naW52YWxpZA== 12071\nIHR3ZWV0 12072\nVkVM 12073\nIHJlc2VhcmNoZXJz 12074\nIHNwcmludGY= 12075\nIFJP 12076\nIHBlbA== 12077\nLlRyYW5z 12078\nIGlsbGVnYWw= 12079\nZGlhbG9n 12080\nc21hcnR5 12081\nbGc= 12082\nX01JTg== 12083\nIGhlcm8= 12084\nZmluYWw= 12085\nIHBw 12086\nLkxl 12087\nIGNp 12088\nCVJU 12089\nIHN1Z2dlc3RlZA== 12090\ncGRm 12091\nYWNoaW5n 12092\nIFJv 12093\nIFByb3BlcnRpZXM= 12094\nIFNp 12095\nIGJ1eWluZw== 12096\nIG11 12097\nIGxhbmRz 12098\naWZpZXJz 12099\nIEZJTEU= 12100\nUk9VUA== 12101\nIGhvbGRlcg== 12102\nIFNvbg== 12103\nIHN5bXB0 12104\nLnJvdXRl 12105\nKT8= 12106\nIGFyZ2M= 12107\nIGZvcnQ= 12108\nIGNhc2lubw== 12109\nX2NhdGVnb3J5 12110\nIGZvcnVt 12111\nMjE1 12112\ncHJlZml4 12113\nYXB0dXJl 12114\nVHViZQ== 12115\nZW1z 12116\naW1pemU= 12117\nIG51ZQ== 12118\nYXVz 12119\nY291cnNl 12120\nQVRPUg== 12121\nKCkpLA== 12122\nQWR2ZXJ0aXM= 12123\nSU5HUw== 12124\nIGFja25vdw== 12125\nIEtvcmVh 12126\ncGxpbmc= 12127\nIHdvcmtlcg== 12128\nUExJRUQ= 12129\naGFs 12130\nIFJpY2hhcmQ= 12131\nRWxlbWVudHM= 12132\nCQkJIA== 12133\nc3Rhcg== 12134\nIHJlbGF0aW9uc2hpcHM= 12135\nIGNoZWFw 12136\nQUNI 12137\nIFhNTA== 12138\nLCY= 12139\nIExvdWlz 12140\nIHJpZGU= 12141\nX0ZBSUw= 12142\nIGNodW5r 12143\nW3M= 12144\nX09VVA== 12145\nIGNob3Nlbg== 12146\nX1s= 12147\nLyg= 12148\nIEplZmY= 12149\nX3Ns 12150\ncHJpdg== 12151\nIENhbmFkaWFu 12152\nIHVuYWJsZQ== 12153\nX0ZMQUc= 12154\nIG5vcw== 12155\naGlnaA== 12156\nIGxpZnQ= 12157\nZnVu 12158\nKCl7 12159\nZWxseQ== 12160\neWNsZXJWaWV3 12161\nX2Fz 12162\nX0xJU1Q= 12163\nIHJhZGk= 12164\nLmdldFZhbHVl 12165\nMzA0 12166\nIEFuZ2VsZXM= 12167\nIFNwYW4= 12168\nX2luc3RhbmNl 12169\naXRvcnM= 12170\nMjA4 12171\nIG1pZ3JhdGlvbg== 12172\nQUs= 12173\nT2g= 12174\nwq4= 12175\nLnNlbGVjdGVk 12176\nIEdU 12177\nIGFkdmFuY2U= 12178\nIFN0eWxl 12179\nLkRhdGFHcmlkVmlldw== 12180\nZWN0aW9u 12181\n0Y4= 12182\ncGlv 12183\ncm9n 12184\nIHNob3BwaW5n 12185\nIFJlY3Q= 12186\nSWxsdW1pbmF0ZQ== 12187\nT1U= 12188\nCWFycmF5 12189\nIHN1YnN0YW50aWFs 12190\nIHByZWdu 12191\nIHByb21vdGU= 12192\nSUVX 12193\nLkxheW91dA== 12194\nIHNpZ25z 12195\nLy4= 12196\nIGxldHRlcnM= 12197\nQm9hcmQ= 12198\nY3RybA== 12199\nIlw= 12200\nIEpvbmVz 12201\nIHZlcnRleA== 12202\nIGph 12203\nIGFmZmlsaQ== 12204\nIHdlYWx0aA== 12205\nCWRlZmF1bHQ= 12206\nIHNpZ25pZmljYW50bHk= 12207\nIGVj 12208\nIHhz 12209\nYWN0dWFs 12210\nLnBlcg== 12211\nX3N0ZXA= 12212\nYW52YXM= 12213\nbWFj 12214\nIHRyYW5zbA== 12215\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 12216\nSXRlcmF0b3I= 12217\nIG9jaA== 12218\nYWdub3N0aWM= 12219\nIER1cmluZw== 12220\nIERFRkFVTFQ= 12221\nIHRpbGw= 12222\nIHNpZ25hdHVyZQ== 12223\nIGJpcmQ= 12224\nIE9s 12225\nMzEw 12226\nIEly 12227\nSFM= 12228\nYXZhdGFy 12229\nRVNTQUdF 12230\nIGVsZXY= 12231\nIG10 12232\nIE5hdg== 12233\nIHJlbGF4 12234\nIHBsYXRl 12235\nSVRFTQ== 12236\nKGRhdGU= 12237\nLm5vdA== 12238\nIGdyYWRl 12239\nIH0pLAo= 12240\nPyIKCg== 12241\naWVuY2Vz 12242\nSGlnaA== 12243\nIERJUw== 12244\nMjMx 12245\nZGlzYWJsZWQ= 12246\nUVVJ 12247\nIG5vaXNl 12248\nYXV4 12249\nIFVQ 12250\nODg4 12251\nb3Nh 12252\nIHZvYw== 12253\nICkp 12254\nb2NvbQ== 12255\nX09GRg== 12256\nIERi 12257\nTG9jaw== 12258\nLmVjbGlwc2U= 12259\nLGQ= 12260\nIERyYXc= 12261\nICIo 12262\nIHZpc2l0ZWQ= 12263\nIOKI 12264\nIHN1Y2NlZWQ= 12265\nIGltcG9zc2libGU= 12266\nYWlyZQ== 12267\nIFR1cm4= 12268\nIGRpc2g= 12269\nRkc= 12270\nIHNlbnNvcg== 12271\nQU5O 12272\nYWJh 12273\nIHN1cmc= 12274\nXSk7DQo= 12275\nIGZw 12276\nX2Fu 12277\nLUo= 12278\nLUc= 12279\nIEpvYg== 12280\nQ29udmVydA== 12281\nIEtFWQ== 12282\nIGF1dGhvcnM= 12283\nX3NlcnZlcg== 12284\nXHI= 12285\nIC0qLQ== 12286\nZmxleA== 12287\nIHNvYw== 12288\nUmV0 12289\nIHNhbHQ= 12290\nIOKApgoK 12291\nIENsZWFy 12292\nKHBhZ2U= 12293\nLWRhbmdlcg== 12294\nIHJvb21z 12295\nY29udg== 12296\nI3s= 12297\nLm9w 12298\nIEFyZWE= 12299\nX1ND 12300\naGVu 12301\nIGJlZ2lucw== 12302\nLXk= 12303\nIGV4Y2l0ZWQ= 12304\nIGlnbm9yZWQ= 12305\nIGJvbnVz 12306\nc3R1ZGVudA== 12307\nIE1lbWJlcg== 12308\nIHJlbGF0aXZlbHk= 12309\nIExvdw== 12310\nIFByb2R1 12311\nYXRld2F5 12312\ncG9zdXJl 12313\nIHRoaWNr 12314\nYW5pZWw= 12315\nKHZpZXc= 12316\nIENydXNo 12317\nRXh0ZW5zaW9u 12318\nSWw= 12319\nZWVk 12320\nTE9D 12321\nLmlt 12322\nLkl0ZW1z 12323\nIGNvbmZsaWN0 12324\nLnByZXZlbnQ= 12325\nMjUy 12326\nIG9uQ3JlYXRl 12327\ndXY= 12328\naXNlcg== 12329\nIHdhdmU= 12330\nTWFy 12331\nIENvbW11bml0eQ== 12332\naWNoZQ== 12333\nIE5vdGhpbmc= 12334\nW20= 12335\nIExlZQ== 12336\ncmllbmRz 12337\nMjMy 12338\nw6hyZQ== 12339\nISEh 12340\nYW56 12341\nLnJlc3VsdA== 12342\nIFNL 12343\nX1BBUkFN 12344\nIGRlbW9jcg== 12345\nQmFja0NvbG9y 12346\nLmV4aXN0cw== 12347\nIkl0 12348\nKG9wdGlvbnM= 12349\ncmF6eQ== 12350\nYXNlcg== 12351\nXERhdGFiYXNl 12352\nYWxlbmRhcg== 12353\nX2Fzcw== 12354\nO30K 12355\ndmVydGV4 12356\naW5lY3JhZnQ= 12357\nV2FybmluZw== 12358\nYXJnbw== 12359\nIGFjdG9y 12360\nIEluc3RlYWQ= 12361\nIFVzaW5n 12362\nU2VsZg== 12363\nQGludGVyZmFjZQ== 12364\nIHNwZWFraW5n 12365\nIFBhcmlz 12366\nIExJQ0VOU0U= 12367\nLm5vZGU= 12368\nIEZvb2Q= 12369\nRUlG 12370\nIEJp 12371\nLlN0YXJ0 12372\nIElC 12373\nIHVuaXZlcnNpdHk= 12374\nMjU0 12375\nIEhlYWRlcg== 12376\nLnByb2R1Y3Q= 12377\nNDA5 12378\nQ29weQ== 12379\nZXRj 12380\ncmljYWw= 12381\nID4+Pg== 12382\nYm9va3M= 12383\nIGFsZ29yaXRobQ== 12384\nICdfXw== 12385\nKGphdmF4 12386\nIG51bWVyb3Vz 12387\nU2hhcmU= 12388\nSGF2ZQ== 12389\nIHJlY3J1 12390\nIHByb3Zl 12391\nLnN1YnN0cmluZw== 12392\naGVhbHRo 12393\n0LXQuw== 12394\nIGRlY2ltYWw= 12395\nIGNvbW1pc3Npb24= 12396\nc2NyaXB0aW9u 12397\neEM= 12398\nIHN1bW1hcnk= 12399\nYXR0ZWQ= 12400\nIGNsb3Nlcg== 12401\nZmluaXNoZWQ= 12402\nKCkpewo= 12403\nIFdvb2Q= 12404\nMzAx 12405\nX2ZpZWxkcw== 12406\na3U= 12407\nX2l0ZW1z 12408\nRmxhZw== 12409\nIGNvbmZpZGVuY2U= 12410\nIEZlZGVyYWw= 12411\nZHV4 12412\nIGNvbXBhdA== 12413\nIHZlcnRpY2Fs 12414\n0Lk= 12415\nw6hz 12416\nOyI+Cg== 12417\nX21hbmFnZXI= 12418\nKCkpKQo= 12419\nSURF 12420\nOiIs 12421\nMjM1 12422\nX18K 12423\nIFdheQ== 12424\nMjIx 12425\n0Yg= 12426\nVGVtcA== 12427\nIFNUUg== 12428\ncml0dGVu 12429\nU3luYw== 12430\nIEFW 12431\nIENFTw== 12432\nIEd1aWQ= 12433\nIGVudmlyb25tZW50YWw= 12434\nIGNvcnJlc3BvbmRpbmc= 12435\nCWNvbnNvbGU= 12436\nIGp1c3RpY2U= 12437\nIEpT 12438\nIGxpdmVk 12439\nZ2Fy 12440\nIEdyYXBo 12441\nIFN0YXQ= 12442\nIGlQaG9uZQ== 12443\nLmFs 12444\nIEhE 12445\nIG9jY3Vy 12446\nIHRocmVzaG9sZA== 12447\nNTA5 12448\nIG9uY2xpY2s= 12449\nUkVH 12450\nLkdyYXBoaWNzVW5pdA== 12451\nTWV0YQ== 12452\nxb4= 12453\nIGN1bQ== 12454\nLmdudQ== 12455\nw6s= 12456\nIG9idGFpbmVk 12457\nIGNvbXBsYWludA== 12458\nIGVhdGluZw== 12459\nIHRhcg== 12460\nX3Rhc2s= 12461\nIG9wdHM= 12462\nMjE2 12463\nKHRv 12464\nUGFzcw== 12465\nIHBsYXN0aWM= 12466\ndGlsaXR5 12467\nIFdpbg== 12468\nLnByZXZlbnREZWZhdWx0 12469\ncGlsZQ== 12470\nIEdhcg== 12471\nIHF1YW50aXR5 12472\nX2xhc3Q= 12473\nIGdyZWF0ZXN0 12474\nRGFv 12475\nX0RJUw== 12476\nIFVzZWQ= 12477\nIEhQ 12478\ncml0aW5n 12479\nU0lPTg== 12480\nYmx1ZQ== 12481\nZG9tYWlu 12482\nIHNjb3Jlcw== 12483\nTm9ybWFs 12484\nX2FkbWlu 12485\nIEFTU0VSVA== 12486\nVGhlbg== 12487\nKioq 12488\nZGlzdA== 12489\nbG9u 12490\nIGhhdGU= 12491\nc2hhbA== 12492\nSW1hZ2VWaWV3 12493\nZGF0YWJhc2U= 12494\nIHBhbmQ= 12495\nIGxvZ2lj 12496\nPWZhbHNl 12497\nYmc= 12498\nIENvbmZpZ3VyYXRpb24= 12499\nIG51cg== 12500\nT0c= 12501\nIG1hcnJpZWQ= 12502\nOis= 12503\nIGRyb3BwZWQ= 12504\nMDQw 12505\nIHJlZ2lzdHJhdGlvbg== 12506\n0L7QvA== 12507\ndWx0aXBsZQ== 12508\naXplcnM= 12509\nc2hhcGU= 12510\nLmNvcHk= 12511\nIHdlYXJpbmc= 12512\nIENhdGg= 12513\nIGRlZGljYXRlZA== 12514\nIC4uLgo= 12515\nIGFkdm9j 12516\nIEZhbWlseQ== 12517\nIHN0YXRlbWVudHM= 12518\nZW1hdGlj 12519\nYW1waW9uc2hpcA== 12520\nIG1vdGl2 12521\nIEhhdmU= 12522\nIGJsb3c= 12523\nSm9i 12524\nY2VydA== 12525\nX3ZlY3Rvcg== 12526\naW5zdGFsbA== 12527\nIENPUFk= 12528\nZW1iZWQ= 12529\nRElS 12530\nIFNwcmluZw== 12531\nIGV4aGli 12532\nMjIz 12533\nY2Ru 12534\nIENvbW1lbnQ= 12535\nIE9wdGlvbmFs 12536\nLnBsYXllcg== 12537\nIERhcms= 12538\nKHBvcw== 12539\nIFNob3VsZA== 12540\nIGNlbnRyZQ== 12541\nIEd1YXJk 12542\nw7N3 12543\nIHRyb3VibGU= 12544\nRU5FUg== 12545\nKHVuc2lnbmVk 12546\nX3NlcnZpY2U= 12547\nIG5z 12548\ndWxpbmc= 12549\nIE1leGljbw== 12550\nIE5Z 12551\nbXlzcWw= 12552\nIGxpYw== 12553\n5Zw= 12554\nTXI= 12555\nLWZs 12556\nIEN1c3RvbWVy 12557\naWRp 12558\nID8+Cgo= 12559\ncmlibGU= 12560\nINC/0YA= 12561\nIHNpemVz 12562\nX1NUUklORw== 12563\ndmFsaWRhdGlvbg== 12564\nIEpvbg== 12565\nKEh0dHA= 12566\nYWRkQ2xhc3M= 12567\nTm9kZXM= 12568\nIGZyYWdtZW50 12569\nIHNwb2tl 12570\nIHdhc3Rl 12571\nSm9pbg== 12572\nIGlsbHVzdHI= 12573\nZWxp 12574\nY2llbnQ= 12575\nIGFpZA== 12576\nIHByb3NlYw== 12577\nJyl7Cg== 12578\nIHBhc3Npbmc= 12579\nIGZhY2Vz 12580\nU2hhcGU= 12581\nX1o= 12582\naXRp 12583\nIGFsbGU= 12584\nIHJvYm90 12585\nICAgICAgIAo= 12586\nIFNwZQ== 12587\nIHJlY2VpdmluZw== 12588\nIERldGFpbHM= 12589\nICIp 12590\nbWc= 12591\nX1JFRg== 12592\nIGNvbXBhcmlzb24= 12593\nKiw= 12594\nIEZvdW5k 12595\nX3Nlc3Npb24= 12596\nKFU= 12597\nL0Y= 12598\nIHh4eA== 12599\nTmV0d29yaw== 12600\nZGVycw== 12601\nIGNhcHR1cmU= 12602\nIGNvcnJl 12603\nIEx0ZA== 12604\nIEFkdg== 12605\nW0A= 12606\nIGNsaXA= 12607\nTWlsbA== 12608\nIFByb2ZpbGU= 12609\nIGVuZGlm 12610\nIG9ibGln 12611\nZGVzY3JpYmU= 12612\nLmVsZW1lbnQ= 12613\ncml0ZXJpb24= 12614\nTEQ= 12615\nZXJlZA== 12616\nIGZhdm91cg== 12617\nc2NvcmU= 12618\nIEZpbHRlcg== 12619\nYXR0cmlidXRlcw== 12620\nIGNoZWNrcw== 12621\nSW5mbGF0ZXI= 12622\nIFBsdXM= 12623\nIHNjaWVudGlmaWM= 12624\nIHByaXZhY3k= 12625\nSGVhZA== 12626\nIGZlYXQ= 12627\nIGRlZ3JlZXM= 12628\nIFBhbGU= 12629\nOyI+ 12630\nIGZpbG1z 12631\nIEF1ZGlv 12632\nIFRhZw== 12633\nIEVuZXJneQ== 12634\naXRhcg== 12635\ncGFyYXRvcg== 12636\nIGZlbGxvdw== 12637\nIGV2dA== 12638\nIFRyaQ== 12639\nIERBTQ== 12640\nY2xvdWQ= 12641\nIFBhc3N3b3Jk 12642\nIERlbW9jcmF0cw== 12643\nIEFjYWQ= 12644\nJGxhbmc= 12645\nIHJlYg== 12646\nKCkpCgo= 12647\n0L3Riw== 12648\nIEJ1cg== 12649\ncmVhZGNy 12650\nIGhleA== 12651\nMjA5 12652\nQ29uc29sZQ== 12653\nY3Rs 12654\nb3VzZWw= 12655\nIFdpbGxpYW0= 12656\nIGF6 12657\nX1BPUlQ= 12658\nIHByYWN0aWNlcw== 12659\nIGFueXdoZXJl 12660\nIFBvc2l0aW9u 12661\nIC0+Cg== 12662\naWFtcw== 12663\nLnVzZXJuYW1l 12664\ncGxhY2Vob2xkZXI= 12665\nIG9kZXI= 12666\nIFNlY3JldGFyeQ== 12667\nIGlU 12668\nbW9uZA== 12669\nZXZlbnRz 12670\nP+KAnQ== 12671\nLlN1Yg== 12672\nIGF0dGFjaGVk 12673\nIG7Do28= 12674\nIGVzdGF0ZQ== 12675\nMzY1 12676\nLmFjdGlvbg== 12677\nIGZpZ3VyZXM= 12678\nIH0pOw0K 12679\nIHN1YnNjcmk= 12680\nLnRhZw== 12681\nbmFt 12682\nLnBsb3Q= 12683\nbm9vbg== 12684\nbGlhbWVudA== 12685\nQ2hhcmFjdGVy 12686\nLnRhYg== 12687\nIHdpbnRlcg== 12688\nIFZhcmlhYmxl 12689\nIHRyZWVz 12690\nIHByb3Vk 12691\nKFY= 12692\nX2xvYWQ= 12693\nIGhpZXI= 12694\nIEVjb24= 12695\nIGZk 12696\nIHZpY3RpbXM= 12697\nUmVzdA== 12698\naWFuYQ== 12699\nIGZha2U= 12700\nLlByaW50bG4= 12701\nIHN0cmxlbg== 12702\nIHNhZA== 12703\nIGJsZQ== 12704\nUHJvdA== 12705\nIGJ1dHRvbnM= 12706\nIHRlbGV2aXNpb24= 12707\nIGxvZ28= 12708\nZXh0ZW5zaW9u 12709\nCWo= 12710\nc3RlaW4= 12711\nYWNpb25lcw== 12712\nICIiIgoK 12713\nIHNpbXA= 12714\nIHJlY29yZGVk 12715\nIGJyaW5ncw== 12716\nIHByaW5jaXBhbA== 12717\nIGZlZXM= 12718\nKHNvdXJjZQ== 12719\na2Rpcg== 12720\nIHV0aWxz 12721\nIGNvcnJlY3RseQ== 12722\nZmls 12723\nIHdlbA== 12724\nUGFpcg== 12725\nLWJ1dHRvbg== 12726\nc2NhbGU= 12727\ndmVyaWZ5 12728\nW2M= 12729\nIC0tLQ== 12730\nIGVzY2FwZQ== 12731\naWtlcw== 12732\nTG93ZXJDYXNl 12733\naWNpYW4= 12734\nIGNoYXB0ZXI= 12735\nIFRZUEU= 12736\nIHNoYWRvdw== 12737\nIGF3ZXNvbWU= 12738\nV0U= 12739\nZWxpZg== 12740\nIGxhbWJkYQ== 12741\nIGRpc3RpbmN0 12742\nIGJhcmU= 12743\nLW9mZg== 12744\nIGNvbG91cg== 12745\nLmFwcGVuZENoaWxk 12746\nb2xlYw== 12747\nYWdh 12748\nLmZpbGw= 12749\nCXN1cGVy 12750\nIGFkag== 12751\nKHBvc2l0aW9u 12752\nLmdldEl0ZW0= 12753\nMjQy 12754\nU2hvcnQ= 12755\nIHRvdGFsbHk= 12756\nVkQ= 12757\nIFRyZQ== 12758\nX2Vw 12759\ndmVtZW50cw== 12760\nIFNvbHV0aW9u 12761\nIGZ1bmRhbWVudA== 12762\nRm9sbG93 12763\nIGZhY2lsaXR5 12764\nIGhhcHBlbmluZw== 12765\nT0Y= 12766\nLnRleHRCb3g= 12767\nU3Bhbg== 12768\nIMKr 12769\naWRlbg== 12770\nIGV4Y2VlZA== 12771\nKHBhcmVudA== 12772\nIGNw 12773\n57s= 12774\nIGhhc24= 12775\nIHByaQ== 12776\nIGNvbnNlcXU= 12777\nbmVu 12778\nIElOVE8= 12779\nSWdub3Jl 12780\nIEZ1dHVyZQ== 12781\nIGNhcmJvbg== 12782\nIFN0ZWVs 12783\nZm10 12784\nb2tpZQ== 12785\nIHNwbA== 12786\nKHRpdGxl 12787\nLWluZm8= 12788\nIGRlYWxz 12789\nIGZpeHR1cmU= 12790\nZWE= 12791\nRGl2 12792\nIHRlc3RlZA== 12793\nX3JldHVybg== 12794\nKQoKCgo= 12795\ndXBwb3J0ZWQ= 12796\nIENvb2s= 12797\nIHBheWluZw== 12798\nIElsbA== 12799\nIGFycmVzdGVk 12800\nIFByaW1l 12801\nX2NhbGxiYWNr 12802\nPiwK 12803\nZHJpdmVy 12804\nT25jZQ== 12805\nYWJi 12806\nX2J5dGVz 12807\nIFNldHM= 12808\nKE9iamVjdA== 12809\nIGNj 12810\nIHNoZWxs 12811\nYWxv 12812\nKTsvLw== 12813\nKGxvZw== 12814\nMjY0 12815\nY3RvcnM= 12816\nKTwv 12817\nIG5laWdoYm9yaG9vZA== 12818\nNDIw 12819\nYWlsYWJpbGl0eQ== 12820\ndm9s 12821\nIHlvdXRo 12822\nIHRlY2huaXF1ZXM= 12823\nIFNjaGVtYQ== 12824\ndWg= 12825\nbWVudGU= 12826\nIHJlcG9zaXRvcnk= 12827\naW1t 12828\nIGNvb2tpZQ== 12829\nSlM= 12830\nb3ZpZXM= 12831\nOns= 12832\nQ29tcGxldGU= 12833\nU2luY2U= 12834\nIGxhdWdo 12835\nX0JP 12836\nZW5hYmxl 12837\nIERvZXM= 12838\nIFdhbGs= 12839\nd2hhdA== 12840\na2Vz 12841\nIG11bHRpcA== 12842\naW1lbnRz 12843\nZXVy 12844\nIHZpY3Rvcnk= 12845\nR2VuZXJhdG9y 12846\nIE1vcw== 12847\ncm92ZXJz 12848\nIGNvbXB1dGU= 12849\nIHByb3ZpZGVycw== 12850\nIE1lZGlj 12851\nTFA= 12852\nX0NPTkZJRw== 12853\nIHZldGVy 12854\nc3RlcnM= 12855\nX3dpbmRvdw== 12856\ndW1lcmlj 12857\nCQkJCQkK 12858\nLlJlc3BvbnNl 12859\nIHJlcGxhY2Vk 12860\nLnJvb3Q= 12861\nLWZyZWU= 12862\nLWNvbnRhaW5lcg== 12863\nIG1hdGNoaW5n 12864\nIEVkaXRvcg== 12865\nPSR7 12866\nIFNhZg== 12867\nIHNpbmQ= 12868\nKGJ1ZmZlcg== 12869\n5Yc= 12870\nLmVkdQ== 12871\nKV07Cg== 12872\nIE5GTA== 12873\nYXlh 12874\nIGRvZ3M= 12875\nIGRlc2lyZQ== 12876\nIE1pZGRsZQ== 12877\nQ2FydA== 12878\nMzA2 12879\nVGhlbWU= 12880\nIG1vYg== 12881\nIGRpc3BsYXllZA== 12882\naWdpdA== 12883\nIGFkdWx0cw== 12884\nIiIi 12885\nIGRlbGl2ZXJlZA== 12886\ndmlzaWJsZQ== 12887\nIjp7Cg== 12888\nPDw8 12889\nIEdP 12890\nc2Nyb2xs 12891\neEU= 12892\nIGFzc2lnbmVk 12893\nIEJvb2w= 12894\nIHdw 12895\nIGNvbWJhdA== 12896\nIEhhdw== 12897\nLi0= 12898\nIHN1cHBvcnRpbmc= 12899\nLkNvbnRlbnQ= 12900\nMzQ1 12901\naXJjcmFmdA== 12902\nIHNwaW4= 12903\nIENS 12904\nLm15 12905\n4KU= 12906\ndHBs 12907\nIHNwYWNlcw== 12908\nPyw= 12909\nMzg0 12910\nIFN5cmlh 12911\nIHBhdHRlcm5z 12912\nLWJveA== 12913\nIGZyYW1ld29yaw== 12914\nLyU= 12915\nKGxvbmc= 12916\nIHRlYWNoaW5n 12917\nQVJOSU5H 12918\nX2tleXM= 12919\nIHRhYmxlcw== 12920\nVU5D 12921\naW5hdGlvbnM= 12922\nLXdlaWdodA== 12923\ncmFkaW8= 12924\nIFBhYw== 12925\nLnNlcnZlcg== 12926\nLkNoYXJGaWVsZA== 12927\ncmluZw== 12928\nIHF1b3Rl 12929\nYW5uYQ== 12930\nIHdlcmRlbg== 12931\nIGNyZWFt 12932\nIG1hY2hpbmVz 12933\nLWs= 12934\nMzc1 12935\nIHN0aW0= 12936\nIFN0b2Nr 12937\ncmljaw== 12938\nIGltcG9ydGFuY2U= 12939\ncng= 12940\nw7Vlcw== 12941\n2Yg= 12942\nIHN0cm9rZQ== 12943\nYWdyYQ== 12944\nIHRhc3Rl 12945\nIERFQlVH 12946\nVGhhbmtz 12947\nIFJlcXVpcmVk 12948\nb3Zh 12949\nTWVkaWE= 12950\nIHNpxJk= 12951\nKGJhc2U= 12952\ncG9zdHM= 12953\nIGZpbGVOYW1l 12954\nQ2hlY2tlZA== 12955\nIGludGVycnVwdA== 12956\nICgpCg== 12957\ncHl0aG9u 12958\ncGFpcg== 12959\nIGNpcmNsZQ== 12960\nIGluaXRp 12961\nX3N0cmVhbQ== 12962\nIGNvbXByZWg= 12963\nbGVhcm4= 12964\nUHVibGlj 12965\nIGh1bWFucw== 12966\nIGJyaW5naW5n 12967\nb2dyYXBoaWM= 12968\nX2xheWVy 12969\nLWxpa2U= 12970\ndXBwb3J0SW5pdGlhbGl6ZQ== 12971\naWRlYmFy 12972\nIHZvdGVz 12973\nIGRlc2lyZWQ= 12974\nTWFzaw== 12975\nIHJlbGF0aW9u 12976\nLkluc3RhbmNl 12977\nSGVscA== 12978\nIGluc3Bpcg== 12979\nIE1vbm8= 12980\nVmlld01vZGVs 12981\nb21ldGltZXM= 12982\nIGJhY2tncm91bmRDb2xvcg== 12983\nIHJvdGF0aW9u 12984\nIG1hcmk= 12985\nL3Rlc3Q= 12986\nSU5TRVJU 12987\nU3Rhcg== 12988\ncGh5 12989\nSWRz 12990\nX0dFVA== 12991\nIGluY3JlYXNlcw== 12992\nX2Nsb3Nl 12993\nMjMz 12994\nX0ZPUk0= 12995\nIFvigKZdCgo= 12996\nYXph 12997\nVEVYVA== 12998\nIMOk 12999\nIFZhbg== 13000\nIGxpZ2h0cw== 13001\nIEd1aWRl 13002\nIGRhdGVz 13003\nLkNvbW1hbmQ= 13004\nYW1hbg== 13005\nIHBhdGhz 13006\nLmVkaXQ= 13007\nCWFkZA== 13008\nZHg= 13009\nIHJlYWN0aW9u 13010\nIEJlYWNo 13011\nLmdldE1lc3NhZ2U= 13012\nRW52aXJvbm1lbnQ= 13013\naW50ZXJlc3Q= 13014\nIG1pbmlzdGVy 13015\nIHJlYWRlcnM= 13016\nCUY= 13017\nIGRvbWVzdGlj 13018\nIGZpbGVk 13019\nQ2l0eQ== 13020\nIG1hcHBpbmc= 13021\nIERFUw== 13022\nIHJlcGFpcg== 13023\ndGljcw== 13024\naXh0dXJl 13025\nIG5vbWJyZQ== 13026\nLklTdXBwb3J0SW5pdGlhbGl6ZQ== 13027\nem8= 13028\nLklzTnVsbE9y 13029\nIENhcm9saW5h 13030\nIERlcg== 13031\nIEVWRU5U 13032\nIGdlc3Q= 13033\nIGhpc3Q= 13034\ncmVzb3VyY2Vz 13035\nIG9ycGhhbg== 13036\nLkFyZQ== 13037\nIEludmVzdA== 13038\nUkVGRVJSRUQ= 13039\nLkxvZ2dlcg== 13040\nIFJvbWFu 13041\nIGN1bHR1cmFs 13042\nZmVhdHVyZQ== 13043\ncHRz 13044\nYnQ= 13045\nIGRvdA== 13046\nIGRpYW0= 13047\ndXNwZW5k 13048\nX2FjY2Vzcw== 13049\nKCl7DQo= 13050\nIHN1cnByaXNl 13051\nYWJpbA== 13052\nIHZpcnQ= 13053\nIGJvbWI= 13054\nYXJvbg== 13055\nX0lT 13056\nIHZhc3Q= 13057\nUmVhbA== 13058\nZXBlbmQ= 13059\naWN0ZWQ= 13060\nIHBpY2tlZA== 13061\nIEZM 13062\nIFJlcHVibGljYW5z 13063\nLnplcm9z 13064\nUHJlc3NlZA== 13065\nc3Vw 13066\nLkNvcmU= 13067\nTWljcm9zb2Z0 13068\nc2VydmljZXM= 13069\nYWdpYw== 13070\naXZlbmVzcw== 13071\nIHBkZg== 13072\nIHJvbGVz 13073\nNDAz 13074\ncmFz 13075\nIGluZHVzdHJpYWw= 13076\nIGZhY2lsaXRpZXM= 13077\nMjQ1 13078\n6KE= 13079\nIG5p 13080\nIGJh 13081\nIGNscw== 13082\nCUI= 13083\nQ3VzdG9tZXI= 13084\nIGltYWdpbmU= 13085\nIGV4cG9ydHM= 13086\nT3V0cHV0U3RyZWFt 13087\nIG1hZA== 13088\nKGRl 13089\nKXsKCg== 13090\nIGZybw== 13091\naHVz 13092\nIGNvbW1pdHRlZQ== 13093\n7J20 13094\nLHg= 13095\nIGRpdmlzaW9u 13096\nKGNsaWVudA== 13097\nKGphdmE= 13098\nb3B0aW9uYWw= 13099\nLkVxdWFs 13100\nIFBoeXM= 13101\naW5ndQ== 13102\nMDMz 13103\nNzIw 13104\nIHN5bmM= 13105\nIE5h 13106\nfX08Lw== 13107\nT0xVTQ== 13108\naXTDqQ== 13109\nIGlkZW50aWZpZXI= 13110\nb3dlZA== 13111\nIGV4dGVudA== 13112\nIGh1cg== 13113\nVkE= 13114\nY2xhcg== 13115\nIGVkZ2Vz 13116\nQ3JpdGVyaWE= 13117\nIGluZGVlZA== 13118\naW5oZXJpdA== 13119\nIE5pZ2h0 13120\nMzAy 13121\nIHJlcG9ydGluZw== 13122\nIGVuY291bnRlcg== 13123\nIGtpbmRz 13124\nX3ByZWQ= 13125\nIGNvbnNpZGVyaW5n 13126\nLig= 13127\nIHByb3RlaW4= 13128\nVHlw 13129\nZ3JpY3VsdA== 13130\nIEJhbGw= 13131\nQENvbXBvbmVudA== 13132\nIEVzcw== 13133\nIFJ1Yg== 13134\nODAy 13135\ndWxw 13136\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 13137\naXR1ZA== 13138\nLmF0dHI= 13139\naWVudGU= 13140\nIHNwZWxs 13141\nIEpvZQ== 13142\nRU5URVI= 13143\nX2hvc3Q= 13144\naXRhbg== 13145\nIG1hdHRlcnM= 13146\nIGVtZXJnZW5jeQ== 13147\ndWF0ZWQ= 13148\nIENoYXQ= 13149\nPXsn 13150\nY29udHJp 13151\nYXJrZXI= 13152\n5oiQ 13153\naXBlcg== 13154\nIHNjaGVtZQ== 13155\nKHN0ZGVycg== 13156\nICoo 13157\nY2VpdmVy 13158\nLmNvbHVtbg== 13159\nIG1hcmtlZA== 13160\nX0FUVFI= 13161\nIGJvZGllcw== 13162\nIElNUExJRUQ= 13163\nR2Fw 13164\nIFBPU1Q= 13165\nIGNvcnBvcmF0ZQ== 13166\nIGRpbWVuc2lvbg== 13167\nIGNvbnRyYXN0 13168\nZXJ2aWV3 13169\nIEVSUk9S 13170\nIGNhcGFibGU= 13171\nIGFkdmVydGlzaW5n 13172\ndXJjaGFzZQ== 13173\nIFBB 13174\nIEZyYW5jaXNjbw== 13175\nIGZhY2luZw== 13176\n44CM 13177\nZ2l0 13178\nIGJlZXI= 13179\nIHNreQ== 13180\nZG93bmxvYWQ= 13181\nIEN1cg== 13182\nbWM= 13183\nYW5ueQ== 13184\nLmZsb29y 13185\nIGNyaXRlcmlh 13186\nIHBhcnNlSW50 13187\nYCwK 13188\nIGFzcGVjdA== 13189\nIGJ1bmRsZQ== 13190\nQ291bGQ= 13191\nIHRhbms= 13192\nLWlk 13193\nIGh1cnQ= 13194\nIGJyb2FkY2FzdA== 13195\nT0tFTg== 13196\nb3dudA== 13197\nbnVsbGFibGU= 13198\nQ2Fw 13199\nIGFsY29ob2w= 13200\nIENvbGw= 13201\nIEhlbHBlcg== 13202\nIEFm 13203\nLm1ldGhvZA== 13204\nIHBsYW5uZWQ= 13205\ncGxlcg== 13206\nIFNpdGU= 13207\nIHJlc2M= 13208\nb21lbnQ= 13209\nIEphdmFTY3JpcHQ= 13210\nU0VSVkVS 13211\nIHJocw== 13212\nZXJlcw== 13213\nKCIs 13214\naWZp 13215\nLmZpZWxkcw== 13216\nIHBhcmtpbmc= 13217\nIGlzbGFuZA== 13218\nIHNpc3Rlcg== 13219\nXwo= 13220\nQ29uc3RyYWludHM= 13221\nIEF1c3Q= 13222\nZGlt 13223\nX3BvaW50cw== 13224\nIGdhcA== 13225\nX2FjdGl2ZQ== 13226\nIHZvb3I= 13227\nIFBP 13228\nQmFn 13229\nLXNjYWxl 13230\nbGFtYmRh 13231\nLkRpc3Bvc2U= 13232\ncnVsZQ== 13233\nIG93bmVk 13234\nIE1lZGljYWw= 13235\nMzAz 13236\nZW50cmllcw== 13237\nIHNvbGFy 13238\nIHJlc3VsdGluZw== 13239\nIGVzdGltYXRlZA== 13240\nIGltcHJvdmVk 13241\nRHVyYXRpb24= 13242\nZW1wbG95ZWU= 13243\nJC4= 13244\nQWN0aW9ucw== 13245\nTGlrZQ== 13246\nLCg= 13247\nKFJlcXVlc3Q= 13248\nJXM= 13249\nLk9wZW4= 13250\nKSIK 13251\nIHBpeGVs 13252\nIGFkYXB0ZXI= 13253\nIHJldmVudWU= 13254\nb2dyYW0= 13255\nIExB 13256\nIE1hY2hpbmU= 13257\nINin 13258\nIGZsZQ== 13259\nIGJpa2U= 13260\nSW5zZXRz 13261\nIGRpc3A= 13262\nIGNvbnNpc3RlbnQ= 13263\nYcOnw6Nv 13264\nZ2VuZGVy 13265\nIFRob3Nl 13266\ncGVyaWVuY2U= 13267\nLkJhY2tDb2xvcg== 13268\nLnBsYXk= 13269\nIHJ1c2g= 13270\nIGF4aW9z 13271\nIG5lY2s= 13272\nX21lbQ== 13273\nLlBSRUZFUlJFRA== 13274\nX2ZpcnN0 13275\nQ0I= 13276\nIFdpZGdldA== 13277\nIHNlcQ== 13278\naGFy 13279\nIGhpdHM= 13280\nIOKCrA== 13281\nIGNvbnRhaW5lZA== 13282\ncmllbnQ= 13283\nd2F0ZXI= 13284\nTE9BRA== 13285\nIFZpcmdpbmlh 13286\nIEFybQ== 13287\nIC4v 13288\nwrs= 13289\nX3Jvb3Q= 13290\nIGFzc2lzdGFuY2U= 13291\nW10s 13292\nc3luYw== 13293\nIHZlZ2V0 13294\nZXNjYXBl 13295\naWNlcg== 13296\nYm9vc3Q= 13297\nIEZsb2F0 13298\nLVc= 13299\nKi8NCg== 13300\nKj4= 13301\nMjE4 13302\nICQoIi4= 13303\nLnBvcw== 13304\nIGJveXM= 13305\nIHdlZGRpbmc= 13306\nIGFnZW50cw== 13307\nPSJf 13308\nIEFybXk= 13309\nIGhpbnQ= 13310\ndmlzaW9u 13311\nIHRlY2g= 13312\nIENvbm5lY3Q= 13313\nIGxlZ2VuZA== 13314\nIEJldA== 13315\nLkJhc2U= 13316\nU3ViamVjdA== 13317\nIGxpdA== 13318\nUmVtb3Zl 13319\nICI6 13320\nIEZpbmFs 13321\ncGVhcmFuY2U= 13322\nIGlUdW5lcw== 13323\nIHBhcnRpY2lwYW50cw== 13324\nIFB5dGhvbg== 13325\nIGJ1c3k= 13326\naWVs 13327\ndmVydGljZXM= 13328\nIHRlbXBsYXRlVXJs 13329\nIENsb3Nl 13330\nSW1n 13331\nIENvcnBvcmF0aW9u 13332\ndGltZXN0YW1w 13333\nIGV4dGVuZA== 13334\nIHdlYnNpdGVz 13335\nIHBvc3NpYmlsaXR5 13336\n0L7Rgg== 13337\nIGvDtg== 13338\nIG1lYXQ= 13339\nIHJlcHJlc2VudGF0aW9u 13340\nMjQx 13341\nIAkJ 13342\nX1NUQVJU 13343\nLmFwcGx5 13344\nIFZhbGxleQ== 13345\nIFN1Y2Nlc3M= 13346\nSGk= 13347\nIG5vYg== 13348\nIElFbnVtZXJhYmxl 13349\nX3NlbGVjdA== 13350\nZ2Vv 13351\nLiIpCg== 13352\nIHR1cm5pbmc= 13353\nIGZhYnJpYw== 13354\nKCIiKTsK 13355\nIHBlcnNwZWN0aXZl 13356\n6Zc= 13357\nIFNu 13358\nVGhhbms= 13359\nO2o= 13360\nLlBhcmFtZXRlcnM= 13361\nCSAgICAgICAgICAg 13362\nIGZhY3Rz 13363\nMzA1 13364\nIHVudA== 13365\nLmluc3RhbmNl 13366\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 13367\nLWVuZA== 13368\nIEpPSU4= 13369\nIEhlbg== 13370\nIHVyaQ== 13371\n5ZCN 13372\nINC90LA= 13373\nIEluZm8= 13374\nIGNvbmR1Y3RlZA== 13375\nIMOl 13376\nT1VSQ0U= 13377\nIHdpbmU= 13378\nSm9obg== 13379\nLkVycm9yZg== 13380\nIEFnZQ== 13381\nb3VuZGVk 13382\nIHJlYWxpemU= 13383\nMzEy 13384\nIF07 13385\nIHN1YnNlcXU= 13386\nLG0= 13387\nKFVzZXI= 13388\naWFubw== 13389\nIGFjY29tcGw= 13390\naXNw 13391\nLnN0ZA== 13392\n6Yc= 13393\nIEJlZA== 13394\nLnNldEF0dHJpYnV0ZQ== 13395\nQlI= 13396\na2VlcA== 13397\nIEFMTA== 13398\nIGlzb2w= 13399\nYW1tYQ== 13400\nUGFja2FnZQ== 13401\nIG9jY2FzaW9u 13402\nLXN1Y2Nlc3M= 13403\n0LXQtA== 13404\nIExJTUlURUQ= 13405\nc3RyaXA= 13406\nKCkKCgo= 13407\naXN0cmlidXRpb24= 13408\nQ29sb3Jz 13409\nICs6Kw== 13410\nRGlkTG9hZA== 13411\nYWxlcg== 13412\nIHRpZA== 13413\nIExFRA== 13414\nIExpbmtlZA== 13415\nIENhcnQ= 13416\nKCkpDQo= 13417\nX1JFQUQ= 13418\nIGtpbGxpbmc= 13419\nIFBIUA== 13420\nZmVjdGlvbg== 13421\nIGluc3RhbmNlcw== 13422\nY3Y= 13423\nIi8+ 13424\nIHNm 13425\nIHRheGVz 13426\nX2xvY2F0aW9u 13427\nIEJpdGNvaW4= 13428\ndWFibGU= 13429\ncmFuaw== 13430\naWdub3Jl 13431\ndHJhY2s= 13432\n0LrQsA== 13433\nIHNob3VsZG4= 13434\nIE9Q 13435\nPT57Cg== 13436\nIGtt 13437\nIGhlbHBlcg== 13438\nX2hlYWQ= 13439\nIFdoZXRoZXI= 13440\nb2Nv 13441\nX2Js 13442\nIHN0YXRpc3RpY3M= 13443\nIGJlYXV0eQ== 13444\nIHRvZw== 13445\ndGlw 13446\n64uk 13447\nIGNzdg== 13448\nKHNxbA== 13449\nc3RkbGli 13450\nd2Vhaw== 13451\nIGxpa2Vz 13452\nxI0= 13453\nIHJlcGVhdA== 13454\nIGFwYXJ0bWVudA== 13455\nIGVtcGg= 13456\nX2VkaXQ= 13457\nIHZpdA== 13458\nCXR5cGU= 13459\nMjE3 13460\nRXZlbg== 13461\ndXRlbg== 13462\nIGNpcmN1bXN0YW5jZXM= 13463\nYmlhbg== 13464\nIHN1Z2Fy 13465\nV2luZG93cw== 13466\n7J4= 13467\nIG9ic2VydmVk 13468\nL2RhdGE= 13469\nIGNhbGVuZGFy 13470\nIHN0cmlrZQ== 13471\nIFJFUw== 13472\nX3Nj 13473\nZm9ueQ== 13474\nb3JlbQ== 13475\nKHo= 13476\ncG93ZXI= 13477\nZXRlY3Q= 13478\nIFNhdA== 13479\nLmRlc2NyaXB0aW9u 13480\nIGdhbmc= 13481\nIFNwb3J0cw== 13482\nb25ncw== 13483\nIEJ1bmRsZQ== 13484\nLnN1bQ== 13485\nb25jZQ== 13486\nIGFjY3VzZWQ= 13487\nIGV4cGxvcmU= 13488\nIGFwcHJveGltYXRlbHk= 13489\nIGxvc2luZw== 13490\ndGhlc2lz 13491\nIEZ1bmQ= 13492\nIGRpYWdu 13493\nQXV0b3dpcmVk 13494\ncHJvcGVydGllcw== 13495\nIF8u 13496\nIGNudA== 13497\nY2VkdXJl 13498\nIHl5 13499\nIGdyYW50 13500\nc29jaw== 13501\nLmlubmVySFRNTA== 13502\nIF0pOwo= 13503\nIENPTkZJRw== 13504\nPSck 13505\nNTUw 13506\nXV07Cg== 13507\nVU5E 13508\nIGdsb2I= 13509\nIGRpcmU= 13510\ndWZmbGU= 13511\nX01FTQ== 13512\nIGF1dGhlbnRpYw== 13513\nPigi 13514\nIGRlY2FkZQ== 13515\nIEltcG9ydA== 13516\nIG9yaWdpbmFsbHk= 13517\nIGpRdWVyeQ== 13518\nIGluZGljYXRl 13519\nIG91cnNlbHZlcw== 13520\nU3c= 13521\nLmxibA== 13522\nZW5lcmF0ZQ== 13523\nIGJhc2ljYWxseQ== 13524\nIEhvbQ== 13525\nICsjKw== 13526\nIEJyaXRhaW4= 13527\nIEthcg== 13528\ndG9FcXVhbA== 13529\nLnN0b3A= 13530\nIG1vZGFs 13531\naXNp 13532\nIHN1Z2dlc3Rz 13533\nIGR0eXBl 13534\nIHR1cg== 13535\nYmY= 13536\nIGNvbm5lY3Rpb25z 13537\nIEJlZm9yZQ== 13538\naXN0ZWQ= 13539\nbW91c2U= 13540\nIHB1bGxlZA== 13541\nLmJ1aWxk 13542\nIGxlZ2lzbGF0aW9u 13543\nIGZvcnRo 13544\ncGFk 13545\nZWdv 13546\nLk5vdw== 13547\nIGV4Y2l0aW5n 13548\nfQoKCgo= 13549\nIGNvbXBy 13550\nIHNoYXJlcw== 13551\nIHJpZw== 13552\nZ3JlZW4= 13553\nX3ZlYw== 13554\nIGVudW1lcmF0ZQ== 13555\nQXV0bw== 13556\naWNhdG9y 13557\nIFJheQ== 13558\nYXNzZQ== 13559\nIGhvbGlkYXk= 13560\nIG51bGxhYmxl 13561\nZ3Vu 13562\nX2RldGFpbHM= 13563\nIHdyYXBwZXI= 13564\nc2Vx 13565\nIFlvdW5n 13566\nanVhbmE= 13567\nICJfXw== 13568\nbGljZW5zZQ== 13569\nc2VydmU= 13570\nXig= 13571\naWRlcnM= 13572\nLlJlbW92ZQ== 13573\ncm9wZG93bg== 13574\nJ1M= 13575\ncGlu 13576\nKHRva2Vu 13577\nLkRlZmF1bHQ= 13578\nIHJlYXNvbmFibGU= 13579\nYW1waW9u 13580\nIFNvY2lldHk= 13581\nIGJlaQ== 13582\nZXJ2ZXM= 13583\ncmFk 13584\nIEZveA== 13585\nX2ltYWdlcw== 13586\nIHdoZWVs 13587\nJylb 13588\nIGNmZw== 13589\nKEJ5 13590\nQ29uc3RydWN0b3I= 13591\nIHZhcnk= 13592\nLnN3aWZ0 13593\nIHByb3h5 13594\nCUg= 13595\nIEFub3RoZXI= 13596\nIFBlbg== 13597\nIGNoZWNraW5n 13598\nIGplc3Q= 13599\nbWFuYWdlcg== 13600\nT3JpZ2lu 13601\ndWdz 13602\nb2ly 13603\nPjwhLS0= 13604\nIGV4cHJlc3NlZA== 13605\nIG1vZGVy 13606\nIGFnZW5jaWVz 13607\nIGlo 13608\nLWhpZGRlbg== 13609\naW91c2x5 13610\nIFJvZA== 13611\nIHNvbGU= 13612\nTWVk 13613\nLkFueQ== 13614\nIHBj 13615\nYmFs 13616\nRXhhbXBsZQ== 13617\nIFNhbGU= 13618\nIHN0cmlw 13619\nIENvbXA= 13620\nIHByZXNpZGVudGlhbA== 13621\nTW9zdA== 13622\ncHV0YXRpb24= 13623\nKHJlZg== 13624\nIEZvdXI= 13625\nX2ZpbGVuYW1l 13626\nIGVuZm9yY2VtZW50 13627\n2K8= 13628\nIEdlb3Jn 13629\nd2VpZ2h0cw== 13630\nL2w= 13631\nIGFnZ3Jlc3M= 13632\nIGRyYXdpbmc= 13633\nYW5keQ== 13634\nPEk= 13635\nLWo= 13636\nYWth 13637\naHJlZg== 13638\nIHRlYWNoZXJz 13639\nX1E= 13640\nKGl0 13641\nIE1C 13642\nIHRlbXBvcmFyeQ== 13643\naXJlYmFzZQ== 13644\nc3RyYQ== 13645\n5pe2 13646\n6LQ= 13647\nKGxhYmVs 13648\nb3Vw 13649\nIHRvcGljcw== 13650\nIHBvcnRpb24= 13651\naWRvcw== 13652\nIEpld2lzaA== 13653\nIHJlY292ZXJ5 13654\nNjUw 13655\nIHN0YW5kcw== 13656\nI1s= 13657\nIGFmdGVybm9vbg== 13658\nIEFydGljbGU= 13659\nX2F0dA== 13660\nIGV4cGxhbg== 13661\nIFBhaw== 13662\nLnNldE9uQ2xpY2tMaXN0ZW5lcg== 13663\nLmNoaWxkcmVu 13664\nIGlr 13665\nKyg= 13666\nbGFn 13667\nIGRpc2s= 13668\nIGNvbnRyb3ZlcnM= 13669\nIj4m 13670\nYXNw 13671\nIHdpZQ== 13672\nIEF1c3RyYWxpYW4= 13673\nIFlvdVR1YmU= 13674\nQXR0cg== 13675\nY29udGFpbnM= 13676\nZHVjZQ== 13677\nIE1hdHQ= 13678\nMzQw 13679\nYXRlcm4= 13680\nIHZvbHVudGU= 13681\nIG5ld3Nw 13682\nVlA= 13683\nb2x0aXA= 13684\nIGRlbGVnYXRl 13685\nX21ldGE= 13686\nIGFjY3VyYXRl 13687\nIEV4YW1wbGU= 13688\nJSw= 13689\nIERhaWx5 13690\nIGNhYmlu 13691\nIFNX 13692\nIGxpbWl0cw== 13693\na2lw 13694\nIGFybXk= 13695\nIGVuZGluZw== 13696\nIGJvc3M= 13697\nIERpYWxvZw== 13698\nQWxzbw== 13699\nPSIjIg== 13700\nb3JkYW4= 13701\ncm93c2U= 13702\nLW1pbg== 13703\nICIm 13704\nX2xvYw== 13705\nVVg= 13706\nIGRldmVsb3BlcnM= 13707\nIGFjY3VyYWN5 13708\nIG1haW50ZW5hbmNl 13709\nIGhlYXY= 13710\nIGZpbHRlcnM= 13711\nLlRvb2xTdHJpcA== 13712\nIG5hcnI= 13713\nIEVtcA== 13714\nT1JERVI= 13715\nIE1vYmlsZQ== 13716\nLlNlcmlhbA== 13717\nLm91dHB1dA== 13718\nMjQ0 13719\nLmNvbA== 13720\nTWF0ZXJpYWw= 13721\ndW1h 13722\nIGNvbnN1bWVycw== 13723\nc2hpZnQ= 13724\nIHB1ZWQ= 13725\nIG1pbmk= 13726\nY29sbGVjdGlvbg== 13727\nIGthbg== 13728\nLmNlbnRlcg== 13729\nSGlzdG9yeQ== 13730\nIGJlbmNo 13731\nKCkpOw== 13732\naXRvcmllcw== 13733\nIGNyb3dk 13734\nX2NhbGw= 13735\nIHBvd2Vycw== 13736\nLUU= 13737\nIGRpc21pc3M= 13738\nIHRhbGtz 13739\nIENoYW5uZWw= 13740\nZm9yd2FyZA== 13741\nX2NvbnRyb2w= 13742\nL3NyYw== 13743\naWVzdA== 13744\nKioqKioqKioqKioqKioqKioqKioqKioq 13745\nIGJldGE= 13746\nKGNvbG9y 13747\nX09CSkVDVA== 13748\nIEFwaQ== 13749\nIGVmZmVjdGl2ZWx5 13750\nQ2FtZXJh 13751\nc2Q= 13752\ndXNzeQ== 13753\nMjkw 13754\nRGljdA== 13755\nIEVmZmVjdA== 13756\naWJpbGl0aWVz 13757\nIHJldHVybmluZw== 13758\nIEZhcg== 13759\nICcnKQ== 13760\nIG1vZHVsZXM= 13761\nMjE5 13762\naWxhdGlvbg== 13763\nICgl 13764\nVFJHTA== 13765\nIHN0b3Jt 13766\nb25uYQ== 13767\nIEVYUA== 13768\nIHNwb25z 13769\nIGRpc3Bs 13770\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 13771\nZmFsbA== 13772\n5Yw= 13773\naWduS2V5 13774\nX1VT 13775\nZXRyaWNz 13776\nIGhhbmRsZXM= 13777\nVEw= 13778\nX2Ftb3VudA== 13779\nb3dh 13780\nYnJhbmQ= 13781\nIFRvb2w= 13782\nIHVzdWFs 13783\nLlo= 13784\nY3JlbWVudA== 13785\nYWRpdW0= 13786\nc3RvY2s= 13787\nIHNlcnZpbmc= 13788\nIEJvbg== 13789\nIGxpbmVhcg== 13790\nIFRhcmdldA== 13791\nIFJhZGlv 13792\nSEw= 13793\nU2hhZGVy 13794\nb21hdGlj 13795\nYWd1ZXM= 13796\naW5pdHk= 13797\nZGlmZg== 13798\nX2l0ZXJhdG9y 13799\ncXVvdA== 13800\nICwK 13801\nY2FsbGJhY2s= 13802\nIHN5bXB0b21z 13803\nW18= 13804\nIEJ1bA== 13805\nIEZlYg== 13806\ndW5kbw== 13807\nX2FjY291bnQ= 13808\nIHR5cGVkZWY= 13809\n0LjRgQ== 13810\ndHJhcw== 13811\nVXNlcklk 13812\nIFBlbm4= 13813\nIFN1cHJlbWU= 13814\nfT4= 13815\ndXNlcklk 13816\nMzI3 13817\nIEtpbQ== 13818\nIGdh 13819\nIGFydGlzdHM= 13820\n5bg= 13821\nIEFic3RyYWN0 13822\nb2tlbW9u 13823\nIGhhbQ== 13824\nb3ZhbA== 13825\nIGNoYQ== 13826\nYXRlbg== 13827\n5YY= 13828\nRml4ZWQ= 13829\nIHZ1bG5lcg== 13830\nIFBhcmFtZXRlcnM= 13831\ncXVhbnRpdHk= 13832\nLkNsZWFy 13833\nU2VydmxldFJlcXVlc3Q= 13834\nIHlh 13835\nIHNvdWw= 13836\nMDgw 13837\ndHJhbnNhY3Rpb24= 13838\nIHNvbG8= 13839\nIHBhaXJz 13840\n5pQ= 13841\nIEdyZQ== 13842\nX3dvcmQ= 13843\nIEND 13844\nIGdp 13845\nemll 13846\nIHNjaGVkdWxlZA== 13847\ncm90YXRpb24= 13848\nZ3lwdA== 13849\ndWxvdXM= 13850\nOjpf 13851\nIEVsbA== 13852\nPCE= 13853\nCQkgIA== 13854\nbHA= 13855\nYWhh 13856\nQ29weXJpZ2h0 13857\nMDA5 13858\nIGRyYW0= 13859\nMjUx 13860\nIGRpYWdyYW0= 13861\nIE1lbQ== 13862\nIGdhcmRlbg== 13863\nQ29tcA== 13864\nIGF0dGVtcHRz 13865\ndWZmaXg= 13866\nPigp 13867\nIHBoaWxvc29waA== 13868\nX3JlbA== 13869\n5bw= 13870\nIHN2 13871\nLnNlY29uZA== 13872\nYW50bw== 13873\nLkpzb24= 13874\nIFRlbGU= 13875\nX2xvY2Fs 13876\nX3NlbmQ= 13877\nIGFzcGVjdHM= 13878\n7Jc= 13879\nSUJMRQ== 13880\nIHJhaWw= 13881\nIHdpZGVseQ== 13882\nYXNoZWQ= 13883\naWFy 13884\naW5m 13885\ndXBwZXI= 13886\nZGphbmdv 13887\nX3Jlc3VsdHM= 13888\naXNzaW5n 13889\nIGVxdWl2YWxlbnQ= 13890\nT1VORA== 13891\nIHR5 13892\nIHBvdGVudGlhbGx5 13893\nQWR2ZXJ0aXNlbWVudA== 13894\nMjM4 13895\nIFJlY29yZA== 13896\nMzgw 13897\ncmVzZW50YXRpb24= 13898\nX3dpZGdldA== 13899\nb3VuZGluZw== 13900\nIHJlbGlnaW9u 13901\nIGNvbnNj 13902\nIExpbQ== 13903\nLmFt 13904\nSHRtbA== 13905\nICc6 13906\nUEFUSA== 13907\nX3NwZWM= 13908\nb3J0ZWQ= 13909\naWRhZGVz 13910\nX3NoYXBl 13911\nIGtlZXBz 13912\nLlNhdmU= 13913\nIExvYw== 13914\nb3Jp 13915\nIFRFU1Q= 13916\ndW5pY2lw 13917\nIHJlZ2lvbnM= 13918\nIGJlbGlldmVz 13919\nL2Vu 13920\ncG9zaXRl 13921\neyc= 13922\ncHJlcGFyZQ== 13923\nX2NvbnN0 13924\nc2FtcGxl 13925\nIFdpbGxpYW1z 13926\nIHN0cnQ= 13927\nX0dldA== 13928\nIEFuZHJldw== 13929\nLmFjdGl2ZQ== 13930\nIGxheWVycw== 13931\nVmlzdWFsU3R5bGU= 13932\nYXp5 13933\nIEtu 13934\nIGFjaWQ= 13935\nIEFzaWE= 13936\nIGV4Y2Vzcw== 13937\nCW15 13938\nIGtleWJvYXJk 13939\nZW5zdXM= 13940\nIGNyZXc= 13941\nIG1pc3NlZA== 13942\nbWFzdGVy 13943\nIFdpbGQ= 13944\nIG5ld2x5 13945\nIHdpbm5lcg== 13946\nIHN0dWI= 13947\naWNvZGU= 13948\nLm1vdmU= 13949\nRG9tYWlu 13950\nIFNhcg== 13951\nIGZvcmVzdA== 13952\nTEVE 13953\nY2xhaW1lcg== 13954\nLmV4aXQ= 13955\nIFdpbmRvdw== 13956\nIHJlc2lzdGFuY2U= 13957\nIENIRUNL 13958\nKCIt 13959\nIFJ5YW4= 13960\nIHBpcGU= 13961\nIGNvYXN0 13962\nREVG 13963\nLy8h 13964\nX29mZg== 13965\nZXhpdA== 13966\nIHVsdGltYXRlbHk= 13967\naW1pdGl2ZQ== 13968\nIEtlZXA= 13969\nIGhpc3RvcmljYWw= 13970\nIGFueXdheQ== 13971\nIEphY2tzb24= 13972\nb2NrZXI= 13973\nRVJO 13974\nIFVJTlQ= 13975\neW50YXg= 13976\nRVJZ 13977\naXNtcw== 13978\nIGNu 13979\nIG9jY3Vycw== 13980\nIDs7 13981\nVGV4dFZpZXc= 13982\nQUU= 13983\nL2ltZw== 13984\nIHllc3RlcmRheQ== 13985\nLWRlZmF1bHQ= 13986\nIHRpbnk= 13987\nIHByb2M= 13988\nIGFsaXZl 13989\nIFJFRw== 13990\nLnRo 13991\nZWFyaW5n 13992\nLmdldExvZ2dlcg== 13993\nPGxpbms= 13994\nX2xvZ2lu 13995\nRm9sZGVy 13996\nYWJj 13997\nbHlwaGljb24= 13998\n0L3Qvg== 13999\nIG5vdGljZWQ= 14000\nb2RpZ28= 14001\nIGVkaXRpb24= 14002\naW1hdG9y 14003\nLkVuYWJsZWQ= 14004\nLnBhcnNlSW50 14005\nIHlhcmRz 14006\nCQkJCQkJCQkJCQkJ 14007\nIHZlcmJvc2U= 14008\n0LvRjw== 14009\nX0JZ 14010\nLmxvZ2lu 14011\nLio7Cg== 14012\nIE1pZA== 14013\nw6llcw== 14014\nIGdsbw== 14015\nIGJ1aWxkaW5ncw== 14016\nIHpl 14017\nIEl0ZXI= 14018\nIHR1YmU= 14019\nIFBvdA== 14020\nXE0= 14021\nMjUz 14022\nPHRo 14023\nYnJpZGdl 14024\nIFNjcmlwdA== 14025\nIE1vZHVsZQ== 14026\nIHZhY2M= 14027\nIGluc3RhbGxhdGlvbg== 14028\ndnk= 14029\nVmlzdWFsU3R5bGVCYWNrQ29sb3I= 14030\nIFNN 14031\nLnRvdGFs 14032\nNjQw 14033\nYmF0 14034\nIGZpbmRz 14035\nIGF0bW9z 14036\nU3Vidmlldw== 14037\naXphcmQ= 14038\nIHJlcGxhY2VtZW50 14039\nbGljYXRlZA== 14040\nYXBpcw== 14041\nIGxvZ2dlZA== 14042\nIExlZnQ= 14043\nR3Vp 14044\nX1R5cGU= 14045\ndG0= 14046\nUGFk 14047\nIGhvdXNlaG9sZA== 14048\nIHJlbGU= 14049\nIHByb3Bvc2Fs 14050\nX0NMQVNT 14051\nMjQz 14052\nOjo6Og== 14053\nIGluZnJhc3RydWN0dXJl 14054\nSW5qZWN0 14055\nL2h0bWw= 14056\nMjI2 14057\nIGFkcw== 14058\naXp6YQ== 14059\nIG1n 14060\nY3RyaW5l 14061\nJQo= 14062\nPGh0bWw= 14063\nLWltYWdl 14064\nIGF0dG9ybmV5 14065\nPG0= 14066\nKCcs 14067\nIGNhbm4= 14068\nIHByaW50bG4= 14069\nb29zZQ== 14070\nIHllbGxvdw== 14071\nLmV4cA== 14072\ncGF5bWVudA== 14073\nIHRhYmxlVmlldw== 14074\nYXdheQ== 14075\nIG9wcG9zaXRpb24= 14076\nIEFnYWlu 14077\nIEhhbmRsZQ== 14078\nIGV4Y2x1c2l2ZQ== 14079\naW5hcg== 14080\nw6ly 14081\n0L7QsQ== 14082\nIENPREU= 14083\nZW1wb3Jhcnk= 14084\nIHJlYWN0 14085\ncGlwZQ== 14086\nMjM2 14087\nY3o= 14088\nLmFjdGl2aXR5 14089\nIGxhcmdlbHk= 14090\nIGRpc3M= 14091\nYXh5 14092\nZXNpcw== 14093\nIFJlbg== 14094\nIGNvcm4= 14095\nLlVzZVZpc3VhbFN0eWxlQmFja0NvbG9y 14096\nZGF5cw== 14097\nIGZydWl0 14098\nSW5zZXJ0 14099\nX2VuYw== 14100\nRXN0 14101\nX2RlYw== 14102\nIEx1Yw== 14103\nIMO8YmVy 14104\ncGFyYW1ldGVycw== 14105\nUEVSVA== 14106\nZXhwcmVzcw== 14107\nX3Byb2ZpbGU= 14108\nVW5rbm93bg== 14109\nIHJldm9sdXRpb24= 14110\nLmFkZHJlc3M= 14111\nX3JlcXVpcmU= 14112\nIHVuaWZvcm0= 14113\nIFBhY2s= 14114\nbGFy 14115\nIFVJVGFibGVWaWV3 14116\nIGRlcGVuZHM= 14117\nVmFsaWRhdGlvbg== 14118\nY29uZmlybQ== 14119\nT3duZXI= 14120\nIHRyaWI= 14121\naGV0 14122\nIElkZQ== 14123\nYW5zYXM= 14124\nMjQ3 14125\nTGFuZ3VhZ2U= 14126\ndWV0 14127\nIFBv 14128\nIFN0ZXZl 14129\nIGNvbnRlc3Q= 14130\nX0RFRkFVTFQ= 14131\nIGFwcGFyZW50bHk= 14132\nUkVFTg== 14133\nIGZyZXF1ZW50bHk= 14134\nIHRyYWRpdGlvbg== 14135\nb2NvbGF0ZQ== 14136\nU0k= 14137\nIEFyZ3VtZW50 14138\nRm9jdXM= 14139\nZXJ0ZQ== 14140\nIExheW91dA== 14141\nIGR4 14142\nIGdlbmVyYXRvcg== 14143\nIFdhaXQ= 14144\nUG9saWN5 14145\nbGlnaHRz 14146\nLkV4ZWN1dGU= 14147\nNTU1 14148\nUHk= 14149\nIGJlZHJvb20= 14150\nZWRh 14151\ncmFpZA== 14152\nCXNpemU= 14153\nIGFuY2llbnQ= 14154\nIHB1bXA= 14155\nIGR3 14156\nICghKA== 14157\nIHNwZWNpZnk= 14158\nKHN0YXR1cw== 14159\nIEZCSQ== 14160\nLmV4Y2VwdGlvbg== 14161\nIHJlbWFyaw== 14162\nbHltcA== 14163\nYW50ZWU= 14164\nVXBsb2Fk 14165\nZXJuZXQ= 14166\n6aE= 14167\naW5lbnQ= 14168\nIFJlbmRlcg== 14169\nZG0= 14170\nIE1lbW9yeQ== 14171\ncmljaA== 14172\nIFRvb2xz 14173\nIGtuZQ== 14174\nIHBlcm0= 14175\nYmFk 14176\nIGRpbm5lcg== 14177\nLnJlc2V0 14178\nIGpMYWJlbA== 14179\nRmVhdHVyZQ== 14180\nLlNlcnZpY2U= 14181\nICh7Cg== 14182\nIHJlZmVycmVk 14183\nLmNsYXNzTGlzdA== 14184\nMjQ4 14185\nIGluaXRXaXRo 14186\nIFRleHRWaWV3 14187\nIG5laXRoZXI= 14188\nIGNvdW50eQ== 14189\nICJ7 14190\n56c= 14191\nIHRhY2s= 14192\nY2xhc3NOYW1l 14193\nIFVTRVI= 14194\nIHJlbmV3 14195\nYGA= 14196\nZ2V0TmFtZQ== 14197\nIGJyb3du 14198\nRXJyb3Jz 14199\nZXJ0bw== 14200\nIHN1c3RhaW4= 14201\nU08= 14202\nbGV0ZXM= 14203\nIEludmFsaWQ= 14204\nMjQ2 14205\nMjI3 14206\nIGVuZW1pZXM= 14207\ndW5nZQ== 14208\nIGV4aXN0ZW5jZQ== 14209\nZXJyYQ== 14210\nCiAgCg== 14211\ndXRvcmlhbA== 14212\nI2E= 14213\ncGF5 14214\nY2hhcmdl 14215\nIElyZQ== 14216\nYXRlc3Q= 14217\nIGV4cGxvcw== 14218\nIGZpcmVk 14219\nTkVS 14220\nIFR5 14221\naWNpb24= 14222\nVXJp 14223\nIG9idmlvdXNseQ== 14224\nIENvbHVt 14225\nICcr 14226\nIERldmljZQ== 14227\nLXJlbGF0ZWQ= 14228\nX0FSRw== 14229\nIHZvcg== 14230\nIExlc3Nlcg== 14231\nX09Q 14232\nU2VyaWFsaXplcg== 14233\nIHVwZ3JhZGU= 14234\nTGlnaHQ= 14235\nIGNvZGVz 14236\nKys7DQo= 14237\nIHdyaXRlcw== 14238\nZm9vZA== 14239\nIMOpdA== 14240\nQHNlY3Rpb24= 14241\nIHRyYWNrcw== 14242\nIHNlcmlvdXNseQ== 14243\nY2h0 14244\nNDMw 14245\nKHNpemVvZg== 14246\nIGltbWVkaWF0ZQ== 14247\nIHNjaWVudGlzdHM= 14248\nIHsk 14249\nX25l 14250\nLkFuY2hvclN0eWxlcw== 14251\nIGFjY29tbW9k 14252\nIEhhcnJ5 14253\nIHNpZ2h0 14254\nIFBhbGVzdA== 14255\nZXJzaXN0ZW50 14256\nINGD 14257\nLWlucHV0 14258\nIGNvb3JkaW5hdGVz 14259\nwrc= 14260\nMjI4 14261\nV2VsY29tZQ== 14262\nLmNvbmY= 14263\nIGdyZXc= 14264\nIGJvbGQ= 14265\nIENQVQ== 14266\nKG15 14267\nIHBlcmZlY3RseQ== 14268\nIG1vbWVudHM= 14269\nIE1vdmll 14270\nLWRhdGE= 14271\neXN0YWw= 14272\nX1dJRFRI 14273\nMjYy 14274\nIFNjcmVlbg== 14275\n5p0= 14276\nIGRpc2Fw 14277\nIHJlZHVjdGlvbg== 14278\nLkdldENvbXBvbmVudA== 14279\nX01PRFVMRQ== 14280\nIGdlbmVyaWM= 14281\nIGR5 14282\nYWxsZXI= 14283\nIGN1cmw= 14284\nIEJvZHk= 14285\nIGJhbmtz 14286\nLHQ= 14287\nYXZn 14288\nIGV2aWw= 14289\nIG1hbnVmYWN0dXJlcg== 14290\nIHJlY2VpdmVy 14291\nQ29sdW1ucw== 14292\nIGluZ3JlZGllbnRz 14293\nCW91dA== 14294\ncXVlcw== 14295\nLkxvYWQ= 14296\nIHNsb3dseQ== 14297\nIFRvd24= 14298\nIENlbGw= 14299\nX25vcm1hbA== 14300\nX3ByZWZpeA== 14301\nIEFsZXJ0 14302\nKCJ7 14303\nw6Ry 14304\n4oCcVGhl 14305\nIE1E 14306\nIGNvdXJzZXM= 14307\nYXRoYW4= 14308\n6Zk= 14309\nb2Nj 14310\nIFNFUg== 14311\nZXNpZ24= 14312\nQWRkcg== 14313\nPVsn 14314\nKCIuLw== 14315\nXX0= 14316\nLmZvbnQ= 14317\nIEluc3RhZ3JhbQ== 14318\nIEJvcmRlcg== 14319\nb2Rh 14320\nIGhhbGw= 14321\nIHJ1bQ== 14322\nX2JpdA== 14323\nIHNhdmluZw== 14324\nX2Rvd24= 14325\nUmFuZG9t 14326\nX3JlZ2lzdGVy 14327\nKENvbnRleHQ= 14328\nIG9wcG9zaXRl 14329\nUm9vbQ== 14330\nWUVT 14331\n0LDQvdC4 14332\nIGVuam95ZWQ= 14333\nX3J1bg== 14334\nQ2xlYXI= 14335\n4oCY 14336\nIEZvcmQ= 14337\nb25pYw== 14338\nb3N0ZW4= 14339\nIl0p 14340\nX2F1dGg= 14341\nLy8NCg== 14342\nIHN1ZmZpY2llbnQ= 14343\nTEVT 14344\nIHBoZW4= 14345\nIG9o 14346\nX2Nzdg== 14347\nIHJvdXRpbmU= 14348\nLkFyZUVxdWFs 14349\nYXlsb3I= 14350\nIGJhc2tldA== 14351\nX0NPTU0= 14352\ncnlwdGVk 14353\nU2lt 14354\nIFNob3A= 14355\nIHN0dWRpbw== 14356\nYXRvcw== 14357\nKFc= 14358\nW3N0cmluZw== 14359\nw6R0 14360\nb2dh 14361\nIHNocg== 14362\nIHNpY2s= 14363\nQW5vdGhlcg== 14364\nIGRvb3Jz 14365\nX05F 14366\nIFRIUkVF 14367\nLm9yZGVy 14368\ncmF6aWw= 14369\nIG1hcHM= 14370\nX1RSVUU= 14371\ndHJhbnNsYXRl 14372\nIG5lYXJieQ== 14373\nMjY1 14374\nIG5hY2g= 14375\nTE9BVA== 14376\nYmF0Y2g= 14377\nMjI5 14378\nIGx1eA== 14379\nYXNoZXM= 14380\nYW5nZXJz 14381\n4oCm4oCm 14382\nX0VWRU5U 14383\nX1VQ 14384\nIGFjdHM= 14385\naW52 14386\nX01FVEhPRA== 14387\nY2Npb24= 14388\nIHJldGFpbg== 14389\ndXRjaA== 14390\nINCx 14391\nIGtub3dpbmc= 14392\nIHJlcHJlc2VudGluZw== 14393\nTk9U 14394\ncG5n 14395\nQ29udHJhY3Q= 14396\nIHRyaWNr 14397\nIEVkaXRpb24= 14398\ndXBsaWNhdGU= 14399\nIGNvbnRyb2xsZWQ= 14400\nY2Zn 14401\namF2YXNjcmlwdA== 14402\nIG1pbGs= 14403\nV2hpdGU= 14404\nU2VxdWVuY2U= 14405\nYXdh 14406\nIGRpc2N1c3NlZA== 14407\nNTAx 14408\nIEJ1c2g= 14409\nIFlFUw== 14410\nLmZhY3Rvcnk= 14411\ndGFncw== 14412\nIHRhY3Q= 14413\nIHNpZA== 14414\nJCQ= 14415\nIEVudW0= 14416\nMjc1 14417\nIGZyYW1lcw== 14418\nfSk7 14419\nIHJlZ3Vs 14420\nJ107DQo= 14421\nUmVnaW9u 14422\nMzIx 14423\nZmZm 14424\nIGNybw== 14425\nKGNvbQ== 14426\nPSIr 14427\nU3R1ZGVudA== 14428\nIGRpc2FwcG9pbnQ= 14429\nUkVTVUxU 14430\nQ291bnRlcg== 14431\nIGJ1dHRlcg== 14432\nIEhh 14433\nIERpZ2l0YWw= 14434\nIGJpZA== 14435\nIj57ew== 14436\naW5nZXJz 14437\nIENvdW50cnk= 14438\nX3RwbA== 14439\nIl0pCg== 14440\nL2s= 14441\nZGF0aW5n 14442\nOiM= 14443\nIERBVEE= 14444\neW5jaHJvbg== 14445\nX2JvZHk= 14446\nb2xseXdvb2Q= 14447\nIHZhbG9y 14448\naXBpZW50 14449\nb2Z0 14450\nVUJM 14451\nZG9jcw== 14452\nIHN5bmNocm9u 14453\nIGZvcm1lZA== 14454\ncnVwdGlvbg== 14455\nIGxpc3Rh 14456\nUmVxdWVzdE1hcHBpbmc= 14457\nIHZpbGxhZ2U= 14458\nIGtub2Nr 14459\nb2Nz 14460\nIns= 14461\nX2ZsYWdz 14462\nIHRyYW5zYWN0aW9ucw== 14463\nIGhhYml0 14464\nIEpl 14465\nZWRlbg== 14466\nIGFpcmNyYWZ0 14467\naXJr 14468\nIEFC 14469\nIGZhaXJseQ== 14470\nLmludGVy 14471\nLkFjdA== 14472\nIGluc3RydW1lbnQ= 14473\ncmVtb3ZlQ2xhc3M= 14474\nLmNvbW1hbmQ= 14475\n0Yk= 14476\nCW1lbQ== 14477\nKG1pbg== 14478\nIG90 14479\nIGNvbGxl 14480\nPXM= 14481\ndGltZW91dA== 14482\nIGlkcw== 14483\nIE1hdGNo 14484\naWpu 14485\nemVybw== 14486\nNDEw 14487\nIG5ldHdvcmtz 14488\nLmdvdg== 14489\nIGludGVs 14490\nIHNlY3Rpb25z 14491\nb3V0aW5l 14492\nKGNtZA== 14493\nKGRpcg== 14494\nIExJQUJJTElUWQ== 14495\nIEJsb2c= 14496\nIGJyaWRnZQ== 14497\nMzA4 14498\nIENW 14499\nY29udmVydA== 14500\nICIpCg== 14501\nIEJlcm4= 14502\nX1BP 14503\nZXZhbA== 14504\nKHNldA== 14505\ndG9vbA== 14506\nIHBheW1lbnRz 14507\nQmVoYXZpb3Vy 14508\nIGNvbmNyZXRl 14509\nIGVsaWc= 14510\nIGFjY2VsZXI= 14511\nIGhvbGU= 14512\nX28= 14513\nVEVHRVI= 14514\nIGdyYXBoaWNz 14515\nT3du 14516\nRm9ybWF0dGVy 14517\nb25kZXI= 14518\nIHBhY2thZ2Vz 14519\nL2E= 14520\nIEtub3c= 14521\nT3JEZWZhdWx0 14522\nIGR1dHk= 14523\nV2FpdA== 14524\n0L3QsA== 14525\nX3JlY29yZA== 14526\nW3Q= 14527\nTWVzaA== 14528\nIG9uZ29pbmc= 14529\nLmJlYW5z 14530\nIHRhbg== 14531\nIGludGVycHJldA== 14532\nYXN0ZXJz 14533\nUVVBTA== 14534\nIGxlZ3M= 14535\nXFJlcXVlc3Q= 14536\nLWZpbGU= 14537\nX211dGV4 14538\nIFNhaW50 14539\nLy8j 14540\nIHByb2hpYg== 14541\nKGluZm8= 14542\nOj0= 14543\nbGludXg= 14544\nIGJsbw== 14545\nb3RpYw== 14546\nCWZpbmFs 14547\nX2V4cA== 14548\nIFN0b3A= 14549\nYXBpbmc= 14550\nKHNhdmVk 14551\nX3B1c2g= 14552\nIGVhc2U= 14553\nX0ZS 14554\ncG9uc2l2ZQ== 14555\nc3RyY21w 14556\nOgoKCgo= 14557\n5Lu2 14558\nb2xp 14559\nIGV4dHJlbWU= 14560\nIHByb2Zlc3Nvcg== 14561\nSW1hZ2Vz 14562\nLklPRXhjZXB0aW9u 14563\nIGFkZHJlc3Nlcw== 14564\ncGxlbWVudGVk 14565\nIGluY29ycG9y 14566\nIHVzZUVmZmVjdA== 14567\nX09G 14568\nIERh 14569\nbm9tYnJl 14570\nSVJTVA== 14571\nIGRpc2NyaW0= 14572\nIGNvbXBlbnM= 14573\nZ3JlZ2F0ZQ== 14574\nYW5jZWxs 14575\nYWNoZXM= 14576\nIENyaXRlcmlh 14577\nJHJlc3VsdA== 14578\nRGVzdHJveQ== 14579\nIHNlY29uZGFyeQ== 14580\nV2F0Y2g= 14581\nIFNlbQ== 14582\nIE1jQw== 14583\nIGFjYWRlbWlj 14584\nVXBwZXI= 14585\nOjp+ 14586\ndXRyYWw= 14587\nIERvZw== 14588\nYWRlZA== 14589\nMjM3 14590\nVmFsaWRhdG9y 14591\nIGRlcml2ZWQ= 14592\nIHNldFRpbWVvdXQ= 14593\nIEtlbg== 14594\nIHR5cGljYWw= 14595\nIEJvYg== 14596\nIGJvdW5kcw== 14597\nIFNlYXNvbg== 14598\nIGNyYXp5 14599\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14600\nLXJvdXRlcg== 14601\naXR0ZXN0 14602\nIE1pcg== 14603\nIGVtb3Rpb25hbA== 14604\nLHY= 14605\nY24= 14606\nL3N0 14607\n5b0= 14608\nb25vbQ== 14609\nIGRlY2xhcmVk 14610\nPi4= 14611\nYWlsaW5n 14612\nIC8qPDw8 14613\nIG5vcm1hbGx5 14614\nKE1l 14615\nZXZpbg== 14616\nbGlrZWx5 14617\nIHBvaW50ZWQ= 14618\nIFN0YWNr 14619\nIHdhbGxz 14620\nLlZlY3Rvcg== 14621\nbWVhbg== 14622\nXV0K 14623\nIGxpc3RlbmluZw== 14624\nYWR2 14625\nIHN3YXA= 14626\nSUZU 14627\n2Ko= 14628\nLmFyZ3Y= 14629\ndWxz 14630\nPG9wdGlvbg== 14631\nbm90YXRpb25z 14632\nIGVtYWlscw== 14633\nIFVrcg== 14634\nYXN0YQ== 14635\nIFRodXM= 14636\nIFN0b25l 14637\nIGFwcGVhbA== 14638\nLuKAmQ== 14639\nIHJlZ3VsYXRpb25z 14640\nUHJlZmVyZW5jZXM= 14641\nIFBob25l 14642\ndWxm 14643\nIERS 14644\nIHRlY2hub2xvZ2llcw== 14645\nIHBhcmFncmFwaA== 14646\nIG5lY2Vzc2FyaWx5 14647\nMzcw 14648\nMDMw 14649\nLmVhY2g= 14650\nPGZsb2F0 14651\ncmVzYQ== 14652\nIHVuZGVyc3Q= 14653\nIGZpbmdlcg== 14654\ncHJlc3NlZA== 14655\nLWJ5 14656\naWZmZXI= 14657\nd2F0Y2g= 14658\nIEJh 14659\nQUlN 14660\nIHdlaWdodHM= 14661\nIFJvbg== 14662\nJyl9fQ== 14663\nW3NlbGY= 14664\nLS0tLS0tLS0tLQo= 14665\ncGVyaW1lbnQ= 14666\nIHRvU3RyaW5n 14667\neGlj 14668\nIENhbWVyYQ== 14669\nIQoKCgo= 14670\nYXVyYW50 14671\nUHJlZml4 14672\nIGluc3RpdHV0aW9ucw== 14673\nOmludA== 14674\nIGV4cG9zdXJl 14675\ncGF0dGVybg== 14676\nIExpbnV4 14677\nLm51bWJlcg== 14678\ncmVkaWVudA== 14679\nQXJndW1lbnRFeGNlcHRpb24= 14680\nIENoaWVm 14681\nIn0s 14682\nIGVsZWN0cm9uaWM= 14683\ncm9uZw== 14684\nZXJk 14685\nc3BOZXQ= 14686\ncmFpdA== 14687\nLycs 14688\nIE9oaW8= 14689\nQ29udHJvbGxlcnM= 14690\nIGNvbnRpbnVpbmc= 14691\nIFRlbXBsYXRl 14692\nIEV0aA== 14693\nc3o= 14694\nL2Vudg== 14695\nRW52 14696\nJS4= 14697\nYXJ0ZXJz 14698\nKSgo 14699\nIFRBQkxF 14700\nIMOu 14701\ncGVyYXR1cmU= 14702\ncHJvZ3Jlc3M= 14703\nUHJlcw== 14704\n6rA= 14705\naW1wbGVtZW50YXRpb24= 14706\nIGJpZW4= 14707\nIHN0cmVldHM= 14708\nX01TRw== 14709\nTmV3cw== 14710\nIyMj 14711\nOi8= 14712\nIGN1dHRpbmc= 14713\neEI= 14714\ncmVzc2Vk 14715\nX0VOQUJMRQ== 14716\nbGFi 14717\nIGNhdXNpbmc= 14718\nXSkpOwo= 14719\nYnJh 14720\neEZGRkY= 14721\naWxseQ== 14722\ncGxldGlvbg== 14723\nd2lsbA== 14724\nX2Jhcg== 14725\nIHN0cnVjdHVyZXM= 14726\nIEltcA== 14727\n24w= 14728\nIDw+ 14729\nIC0tLS0tLS0tLS0tLS0tLS0= 14730\nX0JVRkZFUg== 14731\nLmRpcg== 14732\nIHBsYWlu 14733\nIHBlZXI= 14734\nMjQ5 14735\nZ2c= 14736\nb2ludHM= 14737\nIHNvbWV3aGF0 14738\nIHdldA== 14739\nIGVtcGxveW1lbnQ= 14740\nIHRpY2tldHM= 14741\naXJtcw== 14742\nIHR1cGxl 14743\nc2lz 14744\nJHNxbA== 14745\ncmln 14746\nIGNvbnZlcnNpb24= 14747\nIGdlcw== 14748\nIGNvbmZpZ3VyZQ== 14749\nZWdy 14750\nIENh 14751\nIF9fKCc= 14752\nb3VzdG9u 14753\nLnRva2Vu 14754\nQmxhY2s= 14755\nIG1hZ2F6aW5l 14756\nQVc= 14757\nLklO 14758\nb3Npbmc= 14759\nIGJyb2tl 14760\nIENydQ== 14761\nREVMRVRF 14762\nIGRlc3Ryb3llZA== 14763\nKE1hdGg= 14764\nIGFwcHJvdmFs 14765\nLWRvbQ== 14766\nIElJSQ== 14767\ndGFibGVWaWV3 14768\nIGRlc2lnbnM= 14769\nIGNydXNoaW5n 14770\nIGNvbnNlbnQ= 14771\nZGlybmFtZQ== 14772\nb21w 14773\nIGNyeXB0 14774\nPyg= 14775\nb3JvdWdo 14776\nMzA3 14777\nLm8= 14778\nCWxpc3Q= 14779\nYW1zdW5n 14780\nLiIiIgo= 14781\nZXJyaW5n 14782\nR29vZ2xl 14783\nX3BhaXI= 14784\nX0lOSVQ= 14785\ncmVtYXJrcw== 14786\nIGdlYXI= 14787\nRmlsbA== 14788\nbGlmZQ== 14789\nfSIpCg== 14790\nIHN1aXRhYmxl 14791\nIHN1cnByaXNlZA== 14792\nX1JFUVVFU1Q= 14793\nIG1hbmlmZXN0 14794\nYXR0ZW4= 14795\nIGZydXN0cg== 14796\nb3ZlbWVudA== 14797\nLmNsaWNr 14798\nIGlp 14799\nIGV4cGFuc2lvbg== 14800\naWdz 14801\nUGFyc2U= 14802\nLlJlZ3VsYXI= 14803\nUm9i 14804\nX2xheW91dA== 14805\n7KA= 14806\nIHRyYW5zbGF0aW9u 14807\nIEJlYXV0 14808\nQmVzdA== 14809\nX0NPTE9S 14810\nPGxhYmVs 14811\nIGxpcXVpZA== 14812\nSVRT 14813\nIHByb2Q= 14814\nMjM5 14815\nIG9wZXJhdGU= 14816\nVUlLaXQ= 14817\nIG5hdHVy 14818\nYXJndW1lbnQ= 14819\nX2RldGFpbA== 14820\nIENlbnRyZQ== 14821\nICItLQ== 14822\nIH19Ig== 14823\nbG9jYWxl 14824\nLnR2 14825\nX3NlcQ== 14826\nIHVwY29taW5n 14827\nQ2hhcnQ= 14828\nIERpdmlzaW9u 14829\nIGNsaW5pY2Fs 14830\nQ29tcGFueQ== 14831\nU2VwYXI= 14832\nbGFz 14833\nIEh1bg== 14834\nOnM= 14835\nIGhlYWRpbmc= 14836\n0L7Qsw== 14837\nICIiKTsK 14838\nW2lk 14839\nYmlh 14840\nIHN0cmV0Y2g= 14841\naWNpZGU= 14842\nIHJlcHJvZHU= 14843\nLnByb2plY3Q= 14844\nbGVnZW5k 14845\nZW5kZXJz 14846\nIHJlc3BvbnNlcw== 14847\nIG9udA== 14848\ncml0aWNhbA== 14849\nIHJlZnVnZQ== 14850\nIExp 14851\nIDoKCg== 14852\nIFRocmVl 14853\nLmNvbnRyb2xsZXI= 14854\nX0lOREVY 14855\nX0ZPUg== 14856\nXE1vZGVscw== 14857\namF4 14858\nCWV4aXQ= 14859\nIOKW 14860\nIGNvdmVycw== 14861\nCXk= 14862\nLS4= 14863\nSU5ET1c= 14864\nIGZhaWxz 14865\naW5jbHVkZXM= 14866\nIGZhdWx0 14867\nNDQw 14868\nIGx5 14869\nNDQ0 14870\nw7Fv 14871\nLnNsaWNl 14872\nSUxFRA== 14873\nIFB1cg== 14874\nIEFzaWFu 14875\nX2JhdGNo 14876\nLk1heA== 14877\ndmw= 14878\nIENPUFlSSUdIVA== 14879\nIGdpYW50 14880\nIE1hbnVhbA== 14881\nIENvcHk= 14882\nQ2xhc3NOYW1l 14883\nSGVhbHRo 14884\nQ3Vyc29y 14885\nSUJPdXRsZXQ= 14886\nIHR3ZQ== 14887\n5rM= 14888\nX2xhYmVscw== 14889\nIGNvbGxlY3RlZA== 14890\nIGZ1cm5pdHVyZQ== 14891\nIGRlYWxpbmc= 14892\nQ29udHJvbHM= 14893\nIEhvdGVs 14894\nY2tz 14895\nIGNob3Nl 14896\n4pSA 14897\nb2Rk 14898\nU1I= 14899\n2Yo= 14900\n7IQ= 14901\nIGFjY29yZA== 14902\nIE1vdmU= 14903\nIE1vZGU= 14904\nIE1vY2s= 14905\nIHRocmVhZHM= 14906\nKysrKw== 14907\nIE9wdGlvbnM= 14908\nUmVmcmVzaA== 14909\nIERpZA== 14910\nJ10tPg== 14911\ndWNj 14912\nX2NoYW5uZWw= 14913\nLmFicw== 14914\nIHt9LAo= 14915\nIFdhbA== 14916\nZXJpb3I= 14917\nIG1haW5seQ== 14918\nIERyaXZlcg== 14919\nTm90Rm91bmRFeGNlcHRpb24= 14920\nIGNvdW50cw== 14921\nZWFt 14922\nICY9 14923\nUXVlc3Rpb24= 14924\nIEFsaQ== 14925\nIGFueW1vcmU= 14926\nZGV0YWls 14927\ndGFpbA== 14928\nIG1pbGU= 14929\nIEZhaXI= 14930\nIHNvcnJ5 14931\nIHN1cnJvdW5kaW5n 14932\nIGFkbQ== 14933\nRGV2 14934\nIG1hcmlqdWFuYQ== 14935\nIFNvdW5k 14936\nIEFzaA== 14937\nRkQ= 14938\nVGVhbQ== 14939\nLnBvcnQ= 14940\nIFtdCgo= 14941\ndWJibGU= 14942\nIGFzYw== 14943\nIGludGVudGlvbg== 14944\nQWNj 14945\nY2hp 14946\ndXN0ZXJz 14947\nIGluc3BpcmVk 14948\nc2Vn 14949\nQ0xV 14950\nIG1hbmlw 14951\nTWV0YWRhdGE= 14952\nQ29ubmVjdA== 14953\nIEJlaA== 14954\nIGZpbmRpbmdz 14955\nIGFzc2VtYmx5 14956\nd29ybGQ= 14957\nIHJlbWFpbmVk 14958\nIHVpZA== 14959\nKC4= 14960\nIG14 14961\nTG9vcA== 14962\nCgoKCgo= 14963\nIGZhbnRhc3RpYw== 14964\nd2hv 14965\nYWtp 14966\nIEJhc2lj 14967\nIFlldA== 14968\nIFVzZXJz 14969\naWtpcA== 14970\nIGhlYWRz 14971\nIE1pY2hpZ2Fu 14972\nX2l0 14973\nIFRvcm9udG8= 14974\nIHJlY29yZGluZw== 14975\nIHN1Ym1pdHRlZA== 14976\nX3ZhcmlhYmxl 14977\nbWVkaWF0ZQ== 14978\nLmdyYXBoaWNz 14979\nIHN0b29k 14980\nIHJlYXI= 14981\ndmVsb2NpdHk= 14982\nX01FU1NBR0U= 14983\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14984\ncm9sZXM= 14985\nIFRvdXI= 14986\nX3llYXI= 14987\nZW5kbWVudA== 14988\nYW1wcw== 14989\nIElyZWxhbmQ= 14990\nbWFs 14991\nIHlvdW5nZXI= 14992\nIHN0cnVnZ2xl 14993\nIGNhYmxl 14994\nIFNETA== 14995\nKCct 14996\nYW5lcw== 14997\nIE5lZWQ= 14998\nLlJvdw== 14999\nUG9s 15000\nIFBI 15001\nX3NjcmlwdA== 15002\nYWdlbQ== 15003\nIEJhcw== 15004\nX3NwYWNl 15005\nLmxvYw== 15006\nOmk= 15007\nYWRy 15008\nIGVuZ2luZWVyaW5n 15009\naXRlbg== 15010\nKSY= 15011\nIHVr 15012\nIExpdHRsZQ== 15013\nX0NPVU5U 15014\neEE= 15015\nQXJyYXlMaXN0 15016\n5o0= 15017\nICIiKQo= 15018\nQW5jaG9y 15019\nIGhhbmc= 15020\ndHdpdHRlcg== 15021\nIGNvbXBldGl0aXZl 15022\nLnNyYw== 15023\n44GX 15024\nIHRyYW5zbGF0ZQ== 15025\nIENyZWF0ZXM= 15026\nb29rcw== 15027\nIFJvbGw= 15028\nJycnCg== 15029\nL3No 15030\nc29tZQ== 15031\nRW5jb2Rpbmc= 15032\nLnJlc29sdmU= 15033\nIGRlc2lnbmVy 15034\nIFN0b3JhZ2U= 15035\nIHph 15036\nIE5ldmVy 15037\nIHNvbWV3aGVyZQ== 15038\nIGJveGVz 15039\nLnNvdXJjZQ== 15040\nIHB5Z2FtZQ== 15041\nIGdyb3du 15042\nLnR3 15043\nKCkpLAo= 15044\nJyxbJw== 15045\nIG9wcG9uZW50 15046\nKHNyYw== 15047\nLmxheWVy 15048\nQVBQ 15049\nIEFjdGl2 15050\nIGd1ZXN0cw== 15051\nIFZBTFVFUw== 15052\nfTsKCgo= 15053\nLm5hdGl2ZQ== 15054\nIGFtb3VudHM= 15055\nLlJF 15056\nIGNsb25l 15057\nIHdlcmVu 15058\nICI8PA== 15059\nX2Fj 15060\nIGJyZWFraW5n 15061\nIHJlbGlhYmxl 15062\nLlBPU1Q= 15063\nIFNreQ== 15064\nICcm 15065\nIHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15066\nYXN0aW5n 15067\naWxsaW9u 15068\nY29tbWVudHM= 15069\ndWx0eQ== 15070\nLm1lbnU= 15071\nL2NvbmZpZw== 15072\nIAoKCg== 15073\nVE9ETw== 15074\nIHB1cmNoYXNlZA== 15075\nX2Nvcg== 15076\nCWF1dG8= 15077\nQ29tcGF0QWN0aXZpdHk= 15078\nY29tcGxldGU= 15079\nX2dyYXBo 15080\naXNvZGVz 15081\nIHNpdHVhdGlvbnM= 15082\nIEhvcg== 15083\nUmVjZWl2ZQ== 15084\n4oCcV2U= 15085\nIGVudGl0aWVz 15086\nLmFzc2VydEVxdWFscw== 15087\n0L7Qug== 15088\nIFNhbnM= 15089\ndmluY2U= 15090\ncm9tcHQ= 15091\nPQo= 15092\nIC8u 15093\nLlNlbGVjdA== 15094\neWx2 15095\nIGJhdHQ= 15096\nQXVkaW8= 15097\nIGluY3JlYXNpbmdseQ== 15098\nLkJ1bmRsZQ== 15099\nIGV4cGxhaW5z 15100\nMDYw 15101\ndGhlYXN0 15102\nLm9mZnNldA== 15103\nIGhhbA== 15104\nIHRlY2huaXF1ZQ== 15105\nX2xpbWl0 15106\nIGRyYXdu 15107\nQVlFUg== 15108\nIGZlYXR1cmVk 15109\neXl5eQ== 15110\nYXRpbg== 15111\ncGhlbg== 15112\nYWNoZWw= 15113\nIVw= 15114\nbG93ZXI= 15115\nIEdS 15116\nIHBhZw== 15117\nIFBhcnNl 15118\nIHRvdQ== 15119\n5LiA 15120\nRGlzdGFuY2U= 15121\nSW5kZXhQYXRo 15122\nIGhlbGw= 15123\nc2lt 15124\nVVRUT04= 15125\nVXNhZ2U= 15126\nZWxlbml1bQ== 15127\nIEZhbGw= 15128\nICIuJA== 15129\nIE11 15130\nIGNydWM= 15131\nIHNvbnQ= 15132\nUkVGSVg= 15133\nMzEx 15134\nIGludGVyaW9y 15135\nIE9seW1w 15136\nLkF1dG9TY2FsZQ== 15137\ncGFyYQ== 15138\nQXhpc0FsaWdubWVudA== 15139\nIHJpdmVy 15140\nRHRv 15141\nIHdpdGhkcmF3 15142\nUmVhY3Q= 15143\nLWNsYXNz 15144\nYmVmb3Jl 15145\nX2FsbG9j 15146\nQ29udGVudHM= 15147\nIFdhcw== 15148\nSUNU 15149\nIGZvcm11bGE= 15150\nIGluZGljYXRlcw== 15151\nICAgIAoK 15152\nX3N0b3Jl 15153\naXR0aW5n 15154\nIEl0YWxpYW4= 15155\nX1NldA== 15156\nX3JlcG9ydA== 15157\nIHBpZA== 15158\nX1ZFUg== 15159\nIHdpbnM= 15160\nIENsb3Vk 15161\nIil7Cg== 15162\nY2hlc3Rlcg== 15163\nIGRlbmllZA== 15164\nIHdpcmQ= 15165\nIFN0ZXA= 15166\nIGludmVzdG9ycw== 15167\nYm9sZA== 15168\nX2Rpc3BsYXk= 15169\nb3V2ZXI= 15170\nb3Jlcg== 15171\nUmVzZXQ= 15172\nIHN1cmdlcnk= 15173\nIHN0cmF0ZWdpZXM= 15174\nL21hdGVyaWFs 15175\nX3VuaXQ= 15176\nIGNvdW5jaWw= 15177\nLlBlcg== 15178\nIOKAng== 15179\nIHJlZm9ybQ== 15180\nRnJhbWV3b3Jr 15181\nIGxpc3Rpbmc= 15182\nX2J0bg== 15183\nIGJpcw== 15184\nJWQ= 15185\nZWdhcw== 15186\nIHN1ZGRlbmx5 15187\nX1NFUg== 15188\nMzE1 15189\nIGFv 15190\nX2RpcmVjdG9yeQ== 15191\nZmFz 15192\nIHByZW1pdW0= 15193\nIHRyYWNraW5n 15194\nIEJM 15195\nIG1hdHVyZQ== 15196\nIGJhdGhyb29t 15197\nICcvJw== 15198\nIMSR 15199\nUGVyZm9ybWVk 15200\nIHNvbGRpZXJz 15201\nYXJuaW5ncw== 15202\nIHdhbGtlZA== 15203\nLWNvbg== 15204\nYm90dG9t 15205\nIHN1cnByaXNpbmc= 15206\nIGdlbmU= 15207\nVXN1YXJpbw== 15208\nLkRFRkFVTFQ= 15209\nIE1JVA== 15210\nQ09ERQ== 15211\nIEVneXB0 15212\ncGlja2Vy 15213\neXNxbA== 15214\nQVRVUkU= 15215\nZGV0YWlscw== 15216\nIENvbmZlcmVuY2U= 15217\nSW5mb3JtYXRpb24= 15218\nIE1haWw= 15219\nLWRvd24= 15220\ncmFyaWVz 15221\nYnJv 15222\nIHN1YmplY3Rz 15223\nICcq 15224\n6K+3 15225\nb3JpZW50 15226\nOkA= 15227\ndmVyYm9zZQ== 15228\nRUY= 15229\nIHRvbGVy 15230\nMzEz 15231\nZW5nZXJz 15232\nIGVuZHBvaW50 15233\nIHN0cmFuZ2U= 15234\nIGNvbG9u 15235\nIHByZWZlcnJlZA== 15236\nZGVw 15237\nIEVW 15238\nQVJSQVk= 15239\nIHdoZQ== 15240\nIHB1cA== 15241\nX25vZGVz 15242\nIHRhbGtlZA== 15243\nIGluc3RpdHV0aW9u 15244\nZGJj 15245\nIGV4cG9zZWQ= 15246\ndGVlbg== 15247\nIEZyb250 15248\nVFQ= 15249\nX05PTkU= 15250\nXC9cLw== 15251\ncHJvZ3JhbQ== 15252\nIGVuY291cmFnZQ== 15253\nLmA= 15254\nc2hpcmU= 15255\nIElzbGFt 15256\nMzI1 15257\nZWVu 15258\nTkk= 15259\nJyI= 15260\nLldpZHRo 15261\nIGxpa2Vk 15262\nIHsuLi4= 15263\nIFN5c3RlbXM= 15264\nIHZvdHJl 15265\nIG1hbnVmYWN0dXJpbmc= 15266\nQ29udmVydGVy 15267\nIEluZg== 15268\n7Jo= 15269\nRFRP 15270\nIGluY2hlcw== 15271\nIOCk 15272\nw7k= 15273\nIENoYXJsZXM= 15274\nQlU= 15275\nIikpOwoK 15276\nIExhYm9y 15277\ndW5u 15278\nIGVzdGlt 15279\nbW9iaWxl 15280\nIExlYXJu 15281\nMjgx 15282\nX0NBTEw= 15283\n4oQ= 15284\nIGluZGljZXM= 15285\nIHR1Yg== 15286\nMjg4 15287\naWtpcGVkaWE= 15288\nQ29zdA== 15289\ncm93YWJsZQ== 15290\n66E= 15291\nZ2FnZQ== 15292\nIGZ1bmN0aW9uYWxpdHk= 15293\ndXp6bGU= 15294\nZW1vcw== 15295\nLmxpYg== 15296\nIGRhc3M= 15297\n0LXQug== 15298\nZW5uYQ== 15299\nIHNob3Rz 15300\nIHJlc3RvcmU= 15301\nL0Q= 15302\nRm9yS2V5 15303\nXSxb 15304\nYWxpYXM= 15305\nbGludA== 15306\nLnN0cmVhbQ== 15307\n5qA= 15308\nX0ZPUk1BVA== 15309\nIHNpbHZlcg== 15310\nLnJlcG9zaXRvcnk= 15311\nIGxlZ2lzbA== 15312\nLkJvcmRlcg== 15313\nX2ZlYXR1cmVz 15314\nUGVybWlzc2lvbg== 15315\nIGhvdXNlcw== 15316\nIFdhcnM= 15317\nX0NPTVA= 15318\nIGluanVyaWVz 15319\nIGNvbnN0YW50bHk= 15320\nZmx1dHRlcg== 15321\nRU5V 15322\nIENvbmY= 15323\nIHJlY29nbml6ZWQ= 15324\nIHByYWN0aWNhbA== 15325\nIGRlY2VudA== 15326\nQko= 15327\nXSk7 15328\nYXN0eQ== 15329\nIEFjdGl2aXR5 15330\nLW1vZGU= 15331\nIHNsaWRl 15332\nLklzTnVsbE9yRW1wdHk= 15333\nIFlPVQ== 15334\nUG93ZXI= 15335\naW5kaWNlcw== 15336\nIHF1YWxpZmllZA== 15337\nIHRocm93bg== 15338\naGVsbG8= 15339\nMzE2 15340\nIE5pY2s= 15341\nbGFo 15342\nYXNzZW1ibHk= 15343\nIFNtYWxs 15344\nb2xkaW5n 15345\nU2hvdWxk 15346\nIFNpbHZlcg== 15347\nKHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15348\nIHRvZ2dsZQ== 15349\nLk5vdA== 15350\nQ3RybA== 15351\nOm5pbA== 15352\nIENvbnRpbnVl 15353\nIEJvb3Q= 15354\n5ok= 15355\nIE11cg== 15356\nZG9u 15357\nIEZB 15358\nU25hcHNob3Q= 15359\nIGFzc29jaWF0aW9u 15360\nZm94 15361\nLGE= 15362\nYXppb25l 15363\nXSkNCg== 15364\nQ1RZUEU= 15365\nIGZhZGU= 15366\nIERhcg== 15367\nLm5hdmlnYXRpb24= 15368\nIGx1Y2s= 15369\nU0NSSQ== 15370\nIERlYWQ= 15371\nIHRlcm1pbmFs 15372\nX0xFTkdUSA== 15373\nIGVmZmljaWVuY3k= 15374\nIHVudw== 15375\nIG5hcnJvdw== 15376\naW1lbnRv 15377\nKENvbG9y 15378\nIFNlYQ== 15379\nX2FyZWE= 15380\nLEE= 15381\nX29wdA== 15382\nIEhpbGxhcnk= 15383\nLnRhc2s= 15384\nIEphYw== 15385\nYXN0ZWQ= 15386\nIEFkYW0= 15387\nIElsbGVnYWw= 15388\nIHNlYXJjaGluZw== 15389\nSW5zdGFuY2VPZg== 15390\nSmF2YQ== 15391\nIEZvcm1hdA== 15392\nIHJlYWxpemVk 15393\nIENoaWxkcmVu 15394\nIGtpbA== 15395\nKGZyYW1l 15396\n4oCdLgoK 15397\nIHNjZW5hcmlv 15398\nIl0pOwo= 15399\nIGluY3JlZGlibGU= 15400\nbGl4 15401\nSU9FeGNlcHRpb24= 15402\nIFF1ZXN0 15403\naWx0eQ== 15404\nIHVubG9jaw== 15405\n4oKs 15406\nIHJlZmVyZW5jZXM= 15407\nIFZlcnQ= 15408\nQmluZGluZw== 15409\nZWdhdGl2ZQ== 15410\nIHdyYXA= 15411\nLmRhdGFiYXNl 15412\nKGNvbnRlbnQ= 15413\nQnVm 15414\nIFRyYWQ= 15415\nIEF1ZA== 15416\ndHJhY2U= 15417\nLm1vY2s= 15418\nIHRoZXJhcHk= 15419\nCUw= 15420\nLlRvSW50 15421\nIEtpbmdkb20= 15422\nQnVz 15423\naGF1c3Q= 15424\nIiIiCgo= 15425\nKGVuZA== 15426\nLmRyYXdhYmxl 15427\nW107Cg== 15428\nIEhvc3BpdGFs 15429\nIHBoYXJt 15430\nLS0tLS0= 15431\nIEFH 15432\nw6lk 15433\nPiIpOwo= 15434\nIHdhbGxldA== 15435\nYXRhYmxl 15436\nKSQ= 15437\nIG1vbnRobHk= 15438\nIGRpYWdub3N0aWM= 15439\nU3ltYm9s 15440\nIGl0ZXJhdG9y 15441\ndW5maW5pc2hlZA== 15442\nIGltbWlncmF0aW9u 15443\nc3I= 15444\nUk9X 15445\nKGdhbWU= 15446\nIGNsb3RoZXM= 15447\nIFVudA== 15448\nIGFjdGl2YXRpb24= 15449\nX0Nvbg== 15450\nMjcz 15451\nLmhhc2g= 15452\nIGluaXRpYWxseQ== 15453\nLkhhc2g= 15454\nIGN1dHM= 15455\nZm91bmQ= 15456\nIFN0b3J5 15457\n0YbQuA== 15458\nYWNhbw== 15459\nX1RZUA== 15460\ncHJvdG8= 15461\nZXN0cg== 15462\nLXBhZ2U= 15463\nYWhy 15464\nIGluY29ycmVjdA== 15465\nIEpvc2VwaA== 15466\nVGV4dEJveENvbHVtbg== 15467\nX3N0eWxl 15468\nIERhbmllbA== 15469\nc2hlZXQ= 15470\nIGxpdg== 15471\nbGluZWQ= 15472\nIHJh 15473\nUnVudGltZQ== 15474\nX2VtcHR5 15475\nc2x1Zw== 15476\nX3N0cnVjdA== 15477\n64o= 15478\nbXU= 15479\nIHBlcm1pdHRlZA== 15480\nIHJlZ2lvbmFs 15481\nIHNvYnJl 15482\nIFN1Y2g= 15483\nIFtf 15484\nIHJvb2Y= 15485\nLkFsaWdubWVudA== 15486\ndGltZXM= 15487\nLm1zZw== 15488\nIGNoZXN0 15489\nIFRhYg== 15490\nIGVzdGE= 15491\nw6Ru 15492\nIHN1YnNjcmlwdGlvbg== 15493\nKGNvbW1hbmQ= 15494\nc3BlY2lhbA== 15495\nIG1lYWw= 15496\nIik6Cg== 15497\nX2N0eA== 15498\nIGNsb3NlbHk= 15499\nMzA5 15500\nZXRyeQ== 15501\nLWJl 15502\nYWRlbA== 15503\nIFJhbQ== 15504\naWdlc3Q= 15505\nIFNwYW5pc2g= 15506\nIGNvbW1pdG1lbnQ= 15507\nIHdha2U= 15508\nKj4o 15509\nUEhQ 15510\nX3s= 15511\nY2tlcg== 15512\nPExpc3Q= 15513\nX251bGw= 15514\nMzkw 15515\nIFJlc2VydmVk 15516\nIGluaGVy 15517\nLkNvbHVtbnM= 15518\nLkFzcE5ldA== 15519\nX0lOVkFMSUQ= 15520\nIFBhcmFtZXRlcg== 15521\nIGV4cHI= 15522\nfXs= 15523\nQ2VsbFN0eWxl 15524\nIHZhbHVhYmxl 15525\nIGZ1bm55 15526\nSW52 15527\nIHN0YWJsZQ== 15528\nKnQ= 15529\nIHBpbGw= 15530\nMjk5 15531\ncGxpZXJz 15532\nIENTUw== 15533\nIENvbmRpdGlvbg== 15534\nIFNwZWVk 15535\ndWJsaXNoZXI= 15536\nMjU5 15537\nIG9mZmVuc2l2ZQ== 15538\nY2VzdA== 15539\naWNhcw== 15540\nIHNwYXJr 15541\nIFByb3Rl 15542\nc2V0dXA= 15543\nSUZZ 15544\nIFRheA== 15545\nV2hv 15546\nRmFtaWx5 15547\nLWZvcg== 15548\nLnVr 15549\nIGZhc2M= 15550\nc3Zn 15551\nIikpLg== 15552\nIGJpcnRoZGF5 15553\n4paI 15554\ndmVo 15555\nZWxsZWQ= 15556\nIGltcG9ydHM= 15557\nIElzbGFtaWM= 15558\nVEE= 15559\nIFN0YW4= 15560\nd2VhdGhlcg== 15561\nIHN1c3BlY3Q= 15562\nZWF0dXJl 15563\nZW5uZXM= 15564\nV00= 15565\nLm1pbmVjcmFmdA== 15566\nYXZpZA== 15567\n6L0= 15568\nLnNlY3VyaXR5 15569\naW5vcw== 15570\nR29vZA== 15571\nIG1hcmNo 15572\nNjU1 15573\nMjU3 15574\nIHBvc3Nlc3M= 15575\ndXN1YXJpbw== 15576\nQ29ucw== 15577\nYW1iZXI= 15578\nY2hlZHVsZXI= 15579\nIGhvcnNl 15580\n570= 15581\nKGJvZHk= 15582\nIFRyYW5zZm9ybQ== 15583\nX2RlY29kZQ== 15584\nLnN2Zw== 15585\nIGZvbw== 15586\nIGRlbGxh 15587\nZXh0ZW5kcw== 15588\nYW1lcg== 15589\nIHByb2Nlc3NlZA== 15590\nIEhhcnI= 15591\nIEFJ 15592\nIGtv 15593\nQ0hBUg== 15594\nKCU= 15595\nIHRhcA== 15596\nKHsn 15597\nY3JvbGw= 15598\nRE9N 15599\nIHRlYQ== 15600\nIHJlaW4= 15601\nMjYx 15602\nIHdvcmxkd2lkZQ== 15603\nX2Zu 15604\nc2hh 15605\nIGJpcg== 15606\nw6fDtWVz 15607\nPSIjIj4= 15608\nIHJlcHJlc2VudGVk 15609\naWxsZXI= 15610\nKGV4cGVjdGVk 15611\nIGRhbmNl 15612\nIHZpc2l0b3Jz 15613\nLmNvbmNhdA== 15614\nLWJpdA== 15615\nVVJSRQ== 15616\nIFJvZw== 15617\ndnA= 15618\naXBo 15619\nIExMQw== 15620\naXRsZWQ= 15621\naWFtaQ== 15622\nQ29sbA== 15623\nX3JlYWw= 15624\nX3Nob3c= 15625\nX2ZvbGRlcg== 15626\nIGRhcg== 15627\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 15628\nIGxhdHRlcg== 15629\nYXJjaHk= 15630\nIGJvdw== 15631\nIG91dGNvbWU= 15632\nNTEw 15633\nIFBvc3RlZA== 15634\nIHJpc2tz 15635\nIFRoZXJlZm9yZQ== 15636\nIG93bmVyc2hpcA== 15637\nIHBhcmFsbGVs 15638\nIHBlbmRpbmc= 15639\nZ2VvbWV0cnk= 15640\nIHJlY29nbml6ZQ== 15641\nU1RFTQ== 15642\nIENQ 15643\nIGltbWlncg== 15644\nSVRMRQ== 15645\nICAgIAkJ 15646\nY29ubmVjdGVk 15647\nIHNtaWxl 15648\nKGRvY3VtZW50 15649\nXENvbXBvbmVudA== 15650\ndmVydGljYWw= 15651\nIGNvbnN1bXB0aW9u 15652\nIHNob2Vz 15653\nLmltcGw= 15654\ndW5rcw== 15655\nLiI7Cg== 15656\nIGZvb2Rz 15657\nXyk7Cg== 15658\nLmFzc2VydFRydWU= 15659\nIHBpcGVsaW5l 15660\nIGNvbGxlY3Rpb25z 15661\nIGVhcm5lZA== 15662\nIENlcnQ= 15663\nIHBhcnRuZXJzaGlw 15664\nKGFjdGlvbg== 15665\nMjYz 15666\nIGNk 15667\nIFZlcnk= 15668\nT3B0aW9uYWw= 15669\nIHNjcmVlbnM= 15670\nIHRpdGxlcw== 15671\nZW5lcmF0b3I= 15672\nIGFiYW5kb24= 15673\na2luZA== 15674\nSUxURVI= 15675\nIGNsb3Npbmc= 15676\nbGljYQ== 15677\nX2ludGVy 15678\nIGNhbXB1cw== 15679\nc2V0dGluZw== 15680\nU3ByaXRl 15681\n44Gv 15682\nX3JlcGx5 15683\nVG9MaXN0 15684\nOlwvXC8= 15685\nZWRl 15686\nIGZvbGtz 15687\nIGJvYXQ= 15688\nKGFyZ3Y= 15689\nIHBlcm1hbmVudA== 15690\nIGNhcnJ5aW5n 15691\nIGNvbnNlcnZhdGl2ZQ== 15692\naW1wb3J0YW50 15693\nLmltZw== 15694\nIEltbQ== 15695\nIGRpbWVuc2lvbnM= 15696\nYWxhbmQ= 15697\nc2luZ2xl 15698\nRXhpdA== 15699\nLS0tLS0tLS0tLQ== 15700\nYXJpYW50 15701\ndGVybmFs 15702\nU2Vjb25kcw== 15703\nIEl0YWx5 15704\nb3RsaW4= 15705\nLlJlc3VtZQ== 15706\nPSci 15707\nKT09 15708\nY2VwdG9y 15709\nIHNjYQ== 15710\nL21haW4= 15711\nU2VjdXJpdHk= 15712\nX2RhdA== 15713\nIGxldHM= 15714\nIGFxdQ== 15715\nIHdoZW5ldmVy 15716\nYmVycnk= 15717\nIGFjdGluZw== 15718\nYW50aQ== 15719\ncGQ= 15720\nJmd0 15721\n5q0= 15722\nWm9uZQ== 15723\nVG9kYXk= 15724\nIS4= 15725\nMzIz 15726\nVG9Qcm9wcw== 15727\nYWJpcw== 15728\naXRhYmxl 15729\nIGdhbA== 15730\nXXs= 15731\naXpvbmE= 15732\nIGluY29udHJp 15733\nTkVU 15734\nLy8vCg== 15735\nW2lu 15736\nX3NhdmU= 15737\nIGV4ZW0= 15738\nIEtlbm4= 15739\nIGV2b2x1dGlvbg== 15740\nMjcy 15741\ndmFycw== 15742\nX3N0YXRz 15743\nLW9ubHk= 15744\nIENvbG9yYWRv 15745\nIHdhdGNoZWQ= 15746\nYm91cg== 15747\nIHNldmVyZQ== 15748\nIHByb2Zlc3Npb25hbHM= 15749\ncG9ydGlvbg== 15750\nIGd1YXJhbnRl 15751\n0LM= 15752\nIHB1c2hlZA== 15753\nIEdp 15754\n770= 15755\nIHR1bQ== 15756\nIEF6 15757\nIEVkZ2VJbnNldHM= 15758\nIikpOw0K 15759\naXNzZQ== 15760\nLmFj 15761\nU2V0dGluZw== 15762\nIGFwcHJlY2lhdGU= 15763\nIFZhbHVlRXJyb3I= 15764\nIHN1cnZl 15765\nIFJvbGU= 15766\nLkludGVy 15767\ncGxvdGxpYg== 15768\namV0 15769\nZGFt 15770\nIHBsYXRmb3Jtcw== 15771\ndGVsZQ== 15772\nVVRP 15773\nIEludGVybmFs 15774\nKzo= 15775\nfTsNCg== 15776\nR2VuZXJhbA== 15777\nXEVudGl0eQ== 15778\nIGxhd3llcg== 15779\ncXVpdg== 15780\nIFBvc3Rz 15781\naXNv 15782\nIGFjY3Vt 15783\nb2Jl 15784\nIG1hcmtz 15785\nIF07Cgo= 15786\nCXRleHQ= 15787\nLnN1Y2Nlc3M= 15788\nY3Vycg== 15789\nYXNh 15790\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 15791\nIHRoaW4= 15792\nX292ZXI= 15793\nMDE2 15794\nYXJlc3Q= 15795\nIE9z 15796\nKGFkZHJlc3M= 15797\nIHZlbG9jaXR5 15798\nIFtdOwoK 15799\nPSIuLi8uLi8= 15800\nIFByaXY= 15801\nYm93 15802\nIGd1YXJhbnRlZQ== 15803\nJQoK 15804\nMzIy 15805\nIGV2YWx1YXRl 15806\nLkxFTkdUSA== 15807\nIGludmVudG9yeQ== 15808\ncWE= 15809\nX2RlYnVn 15810\nLk9uQ2xpY2tMaXN0ZW5lcg== 15811\nIGxpZXM= 15812\nIGFzc2Vzc21lbnQ= 15813\nZGF0ZXRpbWU= 15814\nLmJhY2tncm91bmRDb2xvcg== 15815\nICovDQoNCg== 15816\ncmFm 15817\ndW53cmFw 15818\nIEZvb3Q= 15819\nIG5vdGlmeQ== 15820\nIGxvd2VzdA== 15821\nRE9DVFlQRQ== 15822\nIGxhbmd1YWdlcw== 15823\nZXh0cmE= 15824\nLWJhY2s= 15825\nIGVpbmVu 15826\ndGVtcGxhdGVz 15827\nMjcx 15828\nX3Bhc3M= 15829\nNTIw 15830\nNzc3 15831\nIE11c3Q= 15832\nIGVzdMOh 15833\nX2NvcmU= 15834\nIFNjb3Q= 15835\nQUk= 15836\nIGJpYXM= 15837\nYXRpb25zaGlw 15838\nQ29uc3RhbnQ= 15839\nIHByb2dyYW1taW5n 15840\nSW5z 15841\ndXNwZW5kTGF5b3V0 15842\nIFBST1ZJRA== 15843\nYW50ZXM= 15844\nIHNoaXJ0 15845\naW5hdGVk 15846\nLk9L 15847\nW2E= 15848\nIHRoaW5rcw== 15849\nPwoKCgo= 15850\nIHJlZ2FyZGxlc3M= 15851\nIE1hZ2lj 15852\ndWxhdGluZw== 15853\nCWNsYXNz 15854\nYWRkR3JvdXA= 15855\nUkVBVEU= 15856\nIFNV 15857\nIHNpbXBs 15858\nY29weXJpZ2h0 15859\nIGJ1bmNo 15860\nIHVuaXZlcnNl 15861\nOTUw 15862\nIEVycg== 15863\nIHByZXNlbnRhdGlvbg== 15864\nY2F0ZWdvcmllcw== 15865\nIGF0dGFjaA== 15866\nLnNpZ24= 15867\nX0FD 15868\nIGRpc2NpcGw= 15869\nIHJlZ3VsYXJseQ== 15870\nIHByaW1hcmlseQ== 15871\naW5rcw== 15872\nW1s= 15873\nLnJhbmQ= 15874\nLnNob3VsZA== 15875\nb3dudG93bg== 15876\nPSIn 15877\nIHNhbnM= 15878\nIHN1cHBvcnRlcnM= 15879\nc2VxdWVuY2U= 15880\nR08= 15881\nLi4KCg== 15882\nIFNwcg== 15883\nIGNhcmVmdWxseQ== 15884\nVUlDb2xvcg== 15885\nZGVzdHJveQ== 15886\nIHRvZG9z 15887\nIE9SREVS 15888\nb3R0ZWQ= 15889\nIGRvbnQ= 15890\nYXVkaQ== 15891\nX3BsYXllcg== 15892\nZ3Jl 15893\nNjI1 15894\nIE9pbA== 15895\nPGJvZHk= 15896\nX3N0YWNr 15897\nLlBhZGRpbmc= 15898\nIFByb2R1Y3Rz 15899\nIHByaXZpbGU= 15900\nMDE0 15901\nIGluanVyZWQ= 15902\nIEZ1cnRoZXI= 15903\nIGFsaWFz 15904\nLlJlc3VtZUxheW91dA== 15905\nX0xFTg== 15906\nIHNlcw== 15907\nJ107Cgo= 15908\nY3JlZW5z 15909\nIGRpcmVjdGVk 15910\nLlN1c3BlbmRMYXlvdXQ= 15911\nb2RnZQ== 15912\nLkF0 15913\nbWFya3M= 15914\nIFVuaXZlcnM= 15915\nZXJ0cw== 15916\nIEVzYw== 15917\nIG5hdmJhcg== 15918\nIHV0aWxpdHk= 15919\nYWdub3N0aWNz 15920\nIGluamVjdA== 15921\nIEROQQ== 15922\nICIsIg== 15923\nYW1hcg== 15924\nIGV1 15925\nIHJlc3RhdXJhbnRz 15926\nX3B1dA== 15927\ndXRlcnM= 15928\nVG9vbFN0cmlw 15929\ndHc= 15930\naXN0cm8= 15931\nIHpvb20= 15932\nIGxlZ2l0 15933\ncGVjaWZpYw== 15934\nMjg1 15935\nIENvbWU= 15936\nIGxvY2FsU3RvcmFnZQ== 15937\nIGFic29y 15938\nLlBhbmVs 15939\nIERlc2lnbmVy 15940\nIG93 15941\nSUNBTA== 15942\nX3VyaQ== 15943\nKGZpZWxk 15944\nIHN1cGVydg== 15945\nRXhpc3Rz 15946\nIHJlc3BlY3RpdmVseQ== 15947\nIFN0YW5k 15948\nQ29uZg== 15949\ndXNzaWFu 15950\nMzY0 15951\nIGFyYw== 15952\nIG5k 15953\ndWNrcw== 15954\nIHJlc3Ry 15955\nIHNlYXNvbnM= 15956\nIENoYXB0ZXI= 15957\nIFN3aXRjaA== 15958\ncGlj 15959\nIGhp 15960\nbG9hZGVk 15961\nIGZsdWlk 15962\nLWJ0bg== 15963\nIHJ1bnRpbWU= 15964\nLml0 15965\nMjU4 15966\nQk4= 15967\nT3BhY2l0eQ== 15968\nYXNhbnQ= 15969\ncnlwdGlvbg== 15970\nLW5hdGl2ZQ== 15971\nIHRhdWdodA== 15972\n5a8= 15973\nYWdtZW50 15974\nIG11bA== 15975\nUmVnaXN0cnk= 15976\nX2dyaWQ= 15977\nIEJyb29r 15978\nOlNldA== 15979\nIG1vbmdvb3Nl 15980\nQU1FUw== 15981\naW5uZXJIVE1M 15982\nIHNvY2k= 15983\nIEludGVs 15984\nZ2V0SWQ= 15985\nQ21k 15986\nIGFjY2Vzc2libGU= 15987\ncmFtZXM= 15988\nbGV0b24= 15989\nIF9fKA== 15990\nCWRlbGV0ZQ== 15991\nIFNxdWFyZQ== 15992\nIgoKCg== 15993\nIGJ1Y2tldA== 15994\nYXZvcml0ZQ== 15995\nIEJyZWFr 15996\nKytd 15997\nIGJydXNo 15998\nMjY2 15999\nIHRlbnNvcg== 16000\nL2h0dHA= 16001\nVGlsZQ== 16002\nIGZ1bmN0aW9uYWw= 16003\nICIq 16004\nd2hlbA== 16005\nIHRlbnQ= 16006\nIENoYXJhY3Rlcg== 16007\nIHNlZXM= 16008\nLlNU 16009\nQmln 16010\nIGV4dGVybg== 16011\nVXJscw== 16012\nKSkpKSw= 16013\nIEpy 16014\nLkJ1aWxkZXI= 16015\nLjs= 16016\nbmw= 16017\nX0luaXQ= 16018\nIEhFUg== 16019\nxbxl 16020\nbXlzcWxp 16021\nX2ljb24= 16022\ndmFu 16023\nIGZlZWxpbmdz 16024\nIGxlYW4= 16025\nIGhvcGluZw== 16026\nVFY= 16027\nPSI8Pz0= 16028\nIGN1cnZl 16029\nX3N0ZA== 16030\nX0xJTkU= 16031\nZHN0 16032\nIG1vcmFs 16033\nZW1lcw== 16034\nb2d5 16035\nIHVyYmFu 16036\nMDE1 16037\nIGFzaWRl 16038\nIGVkaXRpbmc= 16039\nQURE 16040\nU2Vjb25k 16041\nVHJhY2s= 16042\nIHZvdGluZw== 16043\nIGhvbm9y 16044\nLics 16045\nZWxsZW4= 16046\nQ2hhdA== 16047\nIGltcHJvdmVtZW50 16048\nJ10KCg== 16049\noIE= 16050\nIHBhcnNlZA== 16051\nICAgICAgICAgCg== 16052\nIGxhenk= 16053\nIGZhbGxpbmc= 16054\nU2VyaWFsaXpl 16055\nIFBh 16056\nX2dy 16057\nIGZvcmV2ZXI= 16058\nLndoaXRl 16059\nLlF1ZXJ5 16060\nQmVk 16061\nIER1 16062\nIHJlc3VtZQ== 16063\nIHBhcGVycw== 16064\nIEluaXQ= 16065\nIHN1ZmZlcmluZw== 16066\n4oCL 16067\nIGRlY2xhcmF0aW9ucw== 16068\nKCkt 16069\nIGV4ZWN1dGVk 16070\nIEhvbA== 16071\nLmJsb2Nr 16072\n44Oz 16073\nU0s= 16074\nIHN0dWNr 16075\nIExvY2s= 16076\naW5jaXBhbA== 16077\nTnVsbGFibGU= 16078\nIHNlc3Npb25z 16079\ndW5p 16080\nIGNvdXA= 16081\nYXBwcm8= 16082\nZ2hhbg== 16083\nX3Bvb2w= 16084\nMjgz 16085\nCWlk 16086\nIHNsb3Rz 16087\nIG1lZGljaW5l 16088\nIGdsYWQ= 16089\nIE1vbm9CZWhhdmlvdXI= 16090\nYXRyZQ== 16091\nICQoJw== 16092\nbWVyaWNhbg== 16093\nYWdn 16094\nIGthbm4= 16095\nX2Nvbm5lY3Q= 16096\nIGJyYW5kcw== 16097\nIHNrZQ== 16098\nIGRpZ2l0 16099\nPG4= 16100\nIGJhY2t1cA== 16101\nIHBlcnNvbmFsbHk= 16102\nLlByb3BlcnR5 16103\nMzE0 16104\nLmNvbW1pdA== 16105\nIGNyeQ== 16106\nX2NvdW50ZXI= 16107\nIG1hbGxvYw== 16108\nIGdyYW4= 16109\nIERyb3A= 16110\ncGxhdGZvcm0= 16111\ncmVkZW50aWFscw== 16112\naW5raW5n 16113\nIFVJTA== 16114\ndWJz 16115\nIG1s 16116\nbGVzc2x5 16117\nR2VuZXJhdGVk 16118\nZXJlb3R5cGU= 16119\nIGJhdA== 16120\nTGF5b3V0UGFuZWw= 16121\nTE9U 16122\nIik7DQoNCg== 16123\nIG11c2NsZQ== 16124\nIGNlcnRpZmljYXRl 16125\nQU5ETEU= 16126\nIGhhcmRlcg== 16127\nIHBpeGVscw== 16128\nKSIsCg== 16129\nLkhlYWRlcg== 16130\nIGRldmVsb3Blcg== 16131\nIExhcw== 16132\nZWdhbg== 16133\nLjw= 16134\nIGV4cGxvZGU= 16135\nIHBhcnRpY2lwYXRl 16136\nUGF0dGVybg== 16137\nKHRhYmxl 16138\nIFRFWFQ= 16139\nY29uc3RhbnRz 16140\neEQ= 16141\ndGhldw== 16142\nfSwKCg== 16143\n44Gu 16144\nX2Rlcw== 16145\nIHN1YnN0cg== 16146\nIFNtYXJ0 16147\nIHNjYWxh 16148\nZ2VudA== 16149\nLWJhcg== 16150\nZXNzaW9uYWw= 16151\ndW1icw== 16152\nLmV4ZWM= 16153\nJ1w= 16154\nVEs= 16155\ndW5pc3Q= 16156\ncHJvb2Y= 16157\nY2lhbA== 16158\ncHJvYw== 16159\nPXsi 16160\nLmhyZWY= 16161\nPSQo 16162\nIGx1bmNo 16163\naXNjYWw= 16164\nIEVudHJ5 16165\nIG91dGRvb3I= 16166\nc2VtYmxl 16167\nIGVzc2VudGlhbGx5 16168\nL0c= 16169\nW10p 16170\nJSI= 16171\nc3Rlbg== 16172\nVVNFRA== 16173\nIGR1c3Q= 16174\n5bA= 16175\nCQoK 16176\nIHJldGlyZQ== 16177\nIGZpYg== 16178\nQWx0aG91Z2g= 16179\nIGxvdmVz 16180\nIHJlYWRz 16181\neWNsZXM= 16182\nIEhlbA== 16183\nX3VpbnQ= 16184\nICcuJA== 16185\nX2luaXRpYWw= 16186\nTmFtZWQ= 16187\nIGZ1bmRhbWVudGFs 16188\nQURJTkc= 16189\nIHRvdw== 16190\nIEFERA== 16191\nIEFjYWRlbXk= 16192\nMDUw 16193\nOlN0cmluZw== 16194\nIGNvbXByZWhlbnNpdmU= 16195\nLnNjYWw= 16196\nIE1ldGE= 16197\nTWVzc2FnZXM= 16198\nLmFubm90YXRpb25z 16199\nXFJlc3BvbnNl 16200\nIGFja25vd2xlZA== 16201\nIEFSRQ== 16202\nXT09 16203\nIGNsZWFuaW5n 16204\n6L4= 16205\nRW50aXRpZXM= 16206\nIFNhbGVz 16207\nIFdpcw== 16208\nLmV4dGVuZA== 16209\nYWxsZW5nZQ== 16210\nIGdhbWluZw== 16211\nJHF1ZXJ5 16212\nSUNFUw== 16213\nRVRDSA== 16214\nSG9yaXpvbnRhbA== 16215\ncXVlbnRpYWw= 16216\nODUw 16217\nQkFDSw== 16218\nZGV2ZWxvcA== 16219\naXNvcg== 16220\nKGNvZGU= 16221\nLUs= 16222\nX1BJTg== 16223\ncmVxdWVuY3k= 16224\nIFF1ZXN0aW9u 16225\nX2NvbnRhaW5lcg== 16226\nX21vZHVsZXM= 16227\nIEplcnNleQ== 16228\nX2RpZmY= 16229\nLmVs 16230\nICooKA== 16231\nY250 16232\nIFNh 16233\nQ1BQ 16234\naW5pdGU= 16235\nIHVudXM= 16236\nLXdoaXRl 16237\nZXRhcnk= 16238\nIGludm9sdmluZw== 16239\nID8+DQo= 16240\nYmVzdA== 16241\nYWxsYXM= 16242\nZW50ZWQ= 16243\nICAgICAgICAgICAgICAgICAgICAgICAgCg== 16244\nX2Nvbm5lY3Rpb24= 16245\nIHJlcG8= 16246\nZW5hYmxlZA== 16247\n0LDQug== 16248\nIHNoYQ== 16249\nIG1lbWJlcnNoaXA= 16250\nU3RhdHVzQ29kZQ== 16251\naW5hdGluZw== 16252\nX3Nt 16253\nX2N1c3RvbQ== 16254\nX3dlaWdodA== 16255\nIGNzcw== 16256\nU3RhdA== 16257\nX2Vudg== 16258\nbGlua3M= 16259\nVFJM 16260\nIEhpdA== 16261\nLHI= 16262\ndXBpZA== 16263\nIG9wZW5z 16264\nIGdlbnQ= 16265\nX3Zpcw== 16266\nIGpveQ== 16267\nPHc= 16268\nX2Nvc3Q= 16269\nIFB5T2JqZWN0 16270\ncmVuY2U= 16271\nIEdlb3JnaWE= 16272\nIEJyb2Fk 16273\nbW1h 16274\n4oI= 16275\ncGY= 16276\nICJcIg== 16277\nICgm 16278\nb21v 16279\nIGxpdGVyYWxseQ== 16280\niJg= 16281\nbWV0cmlj 16282\nIGJhcnM= 16283\nemVk 16284\nKHdpbmRvdw== 16285\nIElzcmFlbGk= 16286\nIGZvcm1hbA== 16287\naWRlbnRpZmllcg== 16288\nLmRhbw== 16289\nIERlYXRo 16290\nJTsK 16291\nIGRlY2xhcmU= 16292\nYXJtcw== 16293\nUkVBTQ== 16294\nUEVSVFk= 16295\nIGNvbnNlcXVlbmNlcw== 16296\ndG9vbHM= 16297\nUGVvcGxl 16298\nIFdoaWNo 16299\nPigpOw0K 16300\nLmRlY29kZQ== 16301\nX0FDVA== 16302\nQnV0dG9ucw== 16303\nLmZsb2F0 16304\nLkZpcnN0 16305\n66U= 16306\nIFBvbGl0 16307\nIFhDVA== 16308\nVGFncw== 16309\nIENHRmxvYXQ= 16310\nPXN0cg== 16311\nIGxlYWY= 16312\nLWNoZWNr 16313\nIElzcw== 16314\nLnN5c3RlbQ== 16315\nbG9nb3V0 16316\nYWNodA== 16317\nQW5nbGU= 16318\nc2lu 16319\nY2hhcnQ= 16320\nSU5URVI= 16321\nIE5VTQ== 16322\nQmFzaWM= 16323\nLlByb3BlcnRpZXM= 16324\n5Lit 16325\nX2NoYW5nZQ== 16326\nIEJyYXppbA== 16327\nQWJzdHJhY3Q= 16328\nIDorOg== 16329\nX3VzZQ== 16330\n0LDQuw== 16331\nMjY4 16332\nIEx5 16333\nSUJVVA== 16334\nIG91dGVy 16335\nIC0tPg0K 16336\nIHJlbGllZg== 16337\nbGFw 16338\ncXVlcg== 16339\nX3BhcmVudA== 16340\naGVhcA== 16341\nTE9TRQ== 16342\nIGNvbWJpbmU= 16343\nIFJvc2U= 16344\nb3dlcnM= 16345\nIHByb2NlZHVyZXM= 16346\nIFNvcnQ= 16347\nYW5pbQ== 16348\ndmFyaWFudA== 16349\nZWhpY2xl 16350\nIHNpZ25pbmc= 16351\nUHJpbWFyeQ== 16352\nY3VycmVuY3k= 16353\nIHNleGU= 16354\nb2Vu 16355\ndGhldGE= 16356\nZW1hbg== 16357\nIGltcHJlc3NpdmU= 16358\nKCdf 16359\nCVU= 16360\nIFRleHRTdHlsZQ== 16361\nX2NudA== 16362\nIHNsaWNl 16363\nKCc6 16364\nIHVuZGVyc3Rvb2Q= 16365\nSGlz 16366\nMjc3 16367\nMDEz 16368\nIGluZm9ybWVk 16369\nIG5pY2s= 16370\nNDI5 16371\nKFRBRw== 16372\naGQ= 16373\nIGVsZWN0aW9ucw== 16374\nZXN0dXJl 16375\nIFNhbnRh 16376\nIENvYXN0 16377\nLnBkZg== 16378\naW5jaXBsZQ== 16379\nLmNsb25l 16380\nYm9ybg== 16381\ndXRh 16382\nIGxpY2Vuc2Vk 16383\nQ3I= 16384\nIGJyZWFk 16385\nIEhvdXN0b24= 16386\nIG5vZA== 16387\nIGhvcGVz 16388\nIENHUmVjdA== 16389\nIGd1aWx0eQ== 16390\nLmdpZg== 16391\nIHJvc2U= 16392\nLkNvbW1vbg== 16393\nVGlw 16394\nQU5L 16395\nIEZD 16396\nRHVyaW5n 16397\nIFN5bWZvbnk= 16398\nIGRlZmVuc2l2ZQ== 16399\na20= 16400\nKT4= 16401\nYXJjaGl2ZQ== 16402\nIFVSSQ== 16403\neWNsaW5n 16404\nLW8= 16405\nIFdlYnNpdGU= 16406\nQU1Q 16407\nNDA1 16408\naXNobWVudA== 16409\nIGRvY3RvcnM= 16410\nRGlyZWN0 16411\nQVJJ 16412\nIFJlZGlyZWN0 16413\naWVyZW4= 16414\nOTYw 16415\nX2Rpc3Q= 16416\neW8= 16417\nIFByb2dyZXNz 16418\nIHp1bQ== 16419\nIG1lbW9y 16420\nIEVE 16421\nIGp1cg== 16422\n5o2u 16423\nX1RBQkxF 16424\nIHV1aWQ= 16425\nRXhwcg== 16426\nLmhlYWQ= 16427\nKCcl 16428\ncG9pbnRlcg== 16429\nIGVzdGltYXRl 16430\nIEdyZWc= 16431\nIGxvYWRlcg== 16432\nIGlPUw== 16433\nIG1lbnM= 16434\nW3k= 16435\nIHJlZnVzZWQ= 16436\nIHByZWNpc2lvbg== 16437\naXNjaA== 16438\nIEFDVElPTg== 16439\nQ2xvdWQ= 16440\nc1dpdGg= 16441\nKHJldA== 16442\nMjky 16443\nX0FERFI= 16444\nX2NvbmY= 16445\nKGRm 16446\nIGxvY2tlZA== 16447\nIHJpc2luZw== 16448\n44O744O7 16449\nIE1z 16450\nIHNjZW5lcw== 16451\nX0VYVA== 16452\nX3Jhdw== 16453\nX3RoZQ== 16454\ncGVvcGxl 16455\nIHJlY29u 16456\nIEZ1bg== 16457\nIGJsZXNz 16458\nIFVwZGF0ZWQ= 16459\nNDIy 16460\nw7xu 16461\nICAgICAgICAgICAgDQo= 16462\ncGVjdGlvbg== 16463\nUmVsZWFzZQ== 16464\nLmxvZ2dlcg== 16465\nIFNZ 16466\nIGNvdW5zZWw= 16467\ndXJk 16468\nX3RydWU= 16469\nIGV2ZXJ5Ym9keQ== 16470\naXZvdA== 16471\nIGhlbmNl 16472\nIE5BUw== 16473\nNzg5 16474\nIG9wcG9zZWQ= 16475\ndW5rbm93bg== 16476\nIERFU0M= 16477\nIENoYWly 16478\nZmFpbGVk 16479\nIElOQ0xVRElORw== 16480\nMzg2 16481\nMzUy 16482\nIHdyaXRlcnM= 16483\ne30K 16484\nw610 16485\nX2NvcHk= 16486\nfTo= 16487\nIEJhdA== 16488\nIGNvbnZlcnRlZA== 16489\nZWRpbmc= 16490\ncGxhY2VtZW50 16491\nIEhvc3Q= 16492\nU291bmQ= 16493\n0LjQvA== 16494\nIHNvdWdodA== 16495\nNDAy 16496\nbWlk 16497\nIHNhbGFyeQ== 16498\nb2dn 16499\n4oSi 16500\nYnVs 16501\nIHdpcg== 16502\ndmFsaWRhdG9y 16503\nX1NUQVQ= 16504\nLnN0b3Jl 16505\nIEJhdHRsZQ== 16506\nxLFu 16507\nIC0tPgoK 16508\nVHJ1bXA= 16509\nZG90 16510\nIENPTlQ= 16511\nLmZldGNo 16512\nIGNvbnRpbnU= 16513\nd2Fz 16514\nIGZyYXVk 16515\nX3RtcA== 16516\nbWl0dGVy 16517\nLnBpY3R1cmVCb3g= 16518\nR0E= 16519\nIHRvdXJuYW1lbnQ= 16520\nLklucHV0 16521\nMzQz 16522\nW3I= 16523\nZXhpb24= 16524\nY2VudGFnZQ== 16525\nIEtvcmVhbg== 16526\ndW5kZWY= 16527\nIEF2YWlsYWJsZQ== 16528\ncmVzaGFwZQ== 16529\nIGtpdA== 16530\nIFN0cnVjdA== 16531\nIFNVQg== 16532\nQW5zd2Vy 16533\nX2xpYg== 16534\nLnR3aXR0ZXI= 16535\nIG9yZQ== 16536\nIERyYWdvbg== 16537\nLkV4dA== 16538\nLGs= 16539\nIGV4cGxhbmF0aW9u 16540\ncmVmcw== 16541\nIERyaXZl 16542\nIFRyYWluaW5n 16543\nMjgy 16544\nLkhhcw== 16545\nMzQx 16546\naW50YWdl 16547\nYmln 16548\nb2xvZ2lzdA== 16549\nZW5uaXM= 16550\nNDYw 16551\n2Yc= 16552\nIGNoaWNrZW4= 16553\nICAgICAgICAgIAo= 16554\n55s= 16555\n44Gn 16556\nIHBlYWs= 16557\nIGRyaW5raW5n 16558\nIGVuY29kZQ== 16559\nIE5FVw== 16560\nbWFsbG9j 16561\nCWZwcmludGY= 16562\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 16563\naW5jbHVkaW5n 16564\nIHByaW5jaXBsZXM= 16565\nIE1haA== 16566\nMjY3 16567\nc3RvcmFnZQ== 16568\nLWtleQ== 16569\nIGtleXdvcmQ= 16570\nJTs= 16571\nIHRyYWluZWQ= 16572\nLmNvbnRyaWI= 16573\nIGt2 16574\nX18nOgo= 16575\nIEJveQ== 16576\ncGFyYW1ldGVy 16577\nIHN1aXRl 16578\nIHRob3VzYW5k 16579\nIGNvb3JkaW5hdGU= 16580\nLWdlbmVyYXRlZA== 16581\n7ZWY 16582\nZ2VuZXJhdGVk 16583\nIGFkbWl0dGVk 16584\nIHB1c3N5 16585\nI3c= 16586\nIHN3aW0= 16587\ndW5pb24= 16588\nTmE= 16589\nMjc0 16590\nIFJveWFs 16591\nLmNoYW5uZWw= 16592\nVXBkYXRlZA== 16593\nX1JPT1Q= 16594\nIHZpdGFs 16595\nMzM1 16596\ncmFjdGlvbg== 16597\nIENydXNoZXI= 16598\nIHByZWNlZA== 16599\nIGhvcml6b250YWw= 16600\nQmx1ZXByaW50 16601\nIGF0dHJz 16602\nIHNtb2tl 16603\n0JI= 16604\nLkVxdWFscw== 16605\nRkI= 16606\nIFJlc291cmNlcw== 16607\ncm9sbGluZw== 16608\nIHBhc3Nlcw== 16609\nIE51bQ== 16610\ncm90YXRl 16611\nZXR5cGU= 16612\nXCIs 16613\nIHNlbnNpdGl2ZQ== 16614\nIHRhbGw= 16615\nP+KAnQoK 16616\nUHJveHk= 16617\naXk= 16618\nX3NlY3Rpb24= 16619\n4oCU4oCU4oCU4oCU 16620\nYnJpZA== 16621\nIGNpcmN1aXQ= 16622\nYXRhbg== 16623\nRU5D 16624\nIGRyaXZlbg== 16625\nIHZvdGVk 16626\nIGVkdWNhdGlvbmFs 16627\nIGludGVyYWN0aW9u 16628\nYWJldGVz 16629\nIHRvbmU= 16630\nIEluaXRpYWxpemVDb21wb25lbnQ= 16631\nIG1lcmVseQ== 16632\nIOye 16633\nY29va2ll 16634\nX2Rpdg== 16635\nIFVJTGFiZWw= 16636\ndmVseQ== 16637\nfSk7DQo= 16638\nX0VOVA== 16639\nIysjKw== 16640\nYXJ0aWNsZXM= 16641\nIFNvdXRoZXJu 16642\nIHN0cm9uZ2Vy 16643\nIEdpdmVu 16644\nIEVyaWM= 16645\nIElS 16646\nYWJzdHJhY3Q= 16647\nVW5kZXI= 16648\nbmFibGU= 16649\nIGluY3JlbWVudA== 16650\nb3Zlbg== 16651\nIGNvaW4= 16652\nX3RpbWVy 16653\nIHN1ZmZlcmVk 16654\nIEZSRUU= 16655\nJ10uIg== 16656\nIFF1ZWVu 16657\nc3RhdHM= 16658\nIG1lZXRpbmdz 16659\nMjc2 16660\nIGVudGVyaW5n 16661\nIGFsb25nc2lkZQ== 16662\nKHNlc3Npb24= 16663\naXRhbHM= 16664\nIGZvdW5kYXRpb24= 16665\nIENyZWRpdA== 16666\nLmRpdg== 16667\nX0FMTA== 16668\ncGNpb24= 16669\nX3N0YXQ= 16670\naWNraW5n 16671\nRGVmYXVsdHM= 16672\nX3NyYw== 16673\nIG91dHB1dHM= 16674\nL0I= 16675\nIGVudGh1cw== 16676\nLWJs 16677\nLkZvcmVDb2xvcg== 16678\nCXRlbXA= 16679\nRmFjZQ== 16680\nIGludGVyYWN0 16681\nIHdlaXJk 16682\nTW91bnQ= 16683\ncmVsbA== 16684\ndWRlbnRz 16685\nIHJlcXVpcmVtZW50 16686\nIFN1cw== 16687\nSUVS 16688\nIGVsZWN0ZWQ= 16689\ncmVmZXJlbmNl 16690\nIE1F 16691\nIHNlcnZlcnM= 16692\nLndhaXQ= 16693\nIHNuYXBzaG90 16694\naWx0b24= 16695\nIHRyaWVz 16696\nIHRpcG8= 16697\nLlRpbWU= 16698\nPnc= 16699\nIG1vdW50YWlu 16700\nIHBvdW5kcw== 16701\nIFsuLi4= 16702\nZXhpc3Rz 16703\nIG5nT24= 16704\nX01BUA== 16705\nIGZseWluZw== 16706\nMzMx 16707\neGlldHk= 16708\nCXZhbHVl 16709\nX0RC 16710\ndW5v 16711\nIHNlYXRz 16712\nVFVSTg== 16713\nLmF1dGhvcg== 16714\nISk= 16715\nb3JjZQ== 16716\nIGluZGljYXRlZA== 16717\nMzE3 16718\nLnNpbg== 16719\nIGFzc2lnbm1lbnQ= 16720\naW1pZW50bw== 16721\nIEZyYW1l 16722\nMzI0 16723\nX2dlbg== 16724\naW5lcnk= 16725\nXyk= 16726\nbWVzc2FnZXM= 16727\nLnNldHRpbmdz 16728\nIE1lYW4= 16729\nIE11c2V1bQ== 16730\naXJx 16731\nYXR0YWNo 16732\nIFBhbGVzdGlu 16733\nX1FV 16734\nX3RhZ3M= 16735\nIGNhc3VhbA== 16736\nZW1lbg== 16737\nQVNTV09SRA== 16738\nNDMy 16739\nJHM= 16740\nIENpcmM= 16741\n0L7QuQ== 16742\nZXRyaWM= 16743\nL1A= 16744\nMDE4 16745\nIGVwb2No 16746\nPGhlYWQ= 16747\nX0NNRA== 16748\nIGdpdA== 16749\nIHBlbmFsdHk= 16750\nb3JwaA== 16751\nX3VzZXJz 16752\nb3Vyc2Vz 16753\nLkRhdGVUaW1l 16754\nYXRlcm5pb24= 16755\nX3Byb2plY3Q= 16756\nIHN1cGVyaW9y 16757\nIERhbQ== 16758\nIFNlYXR0bGU= 16759\nWFk= 16760\nPlRoZQ== 16761\nIEFr 16762\nIGdyYXNz 16763\nLyoNCg== 16764\nKGRpcw== 16765\nIGd1bnM= 16766\nIHRi 16767\nIEtldmlu 16768\nLmFyZ3M= 16769\nIEFo 16770\nb3BlZA== 16771\nKEo= 16772\nY29sdW1ucw== 16773\nYXJndW1lbnRz 16774\nIFdpdGhFdmVudHM= 16775\nX2Z1bGw= 16776\nIERlZmVuc2U= 16777\nU2ltcGxl 16778\nIGRlYXRocw== 16779\nMjk1 16780\nIGV4dGVuc2l2ZQ== 16781\nIFN0aWxs 16782\nIEV4cHJlc3Npb24= 16783\nIEFnZW5jeQ== 16784\nIHBlcmZvcm1pbmc= 16785\nRlg= 16786\nIHVzdWFyaW8= 16787\nVUFM 16788\nU2lkZQ== 16789\nb2Rvcw== 16790\nYXB0b3A= 16791\nIGNyZWRlbnRpYWxz 16792\nX2NhcA== 16793\nYXRpZW50 16794\nIERpc25leQ== 16795\nIGFp 16796\nIGNoaXA= 16797\nIHZvbHQ= 16798\nLm1ha2VUZXh0 16799\nJSUlJSUlJSUlJSUlJSUlJQ== 16800\nIGJlbGllZg== 16801\nX0xPQw== 16802\nIENpdmls 16803\nTmF2aWdhdGlvbg== 16804\nIHJldmVhbA== 16805\nIHZpb2xlbnQ= 16806\nIEZpbA== 16807\nIGNhdGFsb2c= 16808\nZW1lZA== 16809\nc2Nhbg== 16810\nLmNvbnRyb2w= 16811\nIGNvbnN0aXR1dGlvbg== 16812\nQ291bnRyeQ== 16813\nU2VwYXJhdG9y 16814\nX0FQUA== 16815\ndG9waWM= 16816\ndWV0b290aA== 16817\nTUlO 16818\nIGRlc2NyaXB0b3I= 16819\neXQ= 16820\nRVRIRVI= 16821\nIGRpc3RyaWJ1dGU= 16822\nJ30K 16823\nLnRyaW0= 16824\nLkxpbmU= 16825\nIGxibA== 16826\nYXNzZXJ0RXF1YWxz 16827\nIERldA== 16828\nb21ib2s= 16829\nKHdpZHRo 16830\nIHRvcnQ= 16831\nIEVYUFJFU1M= 16832\nYWNv 16833\nVXNpbmc= 16834\nIEJyYW5k 16835\nd2FsbA== 16836\nRU1FTlQ= 16837\nIENvbW11bmlj 16838\nPHVpbnQ= 16839\nIEdVSQ== 16840\nRUdJTg== 16841\nIFJhbmdl 16842\nL2k= 16843\nIFRheWxvcg== 16844\nY29zdA== 16845\nIHJlc3BvbmRlZA== 16846\nIFRoZW1l 16847\nbmNl 16848\nSVNI 16849\nIGZlYXR1cmluZw== 16850\nUmV0dXJucw== 16851\nIEty 16852\nIC4K 16853\nIG5hbQ== 16854\nX2Ni 16855\nVGVzdGluZw== 16856\nIHt9LA== 16857\neWFs 16858\nLmZpZWxk 16859\nIC89 16860\nX1NIT1JU 16861\nbWF0ZXM= 16862\nVGVzdENhc2U= 16863\nYWlubGVzcw== 16864\nIGV2YWx1YXRpb24= 16865\nX0lURU0= 16866\nIFBhY2lmaWM= 16867\nCWs= 16868\nIGNhbnQ= 16869\nIFJvcw== 16870\nKXM= 16871\nIGZldA== 16872\nU1RSSU5H 16873\nMzE5 16874\nIERpc3Bvc2U= 16875\nZ2Fs 16876\nIEpvaW4= 16877\nIFBvcm4= 16878\nIENhdGhvbGlj 16879\nQVJHRVQ= 16880\nY3B1 16881\n56CB 16882\nLnNjcm9sbA== 16883\nMzI4 16884\nSVNJTkc= 16885\naWZlc3R5bGU= 16886\nYW5jZW1lbnQ= 16887\nIG1lcmM= 16888\nIEJyb3dzZXI= 16889\nZXRlcm1pbg== 16890\nIG92ZXJmbG93 16891\nQXZhaWxhYmxl 16892\nIGJvdHRsZQ== 16893\nOlVJ 16894\naWZpY2lhbA== 16895\nIGNvb3Jk 16896\nY2xhcmF0aW9u 16897\nIGNvbmo= 16898\nR0xPQkFM 16899\nb2t1 16900\nIGt3YXJncw== 16901\nY29uZGl0aW9ucw== 16902\ndWx1bQ== 16903\nIGdlbnU= 16904\nIEhlcm8= 16905\n5Y4= 16906\nIHVuZXhwZWN0ZWQ= 16907\nIERBTUFHRVM= 16908\nIGth 16909\nIENvdWxk 16910\nVVBQT1JU 16911\nIFBob3Rvcw== 16912\nIGNvbmZpZGVudA== 16913\nIGRldGVjdGVk 16914\nZGVn 16915\ncmdi 16916\nIHN0cm9uZ2x5 16917\nIH07DQo= 16918\nICk6 16919\nIGxlY3Q= 16920\ndXJzaXZl 16921\nUk9M 16922\nIFdlaWdodA== 16923\nIGVudGVydGFpbm1lbnQ= 16924\nICkpOwo= 16925\nIGdvbm5h 16926\nIGJi 16927\nLmRv 16928\nR1M= 16929\nIG1pc3Rha2U= 16930\nREw= 16931\nIFBST1ZJREVE 16932\nZWFybmluZw== 16933\nTGltaXQ= 16934\naXNzaW9ucw== 16935\nW3Y= 16936\n5LiN 16937\naXJ0eQ== 16938\nRGVs 16939\nIHVuZGVybHlpbmc= 16940\ncHJlbmU= 16941\nIGphdw== 16942\nIERJ 16943\ncGVlcg== 16944\nIG9iamVjdGl2ZQ== 16945\nIGRlcG9zaXQ= 16946\nIGtvbg== 16947\nIGVzcA== 16948\nMjc4 16949\nLnNldFZpc2liaWxpdHk= 16950\nL2xvZ2lu 16951\nPHR5cGVuYW1l 16952\nIGZyYW5jaA== 16953\nL2U= 16954\nMjY5 16955\nUGFyYWxsZWw= 16956\nIHNjb3JlZA== 16957\nIEhvbg== 16958\nIFZpbGw= 16959\naWdh 16960\nIGFudGljaXA= 16961\nX2Fzc2VydA== 16962\nIE9wdA== 16963\nIGRlc2NyaWJlcw== 16964\nd2Fu 16965\nbW91bnQ= 16966\nIG1vbml0b3Jpbmc= 16967\nIHRvdXQ= 16968\n64qU 16969\nfSx7 16970\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 16971\nPWludA== 16972\nIGN1c3Q= 16973\nLS0tLS0t 16974\nIGF0bW9zcGhlcmU= 16975\nUEFS 16976\nb3J0ZQ== 16977\nSVNJQkxF 16978\nIElyb24= 16979\nIE5vdGlmaWNhdGlvbg== 16980\nLmxvZ2dpbmc= 16981\nIEJPT0w= 16982\nLXBvaW50 16983\nIGFmcmFpZA== 16984\nZW50YQ== 16985\nIHRvbW9ycm93 16986\nQGltcGxlbWVudGF0aW9u 16987\nIGVuZ2FnZQ== 16988\nIEFudGg= 16989\nIEZsb29y 16990\nIFVs 16991\nVG9vbHM= 16992\nIGJhYg== 16993\nIGNhcmVmdWw= 16994\n44GE 16995\nIGNydWNpYWw= 16996\nIGNhbGN1bGF0ZWQ= 16997\nIFNB 16998\nIHd5 16999\nOTEx 17000\nRFg= 17001\nX1RBRw== 17002\naW5kZWQ= 17003\nIGpldA== 17004\nIEVuZ2luZWVyaW5n 17005\nLk1BWA== 17006\nZW56 17007\ndmQ= 17008\nIHB1YmxpY2F0aW9u 17009\nICMjIw== 17010\nIGZhY2Vk 17011\ncmFoYW0= 17012\nIENhcHQ= 17013\nMzM2 17014\nQXNzZXQ= 17015\nIENvbnN0YW50cw== 17016\nIGxvYW5z 17017\nX0lQ 17018\nIEZpc2g= 17019\nUmVkdWM= 17020\nX21hdA== 17021\nRGF0ZUZvcm1hdA== 17022\nX21l 17023\nW11bXQ== 17024\nIGludGVncml0eQ== 17025\nIENvdXJzZQ== 17026\nbG9iYWxz 17027\nIGZhY2lsaXQ= 17028\nIGVtYnI= 17029\nIE5n 17030\nLlN5c3RlbQ== 17031\nIG1hbnVmYWN0dXJlcnM= 17032\nIHByb3Zlbg== 17033\nLm9uQ3JlYXRl 17034\nIGFsYXJt 17035\nIMKn 17036\nIGNvbW1vbmx5 17037\naWNvcw== 17038\n5paw 17039\nIFN0YXRpb24= 17040\nfSku 17041\nIEZpbG0= 17042\nd2k= 17043\n54k= 17044\nIGVuZ2FnZWQ= 17045\nU3RhdHM= 17046\nIGdvdmVybm1lbnRz 17047\nNTQw 17048\nIGFmZm9yZGFibGU= 17049\nX3Byb3BlcnR5 17050\nIGFnZXM= 17051\nKCctLQ== 17052\nIGbDtnI= 17053\nIFByb2Zlc3Nvcg== 17054\nIGh5ZHJv 17055\nUHVzaA== 17056\nIG9yZ2FuaXplZA== 17057\nMjg0 17058\nQWNjZXB0 17059\nw6lt 17060\nX2NlbGw= 17061\nIG5i 17062\ncGI= 17063\nQXJ0aWNsZQ== 17064\nIHJlbW92YWw= 17065\nIGF1dGhlbnRpY2F0aW9u 17066\nIEZS 17067\nbGlkZQ== 17068\nIHBsZWFzdXJl 17069\nYXBvbA== 17070\nIHBhcnRpdGlvbg== 17071\nIFNpZGU= 17072\nIGNyaW1lcw== 17073\nIGRlbW8= 17074\naG9sZGVycw== 17075\nIFBha2lzdGFu 17076\nSW5zdHJ1Y3Rpb24= 17077\nIGV4cGVjdGF0aW9ucw== 17078\nMzMy 17079\nLnNjZW5l 17080\nICcp 17081\naGVz 17082\naW5vaXM= 17083\nX1Bybw== 17084\nIG1vbGVj 17085\nYW5kYWw= 17086\nX3Nob3J0 17087\nIGRlZmF1bHRz 17088\nIG5hdGlvbnM= 17089\naW5lbg== 17090\nIHJ0 17091\nT0NL 17092\nUGFja2V0 17093\nU0I= 17094\nIFNIQUxM 17095\nX2NvbnRlbnRz 17096\naXNlY29uZHM= 17097\ndmVydHk= 17098\nw6F0 17099\nR3VpZA== 17100\nbm9t 17101\nIGNvbmNsdXNpb24= 17102\nLlVwZGF0ZQ== 17103\nIGxvdmVseQ== 17104\nIGVtaXQ= 17105\nYmVj 17106\nCQkJCSA= 17107\nIGludGVsbGVjdA== 17108\nIGJyZXc= 17109\nZWN5Y2xl 17110\nRmlyZQ== 17111\nMzU4 17112\nIGFkbWl0 17113\nIGFyYml0 17114\nIGFycmFuZw== 17115\nIE1JTg== 17116\nTWFpbA== 17117\nIE5hdGl2ZQ== 17118\nQ3Vy 17119\nIGNvbnZlbnQ= 17120\nLlJ1bnRpbWU= 17121\nIn0K 17122\nLlJ1bg== 17123\nIHByaW50ZWQ= 17124\nIGNvbnZlbmllbnQ= 17125\nLmFy 17126\nbW9jaw== 17127\nIEFkbWluaXN0cmF0aW9u 17128\n44G+ 17129\nIGVsZWN0cm9u 17130\nZmxhdGU= 17131\nIGxvbWJvaw== 17132\nIGphdmFmeA== 17133\nbmg= 17134\nIHN1cHBsaWVz 17135\nIHZpc2l0aW5n 17136\nYWhs 17137\nIHBvd2Rlcg== 17138\nIHVsdGltYXRl 17139\nIG9yaWVudGF0aW9u 17140\ndXRhcw== 17141\nX3NjYWxl 17142\nQ29uZmlybQ== 17143\ncGhvbmVz 17144\nIE9wZXJhdGlvbg== 17145\nL1Q= 17146\nNDQz 17147\nX0lOVEVS 17148\nIGFpcnBvcnQ= 17149\nIG1ldHJpY3M= 17150\nIHBoZW5vbWVu 17151\nYXVkaW8= 17152\nMzM0 17153\nIG1haQ== 17154\nKEs= 17155\naHU= 17156\nYWxsaW5n 17157\ncm9kdWN0aW9u 17158\nIFRyYW5zcG9ydA== 17159\nIE5PVEU= 17160\n5paH 17161\nIGZld2Vy 17162\nX1RJTQ== 17163\n7Kc= 17164\n0LrQuA== 17165\nQWdl 17166\nRklO 17167\nMjk0 17168\nIOyd 17169\nIEF0dHJpYnV0ZQ== 17170\nZ3JvdXBz 17171\nZXJr 17172\nYXR0bw== 17173\nLmRlZmluZQ== 17174\nLkFzcE5ldENvcmU= 17175\nYXRlZ29yaWE= 17176\nIFNpcg== 17177\nKGZvcm0= 17178\nPFVzZXI= 17179\nLnJvdW5k 17180\nX2RheQ== 17181\nLkFsbA== 17182\nU2VydmxldFJlc3BvbnNl 17183\nLk5v 17184\nbGFyZ2U= 17185\nSUdI 17186\ncXVlbnQ= 17187\nIHZpcnVz 17188\nIHJldHJv 17189\nIGltcGVy 17190\nQml0bWFw 17191\nIHZpY2U= 17192\nIG9mZmVuc2U= 17193\naXN0ZQ== 17194\nIEFVVEg= 17195\nIOqw 17196\nVG9vbFN0cmlwTWVudUl0ZW0= 17197\nR3U= 17198\nIHJhcGU= 17199\nIERhdmlz 17200\nIG92ZXJ3aGVs 17201\nOmZsdXR0ZXI= 17202\nLXRhYmxl 17203\nIENvbnN0cnVjdG9y 17204\nUHJpdmF0ZQ== 17205\nZXZlbg== 17206\nY2hy 17207\nIGFwcGxpZXM= 17208\nX2F0dHJpYnV0ZQ== 17209\nIGNvbnRyaWJ1dGU= 17210\nRVZFUg== 17211\nMjg5 17212\nTGluZXM= 17213\nIEFmZ2hhbg== 17214\nVmlzaXRvcg== 17215\nIFNM 17216\nc2Vhc29u 17217\nQ1U= 17218\nIGludHJvZHVjdGlvbg== 17219\nIG1hdHBsb3RsaWI= 17220\nxZE= 17221\nIG5ld3NwYXBlcg== 17222\n4oCUYW5k 17223\nPHRhZw== 17224\nIGluaQ== 17225\nIGRpdmVyc2U= 17226\nSWdub3JlQ2FzZQ== 17227\nMzUz 17228\nIFVy 17229\nQWdlbnQ= 17230\nIGJ1bGw= 17231\nLmVtaXQ= 17232\nKEV4Y2VwdGlvbg== 17233\nYXJMYXlvdXQ= 17234\nIGluY3JlZGlibHk= 17235\nIFRydXN0 17236\nPXso 17237\nLW5hdg== 17238\nIGVxdWFscw== 17239\nIGxhZHk= 17240\nIFBvZA== 17241\nZGlzYw== 17242\nYWxhbQ== 17243\nIElW 17244\n4pk= 17245\naXZpZHVhbA== 17246\ncGhp 17247\nMDE3 17248\nYWRkZWQ= 17249\nIGRpZmZpY3VsdHk= 17250\nIGNvbXBhY3Q= 17251\nNTMw 17252\nIEFjdGlvblJlc3VsdA== 17253\nY2Vycw== 17254\nX2NsYXNzZXM= 17255\nTm9uTnVsbA== 17256\nIHF1aXQ= 17257\nIHBvdQ== 17258\nU3dpdGNo 17259\naXJz 17260\nLXRlc3Q= 17261\nIEtpbmQ= 17262\nIENhbGVuZGFy 17263\nNDA2 17264\nIHN0cmVhbWluZw== 17265\nfScs 17266\nMjc5 17267\nU1c= 17268\nIHN0ZWFk 17269\nb2Nh 17270\nIHByb3ZpbmNl 17271\nOTc4 17272\nIGNvbHNwYW4= 17273\nIHBlcnNvbm5lbA== 17274\nIEVtcGxveWVl 17275\nIHByb2R1Y2Vy 17276\nIGV2ZXJ5d2hlcmU= 17277\nb2Ri 17278\n0J8= 17279\nYnNvbHV0ZQ== 17280\nYWN0aXZhdGU= 17281\nIGdyaW5kaW5n 17282\nIEJ1aWxkaW5n 17283\nIFNhbmRlcnM= 17284\nKHNj 17285\nIE9mZnNldA== 17286\nLy8vLy8vLy8vLy8v 17287\nfTsNCg0K 17288\nKHsi 17289\nIHNjYW5m 17290\nIFlZ 17291\nCWRlZmVy 17292\nIGpldw== 17293\nIHJlc3RyaWN0aW9ucw== 17294\nLm1w 17295\nW2w= 17296\n5LiL 17297\nbGFiZWxz 17298\ncmVkaWNhdGU= 17299\nYXdlc29tZQ== 17300\nIHdhdmVz 17301\nIGNvbmZyb250 17302\nIG1lYXN1cmVk 17303\nIGRhdGFz 17304\nX2V4aXQ= 17305\nMzU1 17306\nb3R0b24= 17307\nIHNob3VsZGVy 17308\nYXNrYQ== 17309\nKyM= 17310\nICAgICAgICAKICAgICAgICAK 17311\nIHRyb29wcw== 17312\nMjkz 17313\nIFVuZA== 17314\nX2NhcmQ= 17315\nd2ljaA== 17316\nIG5vdXM= 17317\nICIvIg== 17318\nc2I= 17319\nIGNvbW11bmljYXRpb25z 17320\nRXhwb3J0 17321\nIGRlY29kZQ== 17322\ndGhz 17323\naW50ZXJwcmV0 17324\nQnlOYW1l 17325\nIFNwaXJpdA== 17326\nZWRnZXM= 17327\nT0xF 17328\nIEVN 17329\ndGl0 17330\nIFRocm91Z2g= 17331\nIGJpbw== 17332\nIFBhY2thZ2U= 17333\nb3JuZQ== 17334\nMjkx 17335\nIH0u 17336\nNDEx 17337\nYDsK 17338\nIG9rYXk= 17339\nIFplYWxhbmQ= 17340\naWRlbnRpdHk= 17341\nKG5leHQ= 17342\nIEJhbmc= 17343\nTGlicmFyeQ== 17344\nIGhlYXZpbHk= 17345\naWxvbg== 17346\nIGRpcGw= 17347\nIHJvdGF0ZQ== 17348\ncHV0cw== 17349\nKScsCg== 17350\nIERhdGFUYWJsZQ== 17351\nIG1heW9y 17352\nLnRvTG93ZXJDYXNl 17353\nIHNvbWVob3c= 17354\nIE5vcnRoZXJu 17355\nYWxj 17356\nIGNhcGFiaWxpdGllcw== 17357\nIHZpYnI= 17358\nKwo= 17359\nIFN1 17360\nMjg2 17361\nIFJlc2V0 17362\nX21lYW4= 17363\nIGNpZw== 17364\nLmNsb3Vk 17365\nIEJhbmQ= 17366\nIEZhY3Rvcnk= 17367\nIEFyaXpvbmE= 17368\nX2lv 17369\nb3BoZXI= 17370\nIGNvbnNjaW91cw== 17371\nIMO2 17372\nXENvbnRyb2xsZXJz 17373\nX3NwZWVk 17374\nIEZhYw== 17375\nX0NvbQ== 17376\nIEJpYmxl 17377\nd2Vu 17378\nRURJVA== 17379\nIHVubg== 17380\nIFN0YWZm 17381\nIElubg== 17382\nIG1lY2hhbmlzbQ== 17383\nIE1lbWJlcnM= 17384\nIG1pZ3JhdGlvbkJ1aWxkZXI= 17385\nJ10uJw== 17386\nLmdldEludA== 17387\nPHZvaWQ= 17388\nCWZyZWU= 17389\nb2lkcw== 17390\nXFN1cHBvcnQ= 17391\nIGF1dG9tYXRpYw== 17392\nIGNoYW5jZXM= 17393\n0LY= 17394\nIGNvbXBsaWNhdGVk 17395\nW3Jvdw== 17396\nYWhvbw== 17397\nIH0KCgoK 17398\nTW9kZWxz 17399\nV2lu 17400\nIHRhcGU= 17401\naXJ1cw== 17402\naXpvbg== 17403\nb25vbXk= 17404\nKCJf 17405\nOi4= 17406\nLnN0ZXJlb3R5cGU= 17407\nMjk2 17408\nKGVudg== 17409\nX3JlY3Q= 17410\nKHdpdGg= 17411\nIGFzc2VydFRoYXQ= 17412\nIGNvbnN0cmFpbnRz 17413\ncHV0eQ== 17414\nRW1wbG95ZWU= 17415\nNjIw 17416\nVEQ= 17417\nIGd1aXRhcg== 17418\nODc1 17419\nIEpld3M= 17420\nLnByb2Nlc3M= 17421\nIGZpY3Rpb24= 17422\nIFNoYXJlZA== 17423\n4pSA4pSA 17424\nIHByb3BhZw== 17425\nLk5ldA== 17426\nIGFjaGlldmVk 17427\nCVE= 17428\nIG51cnM= 17429\nU2hhcmVk 17430\nX0ZBSUxVUkU= 17431\nIGJlaGF2aW91cg== 17432\nIGNvbHM= 17433\naXNtbw== 17434\nIGZlbWlu 17435\nIGNoYWxsZW5naW5n 17436\nIHBvc3Rpbmc= 17437\nZW5jaWw= 17438\nIGNhcHR1cmVk 17439\nIERvdQ== 17440\nKHdvcmQ= 17441\nIFR1cmtleQ== 17442\ncGFuaWVz 17443\nIHJlcHV0YXRpb24= 17444\nT1JNQUw= 17445\nIGVsaWdpYmxl 17446\ncHJvdG9jb2w= 17447\nNDE0 17448\naWRhcw== 17449\nKGZyb20= 17450\nMzQ0 17451\nIGZpbmFuY2U= 17452\nLXBlcg== 17453\nIGdvdHRlbg== 17454\nSEE= 17455\nZHVyYXRpb24= 17456\nIFBhcmVudA== 17457\nNjc4 17458\nIGludmVudA== 17459\nIHJlc3RhcnQ= 17460\n0L7Qu9GM 17461\ncml0aW9u 17462\nKHJz 17463\nPGJvb2w= 17464\naWVydA== 17465\nIG1vZGlmaWNhdGlvbg== 17466\nIFRY 17467\ncmVhZGNydW1i 17468\nYmFuaw== 17469\nMzI2 17470\nJC8= 17471\nIE1pbGxlcg== 17472\nXSksCg== 17473\nLkNoZWNrZWQ= 17474\nIHNhY3I= 17475\nc2VjdXJpdHk= 17476\nIHBvc2U= 17477\nIEJyYWQ= 17478\nIGZpdG5lc3M= 17479\nIGFubm91bmNlbWVudA== 17480\nYXRpb25Ub2tlbg== 17481\nIHNlcnZlcw== 17482\nbmVlZA== 17483\nIGdlb21ldHJ5 17484\nQVJT 17485\n5oA= 17486\nYW5kaWRhdGU= 17487\nIHNwcml0ZQ== 17488\nX3NwbGl0 17489\nV2Vlaw== 17490\nYWRpZXM= 17491\nPigK 17492\nPz4i 17493\nIC8vLwo= 17494\nIGVpbmVy 17495\nIHdlZWtseQ== 17496\nCWxvZ2dlcg== 17497\nX3BvcA== 17498\nX21hbg== 17499\nIG1pZ3JhdGlvbnM= 17500\nIGFza3M= 17501\nIGJz 17502\nIGZhbGxz 17503\nLldoZXJl 17504\nLWhlaWdodA== 17505\nX2ZlYXR1cmU= 17506\nLk1pbg== 17507\nIGh5cGVy 17508\nIHZvbGF0aWxl 17509\nIHR3ZW50eQ== 17510\nVHlwb2dyYXBoeQ== 17511\nVW5hYmxl 17512\nRGV0 17513\nLGY= 17514\nLW1vZA== 17515\nIHNldHRsZW1lbnQ= 17516\nIGNvbnRyYWN0cw== 17517\nbm9tZQ== 17518\nQmFk 17519\nIEJyaWFu 17520\nNzY4 17521\nKHVzZXJuYW1l 17522\nISEhIQ== 17523\nIGhhY2s= 17524\nLkZpZWxk 17525\nSFI= 17526\nIEpvcmRhbg== 17527\naXph 17528\nIMKg 17529\nIFNoZXI= 17530\nLmhlYWRlcg== 17531\nKG90aGVy 17532\nIER1Yg== 17533\nKG9w 17534\nIFJvdW5k 17535\nIHZpZQ== 17536\nIGFwcGw= 17537\nCUo= 17538\nIEluc2VydA== 17539\nIExQ 17540\ncmVnb24= 17541\nIE1QSQ== 17542\nIGFuY2hvcg== 17543\nYWNh 17544\nw7hy 17545\nIGFkZQ== 17546\nYW5jaG9y 17547\ncXVlZQ== 17548\nIFRyZWVOb2Rl 17549\nIHRhcmdldGVk 17550\nIGxhaWQ= 17551\nQUJFTA== 17552\ndmV0 17553\nIE9yaWdpbg== 17554\nQW50 17555\nLicpOwo= 17556\nZXhwZWN0 17557\nZWRSZWFkZXI= 17558\nIE1ham9y 17559\nIGluY2g= 17560\nQ29tcGFy 17561\nIHByZXZpZXc= 17562\nIGlsbG5lc3M= 17563\nIENPTlRSQUNU 17564\nIEluZGVwZW5k 17565\ndXVpZA== 17566\nIG5vbWU= 17567\nIHRj 17568\nIEF2ZW51ZQ== 17569\naXNhbg== 17570\nIHBocmFzZQ== 17571\nX21vdmU= 17572\nIilb 17573\nNDEy 17574\nIHByb3Zpc2lvbg== 17575\nIGNvbmNlbnRy 17576\nX0lS 17577\nIFV0 17578\nKCkr 17579\nIG5hcw== 17580\nISw= 17581\nIFJvYmlu 17582\naWF0aW9ucw== 17583\nYXRpdHVkZQ== 17584\nIHB4 17585\nIFdpdGhvdXQ= 17586\nL2Jhc2g= 17587\nZWt0 17588\ncmVlbWVudA== 17589\nMzQy 17590\nT2JzZXJ2ZXI= 17591\nMzE4 17592\nIFJlZ2lvbg== 17593\nVUJMSUM= 17594\nIHsvLw== 17595\nS04= 17596\n5bc= 17597\nR2FtZU9iamVjdA== 17598\n5b4= 17599\nZW5jb2Rpbmc= 17600\nICoqKg== 17601\ncHJvamVjdHM= 17602\nIHRr 17603\nIGNoZWVzZQ== 17604\nRU1QTA== 17605\nYXJv 17606\nINin2YQ= 17607\nNjEw 17608\nMzM3 17609\nIGNvbnNpc3Rz 17610\ncmVmcmVzaA== 17611\ndXJlYXU= 17612\nIFNjYW5uZXI= 17613\nIHNvaWw= 17614\nIGZsYXZvcg== 17615\nRGF0YVNvdXJjZQ== 17616\nRXhlY3V0ZQ== 17617\n0LXQvdC40LU= 17618\nIHNoaXQ= 17619\n5YiG 17620\nPGFueQ== 17621\nIHJldHJpZXZl 17622\nIGJlbG9uZ3M= 17623\nLnN0cmlw 17624\nYWJzb2x1dGU= 17625\nIGV4cGFuZGVk 17626\nYm95 17627\nKTot 17628\nIHJlc2N1ZQ== 17629\nLkpMYWJlbA== 17630\nIHJlbHk= 17631\nIGFsaWdubWVudA== 17632\nLWZhbWlseQ== 17633\nIHJlbmQ= 17634\nT0xVTU4= 17635\nIGJvcnJvdw== 17636\nIHF1b3Rlcw== 17637\nIExldw== 17638\nIHNob3dlcg== 17639\nIERFTEVURQ== 17640\nX2xvb3A= 17641\nISIKCg== 17642\nCXJl 17643\nIGF0dGVtcHRlZA== 17644\nYXZlcmFnZQ== 17645\nIFBhaW50 17646\ncXVpc2l0aW9u 17647\nb2xlbg== 17648\nIGxpdGVyYXR1cmU= 17649\nIFJlZmVyZW5jZQ== 17650\nX1RFWFRVUkU= 17651\nIFNlZw== 17652\nIEluZHVzdA== 17653\nY3R5cGU= 17654\nRFVDVA== 17655\nX0hPU1Q= 17656\nIFRyYWRl 17657\nIHBsdWdpbnM= 17658\nIGJyZWFzdA== 17659\ndWxzZQ== 17660\nIGNyZWF0dXJl 17661\nMzcy 17662\n44GZ 17663\nIFdp 17664\nIHN1cHBsaWVk 17665\nY29sbA== 17666\nISgi 17667\nIGZ1Y2tpbmc= 17668\nIENocm9tZQ== 17669\nIFVyaQ== 17670\nIE5hdGlvbg== 17671\nIHZlcnRpY2Vz 17672\nVEhF 17673\nIE9yaWdpbmFs 17674\nb25kZQ== 17675\nIHNoYXJw 17676\nIGNvb2tpbmc= 17677\nMzQ3 17678\nIHsvKg== 17679\nIFBzeWNo 17680\nIEhvbGx5d29vZA== 17681\nPSRf 17682\nLkRvY2s= 17683\nIGdlcg== 17684\nIGJvbmU= 17685\nX2Nvbm4= 17686\nX3NlYw== 17687\neXNpY3M= 17688\nID0i 17689\nMjk4 17690\nU2Fs 17691\nc2Y= 17692\nIGRlZXBseQ== 17693\nYW5nbGVz 17694\nVGVybQ== 17695\nYmVsbA== 17696\nIFF1aWNr 17697\nNTYw 17698\nZW5lcmF0aW9u 17699\nYWRpb0J1dHRvbg== 17700\n5YWl 17701\nfQ0KDQoNCg== 17702\nIGNhcHRpb24= 17703\nbGM= 17704\nIEVM 17705\nLFs= 17706\nICAgICAgDQo= 17707\ncmV0dA== 17708\nKG1ldGhvZA== 17709\nIEZsYXNo 17710\nNDcw 17711\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 17712\nV0lTRQ== 17713\nLnNjYWxl 17714\nIHJvdWdobHk= 17715\nX2NoaWxk 17716\nbWVtb3J5 17717\nYXlpbmc= 17718\nIGluaXRpYWxpemVk 17719\naW5hdG9y 17720\n0LDRgA== 17721\nIHNjYWxhcg== 17722\nIEhv 17723\nYWlyZXM= 17724\nKGNvbHVtbg== 17725\nLmRlc3Ryb3k= 17726\nUEFDSw== 17727\nIGhlbQ== 17728\nYW5nZWw= 17729\nX1NVQg== 17730\nLnF1 17731\nINc= 17732\nREVGQVVMVA== 17733\ncG9zaXRvcmllcw== 17734\nNTAz 17735\nIExlbmd0aA== 17736\nIEZhc3Q= 17737\nIHNpZ25hbHM= 17738\nIC8vJA== 17739\ncmllcnM= 17740\nIGR1bW15 17741\nQU5Z 17742\nIHBlcnNvbmFsaXR5 17743\nIGFncmljdWx0 17744\nUGxhdGZvcm0= 17745\nRVJP 17746\nIFRyYQ== 17747\nIGVub3Jt 17748\nCVc= 17749\nQWN0aW9uUmVzdWx0 17750\nIGF2ZXI= 17751\nW3N0cg== 17752\nICctLQ== 17753\nLlNwcmludGY= 17754\nIGRlYnV0 17755\nINGH 17756\naGV4 17757\nX3V0aWxz 17758\nIHBi 17759\nVUlUYWJsZVZpZXc= 17760\nIHp1cg== 17761\nLmVuY29kZQ== 17762\nNDE2 17763\nIHZhZw== 17764\nLmVycm9ycw== 17765\n0L7QvQ== 17766\nIG1y 17767\nIEF3YXJk 17768\nIGNwdQ== 17769\nIHByZXNzZWQ= 17770\nJ2VzdA== 17771\nIEZlc3RpdmFs 17772\nJ1Q= 17773\nIGFr 17774\ncmVzb2x2ZQ== 17775\nMDQz 17776\nLm1l 17777\nIG5pYw== 17778\nIGdlbnJl 17779\nIGF0dHJpYg== 17780\nIE1vb24= 17781\nIGFycml2ZQ== 17782\nIERhdGluZw== 17783\nIHRt 17784\nLkNvbmZpZ3VyYXRpb24= 17785\nNTA1 17786\nLnJlZA== 17787\nIGdsbQ== 17788\nIHN0YXRpb25z 17789\nc3dpdGNo 17790\nIHRpZWQ= 17791\n5Lq6 17792\nIC8+PC8= 17793\nUXVhbnRpdHk= 17794\ncXVpcnk= 17795\nX3RhYg== 17796\nIGFsZw== 17797\nVG9hc3Q= 17798\ncmVzaXpl 17799\ncXVlc3Rpb25z 17800\nc2NoZW1h 17801\nTGl0ZXJhbA== 17802\nKGVudGl0eQ== 17803\nTkVDVElPTg== 17804\nY2hhbmdlZA== 17805\nX0ZJRUxE 17806\nX0hFSUdIVA== 17807\nIG9yZ2FuaWM= 17808\nUFJF 17809\nIENhdA== 17810\nLkRyYXc= 17811\nRXM= 17812\nIGxvdWQ= 17813\nNjgw 17814\nICAgICAgICAJ 17815\nIEthdA== 17816\nIGhlYXA= 17817\n4oCcSXQ= 17818\nMDcw 17819\nZXRy 17820\nIHVubGlrZWx5 17821\nZXJhbHM= 17822\nL2F1dGg= 17823\nNTAy 17824\ndG9kbw== 17825\nUGxhY2U= 17826\nUG9zdGVk 17827\nQ29tbWVudHM= 17828\nIFRlY2g= 17829\nIEZpbmFsbHk= 17830\nZWdyYXRpb24= 17831\nIG1pbmltYWw= 17832\nIEZpbGVz 17833\nIHRhbWI= 17834\n66Gc 17835\nIFJlbGVhc2U= 17836\nNDI1 17837\nLnJlc2l6ZQ== 17838\nIM8= 17839\nY29sbGVjdA== 17840\nPXA= 17841\nIExJQUJMRQ== 17842\nIHByb2R1Y2luZw== 17843\nLXdyYXBwZXI= 17844\nIHNpbmdsZXM= 17845\nIE5CQQ== 17846\nb3Jy 17847\nZXJlbg== 17848\nLmFkZEFjdGlvbg== 17849\nIHRoZXNpcw== 17850\nZG4= 17851\nUFRZ 17852\nLmRlcw== 17853\nIGJhY3Rlcg== 17854\nIEV4cHJlc3M= 17855\nICopCg== 17856\n5ZE= 17857\nL2FkbWlu 17858\nc2Vjb25kcw== 17859\n5Yqf 17860\ndXNzaW9u 17861\nYWJldGg= 17862\nIENvbXB1dGVy 17863\nIHJ1bGluZw== 17864\nKCIuLi8= 17865\nLkdFVA== 17866\nIE1lZGFs 17867\naXRpb25hbGx5 17868\nY29tbWl0 17869\nZm9jdXM= 17870\nX0xFVkVM 17871\naW5kYQ== 17872\nRmFjdA== 17873\nPW5w 17874\nPSIiPgo= 17875\nIHN1YnNlcXVlbnQ= 17876\ncG9zYWJsZQ== 17877\nLWZsdWlk 17878\nIHRob3JvdWdo 17879\nIHB1YmxpY2x5 17880\nYXB0ZXJz 17881\nIFdpbHNvbg== 17882\nX1BSRQ== 17883\neWFyZA== 17884\n5Lw= 17885\nCWlu 17886\nMzM5 17887\nIHJldmVycw== 17888\nIGJ1bGxldA== 17889\nY3JpYmVk 17890\nbmVzb3Rh 17891\nICgkXw== 17892\nYW5ub24= 17893\nY3Vyc29y 17894\nIGNsb3RoaW5n 17895\nIE11bHRp 17896\nMjg3 17897\nOics 17898\nIHZlc3M= 17899\nb3JkaW5hdG9y 17900\nIGVpbmVt 17901\nQ2Fubm90 17902\nIGFybWVk 17903\nCVY= 17904\n5LiK 17905\nLkZsYXQ= 17906\nIFNlcA== 17907\nIFN1YmplY3Q= 17908\nX2ZvbnQ= 17909\nIGNoYXJhY3RlcmlzdGljcw== 17910\nRG9uZQ== 17911\nZWxu 17912\nIyMjIyMjIyMjIyMj 17913\nUE9T 17914\nIGRlbnNpdHk= 17915\nIFBsYXRmb3Jt 17916\nLWl0ZW1z 17917\nIG92ZXJz 17918\nIHB1c2hpbmc= 17919\n56Q= 17920\nLkNvbm5lY3Rpb24= 17921\nX3Rlcm0= 17922\nIGluaXRpYWxpemF0aW9u 17923\nX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 17924\n56w= 17925\nLmRvY3VtZW50 17926\nbGVzaA== 17927\nCWRvY3VtZW50 17928\nIFBpbg== 17929\nw6dh 17930\nIGRlZmluaXRpb25z 17931\nLlBhdGg= 17932\nX1dSSVRF 17933\nIAkK 17934\nPz4KCg== 17935\nIHRlcnJpYmxl 17936\nYmVhbg== 17937\naWNrZXRz 17938\nIFNW 17939\nQnV5 17940\nKHRhc2s= 17941\nIHJlZ2ltZQ== 17942\nZ29vZ2xl 17943\nIGNyYWNr 17944\nLnZpc2l0 17945\nTlVN 17946\nZW5lcmd5 17947\nIHN0cnVjaw== 17948\nX3NhbXBsZQ== 17949\nLnBheWxvYWQ= 17950\nIHJldmlz 17951\nIFNjZW5l 17952\nIHBn 17953\nIGJyZWFrZmFzdA== 17954\nVVJSRU5U 17955\nLmNoYXJBdA== 17956\nX2V4Y2VwdGlvbg== 17957\nIEFudG9u 17958\nIGd1aWRlbGluZXM= 17959\nIGV4aGF1c3Q= 17960\nIEZpbmFuY2lhbA== 17961\nIGluZGVudA== 17962\nIGRlc2t0b3A= 17963\nSGlkZGVu 17964\nRmFpbHVyZQ== 17965\nIHByaW5jaXBsZQ== 17966\nIGl2 17967\nIHNla3M= 17968\nbmV0d29yaw== 17969\nIG51bWJlck9m 17970\nIEFsYmVydA== 17971\nCWxvbmc= 17972\nODAx 17973\nLC4= 17974\nIHplcm9z 17975\nZmFkZQ== 17976\nIFR5cA== 17977\nIFRlcm0= 17978\nIEFydHM= 17979\nLkFwcGxpY2F0aW9u 17980\nIGJlaGFsZg== 17981\n5oi3 17982\nIG1lcmU= 17983\nKGAkew== 17984\nIGF3YXJlbmVzcw== 17985\nZWxwZXJz 17986\nZmxpeA== 17987\nIHdlaWdo 17988\nIGVzdGltYXRlcw== 17989\nLmNoaWxk 17990\nL08= 17991\nIEJpdG1hcA== 17992\nLmJvdHRvbQ== 17993\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 17994\nRXhwZWN0 17995\nZW50bw== 17996\nIEZvcnVt 17997\ndmVyYWw= 17998\nIGphaWw= 17999\nIGFiaWxpdGllcw== 18000\nIEhPTEQ= 18001\nIENpdA== 18002\nIGR5bmFt 18003\nIGdyYXk= 18004\nCQkJCQkJCQkJCQkJCQ== 18005\nLm5leHRJbnQ= 18006\nYW50bHk= 18007\nIEFSSVNJTkc= 18008\nKHByaXZhdGU= 18009\nIHJlamVjdGVk 18010\nIE5pYw== 18011\nIGxlYXRoZXI= 18012\nPXsK 18013\nYWx5dGljcw== 18014\ndGhldGlj 18015\nLlRvcA== 18016\nMzcz 18017\nLlBhZ2U= 18018\nPXtg 18019\nIDsNCg== 18020\nZGVwdGg= 18021\nbWFubg== 18022\nV0Q= 18023\nIFNvbQ== 18024\nLlJpZ2h0 18025\nICl9Cg== 18026\nIHRyYWl0 18027\nw5c= 18028\naWFj 18029\nIHJ2 18030\nU2FtcGxl 18031\nLlhtbA== 18032\nb3BwZWQ= 18033\nINGE 18034\nbGlzdHM= 18035\nIHRlYXI= 18036\naXZlcnNhcnk= 18037\nLmNvbGxlY3Rpb24= 18038\nIENvbnN0aXR1dGlvbg== 18039\nIEh0dHBSZXNwb25zZQ== 18040\nIGJyaWxs 18041\nIFByb20= 18042\naG92ZXI= 18043\nMzY2 18044\nIE1pYW1p 18045\nIGFyZ3Vl 18046\nX2Zsb2F0 18047\nNTA0 18048\nIOOC 18049\nIG5hdA== 18050\nIFRhbA== 18051\nIGludGVncmF0aW9u 18052\nKGN1cg== 18053\nIHJlbW92aW5n 18054\nIGNvZWZm 18055\nIFRob3VnaA== 18056\nIGZvcmVjYXN0 18057\nNDA4 18058\nIFZlZ2Fz 18059\nU2l0ZQ== 18060\nMzQ2 18061\nIHRyYWI= 18062\nIEhlbnJ5 18063\nLWk= 18064\nIGludm9sdmVz 18065\nQlQ= 18066\nIHNsbw== 18067\nSW52b2tl 18068\nIGx1Y2t5 18069\nMDI1 18070\ncmF0 18071\nID8K 18072\nIGhhbmRsZWQ= 18073\nKGZk 18074\nY29udGVudHM= 18075\nIE9GRg== 18076\nUkY= 18077\nIHN0eQ== 18078\nIE1vdG9y 18079\ndGVyeQ== 18080\ndGF4 18081\nTUFQ 18082\nIE1ycw== 18083\nIHBob25lcw== 18084\nIFVJVmlldw== 18085\nIikpKTsK 18086\nKGRldg== 18087\nIElyaXNo 18088\nMDE5 18089\nIHdz 18090\nREk= 18091\nX09GRlNFVA== 18092\nIEV2ZW50cw== 18093\nIHN0YWdlcw== 18094\nIH0vLw== 18095\nIGhhYmVu 18096\nU1RBTkNF 18097\nIFNpbg== 18098\nIE1vbmV5 18099\nKHRvcA== 18100\nIGFwcG9pbnRtZW50 18101\nVkVSU0lPTg== 18102\nbWV0YWRhdGE= 18103\nX2NvbW1lbnQ= 18104\nIGNvbGxlYWd1ZXM= 18105\nbWFwcw== 18106\n4pg= 18107\nCgkK 18108\nKGFs 18109\nX3JlcQ== 18110\nIGZ1dA== 18111\nIGFyY2hpdGVjdHVyZQ== 18112\nMzUx 18113\nIFdIRVRIRVI= 18114\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 18115\nX3NjcmVlbg== 18116\nIHN0eWxlVXJscw== 18117\nIG1vbnN0ZXI= 18118\nLnVw 18119\ncGhpYQ== 18120\nIHByb2Nlc3Nvcg== 18121\nIFRlcnI= 18122\nPScs 18123\nIE1hbnVmYWN0 18124\nIE5U 18125\na2Vs 18126\naWJlcm4= 18127\nCWZpbGU= 18128\nQWxp 18129\ncmllbnRhdGlvbg== 18130\nIC8vIQ== 18131\nYXBvcmU= 18132\nYW5lb3Vz 18133\nIENyZWF0 18134\nZm9sZGVy 18135\nNDE1 18136\nIGhheQ== 18137\nU3VwcHJlc3M= 18138\nKGxlZnQ= 18139\nIGV1cm8= 18140\nIGRpc2NsYWltZXI= 18141\ndXN0cnk= 18142\nc2hpcHM= 18143\nX2Zk 18144\nIEZh 18145\nX2luc2VydA== 18146\nIHJvbA== 18147\naWZ0aW5n 18148\nIENvbW1lbnRz 18149\nX2Jy 18150\nIGxvc3Nlcw== 18151\nIEFkZGVk 18152\nY2hhcmc= 18153\nINC/0L4= 18154\nX3N5c3RlbQ== 18155\nIFNvbWV0aW1lcw== 18156\nIFNwYWlu 18157\nKGdyb3Vw 18158\naWFsaXM= 18159\nIGRvbGxhcg== 18160\nIEFyZ3M= 18161\nNDk5 18162\nMjk3 18163\ncXVpcmVz 18164\nIFRlbg== 18165\nLnNjc3M= 18166\nIHN1cnZpdmU= 18167\ndXNhZ2U= 18168\nIGp1bg== 18169\naW1pdGVy 18170\n77yBCgo= 18171\nIGZpZnRo 18172\ndG9nZ2xl 18173\nIGRlY2xpbmU= 18174\nKCQi 18175\nKExvbmc= 18176\naW5nZQ== 18177\nIHBpbG90 18178\nLWxpZ2h0 18179\nLXJhZGl1cw== 18180\nIHBvZGNhc3Q= 18181\nIG5hdHVyYWxseQ== 18182\nUGFnZXM= 18183\n5Li6 18184\nIERlc3BpdGU= 18185\nIGxpZ2h0aW5n 18186\nIGNyYXRl 18187\nIEJpbmFyeQ== 18188\nIHJlZHVjaW5n 18189\nIGVsZWc= 18190\nIE1vdXNl 18191\nIFRlc3RCZWQ= 18192\nIGJlZm9yZUVhY2g= 18193\nX0FSUkFZ 18194\nUmVkaXJlY3Q= 18195\nMzI5 18196\nIGZsb29k 18197\nIHNoaXBz 18198\nMzYz 18199\nIGVsZWN0cmljaXR5 18200\nKSoo 18201\n6rg= 18202\nIFZpZXQ= 18203\naGVybw== 18204\nIGRpYQ== 18205\nIEtlbnQ= 18206\naGVhcnQ= 18207\nIHRocmVhdHM= 18208\nX2FjYw== 18209\nIHN5bWJvbHM= 18210\naXNjaGVu 18211\nX2luc3Q= 18212\nQ3JpdGVyaW9u 18213\nIFRJTQ== 18214\nLkhlaWdodA== 18215\nNTgw 18216\nIOKAmQ== 18217\nKCk7CgoK 18218\nUHJvZHVjdHM= 18219\nX1NQ 18220\nIEN5 18221\nIGRlcGVuZGVudA== 18222\nZXN0ZQ== 18223\nIGRhdG9z 18224\nZGl0 18225\n0LDQsg== 18226\nSUdOQUw= 18227\nIGxlc3Nvbg== 18228\nIj4n 18229\nIENvdmVy 18230\nIEhvcGU= 18231\nIFRpbWVy 18232\nIGRhZA== 18233\ndmlkZXJz 18234\nIFBob3Q= 18235\nLz8= 18236\ncm9weQ== 18237\nb21pbmc= 18238\nYXNpb24= 18239\nIFwo 18240\nIEVU 18241\nIFJlYWRpbmc= 18242\nIGVwaXNvZGVz 18243\nbG0= 18244\nNDIx 18245\nZWNoYQ== 18246\nIG5ldXJv 18247\nODIw 18248\nIGhhcm1vbg== 18249\nIGxpYmVyYWw= 18250\nLWluZA== 18251\nMzkz 18252\nREFUQQ== 18253\nIGV2ZXJ5ZGF5 18254\nIGRpdmlkZWQ= 18255\nIEFjdGl2ZVJlY29yZA== 18256\nZmlndXJl 18257\nVUE= 18258\n5Lk= 18259\ncmllbmRseQ== 18260\ndGVjaA== 18261\nNjAx 18262\nLmdhbWVPYmplY3Q= 18263\n0LjRgtGM 18264\nMzc0 18265\nIG1vb24= 18266\nZnRpbWU= 18267\nIG5vY2g= 18268\nIFRPUlQ= 18269\nIFZN 18270\nLmluaXRpYWw= 18271\nKGNoaWxk 18272\nIG11c2ljYWw= 18273\nIG9j 18274\nYmFz 18275\nIEhheQ== 18276\nMzYx 18277\nX2xvbmc= 18278\nIG1lbXNldA== 18279\naWxleQ== 18280\nYWRlbHBoaWE= 18281\nU1Y= 18282\ncm9hdA== 18283\nX3R4 18284\nIGxvbg== 18285\nIG5nT25Jbml0 18286\nYnA= 18287\nIEdvbGRlbg== 18288\nQUNIRQ== 18289\nIHdvcnJpZWQ= 18290\nYXpp 18291\nRWFy 18292\nVGFrZQ== 18293\nKGZw 18294\nYnVyZ2g= 18295\nX0RhdGE= 18296\nZ3Jlcw== 18297\nIE9udA== 18298\ncHVz 18299\nIHRyYW5zcGFyZW50 18300\nIHBvY2tldA== 18301\nIHJhbQ== 18302\naWdyYXRpb25z 18303\nLg0KDQo= 18304\nIFso 18305\nIGFkb3B0ZWQ= 18306\nIHJlcG9ydGVkbHk= 18307\nIERyZWFt 18308\nIH0pKTsK 18309\nbG9zaW5n 18310\nIHRlZXRo 18311\nIEJvb2tz 18312\nIiwm 18313\nZW5ueQ== 18314\nTEVNRU5U 18315\nIGdlbA== 18316\nIFBsYW50 18317\nNDM3 18318\nIeKAnQ== 18319\nLmhvc3Q= 18320\nIFJlcGx5 18321\nMzc2 18322\ncmVuZ3Ro 18323\nIHJlY29nbml0aW9u 18324\nIH19Pgo= 18325\nTEE= 18326\nIG1pcnJvcg== 18327\nIGFzc2lzdGFudA== 18328\nKGRldmljZQ== 18329\nIHNwaXJpdHVhbA== 18330\nYnVpbGRlcg== 18331\nwqc= 18332\nIG91dHI= 18333\nIHR0 18334\nIFBFUg== 18335\nIHJhZGljYWw= 18336\nTWV0aG9kcw== 18337\nIHBhY2U= 18338\ndWR5 18339\nIGd1dA== 18340\nIEdyZWVr 18341\nIG5vbmF0b21pYw== 18342\nIFBhcGVy 18343\nX0dQSU8= 18344\nIG9ic3Q= 18345\nLkFk 18346\ndmlyb25tZW50cw== 18347\nIFNvdg== 18348\nMzU2 18349\nKGNvbg== 18350\nIFRyYW5zYWN0aW9u 18351\nLmFzc2lnbg== 18352\nCWNhdGNo 18353\nZWx0ZXI= 18354\nIGJpdGNvaW4= 18355\nX0dS 18356\nIDw/PQ== 18357\nX2xhbmc= 18358\n7J2E 18359\nQnJvd3Nlcg== 18360\nIGNvbnNpZGVyYXRpb24= 18361\nIEV4ZWN1dGl2ZQ== 18362\n6Ze0 18363\nO1w= 18364\nIEpTT05PYmplY3Q= 18365\nIEJlbGw= 18366\nIHNwb2tlc21hbg== 18367\nfn5+fn5+fn4= 18368\nb2NrZXk= 18369\nIEdybw== 18370\nIEF3 18371\nQ29uc3RyYWludA== 18372\nIFByYWN0 18373\nIEV2ZXI= 18374\ncHJpbQ== 18375\nOnsK 18376\nX2lt 18377\nUE4= 18378\nTWlsbGlz 18379\nVU1FTlQ= 18380\nIGJhZ3M= 18381\nw6Vy 18382\nQU5ORUw= 18383\nMzU0 18384\nIGlj 18385\nIHRyYW5zcG9ydGF0aW9u 18386\nIFNhdWRp 18387\naGFuZGxlcg== 18388\nRHJhZw== 18389\nIGhk 18390\nY29sbGFwc2U= 18391\nX1BI 18392\nIHVi 18393\nQVJN 18394\nIEFQUA== 18395\nIHRvbmlnaHQ= 18396\nIGRpbmluZw== 18397\nUmVjb2du 18398\nIGJj 18399\naWd0 18400\nKG51bWJlcg== 18401\nQm9vdA== 18402\nIGVsc2V3aGVyZQ== 18403\nIGFycm93 18404\nYXJnYQ== 18405\nIGRlbGljaW91cw== 18406\nIFNO 18407\nV1I= 18408\nVmFsaWRhdGU= 18409\nIFF1YWxpdHk= 18410\nKGVtYWls 18411\nIGludGVycHJl 18412\naWdhdGlvbg== 18413\nIGNob2NvbGF0ZQ== 18414\nNTI1 18415\nX2VkZ2U= 18416\nIHN0b3Bz 18417\nOmZ1bmN0aW9u 18418\nKXw= 18419\nIHRoYWk= 18420\nIExvYWRpbmc= 18421\nU3Rvcnk= 18422\nVHJpZ2dlcg== 18423\nYnJhbmNo 18424\nIHRk 18425\nZW50aWNhdGVk 18426\nIGFkdmVudHVyZQ== 18427\nIGJsb2NrY2hhaW4= 18428\nRXZlbnRIYW5kbGVy 18429\nIHNxcnQ= 18430\nLlBy 18431\nTG5n 18432\nQmVjYXVzZQ== 18433\nIHZpdg== 18434\nIG9jZWFu 18435\neWx2YW5pYQ== 18436\n0LDRgQ== 18437\nIFV0aWxz 18438\nIGRlc3Blcg== 18439\nIGRlZmVy 18440\nCXJlcXVpcmU= 18441\naGw= 18442\nUmVxdWlyZQ== 18443\nXVw= 18444\nIGRpcmVjdGlvbnM= 18445\nX3Jlc291cmNl 18446\nIHN1YnNjcmliZQ== 18447\nIMO6 18448\nIEhlYXJ0 18449\nZXN0cw== 18450\nLXN1Yg== 18451\nIFJo 18452\nZm9yRWFjaA== 18453\nIGRlbGlnaHQ= 18454\nIHRlcnJpdG9yeQ== 18455\nLmNvbmN1cnJlbnQ= 18456\nICgr 18457\nanBn 18458\nIHByZXBhcmF0aW9u 18459\nIHJvdW5kZWQ= 18460\nQ29tbQ== 18461\nLkxlZnQ= 18462\nIG9waW5pb25z 18463\nIE5hdmlnYXRpb24= 18464\nKGZpcnN0 18465\nIiwk 18466\nIGhpcmU= 18467\nIGRldGVjdGlvbg== 18468\nLmdldEVsZW1lbnRz 18469\nIGVwcw== 18470\nIHNrbGVhcm4= 18471\nIGN6 18472\nIC8+DQo= 18473\nbWV0aWM= 18474\nIHRyYW5zZm9ybWF0aW9u 18475\n5Y+3 18476\nIHJnYg== 18477\naXN0cmlidXRpb25z 18478\nIGltcGxpY2l0 18479\nL2lu 18480\nZGVzdGluYXRpb24= 18481\n0LDRgtGM 18482\nWmVybw== 18483\nIHVuc2V0 18484\nOTIw 18485\nLndoZXJl 18486\nLmdv 18487\nIGZvcm1hdGlvbg== 18488\nIGRlY2xhcmF0aW9u 18489\nKCkNCg0K 18490\nIEV4cGw= 18491\nCQkJICA= 18492\nL3Bybw== 18493\nLkpTT04= 18494\nNDQx 18495\nIGRlc2s= 18496\nLnN1YnN0cg== 18497\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 18498\nbHlu 18499\ncHNvbg== 18500\nNDA3 18501\nZGlzYWJsZQ== 18502\nIEZ1bmM= 18503\nCUFzc2VydA== 18504\nIE1BUks= 18505\nIGRlZmVhdA== 18506\nIGJsaW5k 18507\nIGNvbnN0YW50cw== 18508\nMzYy 18509\nLmhlYWRlcnM= 18510\nVUlMRA== 18511\nIGV4cGVuc2Vz 18512\nUGl4ZWw= 18513\nIGhy 18514\nIGZlbA== 18515\nIEVhc3Rlcm4= 18516\nNDI0 18517\nNDkw 18518\nX2RlbA== 18519\nMzU3 18520\nIEN1Yg== 18521\nIHNx 18522\nCWNvdW50 18523\nIERpcmVjdG9yeQ== 18524\nIGV4Y2x1cw== 18525\nIGhpc3Rvcmlj 18526\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 18527\nIGNvbXBvc2l0aW9u 18528\nIGRhdGFHcmlkVmlldw== 18529\nIEJ1cm4= 18530\nIEJD 18531\nTWFzdGVy 18532\nIHNwYXdu 18533\nIGJlYXJpbmc= 18534\nLlNldEFjdGl2ZQ== 18535\naWxv 18536\nIGdhbGxlcnk= 18537\nIGZvdW5kZWQ= 18538\nIGF2YWlsYWJpbGl0eQ== 18539\nLnNxcnQ= 18540\nIHBlcw== 18541\nIERPTQ== 18542\nbWF0ZQ== 18543\nT2N0 18544\nIG1hdGNoZWQ= 18545\naXRpdml0eQ== 18546\nIGFueGlldHk= 18547\nLnByaWNl 18548\nIEluc3RhbnQ= 18549\n7Io= 18550\nIHR1dA== 18551\nSUNvbGxlY3Rpb24= 18552\nLnNoYXJlZA== 18553\nX3NxbA== 18554\ndGJs 18555\nbGlicmFyeQ== 18556\nX2Rlc3Ryb3k= 18557\nZXJtYWw= 18558\nIE5vdGVz 18559\nIEVpbg== 18560\nIHNvdXRoZXJu 18561\nIE9USEVSV0lTRQ== 18562\nIG1hY3Jv 18563\nLmxvd2Vy 18564\nY2xz 18565\nQ29udGVudFZpZXc= 18566\nLmxpbms= 18567\nY29uc3RhbnQ= 18568\nIEJlcw== 18569\nIHNvbWVib2R5 18570\nbmI= 18571\nMzk5 18572\nIj57 18573\nKGxvY2Fs 18574\nLi4uLi4= 18575\nIE51bGw= 18576\nbXg= 18577\nIMOn 18578\nIHBhdXNl 18579\nLS0tLS0tLS0tLS0= 18580\nX01P 18581\nIENN 18582\nIGZvcktleQ== 18583\nIERWRA== 18584\nIGNsb3Nlc3Q= 18585\nX0RFVklDRQ== 18586\nIFN0ZXBoZW4= 18587\nIEJCQw== 18588\nIFRyYXZlbA== 18589\nUGFpbnQ= 18590\nIFJlc3VsdHM= 18591\nIFJ1bGU= 18592\nIHRw 18593\nIHJhdGluZ3M= 18594\nY2lu 18595\nY3N2 18596\nPi8= 18597\nIEdPUA== 18598\nbGFk 18599\nINGA 18600\nIGluZGV4UGF0aA== 18601\nbWF0cml4 18602\nPWY= 18603\nYXJzZWQ= 18604\nIH0pOw== 18605\nIENvcw== 18606\nIFNjb3Jl 18607\nIHRhaw== 18608\nIEVTUA== 18609\nIElOQw== 18610\nX05VTEw= 18611\nLWZsZXg= 18612\nIl1b 18613\naW50bw== 18614\nZWxhbmQ= 18615\nQXV0aG9yaXphdGlvbg== 18616\nX0ZBTFNF 18617\nIGdhdGU= 18618\nIHZpZA== 18619\naXN0ZW50 18620\nVElNRQ== 18621\nIHJld3JpdGU= 18622\nIHRpZQ== 18623\nIGFyY2hpdmU= 18624\nNTEx 18625\nLmV2ZW50cw== 18626\nLmdldFBhcmFtZXRlcg== 18627\nIFBlcm1pc3Npb24= 18628\nIHByb2dyYW1tZQ== 18629\nIOk= 18630\nanVk 18631\nIGNhbWVyYXM= 18632\nMzM4 18633\nMzQ5 18634\nKHN5cw== 18635\nIFN5cmlhbg== 18636\nIGltcHJvdmVtZW50cw== 18637\nIGhpcA== 18638\nIHN1aWNpZGU= 18639\nIHNjaG9sYXI= 18640\nIGNvbXBhdGlibGU= 18641\nMDIy 18642\ncmVtb3Rl 18643\nLmRvd24= 18644\nRlVOQ1RJT04= 18645\nIG1hbmFnaW5n 18646\nIFVJS2l0 18647\nLnJhdw== 18648\nPj4+Pg== 18649\nMzcx 18650\nIGRlbWFuZHM= 18651\nZWxsaXRl 18652\nIGRlbnQ= 18653\nIE1pY3Jv 18654\n5Y+W 18655\nJ11bJA== 18656\nIElF 18657\naW1lbnNpb24= 18658\nIHRyZW0= 18659\nNjMw 18660\nIGdhaW5lZA== 18661\nLndpdGg= 18662\nLm9r 18663\naG91 18664\nIGJvbQ== 18665\nYW1wYWlnbg== 18666\nIGpvaW5pbmc= 18667\nZmlzaA== 18668\nIGFkZFN1YnZpZXc= 18669\nODYw 18670\nIG5vcnRoZXJu 18671\nLmNvcg== 18672\nb3JldA== 18673\nRGll 18674\naW5pc2g= 18675\nX2NvbXA= 18676\nIGF0dGVuZGVk 18677\nIGNvbGxhcHNl 18678\nIFNT 18679\nYWNlbnQ= 18680\nX0VRVUFM 18681\nIERlZXA= 18682\nUkdC 18683\nCXRlc3Q= 18684\nb2x2ZXM= 18685\ndXNldA== 18686\nVW5pdHlFbmdpbmU= 18687\nd3JpdGVy 18688\nUmVzb2x2ZXI= 18689\nLCU= 18690\naWZmZXJlbmNl 18691\nX3JlbW92ZQ== 18692\nb25kYQ== 18693\nIGZlbW1l 18694\nMzg1 18695\nZGVjb2Rl 18696\nQnJhbmNo 18697\nIGZsdXNo 18698\nIGlubm92YXRpdmU= 18699\nVGVzdHM= 18700\nIFsnLi8= 18701\nIGNvdmVyaW5n 18702\nLmFkbWlu 18703\ndWx0aXBhcnQ= 18704\nKGxhbWJkYQ== 18705\n77u/bmFtZXNwYWNl 18706\nIFNwb3J0 18707\nICEo 18708\nYWNsZXM= 18709\nIGRlcHJlc3Npb24= 18710\nIEtvbmc= 18711\nNTcw 18712\nIHBlcnQ= 18713\nIENvbm4= 18714\nIE90aGVyd2lzZQ== 18715\nL2hvbWU= 18716\nc3VwcG9ydGVk 18717\nIHBpbms= 18718\nIGludml0ZWQ= 18719\nw7Fvcw== 18720\nX2VuYWJsZWQ= 18721\nIC0K 18722\nRlc= 18723\nZW5lcnM= 18724\nIE1Z 18725\nIHN1Z2dlc3Rpb25z 18726\nQ2FudmFz 18727\nIGZlcg== 18728\nIE1hcmtldGluZw== 18729\nQFRlc3Q= 18730\ndW50dQ== 18731\nIFZlbg== 18732\nIENvdQ== 18733\naXZhbHM= 18734\nRG9uYWxk 18735\nbGltaXRlZA== 18736\nCQkJCQkJCg== 18737\nIGFuYWx5c3Q= 18738\nKGVudHJ5 18739\nIHJlcHJlc2VudGF0aXZl 18740\nX2F0dHJpYnV0ZXM= 18741\nIGZ1cg== 18742\nLmhpZGU= 18743\ncmVzcA== 18744\nYWRvcmVz 18745\ncmlkZXM= 18746\nIEpvc2g= 18747\ncm9ib3Q= 18748\nIE5BVA== 18749\nIHNlc3Nv 18750\nIGludGVncmF0ZWQ= 18751\nOnRydWU= 18752\ncGFydHM= 18753\nIHN0dXBpZA== 18754\nOmV2ZW50 18755\nQGVuZHNlY3Rpb24= 18756\nIHB1 18757\nLlRhYmxl 18758\nIFlpaQ== 18759\nYDsKCg== 18760\nIGNsYW5n 18761\nPSIiPg== 18762\nZW5nYW4= 18763\nX3BhcmFtZXRlcnM= 18764\nLmludGVybmFs 18765\nIE1vZGVybg== 18766\nIG1ldHJpYw== 18767\nIHNlbWk= 18768\nPXt7Cg== 18769\nNzA3 18770\nLmFtYXpvbg== 18771\nIEJC 18772\nYWludHk= 18773\ndmlld3BvcnQ= 18774\nMzY3 18775\nIHN0YXJ0QWN0aXZpdHk= 18776\nZGlzcGF0Y2g= 18777\nKioqKio= 18778\nIGZsYXY= 18779\naWZmZXJlbnQ= 18780\nMzgy 18781\nW3RoaXM= 18782\nIHN0YWtl 18783\nIGFyZ3VlZA== 18784\ndmlvdXNseQ== 18785\nLndvcms= 18786\nIE9haw== 18787\nT2xk 18788\nKGFzeW5j 18789\nbm90ZXM= 18790\nIGZsaXA= 18791\nIGRpc2Fn 18792\nIFRF 18793\nCWVycm9y 18794\nPCc= 18795\nIMK7Cgo= 18796\nIGZpbHRlcmVk 18797\nIE1hY2g= 18798\nIGh1bmc= 18799\nX2R1bXA= 18800\nX3NhbXBsZXM= 18801\nLWRpc21pc3M= 18802\nIHJheQ== 18803\nSW1wbGVtZW50ZWQ= 18804\nREs= 18805\nIGplZA== 18806\nMDkw 18807\nIGJyZWFrcw== 18808\nIGZpdHM= 18809\nLmdy 18810\nIFplcm8= 18811\nb3Jv 18812\nIGVxdWFsbHk= 18813\nICdb 18814\nIGNvbmNlcm5pbmc= 18815\nPG1ldGE= 18816\ncGxheWVycw== 18817\nX1BPUw== 18818\nX3NpbQ== 18819\nSmFu 18820\nIHlvdXJz 18821\nCU4= 18822\nIHNwaXI= 18823\nIGNoYW1waW9u 18824\nIEFuYWx5c2lz 18825\nYXBh 18826\nIE5TTG9n 18827\nX2xpbmVz 18828\nw7Fh 18829\nCQkgICAgICAg 18830\nODE5 18831\nLlNj 18832\nUmVw 18833\nZXRyb2l0 18834\ndXJhYmxl 18835\nTUlU 18836\nY29tcGF0 18837\nb3duZWQ= 18838\nX2luZGljZXM= 18839\nXSwNCg== 18840\nIGRpc2NvdmVyeQ== 18841\nIERpZWdv 18842\nb2Jp 18843\nLkluZGV4 18844\nIHRyZW5kcw== 18845\nUExBWQ== 18846\nLm5v 18847\nIGxlbnM= 18848\nX2NmZw== 18849\nIGFubm8= 18850\nYWdhbg== 18851\nIHBlcmlvZHM= 18852\ndGVybXM= 18853\neXo= 18854\nIGF0dGFja2Vk 18855\naWJyYXRpb24= 18856\nUEVDSUFM 18857\nX2dyYWQ= 18858\nIGFjY29yZGFuY2U= 18859\nLlJlYWRMaW5l 18860\nLmRldmljZQ== 18861\ncml4 18862\nLmNvbnRhaW5lcg== 18863\nbWF5 18864\nZXJjaXNl 18865\nIEx1 18866\nIHJn 18867\nINGB0YI= 18868\nCQkKCQkK 18869\nKHVu 18870\nVEVSTkFM 18871\nIGxlc3NvbnM= 18872\nIGFsbGVnYXRpb25z 18873\nIHRyYW5zbWlzc2lvbg== 18874\nLlJlZg== 18875\nTW9iaWxl 18876\nIFRvdXJuYW1lbnQ= 18877\nIE51dA== 18878\nIEdh 18879\nIENhcGl0YWw= 18880\nZGVmaW5pdGlvbg== 18881\nLWV4cA== 18882\nY2xlYW4= 18883\nIGZhbnRhc3k= 18884\nIGVuaGFuY2U= 18885\nZW50ZW5jZQ== 18886\nMDMx 18887\nJ106Cg== 18888\nYWNrZXRz 18889\nIGNlbGVicmF0ZQ== 18890\nQCIs 18891\nU2VyaWFsaXplRmllbGQ= 18892\nIGFycmF5cw== 18893\ndGI= 18894\nCXN0 18895\nW2Fzc2VtYmx5 18896\nKHJlZw== 18897\nLmNhdGVnb3J5 18898\nIGltcHJvdmluZw== 18899\nIHNhbG9wZQ== 18900\nQnl0ZUFycmF5 18901\nT3JpZ2luYWw= 18902\nIFt7Cg== 18903\n5Zue 18904\nIENsaW4= 18905\nb2VuaXg= 18906\nIFNhbXN1bmc= 18907\nIG1haW50YWluZWQ= 18908\nIGFnZW5kYQ== 18909\nZmFpbA== 18910\nIHByZXNlbnRz 18911\nIHRpbWluZw== 18912\nLm1hcms= 18913\nJz48 18914\nIHByb21vdA== 18915\nIGluY2w= 18916\nX29ubHk= 18917\n66W8 18918\nIEF0dG9ybmV5 18919\nLWRhdGU= 18920\nIGxhbmRzY2FwZQ== 18921\nIGZ1 18922\nU1k= 18923\nLnByb3A= 18924\nIEFycg== 18925\ncGFn 18926\nUGFyYWxsZWxHcm91cA== 18927\nJzoNCg== 18928\nIGxvZ3M= 18929\nYXVuY2g= 18930\ndW5jaQ== 18931\nbmFtYQ== 18932\nVGFibGVDZWxs 18933\naXNzdWVz 18934\nLns= 18935\nZWN1cml0eQ== 18936\nX2V4ZWM= 18937\nb2xkcw== 18938\nIGhvc3Rz 18939\nIHByb3Rv 18940\nX2ltcG9ydA== 18941\nX3NvcnQ= 18942\nIEJvdw== 18943\nIE5vcm1hbA== 18944\nIEZhcm0= 18945\nLmNyZWF0ZVBhcmFsbGVsR3JvdXA= 18946\nUm90YXRpb24= 18947\nLmVycg== 18948\nIHBsZWFzZWQ= 18949\naXRhZ2U= 18950\nLldo 18951\nCQkgICAg 18952\nTVI= 18953\nIE1PUkU= 18954\nIE5hdHVyYWw= 18955\nX3RyYW5zZm9ybQ== 18956\nQkFTRQ== 18957\nZW5lcmFs 18958\ndXRkb3du 18959\nLmNvbW1vbnM= 18960\nV1Q= 18961\nIGFhbg== 18962\nLlJlc3VsdA== 18963\nZG9n 18964\nIGNsaWNraW5n 18965\nKSwKCg== 18966\nI2xpbmU= 18967\nT3BlcmF0b3I= 18968\nIGNpdg== 18969\nIG1lcmc= 18970\nb2J1Zg== 18971\nbmd0aGVu 18972\nIFt7 18973\nIGNhbmNlbGw= 18974\ndHJpZ2dlcg== 18975\nLjo= 18976\nV09SSw== 18977\nZGVjbGFyZQ== 18978\nIGRlY3JlYXNl 18979\nxZtjaQ== 18980\nbG9vbQ== 18981\nLk5vbmU= 18982\nIE1J 18983\nIEphc29u 18984\nIGhlYWx0aGNhcmU= 18985\naWFtb25k 18986\nc3lsdmFuaWE= 18987\nKng= 18988\nIFJh 18989\nW2I= 18990\nIHByaW50aW5n 18991\ncGhhYmV0 18992\nIExhYm91cg== 18993\nb3BwZXI= 18994\nIHppam4= 18995\nLXRhcmdldA== 18996\nX0ZVTkNUSU9O 18997\nIG9jdA== 18998\n0LXQvdC40Y8= 18999\n5Zyo 19000\nIHdlc3Rlcm4= 19001\nIGNvbXB1dGVycw== 19002\nIFJFVA== 19003\nSGFzaE1hcA== 19004\nW1N0cmluZw== 19005\nZ2V0VmFsdWU= 19006\nX0RBVEU= 19007\nLk5leHQ= 19008\nIEZpZg== 19009\nw6ls 19010\naWNrZWQ= 19011\n5o4= 19012\nLU1N 19013\nIHsKCgo= 19014\nIGNvbnRhY3Rz 19015\nIGRpZ2l0cw== 19016\nUHJvZHU= 19017\nIHVudXN1YWw= 19018\nIHJhcGlkbHk= 19019\ndHVyZXM= 19020\nIGFuZ3J5 19021\nY2FuY2Vs 19022\neHh4eA== 19023\nX3BhcnNlcg== 19024\naWRpdHk= 19025\nX1BSRUZJWA== 19026\nNzEw 19027\nIG1laHI= 19028\nIHJhcmVseQ== 19029\nZXRoZQ== 19030\nb3Blcw== 19031\nICUu 19032\nd29ya3M= 19033\nIHRoZXRh 19034\nIGNvbnRyaWJ1dGlvbg== 19035\nIFRvbnk= 19036\nIHNxdWFk 19037\nNTM3 19038\n0LDQuQ== 19039\nIMOubg== 19040\ndGhlcmU= 19041\nb3V0ZWQ= 19042\nCXE= 19043\nmYI= 19044\nZ29vZA== 19045\nTEk= 19046\n6aG1 19047\nIExpdmluZw== 19048\naXphYmV0aA== 19049\nIGt0 19050\nIERhbGxhcw== 19051\nXV0sCg== 19052\nIC8+Cgo= 19053\nIHJhaXNpbmc= 19054\nL3JvdXRlcg== 19055\nX2dhbWU= 19056\nMzY4 19057\nIENVUg== 19058\nemVucw== 19059\nLmVz 19060\nIGZvbnRXZWlnaHQ= 19061\nKGZ1bmM= 19062\nbm90aWZpY2F0aW9u 19063\nICcuLi8uLi8uLi8= 19064\nIGJsYW1l 19065\n44CCCgoKCg== 19066\nYW5jbw== 19067\nOTgw 19068\nSWRlbnRpdHk= 19069\nZm9sbG93 19070\nIGFydHM= 19071\neHM= 19072\nIG9mZmljaWFsbHk= 19073\nIFN0dWRpbw== 19074\nIHJlY29tbWVuZGF0aW9ucw== 19075\nIGxvY2FsZQ== 19076\nIGFtYXRldXI= 19077\nIEVuYWJsZQ== 19078\nIGNhcHM= 19079\nLkVuZA== 19080\nMzg4 19081\nLWFkZA== 19082\nX2dzaGFyZWQ= 19083\nIENU 19084\nRm9yY2U= 19085\nCiAgICAgICAgICAgIAo= 19086\nIG9yYW5nZQ== 19087\nIGxw 19088\nIGFuc3dlcmVk 19089\nLkdyaWQ= 19090\nIGR1YWw= 19091\nIHN0cmF0ZWdpYw== 19092\nIG5vYm9keQ== 19093\nIGZhdGFs 19094\nX2VzdA== 19095\nKGVs 19096\nIOyg 19097\nIEJ1ZGQ= 19098\nQUlU 19099\nX2ZhY3Rvcg== 19100\nLW9uZQ== 19101\nIEhBVkU= 19102\nIg0KDQo= 19103\nNzYw 19104\nUHJvZg== 19105\nIMOkcg== 19106\nc3RyaW5ncw== 19107\nIGRpcnR5 19108\nIEZhY2U= 19109\nIEJlZ2lu 19110\nIEJ1cw== 19111\nIHdpcw== 19112\n5a2X 19113\nIHNwZWFrZXI= 19114\nIGNhcnJpZXI= 19115\nIE9t 19116\nIGhhZG4= 19117\nQWxsb3c= 19118\nOjpfXw== 19119\nIHZlcmI= 19120\nIENvbXBsZXRl 19121\nIEVhc3k= 19122\nIGJpbGxz 19123\nICAKCg== 19124\nVmVydGljYWw= 19125\nIHByb24= 19126\nIERlZmluZQ== 19127\nIGxvb2t1cA== 19128\ndmFyaWFibGVz 19129\nIHBhbmRhcw== 19130\ndW1lcw== 19131\nIGlubm9j 19132\nIHNldFVw 19133\nIENoYW1waW9uc2hpcA== 19134\nYXJ0aXN0 19135\nIENUeXBl 19136\nRm91bmRhdGlvbg== 19137\n4LmI 19138\nIFNldHVw 19139\nNDI4 19140\nIHJlY2lwZXM= 19141\nIFVJQ29sb3I= 19142\nIEZpZ2h0 19143\nIGF1dGhvcml6ZWQ= 19144\nX2NsaWNr 19145\nOTkw 19146\nX3N1Y2Nlc3M= 19147\nYW5nYW4= 19148\nIE1vdW50YWlu 19149\nIERvY3Rvcg== 19150\nIGVnZw== 19151\nIE1lZGljaW5l 19152\nY2xlcw== 19153\nYC4K 19154\nW2ludA== 19155\nZGFzaGJvYXJk 19156\nIEFwcHJv 19157\nLWRy 19158\nIHByb2R1Y2Vz 19159\nIHJlbnRhbA== 19160\nIHJlbG9hZA== 19161\nMzgx 19162\nIGFycml2YWw= 19163\nc3BvdA== 19164\nIHVuZGVydA== 19165\nMzc4 19166\nIGVxdWlwcGVk 19167\nIHByb3ZlZA== 19168\nIGNlbnRlcnM= 19169\nIGRlZmluZXM= 19170\nYWxzbw== 19171\nIG9wYWNpdHk= 19172\nIFVuZm9ydHVuYXRlbHk= 19173\nIElsbGlub2lz 19174\nINC90LU= 19175\nIFRlbXBsZQ== 19176\nIFRyYWls 19177\nIEtlbGx5 19178\nIG1lYXN1cmVtZW50 19179\nIHNlcGFyYXRlZA== 19180\nLWNpcmNsZQ== 19181\nSGV5 19182\nIFJFQUQ= 19183\naWdpdHM= 19184\nIGli 19185\nIE1PRA== 19186\nYXR0ZXJ5 19187\n0LDQtw== 19188\nIHZlbmQ= 19189\n0LXQvdGC 19190\nIEh0dHBDbGllbnQ= 19191\nMzU5 19192\nc2FmZQ== 19193\nX0FTUw== 19194\naWNpdA== 19195\nIENvbnN0cnVjdA== 19196\nIENsbw== 19197\nIFNpeA== 19198\nX1RPS0VO 19199\nKGJsb2Nr 19200\nIHdhcm5lZA== 19201\nLyoh 19202\nITwv 19203\nYWNhZGVz 19204\nIG1hcmc= 19205\nZXJhc2U= 19206\nIGRpc3BsYXlz 19207\naXN0cmF0b3I= 19208\nZ2V0cw== 19209\nIGd0aw== 19210\nX0dFTkVS 19211\nbmVk 19212\nXyU= 19213\nIGZhdm91cml0ZQ== 19214\nIEJydQ== 19215\nIMOh 19216\nc2Vjb25kYXJ5 19217\nIG1hc3Q= 19218\nIHNvcGg= 19219\nIFNhZmV0eQ== 19220\naGFyZA== 19221\nMDYy 19222\ncmFpc2U= 19223\nIEV4Y2hhbmdl 19224\nIGNvbnRlbXBvcmFyeQ== 19225\nIGRyZWFtcw== 19226\nIHRlbA== 19227\nIG5laWdoYm9ycw== 19228\nIEhvbHk= 19229\nMzgz 19230\nLm1lYW4= 19231\nODEw 19232\nZW1pdA== 19233\nIE1lc3M= 19234\nQ2FzdA== 19235\nTkVDVA== 19236\ncGx1Z2lucw== 19237\nIHJi 19238\nd3I= 19239\nIGh1Yg== 19240\nIFN0dWRpZXM= 19241\nNTYy 19242\nIHBvc3Nlc3Npb24= 19243\nJCgnLg== 19244\nZW5zaXRpdmU= 19245\nIGFkZENyaXRlcmlvbg== 19246\nX18u 19247\nIGV4cGVydGlzZQ== 19248\nQXJjaA== 19249\nIGN1Yg== 19250\nZXJ2ZXJz 19251\nIHBhcnRpY2xlcw== 19252\ndWFy 19253\nIGJvdW5kYXJ5 19254\nKScs 19255\nYWpv 19256\nIHByZWY= 19257\nOmA= 19258\nIGhhcmFzcw== 19259\naXU= 19260\nIHJlYWNoaW5n 19261\nIG1lZw== 19262\nIHpv 19263\nKElE 19264\nX3JlcXVpcmVk 19265\nIHPDqQ== 19266\nIFF1ZXVl 19267\nQU8= 19268\nIGdlbQ== 19269\nODEy 19270\ncHRvbg== 19271\nODgw 19272\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 19273\nNjYw 19274\naWpr 19275\nKHsNCg== 19276\nIGNvbGxpc2lvbg== 19277\nIFVrcmFpbmU= 19278\nIC0qLQo= 19279\nTlNJbnRlZ2Vy 19280\nX0JMT0NL 19281\nNTY3 19282\nIFRleHR1cmU= 19283\nIGRlY2xpbmVk 19284\nbmFu 19285\nX3dhaXQ= 19286\nIHBvbGl0aWNpYW5z 19287\nNDEz 19288\nIGNvaW5z 19289\nIGRlcml2 19290\naGVscGVy 19291\nIFBlcmhhcHM= 19292\nLnJlY3Q= 19293\nIFBvbHk= 19294\nYWJsaW5n 19295\nfS8+Cg== 19296\nIGlubm92YXRpb24= 19297\nXyI= 19298\nICk7DQoNCg== 19299\nIHNwb3Rz 19300\nIGNob29zaW5n 19301\nLmNz 19302\nIGZsZXhpYmxl 19303\nVUludA== 19304\nNDM1 19305\nOTMw 19306\nIHNjcmF0Y2g= 19307\nLWFs 19308\nIGZlc3RpdmFs 19309\nIG91dHN0YW5kaW5n 19310\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 19311\nTWVhbg== 19312\nIE9yZWdvbg== 19313\nc3ltYm9s 19314\nLmFjY291bnQ= 19315\nZG5leQ== 19316\nJycn 19317\nISIs 19318\nOTAx 19319\nIHBhcnRpY2xl 19320\nw4M= 19321\nW01BWA== 19322\nSVZFUg== 19323\nRVJFTkNF 19324\nTlNNdXRhYmxl 19325\nIENvbHVtYmlh 19326\nXwoK 19327\nLmZy 19328\nIGNvZ24= 19329\nVlI= 19330\nIE1ldGhvZHM= 19331\nIE1hZGU= 19332\nIEJS 19333\nIEVsc2U= 19334\nIGVnZ3M= 19335\nIHN3aW5n 19336\nIEludg== 19337\nIGRpc2Vhc2Vz 19338\nIGZpcm1z 19339\nIGxlbW1h 19340\nfWApOwo= 19341\nbGluZ3M= 19342\nIGd5bQ== 19343\ndW1pbnVt 19344\nLlRyaW0= 19345\nTWVt 19346\nIGNyaXRpY2lzbQ== 19347\naWJlcm5hdGU= 19348\nX1RY 19349\naW9uaQ== 19350\nIGd1aWRhbmNl 19351\nIHJlcGVhdGVkbHk= 19352\nIHN1cHBsaWVy 19353\nIHBhaW50aW5n 19354\nODY0 19355\nLkZyYWdtZW50 19356\nZWRFeGNlcHRpb24= 19357\nIHdpcmluZw== 19358\nIGNvdXJ0cw== 19359\nV0VC 19360\n5pyJ 19361\nXC4= 19362\naWxsYW5jZQ== 19363\nIGJyb3dz 19364\nIFBhdHRlcm4= 19365\nUExJQ0FUSU9O 19366\nIFN1bW1lcg== 19367\nQ2hhaW4= 19368\nIGN1dGU= 19369\nbWVyY2lhbA== 19370\nIGRpbA== 19371\nIEZyYW5rbGlu 19372\nCWdsb2JhbA== 19373\nSU5DTFVESU5H 19374\naGlzdG9yeQ== 19375\nIGxzdA== 19376\nUXQ= 19377\nU0RM 19378\nYWxpYQ== 19379\naWVyZQ== 19380\nKC4uLg== 19381\nCWNpbg== 19382\naWZmcw== 19383\ndmVsb3Bl 19384\nIFJvb3Q= 19385\nY2x1c3Rlcg== 19386\nVXNlck5hbWU= 19387\naWduZQ== 19388\nPFM= 19389\nIGZlc3Q= 19390\nNDE5 19391\nIGluZGljYXRpbmc= 19392\na2VlcGVy 19393\nIGNhZGE= 19394\nw6ln 19395\nY29uc2lu 19396\nIEdC 19397\nIGxi 19398\nZW1vbnk= 19399\nLWljb25z 19400\nX2RvYw== 19401\nQWN0b3I= 19402\nZWxlbQ== 19403\nLkRlbGV0ZQ== 19404\nIGluZmVjdGlvbg== 19405\nIFByaXZhY3k= 19406\nIGdyZWF0bHk= 19407\nIFBvcw== 19408\nIFRyZWF0 19409\nRmxvdw== 19410\nIGF0dHJhY3RpdmU= 19411\nIE1hcmM= 19412\nc3Vkbw== 19413\ndGVzeQ== 19414\nLWFu 19415\nOTk4 19416\nYWJhbWE= 19417\nIFdvdWxk 19418\nIHN1Y2s= 19419\naW5kZXhQYXRo 19420\nIEV0 19421\nVGltZXM= 19422\nNzgw 19423\nIGNsdWJz 19424\nX2Fzc29j 19425\nIGFjcXVpcmVk 19426\nKCI6 19427\nIGludGVuc2U= 19428\nLm1hcHM= 19429\nRXhwZWN0ZWQ= 19430\nVG9nZ2xl 19431\nIGF5 19432\nIGxpZmVzdHlsZQ== 19433\nLWNhbGxlZA== 19434\nIFNub3c= 19435\nVm9sdW1l 19436\nIGNhbm5hYmlz 19437\nIERpcmVjdGlvbg== 19438\nIExpbWl0ZWQ= 19439\nLXNwZWNpZmlj 19440\nIGRvd250b3du 19441\nL2ljb25z 19442\nIHJldmVu 19443\nTGVn 19444\nODg1 19445\nPW51bGw= 19446\nNDk2 19447\nS2V5Ym9hcmQ= 19448\nJykpLg== 19449\nICIiOw0K 19450\nIGF0dGl0dWRl 19451\nLm5hdmlnYXRl 19452\nLWVycm9y 19453\nQU1QTEU= 19454\nIEpheQ== 19455\ndnI= 19456\nY293 19457\nLmNvbXBpbGU= 19458\nIG1lbW9yaWVz 19459\nX21hcms= 19460\nIE1pbm5lc290YQ== 19461\nIGtvc3Rlbg== 19462\nIHByb2JhYmlsaXR5 19463\nd2FybmluZw== 19464\nIGdlbmV0aWM= 19465\nRml4dHVyZQ== 19466\nIEhhc2hTZXQ= 19467\nTm9tYnJl 19468\nX21vbnRo 19469\nxrA= 19470\nLXN0YXJ0 19471\neHlnZW4= 19472\nCWZ0 19473\naWFnbm9zdGljcw== 19474\nIE1hdHRoZXc= 19475\nIGNvbmNlcHRz 19476\nIGNvbnN0cg== 19477\nLlN0YXRl 19478\n0LjQvQ== 19479\nTm92 19480\nzrE= 19481\nIFBhbmVs 19482\n5Liq 19483\nY29tcGFyZQ== 19484\nPigpCg== 19485\nIGFwcGx5aW5n 19486\nIHByb21pc2Vk 19487\nIG94 19488\nbmNpYQ== 19489\nIFZhbGlkYXRpb24= 19490\nb3J0cw== 19491\nX2N1cg== 19492\nZWxlY3Q= 19493\nZXll 19494\nKERhdGE= 19495\nIHJlcG9ydGVy 19496\nIEJ1ZmY= 19497\nMzk1 19498\nIHNy 19499\nICI7 19500\naWNreQ== 19501\nIHRlbXBvcg== 19502\nU04= 19503\nIHJlc2lkZW50 19504\ncGlyZXM= 19505\neXNpY2Fs 19506\nIGVuZG9yc2U= 19507\nIFNvbmc= 19508\naXNFbXB0eQ== 19509\nbGVldA== 19510\nX3V0aWw= 19511\nIGRpc3Rpbmd1 19512\nIFRhbGs= 19513\nIE1vdA== 19514\nKGRlZmF1bHQ= 19515\nLkFyZw== 19516\nZ29yaXRobXM= 19517\nX3dvcmRz 19518\naW1tZXI= 19519\nX3Jlc2V0 19520\nZmFtaWx5 19521\nV1c= 19522\nIHNhdmluZ3M= 19523\nIOKAnQ== 19524\nX2VuYWJsZQ== 19525\nc2lkZWJhcg== 19526\nUnVubmluZw== 19527\nIGFsaQ== 19528\nIHRlc3RpbQ== 19529\nIHdhcm5pbmdz 19530\nIENoZW0= 19531\nIEV4aXQ= 19532\nIGZvdW5kZXI= 19533\ncGVjdG9y 19534\nIHJt 19535\nX2RhdGFzZXQ= 19536\nIERhcw== 19537\nIGhhbg== 19538\nR2V0dHk= 19539\nw6Fs 19540\nIG55 19541\nIHBvdmVydHk= 19542\nIHJlc3VsdGVk 19543\nLmJ5 19544\nIFZpc2l0 19545\nIG9idGFpbmluZw== 19546\nLycuJA== 19547\nICAgICAgICAgICAK 19548\nc2hhbGw= 19549\nX0xFRlQ= 19550\nVUlJbWFnZQ== 19551\nX05hbWU= 19552\naGF2ZQ== 19553\nIE5vYg== 19554\nbHI= 19555\nLWZvb3Rlcg== 19556\nIG5ha2Vk 19557\nIEdhcmRlbg== 19558\nXEZhY2FkZXM= 19559\nIGdyYWR1YXRl 19560\nNDE3 19561\nIGZyYW5jaGlzZQ== 19562\ncGxhbmU= 19563\nIGNvbnRyaWJ1dGlvbnM= 19564\nIHN0cmluZ1dpdGg= 19565\nIGNyeXB0bw== 19566\nIG1vdmVtZW50cw== 19567\nYXRoZXJz 19568\nIGxpZmV0aW1l 19569\nIGNvbW11bmljYXRl 19570\namFy 19571\nIEZyYWdtZW50 19572\nX0lG 19573\nIE5hdnk= 19574\nIEZpZ3VyZQ== 19575\nIHNpbXVsYXRpb24= 19576\nX3N0b3A= 19577\nIHJlcG9ydGVycw== 19578\nIHZlcnN1cw== 19579\nYWph 19580\nIM6x 19581\nIGdvdmVybm9y 19582\nTGlzdEl0ZW0= 19583\nIHNlYWxlZA== 19584\nLkJhY2tncm91bmQ= 19585\nZWRp 19586\nYXNoaW5n 19587\nIGxpcA== 19588\nIElo 19589\nbWVyZ2U= 19590\nIG5lYw== 19591\nMDI0 19592\nZWxvY2l0eQ== 19593\nQVRFRw== 19594\nIHNlZWRz 19595\nIGZsb2F0aW5n 19596\nNzAx 19597\nX0ZB 19598\nd2Fsaw== 19599\nCXVzZXI= 19600\nX2RlcHRo 19601\nIHdhZ2U= 19602\nQGFwcA== 19603\nTmls 19604\nKFsi 19605\nKHZlY3Rvcg== 19606\nIHNlY3JldGFyeQ== 19607\nNDYx 19608\nIGpQYW5lbA== 19609\ndmV6 19610\nwqDCoMKgwqA= 19611\nZGlyZWN0aW9u 19612\nIEVQ 19613\nIGh1bnQ= 19614\nMzk2 19615\nSnNvblByb3BlcnR5 19616\nIFBPUlQ= 19617\nXSIs 19618\n0LDQvw== 19619\nIEZvcmVpZ24= 19620\ncGFuaWM= 19621\nIHRyaWFscw== 19622\nIEFsZQ== 19623\nIHJ1cmFs 19624\nLXZhbHVl 19625\nYXV0aG9yaXplZA== 19626\nIFNjb3RsYW5k 19627\nLmRyb3A= 19628\nIE1U 19629\n57E= 19630\nMzkx 19631\ncm93dGg= 19632\nNTE1 19633\nRmlsZVBhdGg= 19634\nIHJlY2FsbA== 19635\naWZsZQ== 19636\nIGNlbA== 19637\nIFNFTEVDVA== 19638\na24= 19639\nX2Nhc2U= 19640\nIGNyb3A= 19641\nNTQz 19642\nc3VyZQ== 19643\ncG90 19644\nSUNT 19645\nIHN0ZW0= 19646\nIGluZHVzdHJpZXM= 19647\nUHV0 19648\nIGFiZXI= 19649\ncm9hZGNhc3Q= 19650\nSWNvbnM= 19651\nKSIpCg== 19652\n5oiQ5Yqf 19653\nZ3Vp 19654\nIGFzc3VtZWQ= 19655\nIHJ4 19656\nRUE= 19657\n6Kc= 19658\nRUxM 19659\nIGRvc2U= 19660\nIGluZQ== 19661\nIGRlZXBlcg== 19662\nbGlkZXI= 19663\nIG9yZGluYXJ5 19664\nIGdvbGY= 19665\nNjA1 19666\nX0lNQUdF 19667\nIE5BTUU= 19668\nKG1vZHVsZQ== 19669\nIGF0b20= 19670\nIGJlbHQ= 19671\nIG9mZmljZXM= 19672\nNTA2 19673\nYmV0YQ== 19674\nIHBoaWxvc29waHk= 19675\nKEpTT04= 19676\nLWZpZWxk 19677\nIGludHJvZHVjZQ== 19678\nIGNvbnZlbmllbmNl 19679\nb3B0aW0= 19680\nPiIK 19681\nYXRoeQ== 19682\nIGVtcGxveWVy 19683\ncXVhdGU= 19684\nIGVkaXRlZA== 19685\nQXJndW1lbnRz 19686\nIE5hdGlvbnM= 19687\nX18p 19688\nIG5vc2U= 19689\nIFNhbXBsZQ== 19690\nJykKCgo= 19691\nIGNha2U= 19692\nLmdldEF0dHJpYnV0ZQ== 19693\nSEQ= 19694\nMzky 19695\nTW9kaWZpZWQ= 19696\nNDQ1 19697\nIHByZWRpY3RlZA== 19698\nxYQ= 19699\nYW5pZQ== 19700\nU29ycnk= 19701\nKGRvYw== 19702\nd2luZA== 19703\naWV2ZQ== 19704\nIHByb3Zpc2lvbnM= 19705\nQVRFUg== 19706\nT1RF 19707\nTVk= 19708\nLkF1dG93aXJlZA== 19709\nIEJhdGg= 19710\nNDIz 19711\nLkJvb2xlYW4= 19712\nIGJhY2tlbmQ= 19713\nLk1vdXNl 19714\nYXRlcmFs 19715\ncGFwZXI= 19716\nQ29uc3Q= 19717\nIFZS 19718\nX2VudGl0eQ== 19719\nX0NUUkw= 19720\nIFByb3RlY3Rpb24= 19721\nIEdN 19722\nIFN0dWR5 19723\nIHNvdXA= 19724\nb3RpbWU= 19725\nJ3VzZQ== 19726\nXSI= 19727\nL3VzZXJz 19728\nYXVn 19729\nIEhvbmc= 19730\nX25vcm0= 19731\n44Go 19732\nIHNlY3Jl 19733\nKEJ1aWxk 19734\nIENvbnRyYWN0 19735\nb2xhcw== 19736\nIHNhdWNl 19737\nIGFnZ3Jlc3NpdmU= 19738\nIHJhY2lhbA== 19739\nY2hhcmFjdGVy 19740\nQEA= 19741\nIGNvbXBpbGU= 19742\nIFZvaWQ= 19743\nX3JlbQ== 19744\nX21lbW9yeQ== 19745\nMzQ4 19746\na2s= 19747\nIG1pYw== 19748\nU2FtZQ== 19749\nVXRpbGl0eQ== 19750\nIEh0bWw= 19751\nIFhtbA== 19752\nUmVhZHk= 19753\nIGdhbGw= 19754\nIGFsbGVnZWRseQ== 19755\nCQkJCSAgIA== 19756\nIE1ldGFs 19757\nIFBlcnNvbmFs 19758\nIGJvcmRlclJhZGl1cw== 19759\ncnhqcw== 19760\nb2JqZWN0cw== 19761\nIHdhbnRpbmc= 19762\nIGJvd2w= 19763\ndmVuZG9y 19764\nb2Zmc2V0b2Y= 19765\nIFJz 19766\nIFJhdGluZw== 19767\nIHJhbGx5 19768\nX05PREU= 19769\nNDE4 19770\nIE1peA== 19771\nIGFkdmVydGlz 19772\nNDg1 19773\nNjY3 19774\nIG5hcnJhdGl2ZQ== 19775\nc2Fs 19776\nIG1j 19777\nU0Vycm9y 19778\nIGZpbmdlcnM= 19779\nIGFjY29tcGFueQ== 19780\nIHRpcmVk 19781\nIHN0cmlkZQ== 19782\nIGd1aQ== 19783\nZWxpc3Q= 19784\nTG9jYWxl 19785\nIHJlbGVhc2Vz 19786\naWtpbmc= 19787\nIGFuZ2Vy 19788\nKSkpCgo= 19789\nYWxsZXN0 19790\nU3VtbWFyeQ== 19791\nKE8= 19792\nKGZvcg== 19793\nIGJhc2tldGJhbGw= 19794\nIHJvYWRz 19795\nIEluc3RhbGw= 19796\nIEZhYg== 19797\naXRtYXA= 19798\nNDc1 19799\nICkpCg== 19800\nIGludGVyc2VjdGlvbg== 19801\naWdoYm9y 19802\nIEJyeQ== 19803\nIEhFUkU= 19804\nU29mdHdhcmU= 19805\nZWxmYXJl 19806\nYWNz 19807\nNjIy 19808\nIHRyYWlsZXI= 19809\nLmdldENsYXNz 19810\nY2hhcnM= 19811\nIHJlZ3VsYXRpb24= 19812\nIHJlZmVycw== 19813\nIGRlc3RydWN0aW9u 19814\nIGNvbnRpbnVvdXM= 19815\nIEF1c3Rpbg== 19816\n6aI= 19817\nYWthbg== 19818\nLndpbmRvdw== 19819\nIFRlbXBsYXRlcw== 19820\nIGFic2VuY2U= 19821\nOm4= 19822\nIGRpc29yZGVy 19823\nZmxhc2g= 19824\nIGRlbGV0 19825\nYm9hcmRz 19826\nICAJ 19827\nUk9Q 19828\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 19829\nIGFjcXU= 19830\nIGxhd3N1aXQ= 19831\nIFJldmlld3M= 19832\nIGdhcmFnZQ== 19833\ndGltZXI= 19834\nIGVq 19835\nIFJlY3RhbmdsZQ== 19836\nIGZsb3dlcnM= 19837\nMzk4 19838\naWxzdA== 19839\nIEluc3RhbmNl 19840\nU3VwZXI= 19841\nZGV0 19842\nZGlzcG9zaW5n 19843\nIEVT 19844\nIElD 19845\ndmVyZQ== 19846\nU2s= 19847\nX2NoYW5uZWxz 19848\ncHV0ZWQ= 19849\nL251bGw= 19850\nbm5lbg== 19851\nNDMx 19852\nIEdhbGxlcnk= 19853\nX2dsb2JhbA== 19854\nQXV0aGVudGljYXRpb24= 19855\nIFJhbms= 19856\nIGJsb2NrZWQ= 19857\nIGNhbG0= 19858\nbWFya2V0 19859\nCXZhbA== 19860\nIGF1Zw== 19861\ncGVyaW9k 19862\nIENvbnN0YW50 19863\nID8+Ij4K 19864\nIGxvYmJ5 19865\ncGFs 19866\nMzc5 19867\nIHNpbms= 19868\nNTA4 19869\naWFo 19870\n0KE= 19871\ndXJuYW1l 19872\nIGNvbnZlcg== 19873\nIGludmVzdGlnYXRl 19874\nQ2hyaXN0 19875\nSHVi 19876\nIElORA== 19877\nIFBlZA== 19878\ndXJhcw== 19879\nCXVybA== 19880\nIFRybw== 19881\nIHByZWZlcmVuY2Vz 19882\nIGd1YXJhbnRlZWQ= 19883\nYAoK 19884\nIHBvcnRpb25z 19885\nIGV2YWx1 19886\nJz48Lw== 19887\nKCl7Cgo= 19888\nZW5jb2RlZA== 19889\nemlsbGE= 19890\nLkNsYXNz 19891\nICpf 19892\nXyc= 19893\nIHZpZXdlZA== 19894\nIFBoaWxhZGVscGhpYQ== 19895\nLnJvd3M= 19896\nQWRkZWQ= 19897\nIFRvdWNo 19898\nODQw 19899\nLmRlbGVnYXRl 19900\ncXVlZXpl 19901\nc2xpZGU= 19902\nIFNlbmlvcg== 19903\nKHRhZw== 19904\nIGludGVydmlld3M= 19905\nIHN1YQ== 19906\nYXRhcw== 19907\nQAoK 19908\nZGlzdGFuY2U= 19909\nIHNlaW4= 19910\nbGF0ZXN0 19911\nIFByaW5jZQ== 19912\nIGx1eHVyeQ== 19913\nIHJlZnI= 19914\nIEtpdGNoZW4= 19915\n0YQ= 19916\nKGF0 19917\nRmluYWw= 19918\nw7xjaw== 19919\nX3plcm8= 19920\nIEFCQw== 19921\nIE1hbmNoZXN0ZXI= 19922\nIGNvdw== 19923\nQ09M 19924\nX05VTUJFUg== 19925\nY2hhbmdlcw== 19926\nZ2VuZXJhdGU= 19927\nLlByaW50Zg== 19928\nMzY5 19929\nc2hhcmU= 19930\nU3RvY2s= 19931\nIFBU 19932\nQW5pbQ== 19933\nYW5nYQ== 19934\nIGln 19935\ndXBsb2Fkcw== 19936\nIHBhY2tlZA== 19937\nIH1dOwo= 19938\nKHNlbmRlcg== 19939\nIFdpcmU= 19940\naXNvbnM= 19941\nIHBsYXlvZmY= 19942\nXEU= 19943\nNjA4 19944\nL1I= 19945\nIGhlYWRlZA== 19946\nQWxwaGE= 19947\nKG9yZGVy 19948\nIG9wcG9uZW50cw== 19949\nYWNrc29u 19950\nX21lbWJlcg== 19951\nVHVybg== 19952\nIFNvdmlldA== 19953\n7JeQ 19954\nYXVnZQ== 19955\nNDQ4 19956\nIGluY29taW5n 19957\nIGphaw== 19958\nLWdhbWU= 19959\nIE1hbGU= 19960\nIE1vbnRo 19961\nU3RhZ2U= 19962\nLmV4ZQ== 19963\nT3duUHJvcGVydHk= 19964\nLnNldEl0ZW0= 19965\nIGRj 19966\n5L2c 19967\nIGJydXQ= 19968\nIGF0dGVtcHRpbmc= 19969\nLmxlbg== 19970\nIGp1ZGdtZW50 19971\nIHNhYg== 19972\nIGNhZA== 19973\nIEl0ZW1z 19974\nY29tZm9ydA== 19975\nZWxpemU= 19976\nL2xvZw== 19977\nIGVudHJlcHJlbmU= 19978\nIGNvbXBpbGVy 19979\nX3ZhbGlkYXRpb24= 19980\ncmV2aWV3 19981\nIHRleHRCb3g= 19982\nIGZyYWN0aW9u 19983\nIEJhbA== 19984\nPjsKCg== 19985\nLkF1dG9TY2FsZU1vZGU= 19986\nIGNhdHM= 19987\nNDY1 19988\nIHJlZ2lzdHJ5 19989\ndWx1cw== 19990\nRkk= 19991\ncGF5bG9hZA== 19992\nLXNlYXJjaA== 19993\nIHN0YXlpbmc= 19994\nYWNpb3Vz 19995\nRGVjb3JhdGlvbg== 19996\nUmV2aWV3 19997\nSW5m 19998\nS2VlcA== 19999\naXRpcw== 20000\nLFN0cmluZw== 20001\nQ29vcmQ= 20002\nIHBlcm8= 20003\nU2V4 20004\nIEF0bGFudGE= 20005\ndWVzdGE= 20006\nQXJnYg== 20007\nPio= 20008\nfV8= 20009\nRm9vdGVy 20010\nIGVtcGxveWVk 20011\nX2JvdW5k 20012\ndmlkZQ== 20013\nLmZ1bmM= 20014\nJHNjb3Bl 20015\nIHNwbw== 20016\nIEFuYWw= 20017\nb3VuY2Vk 20018\nYXJvdW5k 20019\nIHJlc3RyaWN0aW9u 20020\nIHNob3Bz 20021\n5YA= 20022\nIExhdGlu 20023\nLWNvbA== 20024\nIGJhcmVseQ== 20025\nIEV1cm8= 20026\nRXI= 20027\nIGZhaXJl 20028\nX2Rpc3RhbmNl 20029\nX3VubG9jaw== 20030\nUXVvdGU= 20031\nSVZBVEU= 20032\nIOWI 20033\nIGFpbWVk 20034\nIFJldHJpZQ== 20035\nLml0ZXI= 20036\nIHdyYXBwZWQ= 20037\nIGFncmVlbWVudHM= 20038\nc3RydW1lbnQ= 20039\nKHByb2R1Y3Q= 20040\nIHN0dWRpZWQ= 20041\nLnNldFZhbHVl 20042\nIHll 20043\nIENhY2hl 20044\nTUJPTA== 20045\nIHF1YXJ0ZXJiYWNr 20046\nIHN5bnRheA== 20047\nLmdldEVsZW1lbnRzQnk= 20048\nLnZlcnNpb24= 20049\nd2Vic2l0ZQ== 20050\nUnVubmVy 20051\nX3NpbmdsZQ== 20052\nYXRpdg== 20053\nIEFsdGVybg== 20054\nIEJlYXV0aWZ1bA== 20055\ncmlnaHRhcnJvdw== 20056\nIGRpdmVyc2l0eQ== 20057\ncGxhc2g= 20058\nKGNv 20059\nLkZpbGw= 20060\nIHR5cGluZw== 20061\nMzg3 20062\nMDIz 20063\nIGNsYXI= 20064\nSGl0 20065\nT08= 20066\nYWNjbw== 20067\nNTA3 20068\nd29ydGg= 20069\nIHNjcmlwdHM= 20070\nIE11c2xpbXM= 20071\nIExM 20072\nZXJ2aW5n 20073\nKGJvb2xlYW4= 20074\nIGJhc2ViYWxs 20075\nIENBTg== 20076\nMzk0 20077\nMDQ0 20078\nTUFJTA== 20079\nZGVwZW5k 20080\nIHJlc3BlY3RpdmU= 20081\nIGNvbnN0ZXhwcg== 20082\nLio7Cgo= 20083\nJ10pKQo= 20084\nIHlhcmQ= 20085\nIGlkZW50aWNhbA== 20086\naWZlY3ljbGU= 20087\nVVNI 20088\ndXBpdGVy 20089\nLnZhbGlkYXRl 20090\nY2xp 20091\nSVNURVI= 20092\nSW5kaWNhdG9y 20093\nRmFpbA== 20094\nIGRlbW9jcmFjeQ== 20095\nLnZhcg== 20096\nIHNhdGlzZmllZA== 20097\nLS0tLS0tLS0tLS0tLQ== 20098\nZW5jZXI= 20099\naG9y 20100\nIHJvdW5kcw== 20101\nREFP 20102\nb2E= 20103\nIGZsYXNr 20104\nPWM= 20105\nW10K 20106\nL2Rpc3Q= 20107\nIHBhcnRl 20108\nIGNvbmZpcm1hdGlvbg== 20109\nZXJvbg== 20110\nYXdhcmU= 20111\nPD8+ 20112\nIGRlcGVuZGVuY2llcw== 20113\nIFZpZGVvcw== 20114\nLXJvdw== 20115\nICoqLwo= 20116\nIG5vdQ== 20117\nIGhvdmVy 20118\n5p4= 20119\nIG5pbg== 20120\nIFVTRA== 20121\nTWFj 20122\nX0xvYWQ= 20123\nIG91dGNvbWVz 20124\nX3NvY2tldA== 20125\nIHF1ZXJpZXM= 20126\nd20= 20127\nNTky 20128\nIGhpdHRpbmc= 20129\naW51eA== 20130\nTWljaA== 20131\ndWRnZQ== 20132\nQVRBQg== 20133\nIHZ1bG5lcmFibGU= 20134\n5L4= 20135\nIHBvcnRmb2xpbw== 20136\nOllFUw== 20137\nCW1hcA== 20138\nQm91bmQ= 20139\nIGl0ZXJhdGlvbg== 20140\naW5jZXNz 20141\nIGFjdG9ycw== 20142\nIFF1YWw= 20143\nX2NsZWFu 20144\n44CR44CQ 20145\nTVNH 20146\nR3JlZW4= 20147\nIE9mZmljZXI= 20148\nIHNtb2tpbmc= 20149\nPics 20150\nIEZsbw== 20151\nKys7 20152\nNDMz 20153\nb2x5Z29u 20154\nIGJ1bGs= 20155\nIGRyYW1h 20156\nIGV4Y2VwdGlvbnM= 20157\nb3NlZA== 20158\nICsNCg== 20159\nIGxlZ2FjeQ== 20160\nQ1Y= 20161\nIGNvbnRyaWJ1dGVk 20162\nIFRlcm1z 20163\nIGJ0 20164\nNDM0 20165\nIHVudHVr 20166\nIGFsaWVu 20167\nPT09Cg== 20168\nCVZlY3Rvcg== 20169\nIGxz 20170\nT25saW5l 20171\nLmZhY2Vib29r 20172\nbnVtZXJpYw== 20173\nb2NrZXRz 20174\nQXV0 20175\nYnVyeQ== 20176\nLXJlZHV4 20177\nIFJlZGlzdHJpYnV0aW9ucw== 20178\nR0xPQkFMUw== 20179\ndXJyZW5jaWVz 20180\nIHRvbnM= 20181\n4oCZLA== 20182\nIMOq 20183\nKGNvbA== 20184\nIFN5bWJvbA== 20185\nIHN0YXllZA== 20186\nIE1M 20187\nIG11bmljaXA= 20188\nIHNleG8= 20189\nU2Vu 20190\nbnI= 20191\nIGdhaW5z 20192\nIHNob3J0bHk= 20193\nLk1lbnU= 20194\nw70= 20195\nS05PV04= 20196\nIG9wZXJhdG9ycw== 20197\nLVY= 20198\nIFBhdHJpY2s= 20199\nL2FkZA== 20200\nX0NP 20201\naXJhdGlvbg== 20202\nKHBvc3Q= 20203\nUG9zdHM= 20204\nL18= 20205\nIHBsdWc= 20206\nIGludGVsbGVjdHVhbA== 20207\nIG1ldGFi 20208\nIHByZWduYW5jeQ== 20209\nIFByZW1pZXI= 20210\nbm0= 20211\nIHByZWRpY3Rpb24= 20212\nNjA2 20213\nIE1pbmlzdHJ5 20214\nVGhyZWU= 20215\ndmFsdWF0ZQ== 20216\nIE1pbmk= 20217\nYnU= 20218\n0L7Qtw== 20219\nPHVs 20220\nIGRk 20221\nb2x2aW5n 20222\nIEN1dA== 20223\nNjAy 20224\nIHNjaGVt 20225\nLnRyYWlu 20226\naXRhdGU= 20227\nIHJpY2U= 20228\nIGJpcmRz 20229\n44Gr 20230\nbWlkZGxl 20231\nc3RydWN0aW9ucw== 20232\nIG5lcnY= 20233\nYXF1ZQ== 20234\nNDUz 20235\nIGZsdQ== 20236\nIHN1cnZpdmFs 20237\nIEdhbGF4eQ== 20238\nIEZhbnQ= 20239\nLk9yZGVy 20240\nQXR0cmli 20241\naXJ0cw== 20242\nw6lj 20243\nTW92aWU= 20244\nIGNvbmNl 20245\ncXVhcnRlcnM= 20246\nIG1vb2Q= 20247\nLkFkZFJhbmdl 20248\nOTQy 20249\nIHJlc29sdmVk 20250\n44OI 20251\nIGJ1cm5pbmc= 20252\nNzAy 20253\nCQkJCQ0K 20254\nIFdF 20255\nIGhvc3Rpbmc= 20256\nTEFC 20257\nIG1hbmFnZXJz 20258\nIHN0cmVuZ3RoZW4= 20259\nPGNvbnN0 20260\nIEZpcmViYXNl 20261\nb25lZA== 20262\nIEplYW4= 20263\nJzwv 20264\nIDo9Cg== 20265\nYWxnb3JpdGht 20266\nIEFyYw== 20267\nIGZyb3plbg== 20268\nX2V2ZW50cw== 20269\nIG92ZXJzZQ== 20270\nZ29vZHM= 20271\nIGZhaXQ= 20272\nIHZpYWdyYQ== 20273\nb3Nlcw== 20274\nOTIy 20275\nIGNvbXBpbGVk 20276\nIEF0aA== 20277\nIHN1YnN0YW5jZQ== 20278\nYW5pbWF0ZWQ= 20279\nUEY= 20280\ncHJldmlvdXM= 20281\nIHJvb3Rz 20282\nKGZpbHRlcg== 20283\nb2x1bWVz 20284\nIGludHJv 20285\nKGV2dA== 20286\nIEJhZw== 20287\nIERlZmluaXRpb24= 20288\nIEZlYXR1cmVz 20289\nQW5ub3RhdGlvbg== 20290\nIGF2Zw== 20291\nKHN1bQ== 20292\nUVVJUkU= 20293\nIHJlbmRlcmVy 20294\nIEZpeA== 20295\nLmRhdGV0aW1l 20296\nPWRldmljZQ== 20297\nU3Bl 20298\nZ2V0SW5zdGFuY2U= 20299\nIGV4dGVuc2lvbnM= 20300\nX25ldA== 20301\nIFBhcmxpYW1lbnQ= 20302\nIGNvbWlj 20303\nNDY4 20304\nIFBpY2s= 20305\nYXJtYQ== 20306\nCW1vZGVs 20307\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 20308\nIG1lbmc= 20309\nbWFudWFs 20310\nYWRhcHRlcg== 20311\nfS0= 20312\nZWRiYWNr 20313\nIGVsZWN0cmljYWw= 20314\nIENvdW50ZXI= 20315\nQXBwbGljYXRpb25Db250ZXh0 20316\nX2J5dGU= 20317\nKGJ5dGU= 20318\nIEF1dG9t 20319\nIHRlcnJvcmlzdA== 20320\n55A= 20321\ndGhyb3VnaA== 20322\nIGZpc2NhbA== 20323\nb25pbmc= 20324\nNDU1 20325\nIHNwZWN0cnVt 20326\nIGJpdG1hcA== 20327\nIHNsZQ== 20328\ncHJvZA== 20329\nIGFnZWQ= 20330\nIGJlbmU= 20331\nIFNwaQ== 20332\nIGJyaWxsaWFudA== 20333\nIHN0YWJpbGl0eQ== 20334\nIGRpYWJldGVz 20335\nIGNvbmZpZ3VyZWQ= 20336\nYm9uZQ== 20337\nNzQ4 20338\nNDg0 20339\nb3VzZXM= 20340\nLmdvb2dsZWFwaXM= 20341\nRkFDRQ== 20342\nIGluc3BpcmF0aW9u 20343\nIERldHJvaXQ= 20344\nZW5jaA== 20345\n0YDRgw== 20346\ndmVoaWNsZQ== 20347\nU3RhdGlvbg== 20348\nIGhvbGVz 20349\nIGR1cmNo 20350\nLk1lZGlh 20351\nIENOTg== 20352\naW5uaW5n 20353\nNjA0 20354\nIFBlbm5zeWx2YW5pYQ== 20355\nIGVtb3Rpb24= 20356\nU2VjcmV0 20357\nw6FyaW8= 20358\nIFJhdGU= 20359\nNDUx 20360\nRGVwdGg= 20361\nIG1vZGVz 20362\nNDI2 20363\nKGlkeA== 20364\nIGhlcw== 20365\nIGdyZXk= 20366\nU3RhbmRhcmQ= 20367\nUXVlc3Q= 20368\nYnV5 20369\nc3Vy 20370\nIFRyYWNr 20371\nb21t 20372\nLmds 20373\nIChc 20374\ndHdv 20375\nX0lP 20376\nb3NleA== 20377\nX3JvbGU= 20378\n56S6 20379\ncm91dGVz 20380\nU2hvcA== 20381\nIEFTQw== 20382\nIG1lbWNweQ== 20383\nZGlyZWN0 20384\nNDQ2 20385\nICoKCg== 20386\nIEJN 20387\nIFBvcg== 20388\nX2hpc3Rvcnk= 20389\nIFJlc3BvbnNlRW50aXR5 20390\nLnNldEZvbnQ= 20391\nIGVuZ2FnZW1lbnQ= 20392\nLGg= 20393\nIFdvcmRQcmVzcw== 20394\nZmVjaGE= 20395\nIGVudHJhbmNl 20396\nRGVzcGl0ZQ== 20397\nSURFTlQ= 20398\nIHNhbml0 20399\nIEdlbmVyYXRl 20400\nKCIiLA== 20401\nX3ZpZGVv 20402\nU3RyYXRlZ3k= 20403\nX29r 20404\nIHRpZXM= 20405\nIGxvZ2ljYWw= 20406\nIEJyb24= 20407\nKEZpbGU= 20408\nIE1vaA== 20409\nLlNwbGl0 20410\nLlRyeQ== 20411\nIEhpbmQ= 20412\nIHNjb3Jpbmc= 20413\nIGFwcHJvYWNoZXM= 20414\nIGZsb3Vy 20415\nVlJU 20416\nODA0 20417\nVVNUT00= 20418\nNDY3 20419\nc2NyaXB0cw== 20420\nIEVwaXNvZGU= 20421\nMzg5 20422\nIEFtYg== 20423\nX09S 20424\nIGZyYXVlbg== 20425\nIHVubGlrZQ== 20426\nIHJpZGluZw== 20427\nIHBpdA== 20428\nIHRyYW5zZg== 20429\nYXJ0ZQ== 20430\n4LmJ 20431\ncmFwZQ== 20432\ncmV0dmFs 20433\nX2FmdGVy 20434\nIjw8 20435\nNzAz 20436\nIEJlcmxpbg== 20437\nIHRpc3N1ZQ== 20438\nLkludGVudA== 20439\nINC00LvRjw== 20440\nIHN0dW5uaW5n 20441\nIEhhbA== 20442\nLkludGVnZXI= 20443\nIHdoZXJlYXM= 20444\nIGRlbGVn 20445\nIHVzZXJOYW1l 20446\nIGZvcm1hdHM= 20447\nIGNvbXBlbnNhdGlvbg== 20448\nIEh1bQ== 20449\nYXJyaW5n 20450\nIHVuc2FmZQ== 20451\nUGlu 20452\nY2x1Yg== 20453\na2V5d29yZA== 20454\nX3RoZW1l 20455\nIGNhbGxlcg== 20456\nIGdob3N0 20457\nIGVudGl0bGVk 20458\nIE1hcw== 20459\nNTYx 20460\nIGRlbW9uc3RyYXRl 20461\nIEhvd2FyZA== 20462\nRHJvcA== 20463\nI3VuZGVm 20464\nNDI3 20465\nIGludm9rZQ== 20466\nIEJyaWRnZQ== 20467\nZW5kZW4= 20468\naWJsaW5n 20469\nU2xvdA== 20470\nQVRBQkFTRQ== 20471\nIHRlbXBlcmF0dXJlcw== 20472\nc2VyaWVz 20473\nIFJlbWVtYmVy 20474\nQ2FsZW5kYXI= 20475\nQkY= 20476\nPT8= 20477\nMDY0 20478\nIEFG 20479\nKGh0dHA= 20480\nbWFrZXJz 20481\nZmluaXR5 20482\ncHJlY2F0ZWQ= 20483\nV0g= 20484\nb2xpZGF5cw== 20485\nLXVu 20486\naWFsZQ== 20487\nXFVzZXI= 20488\ncmVhc29u 20489\nJywKCg== 20490\nT1dFUg== 20491\nIHByZWRpY3Rpb25z 20492\ncHJvYg== 20493\nLm5u 20494\nICc7Cg== 20495\nLkZyb21Bcmdi 20496\nX0xPTkc= 20497\nIHRyb3Vi 20498\nIHVuaXR0ZXN0 20499\nZWxpaG9vZA== 20500\nCWlz 20501\nNDQy 20502\nIGNvbnNlYw== 20503\nTEVBU0U= 20504\nIGNsaWNrZWQ= 20505\nIHRlbXBsYXRlcw== 20506\nQlk= 20507\ncGVybQ== 20508\nbWF0Y2hlcw== 20509\nbGF3 20510\nKHRm 20511\nX3JhdGlv 20512\naXRlbXB0eQ== 20513\nIGNyZWF0b3I= 20514\nQml0cw== 20515\nRW5jb2Rlcg== 20516\nKi4= 20517\nIFVJVA== 20518\nIE1hc2s= 20519\nY3VybA== 20520\nLWdv 20521\nIE9jYw== 20522\nY29ycmVjdA== 20523\nIEdlcg== 20524\nKGxheW91dA== 20525\ndW5jdA== 20526\nLmRpc3BhdGNo 20527\nO2FtcA== 20528\nLmlzUmVxdWlyZWQ= 20529\nCWRv 20530\nbWly 20531\nIHB0aHJlYWQ= 20532\nLWF1dG8= 20533\nIEljZQ== 20534\nIHZpb2xhdGlvbg== 20535\nIGNvbmNsdWRlZA== 20536\nIHZhcnM= 20537\nY2FudmFz 20538\nIFRlbXA= 20539\nIFBoaWxpcHA= 20540\niOuLpA== 20541\nY3JlYXNl 20542\nIGZpc2hpbmc= 20543\nYWJiaXQ= 20544\nIGNvbmNlbnRyYXRpb24= 20545\naXJ0aGRheQ== 20546\nIGdyb3Nz 20547\nIGtp 20548\nIEhhbmRsZXI= 20549\nIGltbWlncmFudHM= 20550\n6IA= 20551\nVW5k 20552\ncG4= 20553\ncmFj 20554\nNDU0 20555\nIENvbnN1bHQ= 20556\nZm9sZA== 20557\nIHN0cnVnZ2xpbmc= 20558\naGVhdA== 20559\nR2VuZXJpYw== 20560\nIHJpZGlj 20561\nIENPVklE 20562\nb21pdGVtcHR5 20563\nX09QVElPTg== 20564\n6rCA 20565\nIGNyZWF0dXJlcw== 20566\nX1BBR0U= 20567\nZWk= 20568\nKGhvc3Q= 20569\nX0hQUA== 20570\nNTE2 20571\nIFhYWA== 20572\nIGF3aw== 20573\nYXNjYWRl 20574\nIHByZWc= 20575\ncHJvdmlkZXI= 20576\nUGFs 20577\nZWdlbg== 20578\nY2xvbmU= 20579\nLlJlZ2lzdGVy 20580\nIGF0dGFjaG1lbnQ= 20581\nYmVpdA== 20582\ndGhlbGVzcw== 20583\nKERhdGU= 20584\nIEZvcmVzdA== 20585\nQ0dSZWN0 20586\nIGNoaWxkaG9vZA== 20587\nYW1pbmU= 20588\nYXhlcw== 20589\nJ109 20590\nTmF2aWdhdG9y 20591\nIHJlcGxpZWQ= 20592\nX2ludg== 20593\nLFQ= 20594\nIEZlYXR1cmU= 20595\nNDM4 20596\ney0= 20597\nTEFORw== 20598\nIGNvbnZleQ== 20599\n55So5oi3 20600\nIFNlcmlm 20601\nIEF1cw== 20602\nbGljaGU= 20603\nIHVudXNlZA== 20604\nIG1vbnQ= 20605\nbm9kZXM= 20606\nIHNldQ== 20607\nLmNsYXNzTmFtZQ== 20608\nbm9ybQ== 20609\nX1NFUlZFUg== 20610\nIHdpbmc= 20611\naW54 20612\nUmF3 20613\nIEphbQ== 20614\nNTkw 20615\nIGluc2lnaHQ= 20616\nNDcx 20617\nNTM1 20618\nIE5H 20619\nIEludGVyZmFjZQ== 20620\nIHN0bXQ= 20621\nIG5hbg== 20622\nY3VsYXRvcg== 20623\nLWFwcA== 20624\nKEJ1bmRsZQ== 20625\nTWVzc2FnZUJveA== 20626\n4K4= 20627\nIG1lZXRz 20628\ndWJ5 20629\nT3B0aW9uUGFuZQ== 20630\naXRhcmlhbg== 20631\nIGNvbGxhYm9yYXRpb24= 20632\nbW92aWU= 20633\nIGFybW9y 20634\nX2JpdHM= 20635\nIEhhdmluZw== 20636\nIG51ZGU= 20637\nIFNldHRpbmc= 20638\nIHN1Y2M= 20639\nRGVsYXk= 20640\nLmNvbXBvbmVudHM= 20641\nYWNodXNldA== 20642\nIEFsZXhhbmRlcg== 20643\nwqk= 20644\nIG1ldGVycw== 20645\nIHByZXBhcmluZw== 20646\nIGluY2VudA== 20647\n5ZM= 20648\nIGvDtm5uZW4= 20649\nIENvbnNlcnY= 20650\nIG51bWVybw== 20651\nYWNodXNldHRz 20652\nLWludA== 20653\nIGVtcGhhcw== 20654\nbGF5b3V0cw== 20655\nRXhjZWw= 20656\nSUJBY3Rpb24= 20657\nIHJlc2lkZW50aWFs 20658\nZWxpbmc= 20659\nIE5D 20660\nIEFsbGVu 20661\nIGNldHRl 20662\nIG1pbmRz 20663\nLnJlcXVpcmVk 20664\n2LM= 20665\nIEdpcmxz 20666\nIH07 20667\nIHN0cmluZ1dpdGhGb3JtYXQ= 20668\nIGFkZHJlc3NlZA== 20669\ndGhleQ== 20670\nIEJsb29k 20671\ncG9zZXI= 20672\nIGphbQ== 20673\nyJk= 20674\n5pWw5o2u 20675\nIHN0ZG91dA== 20676\nIFVURg== 20677\nQ2xhc3Nlcw== 20678\nPiI7DQo= 20679\nIFNhdg== 20680\nLkJvbGQ= 20681\nIGVuYWJsZXM= 20682\nCXRtcA== 20683\nIG1hbnVhbGx5 20684\nIFNxdQ== 20685\ndXNlcmlk 20686\nLmZ1bmN0aW9u 20687\nLmNhY2hl 20688\nTE9QVA== 20689\nLlNlcnZpY2Vz 20690\nNTg4 20691\nZGRpdA== 20692\ndGlt 20693\nPGltZw== 20694\nIFRoaW5ncw== 20695\nIEV2ZXJ5dGhpbmc= 20696\nIGFwdA== 20697\nMzk3 20698\nZW1hbmQ= 20699\nIHJvbGxpbmc= 20700\n66Y= 20701\nLmxldmVs 20702\nIHN0b20= 20703\nIFdpbnRlcg== 20704\nIHZpZXdpbmc= 20705\nKHZhbHVlcw== 20706\nb2NvbXBsZXRl 20707\ndmlh 20708\ndXBv 20709\nIGFib3J0aW9u 20710\nNTMy 20711\nacOocmU= 20712\n77yR 20713\nX0JVVFRPTg== 20714\nX2RvbWFpbg== 20715\nIGJyYQ== 20716\nIEFzdA== 20717\naW5hcw== 20718\nIHN0YXRpc3Q= 20719\nY29k 20720\nTFI= 20721\nIGRyaXZlcw== 20722\nIGZvbGxvd2Vycw== 20723\nIGFsbGllcw== 20724\nCWN1cnJlbnQ= 20725\nZWNlc3Nhcnk= 20726\nIGRhbWFnZWQ= 20727\nX3B0 20728\nYW5kbGVz 20729\nb3VudHJpZXM= 20730\nIHNpbXVsdA== 20731\nZXU= 20732\nIGNvbnRyb3ZlcnNpYWw= 20733\nX0dST1VQ 20734\nIHJpYg== 20735\nLkluZm8= 20736\nOm1t 20737\nLm5vcm1hbA== 20738\nX0FERFJFU1M= 20739\nIO2V 20740\nYWRkbGU= 20741\nIER1cg== 20742\nLkVsZW1lbnQ= 20743\nNjU2 20744\nV2FybmluZ3M= 20745\nIGNyZWRpdHM= 20746\nIGluaGli 20747\nIGVtaXNzaW9ucw== 20748\nNTQ1 20749\nIGhheg== 20750\nLnlvdXR1YmU= 20751\ndWdnZWQ= 20752\nIGJvdGhlcg== 20753\nIEthbnNhcw== 20754\nIEZpeGVk 20755\nIFRlc3Rz 20756\nIEZJWA== 20757\nNTc2 20758\nVW5pZm9ybQ== 20759\nIGtvbnQ= 20760\nPj4+ 20761\nc3RhdGlvbg== 20762\nbG9yZQ== 20763\nYXR5cGU= 20764\naXNob3A= 20765\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 20766\nNTIx 20767\nQ29tYm9Cb3g= 20768\nIHZhY2F0aW9u 20769\nIGluaXRpYXRpdmU= 20770\nIGRlZmF1bHRWYWx1ZQ== 20771\nNzcw 20772\nY29uY2F0 20773\nIEto 20774\nNjMy 20775\nIFdlbGNvbWU= 20776\naXplZE5hbWU= 20777\nTWlncmF0aW9u 20778\nIGdyYWRpZW50 20779\nSG90 20780\nIGhhcmRseQ== 20781\nZWxv 20782\nIFN0dWRlbnRz 20783\nIGxvb3Nl 20784\nNzMw 20785\nYXR6 20786\nLlNlbmQ= 20787\nJy8= 20788\nIHVuaXZlcnNhbA== 20789\nIGVudGVycHJpc2U= 20790\nIHJlZ2V4 20791\nIHZpc2l0b3I= 20792\nIEZseQ== 20793\nU2Vx 20794\n4LiZ 20795\nIFZpc3VhbA== 20796\nIGxpYnJhcmllcw== 20797\nYXRvZXM= 20798\nUGF5bWVudA== 20799\nNDQ3 20800\nIHBlbnQ= 20801\nIGdhdGhlcmVk 20802\nVlJUWA== 20803\nIERN 20804\nU3BsaXQ= 20805\nIGxldHRpbmc= 20806\n0J0= 20807\nX2Vycm9ycw== 20808\nZXBvY2g= 20809\nUEFSQU0= 20810\nY3U= 20811\n0YHRgtCy 20812\nb2x1dGlvbnM= 20813\nRWRpdGluZw== 20814\nZm9udHM= 20815\nIGFsbG9jYXRlZA== 20816\nIEJhc2Vk 20817\nKFk= 20818\nIEp1ZGdl 20819\nIGJyb3RoZXJz 20820\nRklMRVM= 20821\nw6dv 20822\nNTMx 20823\nd2I= 20824\nX1BJ 20825\nJ14= 20826\nIHN3b3Jk 20827\nLnNlcnZpY2Vz 20828\nIG5s 20829\nVGlt 20830\naWdn 20831\nIE1vb3Jl 20832\nIGNyeXB0b2M= 20833\n5Ye6 20834\nX3Bvc3Rz 20835\nb3RhdGU= 20836\nPyc= 20837\nLi4uLgoK 20838\nIGts 20839\nPSIk 20840\nIGRlY29yYXRpb24= 20841\n4bqh 20842\nIERJUkVDVA== 20843\nR1VJ 20844\nKT0+ewo= 20845\nIG5ld3NsZXR0ZXI= 20846\nIHByZWNpcw== 20847\nKHBvaW50 20848\nIEVxdWlwbWVudA== 20849\ndXR5 20850\nIERhdmU= 20851\nIHBhcnRpY2lwYXRpb24= 20852\ndWFyaW9z 20853\neGl0 20854\nLkFz 20855\nRVRFUg== 20856\nb3JvdXM= 20857\nIHNoaWVsZA== 20858\nW10+ 20859\naWxpdGFyeQ== 20860\nLm9yaWdpbg== 20861\nIHByb21vdGlvbg== 20862\nVW50 20863\nIGN0 20864\nVFJB 20865\nNTU2 20866\nVmlld0hvbGRlcg== 20867\nIHNpZ21h 20868\nZGVsdGE= 20869\nYXJlaG91c2U= 20870\nY29udHJhY3Q= 20871\nKFZlY3Rvcg== 20872\nNzIx 20873\nIGNvbXBldGU= 20874\nL2Zvcm0= 20875\nL2NvbXBvbmVudHM= 20876\nIG5y 20877\nIEluZG9uZXM= 20878\nINC+0YI= 20879\nIFZvbHVtZQ== 20880\nLmZpbGVz 20881\nKHJlc3A= 20882\nL21vZGVscw== 20883\nIHN1cmY= 20884\nc3RhbmRhcmQ= 20885\nL28= 20886\nIFhDVEFzc2VydA== 20887\nVklDRVM= 20888\nLkNvZGU= 20889\nU0VE 20890\nIGFjdGl2YXRl 20891\nRGVsdGE= 20892\nIGxpbWl0YXRpb24= 20893\ncmlq 20894\nIHByZWduYW50 20895\nOl4o 20896\nIHNvdXI= 20897\ncGll 20898\nODAz 20899\nIGV4cGVuc2U= 20900\naWNhdGlvbg== 20901\nIExhcmdl 20902\nIMKx 20903\nIEJvd2w= 20904\nKG1vZGVscw== 20905\nL04= 20906\nODU3 20907\nUGE= 20908\nLnJlbG9hZA== 20909\nIHdvbmRlcmluZw== 20910\nNDYy 20911\nRXhlY3V0aW9u 20912\nCSAgICAgIA== 20913\nIEdyYXBoaWNz 20914\nIENvbnRpbg== 20915\nX2pvYg== 20916\nIGdldE5hbWU= 20917\nIE1hZ24= 20918\nIERXT1JE 20919\nbWFk 20920\nIG5o 20921\nZmVhdHVyZXM= 20922\nfSIpOwo= 20923\naGVldHM= 20924\nKHRyYWlu 20925\nem4= 20926\nIHJlY3J1aXQ= 20927\nLmNvbm5lY3Rpb24= 20928\nIGJhcnJlbA== 20929\nIHN0ZWFt 20930\nX3NldHRpbmc= 20931\nIGFuZ3VsYXI= 20932\nYW5lb3VzbHk= 20933\nIGJpbA== 20934\nIE5vcm0= 20935\nNTIy 20936\nKCEk 20937\naWJ0 20938\nJSg= 20939\nIHBvc2l0 20940\nIEZhdGhlcg== 20941\naW50ZW5kbw== 20942\nNTY1 20943\nTGl2ZQ== 20944\nMDQx 20945\nIHBvcnRz 20946\nIG1lag== 20947\nIGxhbmRpbmc= 20948\ncG9uZGVy 20949\nIGNvZA== 20950\nX0hFQURFUg== 20951\nLk1hcmdpbg== 20952\nIGJhbGxz 20953\nIGRpc2N1c3Npb25z 20954\nIGJsZW5k 20955\nSGV4 20956\nIGZhcm1lcnM= 20957\nIG1haW50YWluaW5n 20958\nICAgDQo= 20959\nc3lu 20960\nW1Q= 20961\ncnVz 20962\nNDM5 20963\ndWZmZXJz 20964\nIGNvbnRyaWJ1dG9ycw== 20965\nX3N5cw== 20966\nLkRlYnVn 20967\nIGNvbnN0cnVjdGVk 20968\nb21lcw== 20969\nP2lk 20970\nc2xpZGVy 20971\nIHN1cHBsaWVycw== 20972\nNjEx 20973\nc2NyaWJlcg== 20974\ncGVz 20975\n0J4= 20976\nIjoNCg== 20977\nXENvbnRyb2xsZXI= 20978\nKSkKCgo= 20979\nIGx1YQ== 20980\nTXVsdGk= 20981\nRU5T 20982\nU3Jj 20983\nIHBldGl0aW9u 20984\nIHNsYXZl 20985\nbG9va2luZw== 20986\nVkVSVA== 20987\nCXZlY3Rvcg== 20988\nU3BlY2lhbA== 20989\naGg= 20990\nYW5uZQ== 20991\nIE5pZ2Vy 20992\nL3ZpZXdz 20993\nemluZw== 20994\nZW5kYW50 20995\nPEM= 20996\nc3BlZWQ= 20997\nNTE0 20998\nIHt9OwoK 20999\nQmVnaW5Jbml0 21000\nIGZvcGVu 21001\nQFJlcXVlc3RNYXBwaW5n 21002\nRW5kSW5pdA== 21003\nIHB1bmNo 21004\nU2VuZGVy 21005\nNjAz 21006\n6ZQ= 21007\nZ2V0TWVzc2FnZQ== 21008\nL3R5cGVz 21009\nLlBJ 21010\nKCcnKTsK 21011\nb2N1c2Vk 21012\nKGFsbA== 21013\nIGRyb3Bkb3du 21014\nKS5fXw== 21015\nIFZpbg== 21016\nLkZvcmVpZ25LZXk= 21017\nNjEy 21018\nY2FuZg== 21019\nb3VyZWQ= 21020\nIE9yZ2FuaXphdGlvbg== 21021\nINCw 21022\nIEN1bHR1cmU= 21023\nKGNscw== 21024\nLF8= 21025\nOTAy 21026\ncmdiYQ== 21027\n7J2Y 21028\nLmRhdGFHcmlkVmlldw== 21029\nIGRvemVu 21030\nIEdlcw== 21031\nODA1 21032\nNDY0 21033\nX3NoYXJlZA== 21034\nbmljaw== 21035\nIGhvc3A= 21036\nb21ldGVy 21037\nNDk1 21038\nIGNsYWltaW5n 21039\nMDMy 21040\naWJsZXM= 21041\ncmlr 21042\n5piv 21043\nZW5hcmlv 21044\nIGRlbmdhbg== 21045\nb2Ji 21046\nbW9udA== 21047\nX3Jhbms= 21048\nKCcvJyw= 21049\nIGFwb2xvZw== 21050\nUHM= 21051\nX3Bvd2Vy 21052\nIEdyZWU= 21053\nIGZ1bGZpbGw= 21054\nIGZpcmViYXNl 21055\nOTEw 21056\nIGZhcmU= 21057\nIEhpbQ== 21058\nIGJlYW4= 21059\n4oCmLg== 21060\nIFNQSQ== 21061\nX1JY 21062\nIHBlcmNlcHRpb24= 21063\ncmVsYXRpdmU= 21064\nY29tcGlsZQ== 21065\ndXVt 21066\ndXRvcw== 21067\nYXVj 21068\nIEFzaw== 21069\nIGluZGljYXRvcg== 21070\nL3Ro 21071\nLnNldFN0cmluZw== 21072\nIFdpc2NvbnNpbg== 21073\nLkRvbWFpbg== 21074\nIGFydGlmaWNpYWw= 21075\nRGV2ZWxvcA== 21076\nIFNhcmFo 21077\nIGx5aW5n 21078\nKHNlYXJjaA== 21079\nIEVtcGlyZQ== 21080\ndXJyaW5n 21081\n5pe26Ze0 21082\nPSIkew== 21083\nIGdldElk 21084\nIFBheW1lbnQ= 21085\ndHJhbnNpdGlvbg== 21086\nIF0u 21087\naXhpbg== 21088\nVlQ= 21089\nLXNlbGVjdA== 21090\nIGRlbW9uc3RyYXRlZA== 21091\nIGxhc3ROYW1l 21092\nZW1wbG95bWVudA== 21093\nLmdldFByb3BlcnR5 21094\nIGZvdWdodA== 21095\nZmlsZU5hbWU= 21096\nIFBlcnM= 21097\nNDUy 21098\nLWNhcmQ= 21099\nYXN0cg== 21100\nYXR0cnM= 21101\nIHByb21pbmVudA== 21102\nRGVzaWdu 21103\nYW5jb3V2ZXI= 21104\n44GX44E= 21105\nYXJkbw== 21106\nc2VjcmV0 21107\nIHJhZw== 21108\nIHBvaXNvbg== 21109\nLW1hbg== 21110\nLG9taXRlbXB0eQ== 21111\nNzQw 21112\nCXVu 21113\naXR6ZXI= 21114\nIENhc2lubw== 21115\nIFJvc3M= 21116\nLWZvb3Q= 21117\nKHJlc3VsdHM= 21118\nUGxhbg== 21119\nIGxhc2Vy 21120\n6riw 21121\nX0RS 21122\nNTIz 21123\nRmFjZWJvb2s= 21124\nNDQ5 21125\nIGJvYXJkcw== 21126\nc3Rh 21127\nXV0s 21128\nNjc1 21129\nIHRpbGVz 21130\nU0laRQ== 21131\nID1+ 21132\nOTcw 21133\nIHByZW1pZXI= 21134\nb2NhYg== 21135\nIGVuY29kZWQ= 21136\nIHJlc2VydmU= 21137\nNjA5 21138\nIEFmZ2hhbmlzdGFu 21139\nIExpc3ROb2Rl 21140\ndXJscw== 21141\nIHN1Ym1pc3Npb24= 21142\nIG5ldQ== 21143\nNDc3 21144\nICMrIw== 21145\nX1BPU1Q= 21146\nIG1vaXN0 21147\nZWxsaQ== 21148\nZWxsaWdlbnQ= 21149\nLmFsZXJ0 21150\nw7Nk 21151\nYnJl 21152\nIENvbGxlY3Q= 21153\nIGdyYXBoaWM= 21154\nIGxvbmdpdHVkZQ== 21155\nIFByb3ZpZA== 21156\nIENhbGN1bGF0ZQ== 21157\neGZmZmY= 21158\nY3JpdGVyaWE= 21159\nIHdhdGVycw== 21160\ncm9jaw== 21161\nbG9xdWVudA== 21162\nIFRyaWI= 21163\nNTEz 21164\nIGJ1cnN0 21165\nIHN1ZmZpeA== 21166\nLkV4dGVuc2lvbnM= 21167\naXNoZXM= 21168\naXZlbA== 21169\nIExJS0U= 21170\nIEdldHR5 21171\nLkFjdGlvbkV2ZW50 21172\nLnNsZg== 21173\nIEhBTA== 21174\ndXBhbA== 21175\nRUFS 21176\nNTI0 21177\ndWRp 21178\nX3RpbWVvdXQ= 21179\nVUY= 21180\nIFNpbmdhcG9yZQ== 21181\nIEFkdmVudA== 21182\nX2ludGVydmFs 21183\nY2hhZnQ= 21184\nIEVtZXI= 21185\nIHRlbGVwaG9uZQ== 21186\nIFR1cms= 21187\nX2ludGVyZmFjZQ== 21188\nIE93bg== 21189\nIGVuY291cmFnZWQ= 21190\nPE9iamVjdA== 21191\nX1RleHQ= 21192\nIE9udGFyaW8= 21193\nIEFwcGx5 21194\nLmZpcmViYXNl 21195\nIGFudGli 21196\nUHJpb3JpdHk= 21197\nZW5leg== 21198\nRGF5cw== 21199\nY2lk 21200\ndXJyZW5jZQ== 21201\nOy8= 21202\naW5uZWQ= 21203\n0YHRjw== 21204\nIHZleg== 21205\nZnc= 21206\nLy8k 21207\nYXR0YWNr 21208\nNDU4 21209\nIHN0YXJ0dXA= 21210\nYWluZXJz 21211\nLmZyYWdtZW50 21212\nb3BhY2l0eQ== 21213\nKGNvbm4= 21214\naGVpbQ== 21215\nLm5ldHdvcms= 21216\nKHN0cmVhbQ== 21217\nNjcw 21218\nIE5PTg== 21219\ndG9s 21220\nODMw 21221\nIFhib3g= 21222\nIERT 21223\nIGNhY2hlZA== 21224\nIHByb3N0aXR1dGFz 21225\nIEJhbHQ= 21226\nKCdb 21227\nNTc1 21228\nIG5vZXhjZXB0 21229\nIic= 21230\nIHNk 21231\nLnZhbGlk 21232\nX2Fn 21233\nIHJhY2Vz 21234\nNDgx 21235\nIHJvZA== 21236\naXR1ZGVz 21237\nPD4o 21238\nNTQ0 21239\nLlByb2R1Y3Q= 21240\nRm9ybXM= 21241\nTkVX 21242\nUGF5 21243\nCWJvb2xlYW4= 21244\nX2NvbnRhY3Q= 21245\nIEVsZWN0cmlj 21246\nc2tpcA== 21247\nIHd1cg== 21248\nIGNocm9uaWM= 21249\nX2RyaXZlcg== 21250\nOTQw 21251\nIFNhYg== 21252\nIFVsdA== 21253\nIFJhZA== 21254\nU1RBVFVT 21255\nIExld2lz 21256\nT0I= 21257\nIGdpZnRz 21258\nLlJlYw== 21259\nVFJVRQ== 21260\nIGludGVuc2l0eQ== 21261\nTWFya2Vy 21262\nLmNvbXBhcmU= 21263\nZmZpYw== 21264\nQ29va2ll 21265\nIEJhYnk= 21266\nIEJpZ0RlY2ltYWw= 21267\naWxldA== 21268\nIEhPTERFUlM= 21269\nIExhZHk= 21270\nIGx1bmc= 21271\nIEFsYWJhbWE= 21272\nIGRlc3M= 21273\nYCk7Cg== 21274\nIEJ1aWxkZXI= 21275\nX3JlZ2lvbg== 21276\nIG5ldXRyYWw= 21277\nOTA5 21278\nQm90aA== 21279\nIGhw 21280\nIGhvcm4= 21281\nIHNlZ21lbnRz 21282\nIEVD 21283\nIj0+Ig== 21284\nKHJlYw== 21285\nIFBp 21286\nR00= 21287\nIGxhcHRvcA== 21288\nU2NhbGFy 21289\nNDYz 21290\naXNk 21291\nLWRpYWxvZw== 21292\nIEFuZGVyc29u 21293\nIG1pc3Rha2Vz 21294\nNzA4 21295\nIEhhbg== 21296\namVz 21297\nZXN0aW5hdGlvbg== 21298\nNDM2 21299\nIHByb21pc2Vz 21300\nYmlk 21301\nIFNjaWVudA== 21302\nR0lO 21303\nIFBlcmZvcm1hbmNl 21304\nYmFnZQ== 21305\nLnVzZXJz 21306\nbGVhZGluZw== 21307\nIG9yYWw= 21308\nR3JhcGhpY3M= 21309\nNDg4 21310\nX1BUUg== 21311\nNTE4 21312\naGFuZw== 21313\nIGluZXY= 21314\ncHJvY2Vzc2luZw== 21315\nRmFjdG9y 21316\nIE5B 21317\nJHN0cmluZw== 21318\nIGdyb3VuZHM= 21319\nLlNhdmVDaGFuZ2Vz 21320\nY2xvY2s= 21321\nOTQx 21322\nY3JpcGNpb24= 21323\nIE5ld3Rvbg== 21324\nZ2M= 21325\nLmluY2x1ZGVz 21326\nIGJsYXN0 21327\nICctJw== 21328\nIHB1ZWRl 21329\nNDY5 21330\nLlNlc3Npb24= 21331\nIGdyZXA= 21332\nX2ZpbmFs 21333\nIEdheQ== 21334\nIEdpdmU= 21335\naXJp 21336\nLXN0YXI= 21337\nIFVJSW1hZ2U= 21338\nX2Vwb2No 21339\ndWJi 21340\nZW50aA== 21341\nIGVsaXRl 21342\nIGNhbXBhaWducw== 21343\nIFBvcm5v 21344\nX2Fzc2lnbg== 21345\nUHJvdG9jb2w= 21346\nIEJlaW5n 21347\nIEFpcnBvcnQ= 21348\nIGNvbnZlbnRpb25hbA== 21349\nIFdhdA== 21350\nIENJ 21351\nRVRB 21352\nIEFudGhvbnk= 21353\nIHRhYmxldA== 21354\nKGZvcm1hdA== 21355\nIGNvbnNpc3RlbnRseQ== 21356\nIElvd2E= 21357\nNDc0 21358\nIGF2YXRhcg== 21359\nMDI3 21360\nLmN1cnNvcg== 21361\nIVs= 21362\nIGhhbmdpbmc= 21363\nSGVy 21364\nU3VjaA== 21365\nJzsKCgo= 21366\nb3JnZW91cw== 21367\nKCk9PQ== 21368\nIHZpZXdNb2RlbA== 21369\nIOOD 21370\nIGVscw== 21371\nIEFnZW50 21372\nRmV0Y2g= 21373\nYXBvcg== 21374\nIGN4 21375\ncHJlYWQ= 21376\nIFBpZXI= 21377\nb2VmZg== 21378\nNjE2 21379\nU24= 21380\nODkw 21381\nIFZpcnR1YWw= 21382\nQXBy 21383\nLldoaXRl 21384\nNjE1 21385\nX01PRA== 21386\nIFBvaW50cw== 21387\n5aSx 21388\nIGdlbmVz 21389\nIHZlbmRvcg== 21390\nIG1haW5zdHJlYW0= 21391\nPHNyYw== 21392\nIEVsaXphYmV0aA== 21393\nRGVjb2Rlcg== 21394\nLXN0YXRl 21395\nIEdsYXNz 21396\nbmN5 21397\nYWRpYW5z 21398\nX21vbg== 21399\nIFJlbW90ZQ== 21400\nIHdpcmVsZXNz 21401\nIE1p 21402\n5Yk= 21403\nNDY2 21404\n6KGo 21405\nc3RhZ2U= 21406\nIFRpbGU= 21407\nbGxpYg== 21408\nVmFyaWFudA== 21409\nPT0K 21410\nIGdvbGRlbg== 21411\nKFFTdHJpbmc= 21412\nLnB1dEV4dHJh 21413\nIERvbQ== 21414\nIEFuaW1hdGlvbg== 21415\nIGludGVyYWN0aXZl 21416\naWZhY3Q= 21417\n6Zmk 21418\nTEVU 21419\nIGZyZXF1ZW50 21420\nIDw+Cg== 21421\nRmlsZW5hbWU= 21422\nIHNuZQ== 21423\nIEZvb3RiYWxs 21424\nIHJpdmFs 21425\nIGRpc2FzdGVy 21426\naW9uaWM= 21427\nIERhbWFnZQ== 21428\nLlJlc291cmNl 21429\nLWVu 21430\nIFR5cGVz 21431\nZ2V0U3RyaW5n 21432\nKGJvYXJk 21433\nIGJvbA== 21434\ncGxhaW4= 21435\nenlt 21436\n4Liy 21437\nIHNjYW5uZXI= 21438\naWxkZXI= 21439\nX21zZ3M= 21440\n5o8= 21441\nKGludGVudA== 21442\nIGRlc3RydWN0 21443\nIGJ1c3Q= 21444\nIEVtcGxveQ== 21445\nb25p 21446\nIFVJVmlld0NvbnRyb2xsZXI= 21447\nIG9kZHM= 21448\nZWFyZXI= 21449\nR2VvbWV0cnk= 21450\nIHlpaQ== 21451\nX0VYUE9SVA== 21452\nIEF0dGFjaw== 21453\nIG5pZXQ= 21454\nIGltcHJlc3Npb24= 21455\nIEdpbA== 21456\nX3Byb2I= 21457\nNTI4 21458\nIENG 21459\nIEV4cGVyaWVuY2U= 21460\nL3BsdWdpbnM= 21461\nLk1ldGhvZA== 21462\nIGJlbGllZnM= 21463\nTmF0aXZl 21464\nX2J1aWxk 21465\nIHZpZw== 21466\nIHJhbmtz 21467\nY292ZXJlZA== 21468\nNzA1 21469\nc3VjaA== 21470\nR3VhcmQ= 21471\nLnBhY2s= 21472\nYWRkZXI= 21473\nODA5 21474\naXZpYQ== 21475\nbG5n 21476\nINCy0Ys= 21477\nNTUy 21478\nVGltZXN0YW1w 21479\nX25vdw== 21480\nIHBva2Vy 21481\nIHVuYw== 21482\nIHNoYXBlcw== 21483\nLXR5cGVz 21484\nX3BlcmlvZA== 21485\ncGs= 21486\nIHZldGVyYW4= 21487\nIHNvbm8= 21488\nIGFwcG9pbnRlZA== 21489\nb3ZlcmZsb3c= 21490\nLmRyaXZlcg== 21491\nX2NhdA== 21492\ndXR0 21493\ncGxhbnQ= 21494\naW1i 21495\nIEFjY2VwdA== 21496\nIGNvbmNlcnQ= 21497\nCW5vZGU= 21498\nCXo= 21499\nPz4NCg== 21500\nIGJhbm5lZA== 21501\nCSAgICAgICAgICAgICAgIA== 21502\nIHRveGlj 21503\nIGRpc2FwcGU= 21504\nNDcz 21505\nyJs= 21506\nIGdyYWNl 21507\nYXRlZnVs 21508\nUmVwbHk= 21509\nIENydXo= 21510\nNDg2 21511\nIHNjcmFw 21512\nIGtleXdvcmRz 21513\nc2ltcA== 21514\nIG1vcnRnYWdl 21515\nIGN5YmVy 21516\nIEV4ZWN1dGU= 21517\nIGxhdGl0dWRl 21518\naWZ1 21519\nLkNPTQ== 21520\nZGJv 21521\nIHNvcnRz 21522\nIEdhcw== 21523\nb21pYWw= 21524\nLkxvY2Fs 21525\nQ2VsbHM= 21526\nLlJlcGxhY2U= 21527\nU3RyaW5ncw== 21528\nLmZpdA== 21529\nIFRoaXJk 21530\nJSIsCg== 21531\nIHt9Ii4= 21532\nIFNvbnk= 21533\nIFs6 21534\nNTg1 21535\nIGZhbGxlbg== 21536\nLicpCg== 21537\naW5o 21538\nIE1D 21539\nIHJlZGlz 21540\nQ29kZXM= 21541\nIHByb2ZpbGVz 21542\naG9vaw== 21543\nUmVkdWNlcg== 21544\nX0ZVTkM= 21545\nIG5hdmlnYXRl 21546\nc3RybGVu 21547\nIGhvcm0= 21548\n4Z4= 21549\nIFNS 21550\nLmJvb3Q= 21551\nIGRpZ2VzdA== 21552\nCWhlYWRlcg== 21553\nLmZpbmRPbmU= 21554\n5oE= 21555\nRGJUeXBl 21556\nbmlh 21557\nX21lcmdl 21558\nIGRvbm5l 21559\nL0dldHR5 21560\nX0NIQVI= 21561\nIGJhbmRz 21562\nLlVSTA== 21563\nYXJ0aWFs 21564\nIGZyZXE= 21565\nIHNpc3Q= 21566\nTmc= 21567\nIHJlbmRlcmluZw== 21568\nXENvcmU= 21569\nV2lkZ2V0cw== 21570\nIFZB 21571\nIGFjdGl2aXN0cw== 21572\nU3Rl 21573\nPV8= 21574\nYWxsYQ== 21575\nU3RhbXA= 21576\nIGxvYWRz 21577\nIHh4 21578\nIExlYXJuaW5n 21579\nLk12Yw== 21580\ndWly 21581\nKCIk 21582\nIGNvbm5lY3Rpbmc= 21583\nUmVhZE9ubHk= 21584\ndXJ1 21585\nIEVhZw== 21586\nQklU 21587\nX0RFTA== 21588\n5ac= 21589\nYXJyYXNz 21590\nZXh0ZXJuYWw= 21591\nIFlPVVI= 21592\nIEJyZXc= 21593\nIEZpdmU= 21594\nIHJlc2l6ZQ== 21595\naWdpZA== 21596\nZXJhdGlvbg== 21597\nNjUz 21598\nINGN 21599\nNTM2 21600\n5Yqg 21601\nMDM5 21602\nIENhdGNo 21603\n2YE= 21604\nIExlb24= 21605\nYW1pbA== 21606\nLkJvZHk= 21607\nQ2xpcA== 21608\nL2xpc3Q= 21609\nLmJy 21610\nRWRpdFRleHQ= 21611\nCWRi 21612\nLkdhbWU= 21613\nKEJ1aWxkQ29udGV4dA== 21614\nYmFja2VuZA== 21615\nLlJlZA== 21616\nZmFjZWJvb2s= 21617\nNTI5 21618\nLnVybHM= 21619\nbXI= 21620\ncm9sbGVk 21621\nLS0tLS0tLQ== 21622\nIGludGVydmVudGlvbg== 21623\nIHJldGlyZW1lbnQ= 21624\nIEtpdA== 21625\nIFBSRQ== 21626\nVXBwZXJDYXNl 21627\nIFNvY2tldA== 21628\nIDot 21629\nIHN0dWR5aW5n 21630\nIE1ldHJv 21631\nYXJkZWQ= 21632\nIGNvbnZlcnNhdGlvbnM= 21633\nQ2FsbGVk 21634\nIGV4YW1pbmU= 21635\nZXJ0aWZpY2F0ZQ== 21636\nLmd6 21637\nLXJlc3BvbnNpdmU= 21638\nIHJlZnVuZA== 21639\nX25ldHdvcms= 21640\nMDI2 21641\nYWxsb3dlZA== 21642\nZW1wdA== 21643\nIG1lYWxz 21644\nQ2F0ZWdvcmllcw== 21645\nIHRyYXZlbGluZw== 21646\nIGtn 21647\nIHNoYW1l 21648\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 21649\nIGV4cGxpY2l0bHk= 21650\nIG1hdGhlbWF0aWM= 21651\nIFN1aXRl 21652\nIFJHQg== 21653\nKioqKioqLw== 21654\nIG1peHR1cmU= 21655\nbGVhcm5pbmc= 21656\nLnRlbXBsYXRl 21657\nYXR0cw== 21658\nd3g= 21659\nCWN0eA== 21660\nLnByb3BlcnRpZXM= 21661\nIGRyaW5rcw== 21662\nIEVpdGhlcg== 21663\nc2V0VGV4dA== 21664\nLmdldERhdGE= 21665\nLnppcA== 21666\nIHJldmVhbHM= 21667\nPHRhYmxl 21668\nLkhhc2hNYXA= 21669\nIEh1cg== 21670\nKSIpOwo= 21671\nLmZyYW1ld29yaw== 21672\nIFNUQVJU 21673\nZmVlZGJhY2s= 21674\nNDU3 21675\nIHNhZmVseQ== 21676\nLmljb24= 21677\nY29uZmlndXJl 21678\nLmxvY2s= 21679\nLmxheWVycw== 21680\nLz4uCg== 21681\nIHJhbmtlZA== 21682\nX2ltcGw= 21683\nIEhhbmRsZXM= 21684\nIGhvc3RlZA== 21685\nIHVwZGF0aW5n 21686\nYWxidW0= 21687\n6Z0= 21688\nIHNoYWRlcg== 21689\nRWRpdG9ycw== 21690\nLXJvdW5k 21691\nW117 21692\nIHNlcA== 21693\nIEhp 21694\nVEVN 21695\nbG9va3Vw 21696\nLm1hbg== 21697\nX0lOUFVU 21698\nIHRocmVhdGVuZWQ= 21699\nX0lNUE9SVA== 21700\nIGRyb3Bz 21701\ncnVpdA== 21702\nc2lk 21703\nYm90aA== 21704\nIEV4Y2Vs 21705\nIGplcg== 21706\nb3JkaW5hcnk= 21707\n0LXQuQ== 21708\nVklFVw== 21709\ncmVwbHk= 21710\nICk6Cg== 21711\nY29sb3Jz 21712\ndmVyaWZpZWQ= 21713\nX1Ry 21714\nX3BhcnNl 21715\nIGNvbmdyZXNz 21716\nNjE3 21717\nUHJvbWlzZQ== 21718\naW50cw== 21719\nIE1vdGhlcg== 21720\nLkFwaQ== 21721\nIER1cmF0aW9u 21722\nIGZpcnN0TmFtZQ== 21723\naW5oZXJpdGRvYw== 21724\nIE1hcnM= 21725\nIGFwcg== 21726\nT0RZ 21727\nIHZpc2l0cw== 21728\nNjMx 21729\nIGhlYWxpbmc= 21730\nbGV0dGVycw== 21731\nKSkpOw0K 21732\nZnV0dXJl 21733\nLkZyYW1ld29yaw== 21734\nIGtpc3M= 21735\nIGludm9sdmU= 21736\nIHNpbGVudA== 21737\nYWRvd3M= 21738\nIGFueWJvZHk= 21739\nc2No 21740\nNjkw 21741\nIHNvbGVseQ== 21742\nLWltZw== 21743\nIHByb3ByaQ== 21744\nIGluc3RydWN0 21745\nIGxpY2Vuc2Vz 21746\nIG1ldGg= 21747\nIGNvbmRlbQ== 21748\nIERvbWFpbg== 21749\nIEhhcnJpcw== 21750\nIHPDpQ== 21751\nQ0VQVA== 21752\nQmF0Y2g= 21753\nQGV4dGVuZHM= 21754\nIENPTlRSSUJVVA== 21755\nLkRhdGFGcmFtZQ== 21756\nNDcy 21757\nX3BhY2tldA== 21758\ncmVjaXNpb24= 21759\nIGZvY3VzaW5n 21760\nLmh0 21761\nX18iOgo= 21762\nOkdldA== 21763\nIEtD 21764\nIHBhc3NhZ2U= 21765\nU2VnbWVudA== 21766\nX2NlbnRlcg== 21767\nLXpB 21768\nX0JM 21769\nIGNvbnZpbg== 21770\nIGNsYXNzaWZpZWQ= 21771\nIE5TTXV0YWJsZQ== 21772\nX2Fw 21773\ndGlsZQ== 21774\nUmVjdGFuZ2xl 21775\nNDky 21776\nKG51bXM= 21777\ndmVucw== 21778\nIFVJQnV0dG9u 21779\nIEZlZGVy 21780\nYW1v 21781\nIG91dGxpbmU= 21782\nIFBhcnNlcg== 21783\nIOKJ 21784\nIFdvcmtz 21785\nLlNjaGVtYQ== 21786\nIGVuZ2luZXM= 21787\nNjM3 21788\nNTYz 21789\nX2NvbW1vbg== 21790\nNTQy 21791\nX29sZA== 21792\nIHNldENvbnRlbnRWaWV3 21793\nIC8vLzw= 21794\nIEJU 21795\nZm0= 21796\nIGRpdmVycw== 21797\nX3dlaWdodHM= 21798\nZW1hcms= 21799\nIEFDVA== 21800\nIHByb3BvcnRpb24= 21801\nb3ZlcmxheQ== 21802\nLmRpcm5hbWU= 21803\nIEdpdA== 21804\nX1JFRkVSRU5DRQ== 21805\nPD4= 21806\nbGI= 21807\nX3J1bGU= 21808\n6LSl 21809\nIFB1dGlu 21810\nIHNsZWVwaW5n 21811\nKCk6DQo= 21812\nIHByZXNlcnZl 21813\nIHBhcmxpYW1lbnQ= 21814\nIExvb2tpbmc= 21815\nIHBpY2tpbmc= 21816\nIERpc3BhdGNo 21817\nIHNsaXA= 21818\n65M= 21819\nIEx5bg== 21820\nX3NpZ25hbA== 21821\nY29uZmlndXJhdGlvbg== 21822\nIFBpdHQ= 21823\nNDkx 21824\nYWRlbg== 21825\ncHJvY2VkdXJl 21826\nIGVudGh1c2k= 21827\nZmlnaHQ= 21828\nIENvbnNpZGVy 21829\nIHRvcm4= 21830\nQ29ubmVjdGVk 21831\nLmNvcw== 21832\nX2dyb3Vwcw== 21833\nIFRoaW5r 21834\nIGRlbGliZXI= 21835\nIHJlc2lk 21836\nd29ya2luZw== 21837\nLmNvbHVtbnM= 21838\nIENhbGxlZA== 21839\nIGVzbGludA== 21840\nPiIs 21841\nX0RPV04= 21842\naGlzdA== 21843\nIEFkdmFuY2Vk 21844\nIHJld2FyZHM= 21845\nYWN0b3Jz 21846\nIHNpbGVuY2U= 21847\nNDc5 21848\nIG15dGg= 21849\nIG5ldXI= 21850\nNTE5 21851\nIGF1Y3Rpb24= 21852\nLkdldFN0cmluZw== 21853\nZWtz 21854\nKHByb2plY3Q= 21855\nNTk4 21856\nCW1zZw== 21857\nCW91dHB1dA== 21858\nIGNvbXBsYWludHM= 21859\nNTUx 21860\nLFM= 21861\nIHRibA== 21862\nICwKCg== 21863\ncmlvcnM= 21864\nYWhyZW4= 21865\nIGxhd3llcnM= 21866\ncmVkdXg= 21867\nX3N5bWJvbA== 21868\nb2ZmZWU= 21869\nX1JFU1VMVA== 21870\nKE5hbWU= 21871\nVVRD 21872\nLmN1cnJlbnRUaW1l 21873\nIG9yZ2FuaXM= 21874\nLmFyZw== 21875\nNTMz 21876\nIG1pbmlt 21877\nd2ljaw== 21878\nIHJlY2VpdmVz 21879\nQmFsYW5jZQ== 21880\nIHNwZWFrcw== 21881\nIERheXM= 21882\nIEJlbG93 21883\nNDgz 21884\ndGlwbw== 21885\nUHJlc2VudA== 21886\nIHJlc2Vydg== 21887\naHA= 21888\nIHJpdA== 21889\nX1JJR0hU 21890\nLS0p 21891\nIGNoYWlybWFu 21892\nNzgx 21893\nRElT 21894\nIEJPT1NU 21895\nIGV4cGVyaW1lbnRz 21896\nNjg3 21897\nX18pOwo= 21898\nIHN0YW1w 21899\nIGZlcnQ= 21900\nIGZvbmQ= 21901\nVGVy 21902\nZWx2ZQ== 21903\ndXJlbg== 21904\nK2k= 21905\nZW5kZW5jeQ== 21906\nIHZpcnR1YWxseQ== 21907\nLi4uIg== 21908\n772e 21909\nOTI1 21910\nLWNlbnQ= 21911\nX3VuaXF1ZQ== 21912\nIHByaWNpbmc= 21913\nbWlj 21914\nUkVTSA== 21915\nIDo6Og== 21916\nIGFubm90YXRpb24= 21917\nIENpcmNsZQ== 21918\nb25nb2Ri 21919\naXRhcw== 21920\nICUo 21921\nKGNvbXBvbmVudA== 21922\nINC+0LE= 21923\nKHBvcnQ= 21924\nLWhvdXI= 21925\nLm9iag== 21926\nTEJM 21927\nIGp1cnk= 21928\nR0JU 21929\nIHNweQ== 21930\nIFByb2Zlc3Npb25hbA== 21931\nICIiOwoK 21932\nIHN0cmlraW5n 21933\nIGRpc2NyaW1pbmF0aW9u 21934\nIHBheXM= 21935\nOTM3 21936\nbGljdA== 21937\nZW50ZXM= 21938\nIHRocm93aW5n 21939\nIFBsdWdpbg== 21940\nKGRlZg== 21941\nIFJ1bnRpbWVFeGNlcHRpb24= 21942\nIE1pZ3JhdGlvbg== 21943\nNTk5 21944\nIGRpYw== 21945\nYmFn 21946\nb25pYQ== 21947\nIGNvcnJ1cHRpb24= 21948\nNzA0 21949\nKE1hcA== 21950\nIHByeg== 21951\nLmR0bw== 21952\nIGFjcXVpcmU= 21953\nU3RhdGVUb1Byb3Bz 21954\nIGxvdmluZw== 21955\n0L7Qtg== 21956\nX3BhdHRlcm4= 21957\nIGVtb3Rpb25z 21958\nIHB1Ymxpc2hlcg== 21959\nX2Jl 21960\nIGNvdXBsZXM= 21961\nNDk4 21962\nb2o= 21963\nIENoYXJ0 21964\nIHRyb3A= 21965\nLnRvb2w= 21966\nIGVzdGFibGlzaG1lbnQ= 21967\nIGRvbA== 21968\nNjU0 21969\nIHRvd2Vy 21970\nIGxhbmU= 21971\nIFN5ZG5leQ== 21972\nIGZpbGxpbmc= 21973\nY2xhaW1lZA== 21974\nNjQ0 21975\nIGRpYWxvZ3Vl 21976\nIGNvbnZlbnRpb24= 21977\nYm9va2luZw== 21978\ncGFyZW5jeQ== 21979\n5rE= 21980\nIEdlbmVyaWM= 21981\nNzE4 21982\nXFNjaGVtYQ== 21983\nNDgy 21984\nNjE4 21985\nIHJhbmdlcw== 21986\nL2No 21987\nIHBhbmVscw== 21988\nIHJ1bGVk 21989\n55Sf 21990\nLnRz 21991\nX3NldHM= 21992\nIGNsZWFudXA= 21993\nUHJldmlvdXM= 21994\nIEFuaW1hbA== 21995\nNjA3 21996\nKCQo 21997\nIEF2ZQ== 21998\nb2xsYXI= 21999\nMDI4 22000\nX2V2YWw= 22001\nCU5hbWU= 22002\nKHRyZWU= 22003\nICJd 22004\nNTcx 22005\nIGR1dGllcw== 22006\nPScv 22007\nQ2xpY2tlZA== 22008\nIGRpZmZlcmVudGx5 22009\nIENsYXJr 22010\nIGRpdA== 22011\nb2xvZ2lzdHM= 22012\nIHN5bmQ= 22013\nIHNlbmRz 22014\nLWtub3du 22015\na2I= 22016\nIE1vZGFs 22017\naXRhdGl2ZQ== 22018\nIHJhY2luZw== 22019\nIGhpZ2hsaWdodHM= 22020\nIFNpbW9u 22021\nIENhcHRhaW4= 22022\n5L+h 22023\nIENC 22024\nY29udGlu 22025\nYXJhbg== 22026\nIHBoeXNpY3M= 22027\ncmV0dHk= 22028\nZXRhbA== 22029\nLm1k 22030\nYXhpb3M= 22031\nIHNwZWFrZXJz 22032\nIHByZXA= 22033\nIGF3YXJkZWQ= 22034\n7KeA 22035\nIENvcm4= 22036\nIE5hdHVyZQ== 22037\nVURJTw== 22038\nNzM3 22039\nIHByb2o= 22040\nLXByZQ== 22041\nW3U= 22042\nRmVhdHVyZXM= 22043\nIGlzRXF1YWw= 22044\nQmluYXJ5 22045\nc2ln 22046\nIGNvbmZ1c2lvbg== 22047\nNTQ2 22048\nNTY4 22049\nIEhhdA== 22050\nIGt0w7M= 22051\nLmNvbmZpZ3VyZQ== 22052\nTU9O 22053\nNDk0 22054\nL2VkaXQ= 22055\nX0FkZA== 22056\nLHRydWU= 22057\nNTQx 22058\nIGNsaQ== 22059\nRXJyb3JNZXNzYWdl 22060\nLWxvYWRlcg== 22061\nRGltZW5zaW9ucw== 22062\ndWx0aXBseQ== 22063\nIHshIQ== 22064\nIFNxbENvbW1hbmQ= 22065\nIHNwb2tlbg== 22066\nIHBpY3M= 22067\nIHRveQ== 22068\nKEtleQ== 22069\nIExvb3A= 22070\n2Kg= 22071\nRUFUVVJF 22072\naW5jdGlvbg== 22073\nX3NldHVw 22074\nd3JhcHBlcg== 22075\nIHRvbmc= 22076\nY3VsYXI= 22077\nT3B0 22078\nLlBs 22079\nPSIs 22080\nKGxlbmd0aA== 22081\ndW1u 22082\nIGNocm9t 22083\nIHNldmVudA== 22084\nIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 22085\nNDc4 22086\nCXN0YXJ0 22087\nIGJlZ3Vu 22088\nQ0VQVElPTg== 22089\nZGF0YXNldA== 22090\nODI1 22091\nIEZhaWxlZA== 22092\nY29scw== 22093\nNDU5 22094\nIGtuZWU= 22095\naW1vcmU= 22096\nLnNwbGljZQ== 22097\nc2hlbGw= 22098\naWdnZXJz 22099\nIHRoZW1lcw== 22100\nOTk1 22101\nIERK 22102\nIEFzc2lzdGFudA== 22103\nLSQ= 22104\nTWF5YmU= 22105\nIG9yZGVyaW5n 22106\nIEludGVsbGlnZW5jZQ== 22107\nIE1hc3NhY2h1c2V0dHM= 22108\nIGZhaWxpbmc= 22109\nZWxzb24= 22110\nR3JlYXQ= 22111\nPWk= 22112\nLnJlc3Q= 22113\nIGludml0ZQ== 22114\nLWRpc2FibGU= 22115\nLkdyb3VwQm94 22116\n4oCZZXN0 22117\nIHRhY2tsZQ== 22118\nZ3Y= 22119\nZXR0ZXI= 22120\nICksDQo= 22121\nX3J1bGVz 22122\nLndhcm4= 22123\nZnVuY3Rpb25z 22124\nIENocmlzdGlhbnM= 22125\nIGJhY2tlZA== 22126\nIHNsaWRlcg== 22127\nIGVuam95aW5n 22128\nbmVzdA== 22129\nIGhpag== 22130\nX21z 22131\nLy8q 22132\nQW5ub3RhdGlvbnM= 22133\nIFZhcmlhYmxlcw== 22134\nPFY= 22135\nKHNlcnZlcg== 22136\nIE9yYWNsZQ== 22137\nZWxlbWVudHM= 22138\nIG9yZ2FuaXNhdGlvbg== 22139\nX3BvaW50ZXI= 22140\nIEhlYWRlcnM= 22141\nW2Q= 22142\nIGRlYWRsaW5l 22143\naXNzYQ== 22144\nIGtuaWZl 22145\nIE5BU0E= 22146\nIEhlaWdodA== 22147\nNzg0 22148\nIEFzeW5j 22149\nIHZlbnVl 22150\nLmRvbQ== 22151\nYm91cm5l 22152\nIEhhd2Fp 22153\nIG1lbW8= 22154\naWN0aW9ucw== 22155\nIHN1cnZlaWxsYW5jZQ== 22156\nb21p 22157\nL2Fzc2V0cw== 22158\nNTg3 22159\nIGVkdQ== 22160\nxJs= 22161\nIHJvc3Rlcg== 22162\nIGhpcmVk 22163\nIFRvaw== 22164\nIHBsYWNlbWVudA== 22165\ndXJhdGlvbnM= 22166\nIHNldFN0YXRl 22167\nIE1hZ2F6aW5l 22168\nIGhvcnJvcg== 22169\nVHJ5 22170\nIGxhZw== 22171\nIEV2ZXJ5b25l 22172\ndGh1cg== 22173\nKSk7DQoNCg== 22174\nLnJldHVybg== 22175\nIHN5bXA= 22176\n4paI4paI 22177\nIG5pZ2h0cw== 22178\nd29ya2Vy 22179\nIGFsZQ== 22180\nZW5uZXNzZWU= 22181\nLnN0ZXA= 22182\nIHN5bmNocm9uaXplZA== 22183\nNDg3 22184\nb3VyaQ== 22185\nRG9lcw== 22186\nLmNoYW5nZQ== 22187\nZm9u 22188\nLnNldEJhY2tncm91bmQ= 22189\naXJjdWxhcg== 22190\nNDc2 22191\nKy0= 22192\nIENJQQ== 22193\nNzI5 22194\nIEphbmU= 22195\nIFNpbWlsYXI= 22196\nLUk= 22197\nbGV2ZWxhbmQ= 22198\nIHByb3NwZWN0 22199\nX2ZvdW5k 22200\nCWNvbG9y 22201\nLkRpYWdub3N0aWNz 22202\nIGFubm91bmNl 22203\nIGFzc3VtZXM= 22204\nL3Ry 22205\nIGJk 22206\nOTg3 22207\nIENhcmJvbg== 22208\nIGFuYWx5cw== 22209\nNTY0 22210\nLmRlc3Q= 22211\nbmlr 22212\nIExpZQ== 22213\nLWluZGV4 22214\nRHJhd2FibGU= 22215\nIFRBRw== 22216\nIHRyaWFuZ2xl 22217\nX0ZMT0FU 22218\nCQkgICAgIA== 22219\nLmJsYWNr 22220\ndnVl 22221\nY3VyYWN5 22222\nIGFmZmVjdHM= 22223\nOTA2 22224\nIHN1cmVseQ== 22225\nU2xpZGVy 22226\ndWtp 22227\nY2VyeQ== 22228\nIHVudGVy 22229\nLnByb2ZpbGU= 22230\nb3Jkb24= 22231\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 22232\nbGVhdmU= 22233\nIHNtYXJ0cGhvbmU= 22234\nZ2ll 22235\nIGNvbnNwaXI= 22236\nIHR1dG9yaWFs 22237\n57G7 22238\nIGNhYg== 22239\nNzY1 22240\nIFN1bW1hcnk= 22241\nKgoK 22242\nw6Ro 22243\nIlRoaXM= 22244\nIHNsaWRlcw== 22245\nIjwv 22246\nLmRldg== 22247\nJzw= 22248\nIFJpbmc= 22249\nxYJh 22250\nIGtvdGxpbg== 22251\nLmR1bXBz 22252\nIGJhc3M= 22253\n7Is= 22254\nUE9JTlQ= 22255\nIHV0dGVy 22256\nIMOpcw== 22257\nLmZ1bGw= 22258\nT0xM 22259\nIGNlcmVtb255 22260\nc2xvdA== 22261\nIGFpbXM= 22262\ndG9vbHRpcA== 22263\nLnNjb3Jl 22264\nLWRk 22265\nNjQy 22266\nIHByb3g= 22267\nUmVjb2duaXplcg== 22268\nZHluYW1pYw== 22269\nw6RuZA== 22270\nL3N0ZA== 22271\nRFU= 22272\nIE5vdEltcGxlbWVudGVk 22273\nKCItLQ== 22274\nUkFX 22275\nNjM1 22276\nIGV0aG5pYw== 22277\nYW5ubw== 22278\nIGNoYW1waW9uc2hpcA== 22279\nLHNlbGY= 22280\nIGFjY2VwdGFibGU= 22281\nIFNwcml0ZQ== 22282\nW3R5cGU= 22283\nw7xo 22284\nIFZL 22285\nKGpQYW5lbA== 22286\nNTQ4 22287\naXRy 22288\n66A= 22289\nYXVyYQ== 22290\nIGZhY3VsdHk= 22291\nYXZlcnM= 22292\nIFJlY29yZHM= 22293\nLlNlY3VyaXR5 22294\nIGNvbnN0cmFpbnQ= 22295\nLkJs 22296\nVWludA== 22297\nYmFsYW5jZQ== 22298\nIGNvbW1l 22299\nIE5paw== 22300\nU3VwcHJlc3NXYXJuaW5ncw== 22301\nIE9jZWFu 22302\nNTU0 22303\nX0lk 22304\nRGF0YVNldA== 22305\nIGluc2VydGVk 22306\nIjsNCg0K 22307\n4oCz 22308\naXBwZXQ= 22309\nIGFubml2ZXJzYXJ5 22310\nIHJldGlyZWQ= 22311\nb3JjaA== 22312\nIHBlcnBldA== 22313\nXEZvcm0= 22314\nIGludm9sdmVtZW50 22315\nX3VzZXJuYW1l 22316\nYWxlbQ== 22317\nX1NFUlZJQ0U= 22318\nIEluZGlhbmE= 22319\nIGNpZ2FyZXQ= 22320\nYXJ0eg== 22321\nIFJD 22322\nIG1lYXN1cmVtZW50cw== 22323\n572u 22324\nIGFmZmlsaWF0ZQ== 22325\nYWNpb25hbA== 22326\nLXNlY3Rpb24= 22327\nX2NvbnRyb2xsZXI= 22328\ndmFyZA== 22329\nX2Vs 22330\nIFRveQ== 22331\nPFA= 22332\nTWFjaGluZQ== 22333\nw7ptZXI= 22334\nIFllYWg= 22335\nIllvdQ== 22336\nIG1vbA== 22337\nLkNs 22338\nY29udHJvbGxlcnM= 22339\nIHN1c3BlbmRlZA== 22340\nKys7Cgo= 22341\nQVRU 22342\nIHByb2plY3Rpb24= 22343\nUGFkZGluZw== 22344\nNTg2 22345\nLm1hdGg= 22346\nNjg2 22347\nZmFjdG9yeQ== 22348\nMDQy 22349\nIGdhbW1h 22350\nKCk+ 22351\nY3ljbGU= 22352\nIEJ1bGw= 22353\ncGF0aHM= 22354\nIHVucA== 22355\nIHZpZXdEaWRMb2Fk 22356\nX01vZGVs 22357\nIGFzc2VydFRydWU= 22358\nIHJhdGVk 22359\nRGVjbA== 22360\ndmVydGVk 22361\nIERhdA== 22362\nYnJldw== 22363\nIHBvaW50aW5n 22364\nTXM= 22365\nIFBvaW50ZXI= 22366\nKSc= 22367\nX25vbg== 22368\nNTI3 22369\nIFNFQw== 22370\nIHllYWg= 22371\nZ2VuY3k= 22372\naW5pdGlhbGl6ZQ== 22373\nZmx5 22374\nNzEx 22375\nW3Bvcw== 22376\nLGc= 22377\nVGVsZQ== 22378\nMDM0 22379\nIGpva2U= 22380\nIGNsYXVzZQ== 22381\nLmZpbmRCeUlk 22382\nZW5lcw== 22383\nKGluc3RhbmNl 22384\nNjI2 22385\nwqM= 22386\nOTE1 22387\nIHNsaWM= 22388\nX2hvbWU= 22389\nICovfQo= 22390\nX3BhZ2Vz 22391\nKHNlcnZpY2U= 22392\nOTA1 22393\nUlA= 22394\nIEFtb25n 22395\nLmdldEN1cnJlbnQ= 22396\nODA2 22397\n44K5 22398\nIHNsZWU= 22399\nPTw/ 22400\nX3Byb3A= 22401\nZmx1c2g= 22402\nIE1N 22403\nQmVs 22404\nTm90ZXM= 22405\nICovCgoK 22406\nMDM1 22407\nIHJo 22408\nVGFibGVz 22409\nIEp1 22410\nIFwNCg== 22411\nbGljaGVu 22412\nIEluc3VyYW5jZQ== 22413\nXQoKCg== 22414\nIGNvb3Blcg== 22415\n4oCUdGhl 22416\nLm1hdA== 22417\nNDg5 22418\nIGZvaQ== 22419\nKGF1dG8= 22420\nTWFyZ2lu 22421\nNjM2 22422\nIHJlc2lkZW5jZQ== 22423\nNTU5 22424\nIEhpc3Rvcg== 22425\nIH49 22426\nRGk= 22427\nICcpCg== 22428\nIGV4Y2x1ZGU= 22429\nLkRyb3A= 22430\nJyI7Cg== 22431\nIGNvYw== 22432\nX3VwbG9hZA== 22433\nSGlkZQ== 22434\nIFVua25vd24= 22435\nIG5vcm1hbGl6ZQ== 22436\nX3JldA== 22437\nLicKCg== 22438\nLm5vZGVz 22439\nODcw 22440\nLkRhdGFTb3VyY2U= 22441\nYmxlbXM= 22442\nIGdlbnRsZQ== 22443\nOiQ= 22444\nJykpOwoK 22445\nLlJlc291cmNlcw== 22446\n4og= 22447\nIFRhaQ== 22448\nVkVE 22449\nIEd1bg== 22450\nbGVhbnM= 22451\nIERvYw== 22452\nLlZvaWQ= 22453\nIEFtZW5kbWVudA== 22454\nODY2 22455\nZXNzZWQ= 22456\nNzA2 22457\nIHJlY2lwaWVudA== 22458\nLk5vZGU= 22459\nb3Zv 22460\nIGFsaWduSXRlbXM= 22461\nIFVuaXR5 22462\nIFJvbWU= 22463\nYnVybg== 22464\nIHZvbHRhZ2U= 22465\nIFNIQQ== 22466\nNTM0 22467\nNTcy 22468\nIEdPT0Q= 22469\naGVscGVycw== 22470\nLyoqKi8= 22471\nIGVsaW1pbmF0ZQ== 22472\nd2Fw 22473\nX2FuZ2xl 22474\nIHJlZnVnZWVz 22475\nCWFzc2VydEVxdWFscw== 22476\nIHByb2Jl 22477\nKCcuLi8uLi8= 22478\neW91cg== 22479\nIG1lcmNo 22480\nVUJMRQ== 22481\nCXJlc3BvbnNl 22482\nX0RFRg== 22483\nIGVudmlyb25tZW50cw== 22484\nb3VzaW5n 22485\nIHJlc3RyaWN0ZWQ= 22486\nIENPTlRSSUJVVE9SUw== 22487\nNjIx 22488\nIGNvbXBhbmlvbg== 22489\n4bqj 22490\ncG93 22491\ndXJ0bGU= 22492\nYmll 22493\nLlBlcmZvcm0= 22494\nPW4= 22495\ncmVkaXM= 22496\nIGRpdmlkZQ== 22497\nIGNvbGxlY3RpdmU= 22498\nRGlmZg== 22499\nRHluYW1pYw== 22500\naXNTZWxlY3RlZA== 22501\nYXN0eXBl 22502\nIExvdA== 22503\nIFN0YXRlbWVudA== 22504\naWNpcGFudA== 22505\nYWto 22506\nNTE3 22507\nIHNlcmlhbGl6ZXI= 22508\nX0NGRw== 22509\nYXZhbA== 22510\nIHZpZXdlcnM= 22511\nIEZP 22512\nT2Nj 22513\nIHJvYnVzdA== 22514\nIE1pdA== 22515\nX0FORA== 22516\nVHJhbnNpdGlvbg== 22517\ndW5hdGU= 22518\nIHByaWRl 22519\nIGRyYW1hdGlj 22520\nIFBhZ2Vz 22521\nX3R1cGxl 22522\nIGNvcGllZA== 22523\nbW4= 22524\nIG91Z2h0 22525\nIGVxdWFsaXR5 22526\nX2hhcw== 22527\nX1dS 22528\nNTcz 22529\nZW1p 22530\nIHN1cmdl 22531\naWxsbw== 22532\nKCl9 22533\nMDgx 22534\nIHBlcmY= 22535\nOTIx 22536\ndWxr 22537\nIGludmVzdG1lbnRz 22538\nNzg1 22539\nIGdlbmVyYXRpb25z 22540\nIHJlc29ydA== 22541\nIHRydXN0ZWQ= 22542\nX2ZyZXE= 22543\nIGZvcm1h 22544\nQVRJT05T 22545\nIEh1 22546\nIEdyYWQ= 22547\nX2NwdQ== 22548\nICIsCg== 22549\ncmVzc2U= 22550\nKCoq 22551\nIGhlcmVieQ== 22552\nIGxha2U= 22553\nX1NUQUNL 22554\nIEJ1cmVhdQ== 22555\nIHN1c3RhaW5hYmxl 22556\nIFBF 22557\nIGRlaQ== 22558\nIEFuc3dlcg== 22559\nUGx1cw== 22560\nL3dlYg== 22561\nIHN0ZXI= 22562\nIG1vdW50ZWQ= 22563\nX2NsZWFy 22564\nZm9ubw== 22565\naWFuY2Vz 22566\nX2ZpbmQ= 22567\nIGNvbmZ1c2Vk 22568\nX2Jpbg== 22569\nREVDTA== 22570\nIGluc3RhbnRseQ== 22571\nVUlU 22572\nX0RP 22573\nU2V0dXA= 22574\na2Vl 22575\nX3ByaW50Zg== 22576\nX3N0bXQ= 22577\nIFN0ZWFt 22578\ncHJvZg== 22579\nbHY= 22580\nIHNvbHZpbmc= 22581\nbGF0b3I= 22582\nb3R5cGVz 22583\nQW5kcm9pZA== 22584\nX2VzY2FwZQ== 22585\nTGVhdmU= 22586\nLmdldFRpbWU= 22587\nODEx 22588\naWZz 22589\nIGNvdg== 22590\nIENsYXNzaWM= 22591\nLWRhcms= 22592\nNTI2 22593\nRGlzcGF0Y2hlcg== 22594\nLWdyYXk= 22595\nIFBhbGVzdGluaWFu 22596\nLmRlZXA= 22597\nIEluamVjdA== 22598\nIHJlZmxlY3Rpb24= 22599\nNTM4 22600\nIGh5cG8= 22601\nY29uc3RydWN0b3I= 22602\nLmFwcGxpY2F0aW9u 22603\neXN0ZXI= 22604\n4pU= 22605\nc2Nob29s 22606\nIENvdw== 22607\nNTkz 22608\nIGZvb3RhZ2U= 22609\nLWlucw== 22610\nIC8qKjw= 22611\nYXRvbQ== 22612\nIHByb2ZpdHM= 22613\nOTIz 22614\nIGJvb2tpbmc= 22615\nX3RocmVzaG9sZA== 22616\nIExpdmVy 22617\nIGNpdGl6ZW4= 22618\nYng= 22619\nIFN0b3Jt 22620\nIENvcnA= 22621\nIHdpZGVy 22622\nIikpewo= 22623\nX0FDVElPTg== 22624\naW9ycw== 22625\nYWlzZXM= 22626\nOm5vbmU= 22627\nIGNpdGVk 22628\nImZtdA== 22629\nQXVn 22630\nY29tYg== 22631\nIHdoaXRlcw== 22632\nIHNlc3M= 22633\nXl4= 22634\naWdodGg= 22635\nIHRhbmc= 22636\nX0NBUA== 22637\nNjE0 22638\nIGludGVyYWN0aW9ucw== 22639\nNDk3 22640\nIGdhcmQ= 22641\nNjQ2 22642\nIHByaXpl 22643\nNjQ3 22644\nYWZrYQ== 22645\nVHJp 22646\nXEVsb3F1ZW50 22647\nIER5bmFtaWM= 22648\n55CG 22649\nZ3A= 22650\nIHJlYWxt 22651\nIE5p 22652\nIEVkd2FyZA== 22653\nIGlkZW50aWZpY2F0aW9u 22654\nIHBoeXNpY2FsbHk= 22655\n5pys 22656\nIHBpY2tz 22657\nLWZyaWVuZGx5 22658\nPGk= 22659\naWZpY2U= 22660\nX0FQ 22661\nTG9nZ2Vk 22662\nNTUz 22663\nfSIu 22664\nL3V0aWxz 22665\nIC4uLi4= 22666\nRU5USUFM 22667\nKEFjdGlvbg== 22668\nJ10pOwoK 22669\nIHByb3Rlc3Rz 22670\nb2xpbmU= 22671\nX1JFVFVSTg== 22672\nIHBvcHVsYXRpb25z 22673\nIFJhaW4= 22674\nZHVw 22675\nb3JpYWw= 22676\nIEF1dGhvcml0eQ== 22677\nX2V4cHI= 22678\nMDc1 22679\nLnVz 22680\nIGNvcnJ1cHQ= 22681\nCWltcG9ydA== 22682\nPGNoYXI= 22683\nIExFRlQ= 22684\nIGNhYmluZXQ= 22685\nIG5laWdoYm91cg== 22686\nIFNxbFBhcmFtZXRlcg== 22687\nYXR0ZXJlZA== 22688\nZW1pYQ== 22689\nIHJldmlld2Vk 22690\nIEhlbGxv 22691\nYmxvY2tz 22692\nKHByb2Nlc3M= 22693\nOTk3 22694\nIG9ic2VydmF0aW9u 22695\ncmF0aW5n 22696\nLmdsb2JhbA== 22697\nIHByZWZlcmVuY2U= 22698\nLnByZXBhcmU= 22699\nIGRvemVucw== 22700\nV29ya2Vy 22701\nIGNhbGN1bGF0aW9u 22702\nIFRvd2Vy 22703\nYWlyeQ== 22704\nIElTTw== 22705\nIGh1bWFuaXR5 22706\nLmFzSW5zdGFuY2VPZg== 22707\nNzEy 22708\nIGR5cw== 22709\nIHBpZXI= 22710\naWd1ZQ== 22711\nIGFzc29jaWF0ZQ== 22712\nIGludGlt 22713\nbm90aWZ5 22714\nKHt9LA== 22715\nODI4 22716\nIFJlcHJlc2VudA== 22717\ncGhldA== 22718\nc2V1ZG8= 22719\n64uI64uk 22720\nLlBvc2l0aW9u 22721\nIGNsb3N1cmU= 22722\nKGNsYXNz 22723\nCXRpbWU= 22724\nIE9yYW5nZQ== 22725\nX29wcw== 22726\nIHBvcHVw 22727\nIEltcHJv 22728\nX3NlY3JldA== 22729\nIEV1 22730\nLnNldExheW91dA== 22731\ndWxseQ== 22732\nIHNjcmV3 22733\nIFNpemVk 22734\nIENPTVA= 22735\nIG5vdGlmaWNhdGlvbnM= 22736\nVHJhbnNmZXI= 22737\nRW1pdHRlcg== 22738\nKG9sZA== 22739\nbGV0aWM= 22740\nNDkz 22741\nIC0KCg== 22742\nIHBhbmlj 22743\nNzE1 22744\nIExDRA== 22745\ncnVsZXM= 22746\nIGFmZmFpcnM= 22747\nIEZpbGw= 22748\nX0lSUQ== 22749\nOTEy 22750\nYXR0YWNobWVudA== 22751\nIHZvbQ== 22752\nPGJ1dHRvbg== 22753\nNTk1 22754\nIHRleHRz 22755\nIGFjdGl2YXRlZA== 22756\nLmFjY2Vzcw== 22757\nKHJlYWRlcg== 22758\nVGVt 22759\nIGNvcm9u 22760\ncm9waA== 22761\nRE1JTg== 22762\nIGVtZXJnZWQ= 22763\nIGluZmxhdGVy 22764\nIEluZGVwZW5kZW50 22765\nb3Jpb3Vz 22766\nIERlbGhp 22767\nNjcy 22768\nIGdseXBoaWNvbg== 22769\nIENhcmw= 22770\nU2k= 22771\nIGV4cGVyaW1lbnRhbA== 22772\nLmJhcg== 22773\nSUFO 22774\nIHNxbGl0ZQ== 22775\nY2Npw7Nu 22776\nOTA0 22777\nX0JBQ0s= 22778\nLG5hbWU= 22779\naG9ydA== 22780\nIHRlbnM= 22781\nNTQ5 22782\n6rM= 22783\ndXNpdmU= 22784\nIGdlbnVpbmU= 22785\nIGJ1Y2s= 22786\nL2Rpdg== 22787\nLnJvb20= 22788\nX05FVw== 22789\nZXN0YWRv 22790\nIEFyaw== 22791\nb2NvbHM= 22792\nLmdlbmVyYXRl 22793\ndG91Y2g= 22794\nZml4ZWQ= 22795\nICco 22796\nIHJlZmVycmluZw== 22797\nIG92ZXJ3aGVsbWluZw== 22798\nKGxldA== 22799\nIGZ1ZQ== 22800\nNjIz 22801\nX0VOVg== 22802\nd29tYW4= 22803\nRmlndXJl 22804\nYW5pbWF0ZQ== 22805\nIE1vcnQ= 22806\nIGxvbmdlc3Q= 22807\nY29sbg== 22808\nVE0= 22809\nOl8= 22810\ncmllbA== 22811\nLE4= 22812\nIFJBTQ== 22813\nIGp1c3RpZnlDb250ZW50 22814\nIGFjdGl2ZWx5 22815\nL3B1YmxpYw== 22816\nIOuw 22817\nR2l2ZW4= 22818\nT1RBTA== 22819\n5aSx6LSl 22820\nU2VxdWVudGlhbA== 22821\nIHN1cHBsZW1lbnQ= 22822\nLmFi 22823\nIGNhdGVnb3I= 22824\nfX0sCg== 22825\nYWhhbg== 22826\nJ3Vu 22827\nb3NpdHk= 22828\nIGFjY29tcGxpc2g= 22829\nVXRpbGl0aWVz 22830\nLnZpZXdz 22831\nLmNu 22832\nY2VpbA== 22833\nIENCRA== 22834\nIFJG 22835\nUEVH 22836\nIEdpZnQ= 22837\nQVlT 22838\nIFdJTg== 22839\ncGFuaWVk 22840\nIMWf 22841\nIG9ic2VydmVy 22842\nIHNtZWxs 22843\nIHs6 22844\nTGlua2Vk 22845\nPlsK 22846\nb2xlcg== 22847\nIGxpYmVydA== 22848\nIGAK 22849\nIHdlbm4= 22850\nbGF0ZWQ= 22851\nIGltbXVuZQ== 22852\nKE5vZGU= 22853\nIFByb2JsZW0= 22854\nIEFicw== 22855\nbG9ncw== 22856\nIC4uLw== 22857\nIEFEQw== 22858\nIH19Ij4K 22859\nPicpOwo= 22860\nPWI= 22861\nIFdpbmQ= 22862\nbGFob21h 22863\nIGFsbG9jYXRl 22864\nb3JpYW4= 22865\nIHByZXNjcmlwdGlvbg== 22866\nLXF1YWxpdHk= 22867\nIE1heW9y 22868\nODU1 22869\naW5lbHk= 22870\nZW5kZm9yZWFjaA== 22871\nIENvbXBsZXg= 22872\na29t 22873\nNzA5 22874\nVFk= 22875\nNzkw 22876\nXV0u 22877\nLlN0eWxl 22878\nX21hbnk= 22879\nJywnJA== 22880\nIGJhcnJpZXI= 22881\nIEZldGNo 22882\nIE1hcnZlbA== 22883\nIHJlc2lzdA== 22884\n0L7Qs9C+ 22885\nYmlkZGVu 22886\nIFJ1bm5hYmxl 22887\nOmZhbHNl 22888\nODk5 22889\nIGJ1aWxkcw== 22890\nIFN0YWdl 22891\nIGR1Yg== 22892\nZW1wbw== 22893\nLnNpdGU= 22894\nNTU4 22895\nOwoKCgo= 22896\nOTk0 22897\nIERlbnZlcg== 22898\nIHJldmVs 22899\nIHRyaWdnZXJlZA== 22900\nIGRpY2U= 22901\nX2ZhaWw= 22902\nIGdj 22903\nODMz 22904\nNTg5 22905\nCVg= 22906\nIFRocm93YWJsZQ== 22907\nNzc1 22908\nLnJvdXRlcg== 22909\nIFJldm9sdXRpb24= 22910\n0YDQsA== 22911\nX05PTg== 22912\nMDU1 22913\nn6U= 22914\nNTc4 22915\nIGVsZGVy 22916\nIGFicm9hZA== 22917\nINC1 22918\nIEFkdWx0 22919\nYmxy 22920\nZ2x5cGhpY29u 22921\nNjEz 22922\nIHByb21vdGluZw== 22923\nIGl6 22924\nIFNvbGlk 22925\nNjQ1 22926\nX2xvYWRlcg== 22927\nZWFybHk= 22928\nLmVuYWJsZWQ= 22929\nLWVkaXQ= 22930\nIFVM 22931\nX3BsYXk= 22932\nIEludGVycnVwdA== 22933\nIGFkdmFudGFnZXM= 22934\ndWNsZQ== 22935\nIG1lY2hhbmljYWw= 22936\nLnRhYmxlTGF5b3V0UGFuZWw= 22937\nIFdvcmtpbmc= 22938\nIGFub255bW91cw== 22939\nUmF0aW5n 22940\naWdpb3Vz 22941\nX3Bob25l 22942\nLmFkZEFjdGlvbkxpc3RlbmVy 22943\nIGZyYW4= 22944\ndW5kZW4= 22945\nICopJg== 22946\nX2Jvb2w= 22947\ndWxhdGl2ZQ== 22948\nIGNvbmU= 22949\nIE11bHQ= 22950\nIG3Dtg== 22951\nIEZvcndhcmQ= 22952\nXSk6Cg== 22953\nIGNvbnZpbmNlZA== 22954\nYWN0ZWQ= 22955\nNjQz 22956\n44GT 22957\nIENvbmZpZ3VyZQ== 22958\nIGNlaWxpbmc= 22959\nRGVy 22960\nIHBhc3NlbmdlcnM= 22961\nR3JvdXBz 22962\nIHNvY2Nlcg== 22963\nL1c= 22964\nYXZpb3Jz 22965\nc3dpdGg= 22966\nIFpvbmU= 22967\nLk9wdGlvbnM= 22968\nIE1vbQ== 22969\naWVkZXI= 22970\nQXJyYXlz 22971\nIHRyZWF0bWVudHM= 22972\nIHByb3RlY3Rpbmc= 22973\nZmFj 22974\nIHBpY2tsZQ== 22975\nQnV0dG9uSXRlbQ== 22976\nNzEz 22977\nIGJsb2NraW5n 22978\nc3RyYXI= 22979\nw7I= 22980\nIEV4cG9ydA== 22981\nIHRocmV3 22982\nb3R0YQ== 22983\nIEJBU0U= 22984\nLndz 22985\nLkxFQURJTkc= 22986\nb3JkZXJCeQ== 22987\nX2RlbGF5 22988\nIFB1 22989\nLmRsbA== 22990\nIENob29zZQ== 22991\nOTky 22992\nUG9saWNl 22993\nIEJFR0lO 22994\nYm94ZXM= 22995\nIGRpYW1vbmQ= 22996\nLGw= 22997\nIAkJCQ== 22998\nIGN1cmlvdXM= 22999\nNjI0 23000\ndHY= 23001\nIGVyb3Rpc2NoZQ== 23002\nYWNrYWdlcw== 23003\nCVNldA== 23004\nVGljaw== 23005\nLmJvcmRlcg== 23006\nc3RhdGljbWV0aG9k 23007\nIGNoZXI= 23008\naW52b2ljZQ== 23009\nIGNydQ== 23010\nIGRlZmVjdA== 23011\nX21ldGFkYXRh 23012\ncmVsYXRpb24= 23013\naWthbg== 23014\nW04= 23015\nKFF0 23016\nKEJhc2U= 23017\n5oGv 23018\nYmVhdA== 23019\nIEVtcHR5 23020\nCW8= 23021\nX3NoaWZ0 23022\nIHJlZ3JldA== 23023\nNzIy 23024\nVGhvc2U= 23025\nQ2VudA== 23026\nIFBvcnR1Zw== 23027\nIElzbGFuZHM= 23028\nIFRJTUU= 23029\nTWFuYWdlbWVudA== 23030\nOTk2 23031\nLXNw 23032\nNTM5 23033\nw6ptZQ== 23034\nIG5vdGlvbg== 23035\ndW5pZnU= 23036\nUEs= 23037\nODI2 23038\n6KGM 23039\nIENVUkxPUFQ= 23040\nXCJc 23041\nVVY= 23042\n57o= 23043\nZHJh 23044\nY291 23045\nPWA= 23046\nIERlc3Ryb3k= 23047\ncnA= 23048\nLmNhbmNlbA== 23049\nR0c= 23050\ncnVudGltZQ== 23051\nIFZ1ZQ== 23052\nIHByb2dyZXNzaXZl 23053\nL3NlcnZpY2Vz 23054\nIHJ1bm5lcg== 23055\nX0ZSQU1F 23056\nLlRvb2xTdHJpcE1lbnVJdGVt 23057\nICcsJw== 23058\nZGVsYXk= 23059\nPXV0Zg== 23060\nIHNjcmVlbmluZw== 23061\nIHB1bGxpbmc= 23062\nb21hcw== 23063\nIGFudGg= 23064\nLW5ldw== 23065\nL2xvY2Fs 23066\nIGlQYWQ= 23067\nIHR3aXR0ZXI= 23068\nIGR5aW5n 23069\nIGhlYXZlbg== 23070\nIFVJbnQ= 23071\nIFNlbmF0b3I= 23072\nIHByZXN1bQ== 23073\nIFdhbGtlcg== 23074\nIG92ZXJjb21l 23075\nZXRlY3Rpb24= 23076\nIGVtYmFycmFzcw== 23077\nQ2hpbmE= 23078\nNjM5 23079\nSW5jbHVkZQ== 23080\nUk9MTA== 23081\nIGRhdGFUeXBl 23082\nRGF2aWQ= 23083\n4Lij 23084\nbG9w 23085\nLW1vbnRo 23086\nIHNjYXI= 23087\nIFNhZmU= 23088\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23089\nIGFjY2Vzc29yaWVz 23090\nIHJhbXA= 23091\nX1VTRQ== 23092\nIGNvbnRyYWQ= 23093\nKSldCg== 23094\nIHByZXN0 23095\nIEhS 23096\nIFJhcA== 23097\nIHVzaXpl 23098\nIGNhcGFiaWxpdHk= 23099\nIGNvcnQ= 23100\nLW5leHQ= 23101\nMDc3 23102\nNjI3 23103\nIGJ1cmRlbg== 23104\nODIy 23105\nX3JlYWRlcg== 23106\nIEBA 23107\ncmVndWxhcg== 23108\nIEth 23109\nMDM2 23110\nTUFO 23111\nIGFzdHI= 23112\nICcnKQo= 23113\nIGZlZA== 23114\nIHBhcnNpbmc= 23115\nIFllYXJz 23116\nIGJyb2tlcg== 23117\nIjp7Ig== 23118\nIGFrdA== 23119\nSW52ZW50b3J5 23120\nYWJlbGVk 23121\nIGFyZ3BhcnNl 23122\nKioqKioqKgo= 23123\ndmVyc2F0aW9u 23124\nIGNvcmQ= 23125\nIFRp 23126\nIGhvcGVmdWxseQ== 23127\nIGFo 23128\ndmVyYg== 23129\nIHN0b2xlbg== 23130\nLkVudHJ5 23131\nIGV4cGVjdGluZw== 23132\nT3JpZW50YXRpb24= 23133\nIHBvd2VyZWQ= 23134\nIHBlcnNpc3Q= 23135\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 23136\nJ10pOw== 23137\nJykpLAo= 23138\nIENhc2g= 23139\nCWl0ZW0= 23140\nODE4 23141\nZ3JhZGVz 23142\ncm9wb2w= 23143\nYmFzaWM= 23144\nICIpOw0K 23145\nIGF3YXJkcw== 23146\nKHJhbmdl 23147\nLWFsbA== 23148\nIElCT3V0bGV0 23149\nIEluZGVlZA== 23150\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 23151\nIHN0b21hY2g= 23152\nIGZsb3dlcg== 23153\nIHNldw== 23154\nX3RpbWVz 23155\nYXZpcw== 23156\nUVN0cmluZw== 23157\nIFJvdXRlcw== 23158\nX3Byb3Q= 23159\nIGNvbWVkeQ== 23160\nIGxvZ291dA== 23161\nIHdvb2Rlbg== 23162\nIHBvc3Rlcg== 23163\ncGllY2U= 23164\nLkpvaW4= 23165\nIFBvaw== 23166\nY2Vsb25h 23167\nbXV0ZXg= 23168\nOw0KDQoNCg== 23169\nIHN0cmlrZXM= 23170\nNzg3 23171\nTG9hZGVk 23172\nKWFyZw== 23173\nZXNh 23174\nVW5pdGVk 23175\nRXA= 23176\nUEVMTA== 23177\nODA3 23178\nIEF0bGFudGlj 23179\ndWxsZXQ= 23180\nNjUy 23181\nYXBwbGU= 23182\nIHNldHRsZWQ= 23183\nYWNvbg== 23184\nIHByaW50ZXI= 23185\nIEdD 23186\n5a6a 23187\nIHJlbmRlcmVk 23188\nLOKAmQ== 23189\naGVpdA== 23190\nc29jaWFs 23191\nLmdl 23192\nNzE0 23193\nIFJpY2s= 23194\nIFV0YWg= 23195\nZ290 23196\nb25pY2Fs 23197\nIFNjcm9sbA== 23198\nIFNjaWVuY2Vz 23199\nIGp1Zw== 23200\nIGFtcGw= 23201\nZW50aQ== 23202\nTEVGVA== 23203\nIHRhYnM= 23204\nIGVub3Jtb3Vz 23205\nLmdldEtleQ== 23206\nbG9jYXRl 23207\nLkVY 23208\nLnN0b3JhZ2U= 23209\nLldl 23210\nIHRvYXN0 23211\nIEFkZGl0aW9uYWxseQ== 23212\nODgy 23213\nIE5PVw== 23214\nNTQ3 23215\nX1VQREFURQ== 23216\nIHRyYW5zZmVycmVk 23217\ndGhh 23218\nLkRpc3BsYXk= 23219\nX3Vp 23220\nSURFTw== 23221\nIG1lYW5pbmdmdWw= 23222\nIE1vc2Nvdw== 23223\nLHRoaXM= 23224\nIFZpY3Rvcmlh 23225\n5pS5 23226\nINCf 23227\nLnN0YWNr 23228\nIEJhcm4= 23229\ncGFyZWRTdGF0ZW1lbnQ= 23230\nOnN0cmluZw== 23231\nIGJpag== 23232\nIFNUQVRF 23233\nIGVtcGxveWVycw== 23234\nCWlucHV0 23235\nKHw= 23236\nIGxleA== 23237\naW52b2tl 23238\nCW51bQ== 23239\nKyss 23240\nYXRpYWw= 23241\nb3JzZXM= 23242\nIGZvcms= 23243\nX3R4dA== 23244\nIEFudG9uaW8= 23245\nICg8 23246\nYXZlcnNl 23247\nIGRldmFzdA== 23248\n44CA 23249\nLkRlYw== 23250\nIEdhcmQ= 23251\nL3Vp 23252\nLiU= 23253\ndHJp 23254\nIHJvbGxlZA== 23255\nVmFsdWVQYWly 23256\naXR0ZW4= 23257\nIFRoZXI= 23258\nIHZyb3U= 23259\nIEZsb3c= 23260\nIEZpbmFuY2U= 23261\nIENvbWI= 23262\nSEM= 23263\nLnNldFZpc2libGU= 23264\naXNs 23265\nIHBr 23266\nNzcz 23267\nIHVwc2V0 23268\nKHJhdw== 23269\nIFZpY2U= 23270\nZWF0dXJlcw== 23271\nIExhbmc= 23272\nMDI5 23273\nTG9va2luZw== 23274\nNzY3 23275\nIEFTVA== 23276\nIHRyaXBz 23277\nIEp1c3Rpbg== 23278\nYnJvd3Nlcg== 23279\nPSInLiQ= 23280\nLnZlcnRpY2Vz 23281\nODIx 23282\nLWNv 23283\nfS97 23284\nID8s 23285\nIERvbWlu 23286\nIEJlbGc= 23287\nIjw= 23288\nIHN1cHBvc2U= 23289\nYWRkeQ== 23290\nIHdhbGtz 23291\nNjg4 23292\nRVJSVQ== 23293\nX2ZpbHRlcnM= 23294\nUHJlZmVycmVk 23295\nc2NlbmU= 23296\n0LXRgQ== 23297\nIEFmZmFpcnM= 23298\nICIjew== 23299\nIG9uU3VibWl0 23300\nIHN0b2Nrcw== 23301\nL3ZpZXc= 23302\nZ3JlZQ== 23303\nLWdldA== 23304\nOTAz 23305\naGl0 23306\nSm8= 23307\nLmdldEM= 23308\nNzI1 23309\nSW5pdGlhbGl6ZWQ= 23310\n0YLQuA== 23311\nY3V0cw== 23312\nKFR5cGU= 23313\nIEFncmVlbWVudA== 23314\nIFZpZXRuYW0= 23315\nIC8qIQ== 23316\nIHBpenph 23317\nLXZpZXc= 23318\nX2Vt 23319\nIGxocw== 23320\nIG11eQ== 23321\nIElkZW50 23322\nIEZyaWVuZHM= 23323\nMDYx 23324\nIGFidW5k 23325\nX0FE 23326\nLnRpbWVzdGFtcA== 23327\nLSc= 23328\nIGR1cGxpY2F0ZQ== 23329\nIGh1bnRpbmc= 23330\nIHJlZ3VsYXRvcnk= 23331\naWFv 23332\nYW1vdXM= 23333\nIEVudGVydGFpbm1lbnQ= 23334\nW0E= 23335\naWF0cmlj 23336\nX0NMSUVOVA== 23337\nIEtpZHM= 23338\nL3BrZw== 23339\nQnJlYWs= 23340\nKSkpOwoK 23341\nIFNoYXBl 23342\nIHJlbGF0aW5n 23343\nSW50ZXJydXB0 23344\nYWJsZU9wYWNpdHk= 23345\nZW1icmU= 23346\nIG15c3Rlcnk= 23347\nIGpvdXJuYWxpc3Rz 23348\ncml0YWJsZQ== 23349\nLkxpbms= 23350\nIHN0b3BwaW5n 23351\nQ1JFVA== 23352\nLkRC 23353\nIHBvcHVsYXJpdHk= 23354\nIGdldw== 23355\nIGltcHI= 23356\nc2V0VmFsdWU= 23357\nRkxBRw== 23358\nCW1heA== 23359\nIGJha2U= 23360\nd3k= 23361\nIEVjb25vbWlj 23362\nIGVuY29udHI= 23363\nIGZuYW1l 23364\nL2Rl 23365\nUmFuaw== 23366\nIGJ1Z3M= 23367\nLnNt 23368\nIG1lZGlhbg== 23369\nRE9XTg== 23370\nIFN1cmU= 23371\nQXRJbmRleA== 23372\nIERpY2s= 23373\nIChfXw== 23374\nLmRlbHRh 23375\nRnI= 23376\nIHN1Z2dlc3Rpbmc= 23377\nIFJlY3ljbGVyVmlldw== 23378\nLGU= 23379\nU1RBUlQ= 23380\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23381\neGZvcmQ= 23382\nIHJlY2VpcHQ= 23383\nQ0xBSU0= 23384\ncmVhZG9ubHk= 23385\nOTY4 23386\nIGVuZ2FnaW5n 23387\nNjE5 23388\nQ2E= 23389\nYXNtYQ== 23390\nIGVuc3VyaW5n 23391\nRW5nbGlzaA== 23392\nIFZhbmNvdXZlcg== 23393\naHl0aA== 23394\nIHB1cmNoYXNpbmc= 23395\nIFBJ 23396\nLndvcmQ= 23397\nKHNw 23398\nLmhvbWU= 23399\nOmRlZg== 23400\nIGdpZw== 23401\nNTc0 23402\nNjcx 23403\nIFZl 23404\nZm9ydW0= 23405\nIE1pdGNo 23406\nQmF5 23407\nX0ZM 23408\nNjUx 23409\nIHNvbGw= 23410\nNTc3 23411\nX2NvbHVtbnM= 23412\nIG1pbm9yaXR5 23413\nYmlyZA== 23414\nIGhhbmRlZA== 23415\nU1NM 23416\nU1RBVA== 23417\nIG5lcnZvdXM= 23418\ng70= 23419\nIGZpbGVQYXRo 23420\nQ1JFQVRF 23421\nQXc= 23422\nIHBlbnM= 23423\nODM1 23424\nc2VlZA== 23425\nIENvbXB1dGU= 23426\nb2xr 23427\nNTk0 23428\nIEFzc2V0 23429\ncmVhY2g= 23430\nJyksDQo= 23431\nbmF2aWdhdGlvbg== 23432\nTEY= 23433\nL3V0aWw= 23434\nIFB1Yg== 23435\nIOKU 23436\nY2lvbg== 23437\nIyMK 23438\nMDcy 23439\nSUlJ 23440\nVGFnTmFtZQ== 23441\nIGFtaWQ= 23442\ncGVybWlzc2lvbg== 23443\naWZpYWJsZQ== 23444\neEZGRkZGRkZG 23445\n0L3QuA== 23446\nLkJ1ZmZlcg== 23447\nX2lycQ== 23448\nZGFyaw== 23449\nIHJldHZhbA== 23450\nLmZpcmU= 23451\ncHJvZHVjdGlvbg== 23452\nLmxpc3Rlbg== 23453\nIFdlYXRoZXI= 23454\nIGJ1eWVycw== 23455\nLm5l 23456\nZXJw 23457\nIFBlbnQ= 23458\nNjk5 23459\nIHdlbGZhcmU= 23460\nIHBhZ2VTaXpl 23461\nIFN0YWRpdW0= 23462\nZXJ0YQ== 23463\nIGxldg== 23464\nYW1wYQ== 23465\nUGFnZXI= 23466\nNjY1 23467\nIGNoYXJnaW5n 23468\nIE5ldGZsaXg= 23469\nfG51bGw= 23470\nX3JhbmRvbQ== 23471\nLnhwYXRo 23472\nIHN0ZXJl 23473\nIElTSVM= 23474\ncG9uc2Vz 23475\nKGxvYw== 23476\nNTY2 23477\nZXlvbmQ= 23478\nIE9mZmljaWFs 23479\nNjU3 23480\nIE1hcnlsYW5k 23481\nRGF0YVR5cGU= 23482\nX3Bhcg== 23483\ne30s 23484\nIEVuam95 23485\nNzI3 23486\nX1NISUZU 23487\nIEF3YXJkcw== 23488\nX0VOVFJZ 23489\nIHNlZW1pbmdseQ== 23490\nZW50aWNhdGU= 23491\nIGhlYXJ0cw== 23492\nNTgz 23493\nXzsKCg== 23494\nIEhJVg== 23495\nIGluZGl2aWQ= 23496\nIEZsYWc= 23497\nX2N0cmw= 23498\nIENhbGxiYWNr 23499\nLHo= 23500\nIEdQVQ== 23501\nCW9iag== 23502\nIFBob2VuaXg= 23503\nIEJVUw== 23504\nOTA3 23505\nIHJ1YmJlcg== 23506\nX0FVVEg= 23507\nIFNvbHV0aW9ucw== 23508\nKGxvY2F0aW9u 23509\nVmFyaWFibGVz 23510\nLnNldEVuYWJsZWQ= 23511\nX2hpZ2g= 23512\nV08= 23513\nR2VzdHVyZQ== 23514\nIHJldHJ5 23515\nIG9iamVjdEZvcktleQ== 23516\nYWxsb3dlZW4= 23517\nIG1vcw== 23518\nIENlbGU= 23519\nIGlra2U= 23520\nKGNlbGw= 23521\nIE1PREU= 23522\ncmVuYQ== 23523\nIGRlc2NyaWJpbmc= 23524\nNjQx 23525\nIHBoaQ== 23526\nIHJk 23527\nIGRlc2VydmU= 23528\nIHdoZWVscw== 23529\n5biC 23530\nIGNyaXRpY3M= 23531\nNzU1 23532\nTmFtZXNwYWNl 23533\nIEZyYQ== 23534\nIAoKCgo= 23535\nIGFsbGE= 23536\nIHJlcXVpcmluZw== 23537\n5pyf 23538\ndXRhdGlvbg== 23539\nIGRlbGF5ZWQ= 23540\nIGFkbWluaXN0cmF0aXZl 23541\nIGJheQ== 23542\nLmhpZGRlbg== 23543\nVGV4 23544\nMDUx 23545\nIGJvdW5kYXJpZXM= 23546\nIF0pOwoK 23547\nIEZvbGxvd2luZw== 23548\nfi8= 23549\nRmk= 23550\nX2NvbnY= 23551\nX1RJVExF 23552\nIGRlc2Rl 23553\nSUNvbGxlY3Rpb25WaWV3 23554\nQWxpYXM= 23555\nIGJpdGU= 23556\ncGF0aWVudA== 23557\nX0NPTU1BTkQ= 23558\nQ29tcGxldGVk 23559\nCWVsaWY= 23560\nKDw= 23561\nQnVzaW5lc3M= 23562\nIFBvb2w= 23563\nIHB1cnN1ZQ== 23564\nIEJhbg== 23565\nX3N0ZXBz 23566\nX0RFQ0w= 23567\ndW1ibGU= 23568\nIGNvbWJv 23569\nIExheWVy 23570\nLnhy 23571\nIGR1cA== 23572\nLS0tLS0tLS0t 23573\nNjI4 23574\nIG1vZGlmaWVy 23575\ncm9i 23576\ncmV6 23577\nNjk2 23578\nIGF0aGxldGVz 23579\nVXNlZA== 23580\nd2Vhcg== 23581\nODE1 23582\nIGxlZ2l0aW1hdGU= 23583\nICIKCg== 23584\nIGh2 23585\nU3Rk 23586\nMDM3 23587\nIEhvbGQ= 23588\nIHN1cnZpdg== 23589\nIEFsbGlhbmNl 23590\nIEVhcmx5 23591\nNzc4 23592\nQmVoYXZpb3I= 23593\nKGZvbnQ= 23594\nL2xpYnM= 23595\nIHJlY3RhbmdsZQ== 23596\nIHNpbmdlcg== 23597\nIGFtcA== 23598\nRXF1YWxUbw== 23599\nICIuIg== 23600\nIGdpcmxmcmllbmQ= 23601\n5bE= 23602\nbGluZWFy 23603\nb2JzZXJ2 23604\nIHBpw7k= 23605\nIGNvbXBsZW1lbnQ= 23606\nV2l0aFZhbHVl 23607\nKHBhc3N3b3Jk 23608\ndGFrZQ== 23609\nQmxhbms= 23610\nIENvbXBhcg== 23611\nJyIs 23612\nX3BvbGljeQ== 23613\nbW9uZ29vc2U= 23614\nX0ZBSUxFRA== 23615\nLnJlcG9ydA== 23616\nUmF0aW8= 23617\nLlBlcmZvcm1MYXlvdXQ= 23618\nNzQ3 23619\ndXNhYmxl 23620\nbWVycw== 23621\nX3JlbmRlcg== 23622\nUEVFRA== 23623\nNzcy 23624\nIGxlc2I= 23625\nCUU= 23626\nX3Rvb2w= 23627\nIGxhZGllcw== 23628\nOTA4 23629\n0L7RgQ== 23630\nKSkpKQo= 23631\nOzs7Ow== 23632\nLmRvdA== 23633\nIG5lc3Q= 23634\ncGVhaw== 23635\ndWtraXQ= 23636\nZWNh 23637\nX1NX 23638\nICYo 23639\nIE9rbGFob21h 23640\nIGJhbmtpbmc= 23641\nNTY5 23642\nIE5pbnRlbmRv 23643\nNzUy 23644\nIHJlcHJvZHVjZQ== 23645\nX2VsZW1lbnRz 23646\nX21hYw== 23647\ncHJveHk= 23648\nIHJlbWFya2FibGU= 23649\nfS8kew== 23650\nIG91dHM= 23651\nLmhhc05leHQ= 23652\nTU9ERQ== 23653\nNjU4 23654\nIGFuaW1l 23655\nLmNvbm4= 23656\nVW5pcXVl 23657\nRG9t 23658\nIGltcG9ydGFudGx5 23659\naXR0eQ== 23660\nIGp1aWNl 23661\nVHc= 23662\nIFBhcnRuZXJz 23663\nIGF0dGFja2luZw== 23664\nIHBvcnRhYmxl 23665\nYW1pZW50bw== 23666\nLlBpY3R1cmVCb3g= 23667\nLmdlbg== 23668\nIG9wdGltYWw= 23669\nNTgy 23670\nIHJlY3Jl 23671\nIGpvdXJuYWxpc3Q= 23672\nIEV4dHJhY3Q= 23673\nIE1vcmVvdmVy 23674\nIG1hcmdpblRvcA== 23675\nLkFw 23676\nIGZpcmluZw== 23677\nTmFO 23678\nCXRlbXBsYXRl 23679\n0LDQtA== 23680\nLkVu 23681\nIGRlZmVuY2U= 23682\nIFRlbA== 23683\naWxlbg== 23684\namFu 23685\nPWRhdGE= 23686\nIFVybA== 23687\nIFJldXRlcnM= 23688\nKHRvdGFs 23689\nIEZpZnRo 23690\nIGVzc2F5cw== 23691\nIGludGVycHJldGF0aW9u 23692\nIGNoYXJpdHk= 23693\nIFJ1bGVz 23694\nIHN1YnNlY3Rpb24= 23695\nc3R5bGVk 23696\nYXplcg== 23697\nbGFncw== 23698\nTElTVA== 23699\nIHVwbG9hZGVk 23700\nIHRyYXNo 23701\nIHJlZ2lzdHI= 23702\nIHNlbGxlcg== 23703\nPic7DQo= 23704\nIHN0YXJ0VGltZQ== 23705\n55k= 23706\nc3k= 23707\nKEh0dHBTZXJ2bGV0UmVxdWVzdA== 23708\nIHRyYXA= 23709\nR0M= 23710\nIGVtYmVkZGVk 23711\nIHN1cnJvdW5kZWQ= 23712\nODE2 23713\naW1pdHM= 23714\nVFg= 23715\neWxpbmRlcg== 23716\nNjg1 23717\nIEZhbA== 23718\nIHNlbnRlbmNlcw== 23719\nIEph 23720\nSUZJQ0FUSU9O 23721\nd2VhcG9u 23722\nb3ZhdGlvbg== 23723\nIGNvYXQ= 23724\nIGludGVycG9s 23725\nIGxpcHM= 23726\nIEt5 23727\nIHZlY3RvcnM= 23728\nX2Ft 23729\nIGludGFrZQ== 23730\nLndvcmxk 23731\nIGluYm94 23732\nIE1BQw== 23733\nX2Fi 23734\nKG5hbWVvZg== 23735\nNjMz 23736\nIGVudGVydA== 23737\nIGdhdGhlcmluZw== 23738\nIFNJTQ== 23739\nKysu 23740\nbnlh 23741\nJ319 23742\nIFVQREFURQ== 23743\nIHBhYw== 23744\nKGh0bWw= 23745\nIFNhbnQ= 23746\naWF0aW5n 23747\nIElkZWFz 23748\nIHNwcmF5 23749\nIEhhcnQ= 23750\nIHZlcmlmaWNhdGlvbg== 23751\nYWRlc2g= 23752\nL21vZHVsZXM= 23753\nIE1pbmQ= 23754\nIFNpemVkQm94 23755\nIHNoZWx0ZXI= 23756\nIGhlcm9lcw== 23757\nYXR0eQ== 23758\nIGNlcnRpZmllZA== 23759\nc2o= 23760\nIMOqdHJl 23761\nxYJv 23762\nIHB1Ymxpc2hpbmc= 23763\nIE1hbGF5cw== 23764\nLmdldFVzZXI= 23765\nIFByb3ZpZGVy 23766\nIExpbmtlZExpc3Q= 23767\nIEJvcg== 23768\nUk9VTkQ= 23769\nZGlk 23770\ndGFpbg== 23771\ncGlyZQ== 23772\nIEplbm4= 23773\ndGVs 23774\nYW5kZQ== 23775\nNzU3 23776\nX2Zyb250 23777\nIE1jRw== 23778\nVGVzdE1ldGhvZA== 23779\n4Lit 23780\nIG9jY2FzaW9uYWxseQ== 23781\nIFdhbGVz 23782\nIGV4ZXJjaXNlcw== 23783\nINCS 23784\nMDQ1 23785\nLXBsdXM= 23786\nIHZhbGlkYXRvcg== 23787\nIHByYXllcg== 23788\nTEFURUQ= 23789\nX2F1dGhvcg== 23790\nIGxhYm91cg== 23791\nKysK 23792\nLWVxdWl2 23793\nIEdQTA== 23794\nIGZhY2Vib29r 23795\nc2ltcGxl 23796\nZ2x5 23797\nUHJvY2Vzc29y 23798\naXB5 23799\nNzQ0 23800\nICo+ 23801\nNjQ4 23802\nIGNsZWFyZWQ= 23803\nIFB1c2g= 23804\nODU4 23805\nIHBlbmlz 23806\nU3RydWN0dXJl 23807\nbGlq 23808\nIE1vcmdhbg== 23809\nIGhhbmRmdWw= 23810\nIi4K 23811\nOTg0 23812\nfFw= 23813\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 23814\nIEFxdQ== 23815\nNTg0 23816\nX0lD 23817\nLmxvYWRz 23818\nIG1ldGVy 23819\nIE1hcmluZQ== 23820\nOjp7 23821\nIFRT 23822\nNzc2 23823\nIEFycmF5cw== 23824\nLlRpdGxl 23825\nR1JBTQ== 23826\ndGVybWlu 23827\nIGNvaW5j 23828\nRWxzZQ== 23829\nX3N0YXRlcw== 23830\nLXJ1bg== 23831\nbWVtYmVycw== 23832\nNzgy 23833\nYXN0cm8= 23834\nMDY2 23835\nIG9uUHJlc3M= 23836\nIGJlaW5ncw== 23837\nIGFiYW5kb25lZA== 23838\nIHRheHA= 23839\nb3duZXJz 23840\nLm1vZGU= 23841\nIGRpYWdub3Npcw== 23842\nIF8K 23843\nIEtuaWdodA== 23844\nCUE= 23845\nIG9ic2VydmU= 23846\nKSwn 23847\nODIz 23848\nISIpCg== 23849\nIFBhcmE= 23850\nIHZhcmlhdGlvbg== 23851\nKEZhbHNl 23852\nIEFudGk= 23853\nIGdyaQ== 23854\nIGhvbWVsZXNz 23855\nP3Y= 23856\nIGJleg== 23857\nLlNlcnZlcg== 23858\ncmVsZWFzZQ== 23859\nIFBhdHJp 23860\nIGNoYXJz 23861\nIHJhbmtpbmc= 23862\nYWN0aXZhdGlvbg== 23863\nNTgx 23864\nIHdpZGVz 23865\ncXI= 23866\nLlNxbA== 23867\nYWN1bGFy 23868\nIEJvdA== 23869\nX3N5bmM= 23870\nIGhhcHBpbmVzcw== 23871\nIHZvbHVudGVlcnM= 23872\nODc3 23873\nIHNpdHM= 23874\nLzw= 23875\nW2U= 23876\nKGZpbGVOYW1l 23877\nIGNhcGFj 23878\nODMy 23879\nIE1hcmlh 23880\nZmF0aGVy 23881\nIGdyYW0= 23882\nKmk= 23883\nIGNhc28= 23884\nX2RyYXc= 23885\nIFJhdw== 23886\nIEl0ZXJhdG9y 23887\nNjY0 23888\nIFBhZGRpbmc= 23889\nOTI0 23890\nUEQ= 23891\nQk9Y 23892\nIFNQRUNJQUw= 23893\nIGZlY2hh 23894\nIHZpZGU= 23895\nIExlYWRlcg== 23896\n5Lul 23897\nJCgiLg== 23898\nIGRpYW1ldGVy 23899\nIG1pbGQ= 23900\nNzQ1 23901\nIHJvY2tz 23902\nYXBwaW5ncw== 23903\nMDQ4 23904\nZGlyZWN0b3J5 23905\nNTU3 23906\nLmZsdXNo 23907\nIEplc3M= 23908\nVU5JVA== 23909\nIFBlYXI= 23910\nIG1hbmRhdG9yeQ== 23911\nU3Vy 23912\ncXQ= 23913\nIHN0cmVhbXM= 23914\nIGNvb3BlcmF0aW9u 23915\nIFNhYw== 23916\nIGNoZWFwZXI= 23917\nCWNo 23918\nYW5pbWF0aW9u 23919\nZmFyZQ== 23920\nKGhlaWdodA== 23921\nKFRydWU= 23922\nTlk= 23923\nIHdyZXN0 23924\nIHBvbGxz 23925\nIGVuY291bnRlcmVk 23926\nIE1hcmtldGFibGU= 23927\nX1BBU1NXT1JE 23928\nNzE2 23929\nX1NFTEVDVA== 23930\nIEFyYWJpYQ== 23931\nX2Nsb2Nr 23932\nIHZveQ== 23933\nINC40Lc= 23934\nIHN0aXI= 23935\naXNpYmxl 23936\nLWVmZmVjdA== 23937\nLmNyZWF0ZWQ= 23938\nIHRveXM= 23939\nIFRyYWRhYmxl 23940\nIHJ1c3Q= 23941\nIHN0cmNweQ== 23942\nX3RpbWVzdGFtcA== 23943\nIHRhbGVudGVk 23944\nLG51bGw= 23945\nIEpvYnM= 23946\nIFBvcnRsYW5k 23947\nIHdlYWtuZXNz 23948\nVGhyb3c= 23949\nIEFuZ2Vs 23950\n5L+u 23951\nNzU0 23952\nIHVuY2VydA== 23953\n77yJCg== 23954\nIOydtA== 23955\nV2hpY2g= 23956\nIFstXTo= 23957\nU29tZXRoaW5n 23958\nIGNvbnZpY3RlZA== 23959\na2xl 23960\nZWRpdW0= 23961\nIGJyYW5jaGVz 23962\nIGJhc2Vz 23963\n564= 23964\nIGNvbXBsZXhpdHk= 23965\nIEZpZw== 23966\nLnJlc2hhcGU= 23967\nJGRi 23968\nNzM2 23969\nX0NPTlNU 23970\nIFRlcw== 23971\nLnJ1bnRpbWU= 23972\nIGRlbnk= 23973\nIEJTRA== 23974\nIGty 23975\naGF0dA== 23976\nIFN0YXRpYw== 23977\nIHVuaXZlcnNpdGllcw== 23978\nUmVwbGFjZQ== 23979\nIGRyb3Zl 23980\nIGFkb2xlcw== 23981\nX3BsdWdpbg== 23982\nIExHQlQ= 23983\nIHRleA== 23984\nZHVjdGlvbg== 23985\nNzUx 23986\nNzk5 23987\nRURJ 23988\nIFRlZA== 23989\nX1VSSQ== 23990\nIHJlY2VwdGlvbg== 23991\nYXJ0ZW4= 23992\nLlNpbmdsZQ== 23993\ncmljZQ== 23994\nc2Npb3Vz 23995\nODQz 23996\nX2Jn 23997\nIHdhZ2Vz 23998\nIFNlcnZsZXQ= 23999\nVUlMYXlvdXQ= 24000\nIGZvcm1hdHRlZA== 24001\nLk1vZA== 24002\nPGNsYXNz 24003\naXNlbg== 24004\nIHJlcHJlc2VudGF0aXZlcw== 24005\nIl09 24006\nIHBvcnRhbA== 24007\nIEh1bnRlcg== 24008\nIGhpcmluZw== 24009\nX18pCg== 24010\ncmljdWx1bQ== 24011\ndW8= 24012\nbGllc3Q= 24013\nIHRlYXJz 24014\nTGF0 24015\nIGxpdGVyYWw= 24016\nLkluc2VydA== 24017\nIGN1cnM= 24018\nIENvbXB1dA== 24019\nIHRlcnJvcmlzbQ== 24020\nIHN3ZWVw 24021\nIFtdDQo= 24022\nIHBhc3Nlbmdlcg== 24023\nIGVhc3Rlcm4= 24024\nIHR3ZWV0cw== 24025\nIG9wZXJhdGVk 24026\nd25k 24027\nIFN5bg== 24028\nLnRvb2xz 24029\nIFdN 24030\ndWxhdGVz 24031\nIGJhY3Rlcmlh 24032\nKGJ5dGVz 24033\nLnNldERhdGE= 24034\nIHZpc2liaWxpdHk= 24035\nLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 24036\nZWxt 24037\nIGdlbmVyYXRpbmc= 24038\nIG12 24039\nIGto 24040\namVu 24041\nL3NlYXJjaA== 24042\nIGFjY291bnRpbmc= 24043\nc2VnbWVudA== 24044\nYWN0aWM= 24045\nLmlw 24046\nIGRlcGxveW1lbnQ= 24047\nIGZvb3Rlcg== 24048\nPicsCg== 24049\nIGV4cGFuZGluZw== 24050\nIEhhbWlsdG9u 24051\nIENvbnRyaWI= 24052\nLlRhYmxlcw== 24053\nNzI4 24054\nQWN0aXY= 24055\nSEg= 24056\nb2NvbW1lcmNl 24057\nXzs= 24058\nIGFtb25nc3Q= 24059\nb3dpbmc= 24060\nODU5 24061\nIENvbGQ= 24062\nQVBI 24063\nIHBzeWNob2xvZ2ljYWw= 24064\nX3RlbnNvcg== 24065\nIHBhY2thZ2luZw== 24066\nIFN3ZWRlbg== 24067\nIHBhcmU= 24068\nIGFnZ3JlZ2F0ZQ== 24069\nIG1vZGVyYXRl 24070\nODYy 24071\nX2hhbmQ= 24072\nIGRlc2lnbmF0ZWQ= 24073\nIGRydW0= 24074\nIGdldFVzZXI= 24075\nIENyZWVr 24076\nX3Njb3Bl 24077\nIFRyYW5zZmVy 24078\nIE1hcmc= 24079\nIGZpZ2h0ZXJz 24080\nV25k 24081\nIFNlbA== 24082\nIExhdW5jaA== 24083\nIGVtZXJnaW5n 24084\naWZyYW1l 24085\nIEFkZGl0aW9uYWw= 24086\nIGZlYXJz 24087\nIHNhdGVsbGl0ZQ== 24088\nXzo= 24089\nIGRpc3Bvc2luZw== 24090\nR2V0VmFsdWU= 24091\nSHR0cFBvc3Q= 24092\nQVRJVkU= 24093\ndWxhcnk= 24094\nVmlld3M= 24095\nIGF0dGVuZGluZw== 24096\nIFRlbm5lc3NlZQ== 24097\nIE1pc3Npb24= 24098\nIG1lZGljYXRpb24= 24099\nIFd5 24100\nIEFubmE= 24101\n2Lk= 24102\nIFZlcnRleA== 24103\nLnR5cGVz 24104\nT3JnYW4= 24105\nLkRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 24106\nIFJT 24107\nIHRlbXBv 24108\nKEFwcA== 24109\nODky 24110\nVmVyc2lvblVJRA== 24111\nLnBvaW50 24112\nIER1dGNo 24113\nSG91cnM= 24114\nTFU= 24115\nIHF1b3RlZA== 24116\nLmJ1aWxkZXI= 24117\nIFBlcmZlY3Q= 24118\nIEFsd2F5cw== 24119\nX3R3bw== 24120\nIGV4Y2x1c2l2ZWx5 24121\nIENyYQ== 24122\naWZpY2Fy 24123\nIEFXUw== 24124\naW5naGFt 24125\nY29tcGxleA== 24126\na2VybmVs 24127\nIGdyYXZpdHk= 24128\nIHdp 24129\nMDUy 24130\nIG92ZXJ2aWV3 24131\nNjYx 24132\nIFdhbnQ= 24133\nIFdQ 24134\nKHNo 24135\nLnJvdGF0aW9u 24136\nU3RhdGVz 24137\nIFRlZW4= 24138\nX2NvbXBvbmVudHM= 24139\n7IiY 24140\nUmVjZWl2ZWQ= 24141\nIGx5cmljcw== 24142\ncml0ZXM= 24143\nCQkJCQkg 24144\nLUFtZXJpY2Fu 24145\nW251bQ== 24146\nL3B5dGhvbg== 24147\nIFVBUlQ= 24148\nIGFwcGxl 24149\nIEpvbmF0aGFu 24150\nIG1vbWVudHVt 24151\n4Lix 24152\ngrk= 24153\nIG1pY2g= 24154\nYW5kcmE= 24155\nIGJpb2xvZ2ljYWw= 24156\nIE1lbnM= 24157\nICUl 24158\nZWxzZWE= 24159\nIE1leGljYW4= 24160\nLnJhbmRpbnQ= 24161\nIHRhbGU= 24162\nIFZhbGlkYXRl 24163\nIGRlZmVhdGVk 24164\nLmh0bQ== 24165\nIGNvcHBlcg== 24166\nPS8= 24167\nY29zeXN0ZW0= 24168\nIHJpcA== 24169\nZGVjaW1hbA== 24170\nLlZJU0lCTEU= 24171\nIFRh 24172\nCQkJCQkJCQkJCQkJCQk= 24173\nIGRvd25sb2FkZWQ= 24174\nZW52aXJvbm1lbnQ= 24175\nIG5vbWluZQ== 24176\nYnVpbGRpbmc= 24177\nIFNwb3Q= 24178\naXBoZXJhbA== 24179\nIGFsdG8= 24180\ncXVldA== 24181\nIEZU 24182\nL2dldA== 24183\nL21hc3Rlcg== 24184\nV0lO 24185\n5YWD 24186\nNjc2 24187\nV2VzdA== 24188\nYXJnYw== 24189\nIHByb2R1Y2Vycw== 24190\nIE11Y2g= 24191\nX3N0b3JhZ2U= 24192\nY3JlZGl0 24193\nQ09OVA== 24194\nIHZldA== 24195\nIHZvaWNlcw== 24196\nKCcnLA== 24197\nIGluc3RydW1lbnRz 24198\nNjYy 24199\nIE1TRw== 24200\nZXNzZQ== 24201\ncmVwb3NpdG9yeQ== 24202\nb21pY3M= 24203\nIGRlYWxlcg== 24204\nU3RpbGw= 24205\nIGJhbm5lcg== 24206\nYXNjaWk= 24207\nIHJlbWFya3M= 24208\nW2pz 24209\nIHNob3J0ZXI= 24210\nZ3VscA== 24211\nIG15c3Rlcg== 24212\nIGt1bg== 24213\nIEJpcmQ= 24214\nIHRpZW5l 24215\nNzg4 24216\nbnV0 24217\nIFVt 24218\nIHdpc2U= 24219\nWWVhaA== 24220\nSU5FU1M= 24221\nMDQ2 24222\nX2JlZ2lu 24223\nLWhlYWRpbmc= 24224\nQ291cnNl 24225\nIA0KDQo= 24226\nb21iaWU= 24227\nZ3JhZGVk 24228\nIEdQUw== 24229\nIMW8ZQ== 24230\nRml0 24231\nY2FwdGlvbg== 24232\nw7Zu 24233\nL2ltYWdl 24234\nbGlh 24235\nKG1vZA== 24236\nIGxlYWs= 24237\nZW56YQ== 24238\nNjI5 24239\nL0g= 24240\nIEhhcHB5 24241\nOTkz 24242\nRGlzdA== 24243\nbng= 24244\nIEdvdmVybm9y 24245\nKGxhc3Q= 24246\ndGVhY2hlcg== 24247\nIFNlbnQ= 24248\nc3VwcG9ydA== 24249\nODM4 24250\namVjdG9yeQ== 24251\nINmF 24252\nUmVnaXN0cmF0aW9u 24253\nMDYz 24254\nIEdyYXk= 24255\nLGZhbHNl 24256\nIGFkanVzdGVk 24257\nKHNldHRpbmdz 24258\nPFI= 24259\nIE1hZ2U= 24260\nIHBsYWludA== 24261\nXykK 24262\nCWl0 24263\nb21ldHJpYw== 24264\nLmJvb3RzdHJhcA== 24265\nIGNhcnJpZXM= 24266\nSXA= 24267\nICEk 24268\nIHN3aW1taW5n 24269\nIE1hcmlv 24270\nIFF1ZXN0aW9ucw== 24271\nUEFDRQ== 24272\n5pa5 24273\nZW9y 24274\nfX0i 24275\nIG92ZW4= 24276\nIEtvbg== 24277\nIHdpc2RvbQ== 24278\nIGFjcXVpc2l0aW9u 24279\nZXNzbWVudA== 24280\nYWdpbmU= 24281\nIGV4cHJlc3Npb25z 24282\nU2VxdWVudGlhbEdyb3Vw 24283\nRnJvbnQ= 24284\ndWxwdA== 24285\nYXdr 24286\nJ10pCgo= 24287\nODEz 24288\nNzMy 24289\nX0FS 24290\nIGFuYWxvZw== 24291\ndWxpbg== 24292\nX1BSSU5U 24293\nIExH 24294\nIGJsb2I= 24295\nIEZ1cnRoZXJtb3Jl 24296\nX2NvbXBvbmVudA== 24297\nIENvbGU= 24298\nTEFO 24299\nU0NSSVBUSU9O 24300\nIGxhcA== 24301\naWNlbnNpbmc= 24302\nX1RJTUVPVVQ= 24303\nIEZybw== 24304\nIGxpYWJpbGl0eQ== 24305\nIGNvbXBvc2Vk 24306\nNjM0 24307\nLmNyZWF0ZVNlcXVlbnRpYWxHcm91cA== 24308\nX3BlcnNvbg== 24309\nIGJlYW0= 24310\nCSAgICAgICAg 24311\nIE5vdEZvdW5k 24312\nNjg0 24313\nLicK 24314\nw61z 24315\nLlRleHRWaWV3 24316\nUERG 24317\nIGthcg== 24318\nX18oJw== 24319\nICI6Ig== 24320\nX21lc3NhZ2Vz 24321\nIGhhcnZlc3Q= 24322\nLmhpc3Rvcnk= 24323\nPicK 24324\nLWZvbGQ= 24325\n5oo= 24326\nIEJldHRlcg== 24327\nICJcPA== 24328\nc3BhY2luZw== 24329\nIGZ1cm5pc2hlZA== 24330\nOTEz 24331\nb3Nlcg== 24332\nXX0K 24333\nICQi 24334\ncHVsbA== 24335\nLlBvc3Q= 24336\nOTE5 24337\nKGlw 24338\nl48= 24339\nLmZyb250 24340\nbnRl 24341\nIEZN 24342\nZ3VpZA== 24343\nODQ0 24344\nIG5lZ290aWF0aW9ucw== 24345\nYWdvbmFs 24346\nOTM0 24347\nIHRyZW1lbmQ= 24348\ndW5nZW9u 24349\nQWR2 24350\nY2Fyb3VzZWw= 24351\nw59l 24352\nX0RFU0M= 24353\nIGhhbW1lcg== 24354\n4bqt 24355\nICAgICAgICAKCg== 24356\nLWNvcmU= 24357\nLXNlcnZpY2U= 24358\nIGNvcm5lcnM= 24359\nIFNG 24360\ncHJlZA== 24361\nPkE= 24362\nIEpMYWJlbA== 24363\nIHJvbWFudGlj 24364\nIHRlc3RpbW9ueQ== 24365\nb3Nj 24366\nIEdlbmVyYXRpb24= 24367\nYXN1cmVz 24368\nX2ludGVybmFs 24369\nIHByaW50cw== 24370\nIF0pCg== 24371\nIENsZXZlbGFuZA== 24372\ncmVwbw== 24373\nRGlzYw== 24374\nNjc3 24375\nNzYy 24376\nICI+Cg== 24377\n77+977+977+977+9 24378\nIG5lYXJlc3Q= 24379\nNTkx 24380\nX3Ri 24381\nKHJlcXVpcmU= 24382\nRU9G 24383\nLWNoaWxk 24384\nIGJ1ZGQ= 24385\nLlh0cmFFZGl0b3Jz 24386\nYWx0aWVz 24387\nNzIz 24388\nXCI6XCI= 24389\nV29yZHM= 24390\nOTE3 24391\nIGxvY2FsbHk= 24392\nIHB1cmNoYXNlcw== 24393\nNjk1 24394\nRHJhd2Vy 24395\nZXh0cmFjdA== 24396\nIGV4ZWN1dA== 24397\nfScu 24398\ndXNlcmRhdGE= 24399\nIGZvY3VzZXM= 24400\nLW1pbnV0ZQ== 24401\nNzY0 24402\nIFB1Ymxpc2g= 24403\nb2dv 24404\nIG1vdW50YWlucw== 24405\nQm90 24406\nfT57 24407\nIHRlbnNpb24= 24408\ncm9k 24409\nbWVzaA== 24410\nIHRyYW5zZm9ybWVk 24411\nLFI= 24412\nKCl9Cg== 24413\nLmxvbmc= 24414\nIGdvcmdlb3Vz 24415\nIFNjaGVkdWxl 24416\nIG9sZGVzdA== 24417\nIHN1YnByb2Nlc3M= 24418\nKElO 24419\neWVjdA== 24420\nIENvb3Blcg== 24421\nYXJuZXNz 24422\nIE1vbml0b3I= 24423\nLnBhcnQ= 24424\nOTcy 24425\nIE5CQw== 24426\nNjY4 24427\nIGNvdHRvbg== 24428\nIGhvbA== 24429\nNzI2 24430\nIHJnYmE= 24431\nIEJpbw== 24432\nQ29udGludWU= 24433\nUG9k 24434\nIHBhcnRpY2lwYXRpbmc= 24435\nY2x1c2lvbnM= 24436\nKEJ5VmFs 24437\nNzM0 24438\nw6w= 24439\nIEhPVw== 24440\nX3NldG9wdA== 24441\nIGFjY29tcGFueWluZw== 24442\nMDkx 24443\nYXRvbg== 24444\nIC9c 24445\nIEF1dGhlbnRpY2F0aW9u 24446\nacOpbg== 24447\nIEJhcmFjaw== 24448\nLyou 24449\nIGVhZ2Vy 24450\nIENhbmNlbA== 24451\nPGxlbW1h 24452\nZXBo 24453\nCXdpbmRvdw== 24454\nIGluY2lkZW50cw== 24455\nNzU2 24456\nKSwo 24457\nLkRlcw== 24458\naWJl 24459\nIEZ1bmN0aW9ucw== 24460\nIGhvc3BpdGFscw== 24461\nMDM4 24462\nIG94eWdlbg== 24463\ncm9vdFNjb3Bl 24464\nIGRyZXc= 24465\nCXJlcXVlc3Q= 24466\nbm90aWNl 24467\nYWt1 24468\nYW1lbnRz 24469\nZmFy 24470\nOTcz 24471\nNzc0 24472\nIHByZWNpc2U= 24473\nX3dyYXBwZXI= 24474\nIGxpc3RlbmVycw== 24475\nQVo= 24476\nLmJvdW5kcw== 24477\nIEF2ZXJhZ2U= 24478\nZmllbGRzZXQ= 24479\nX2F4aXM= 24480\nIGV4YW1pbmF0aW9u 24481\nJy4K 24482\nbW9ucw== 24483\nKyspew0K 24484\nIEZvcm1z 24485\n7ZWc 24486\nOTE2 24487\nQ3BwTWV0aG9k 24488\nX3RyYWNl 24489\nIGVuZ2luZWVy 24490\nNjYz 24491\nIEZsYXQ= 24492\nIHJldmlzaW9u 24493\nIGhlYXRpbmc= 24494\nNjM4 24495\nL3Byb2ZpbGU= 24496\nLnJ1 24497\ncHJpb3JpdHk= 24498\nIGluZmVy 24499\nX1NUUkVBTQ== 24500\nICopKA== 24501\nPiQ= 24502\nT0xFQU4= 24503\nT0tJRQ== 24504\nSUJJTElUWQ== 24505\nVUFHRQ== 24506\nIFN1cnZleQ== 24507\nMDcx 24508\nIHJlc2lnbg== 24509\nd2luZw== 24510\nIHNlY3JldHM= 24511\nIGNoaXBz 24512\nSlNPTk9iamVjdA== 24513\nRGVza3RvcA== 24514\nNTk2 24515\nX1NZTUJPTA== 24516\nKHJlc291cmNl 24517\nIDwvPgo= 24518\nIG5ld2VzdA== 24519\ndWxp 24520\nIGRlc2VydA== 24521\nIGRpcA== 24522\nIFBvdw== 24523\nIGVxdWF0aW9u 24524\nIHBvc3NpYmlsaXRpZXM= 24525\nIEZlZA== 24526\nb3NwaA== 24527\nIFsl 24528\nIGJ1YmJsZQ== 24529\nZXRoZXJsYW5kcw== 24530\nNzkz 24531\nIGNlbWVudA== 24532\nLmF1dG8= 24533\nX0FO 24534\n4oCZLg== 24535\nc2VsZWN0aW9u 24536\nIEJvbmQ= 24537\nOTg4 24538\nRGVu 24539\nLU8= 24540\nLmdldFR5cGU= 24541\nODk2 24542\nLldpbmRvdw== 24543\ncHJlcw== 24544\nIHN3aW5nZXI= 24545\nIn0pCg== 24546\nIHBpcA== 24547\nIG1pY2U= 24548\nIGNvbXBvdW5k 24549\nLXBsdWdpbg== 24550\naWtv 24551\nIGNlbnR1cmllcw== 24552\naWN1bGFy 24553\nLWlubGluZQ== 24554\nCWtleQ== 24555\nPlw8 24556\nRU5TSU9O 24557\nIFsNCg== 24558\nIHByZWNpc2VseQ== 24559\nIMOpdMOp 24560\nIFBhc3Q= 24561\nIENhbWJyaWRnZQ== 24562\nLWZ1bGw= 24563\nIGFuYWx5emU= 24564\nIFN0ZXZlbg== 24565\nIG5lbQ== 24566\nZHVl 24567\nb3Jlbg== 24568\nIG11c2NsZXM= 24569\naWppbmc= 24570\nODUy 24571\nLy0= 24572\nIEtlbm5lZHk= 24573\nNTk3 24574\nUk0= 24575\nb3NzaWJsZQ== 24576\nIGFjdHJlc3M= 24577\nIGRvbG9y 24578\nOTE0 24579\n5b2V 24580\nTmVlZA== 24581\nLnRvZ2dsZQ== 24582\nIFJhY2U= 24583\nd2Vycw== 24584\nLm1hdGVyaWFs 24585\nIER1ZQ== 24586\nIFBlbA== 24587\nI3ByaW50 24588\nIGluZGVwZW5kZW5jZQ== 24589\nZXh1cw== 24590\nU2hhZG93 24591\nIGVuY29kZXI= 24592\nKGxldmVs 24593\nIFN3aWZ0 24594\nLmRvYw== 24595\nX3NlbGVjdGlvbg== 24596\nOTUy 24597\nIHNlcmlhbFZlcnNpb25VSUQ= 24598\nOTQ1 24599\nTGFiZWxz 24600\nIHBlcmZvcm1hbmNlcw== 24601\nLlRhZw== 24602\nIE5ITA== 24603\naXplbg== 24604\nL1VJS2l0 24605\nOTkx 24606\nX0NPTlRST0w= 24607\nIGVhcm5pbmdz 24608\nOTc1 24609\nIEFsdA== 24610\nX0hBTkRMRQ== 24611\nQ3R4 24612\nIHBlcnN1 24613\nIHRyYW4= 24614\n56g= 24615\nX0NIQU5ORUw= 24616\nIHNhdGlzZmFjdGlvbg== 24617\nIEdQ 24618\nNzY5 24619\naW94 24620\nbWl0dA== 24621\nbGFuZG8= 24622\nIHBpZw== 24623\naW5hbHM= 24624\nw6puY2lh 24625\nNzMx 24626\nU3VyZmFjZQ== 24627\nIFVVSUQ= 24628\nIGJlbmVmaWNpYWw= 24629\nIHNlcXVlbmNlcw== 24630\nCW1lbXNldA== 24631\nIG1hZ2ljYWw= 24632\nwqs= 24633\nIHdvcm4= 24634\nQVND 24635\ncG9wdXA= 24636\nQ09NUA== 24637\nX2JlZm9yZQ== 24638\nZW5lc3M= 24639\nVWk= 24640\nTGVz 24641\nLnJlcXVpcmU= 24642\nLlNlcmlhbGl6YWJsZQ== 24643\nYWRkR2Fw 24644\nIGF1dGhvcml6YXRpb24= 24645\nMDg1 24646\nLnB5cGxvdA== 24647\ndXJyYXk= 24648\nbGF0aXR1ZGU= 24649\nODQ1 24650\nZnJhbWVz 24651\nYWpz 24652\nIGNvbXBhc3M= 24653\nIG9ic2VydmF0aW9ucw== 24654\nX3N1cA== 24655\nLmVudmlyb24= 24656\nIHRyaXBsZQ== 24657\nIFJ1Ynk= 24658\nIGRyYWlu 24659\nX0ZJTFRFUg== 24660\nU2Fu 24661\nVU1Q 24662\nTnVsbEV4Y2VwdGlvbg== 24663\nIEdhYg== 24664\nb3dl 24665\nIFR1cmtpc2g= 24666\nX3NlcXVlbmNl 24667\nIEdyYW50 24668\ndWVsYQ== 24669\nIHdv 24670\nIGN1YmU= 24671\naXE= 24672\nIGRpc29yZGVycw== 24673\nIGV4dHJhb3JkaW5hcnk= 24674\nIGN0cmw= 24675\nIFNlcQ== 24676\nZW50cg== 24677\nODY1 24678\nIHNhbmN0aW9ucw== 24679\nOTQ5 24680\ndXRzY2g= 24681\nUmVwb3J0cw== 24682\nIGluaGVyaXQ= 24683\nUGVyaW9k 24684\nIHBob3RvZ3JhcGh5 24685\nIEZyYW1ld29yaw== 24686\nIHNwZWNpYWxpc3Q= 24687\nID8KCg== 24688\nX3NlbGVjdGVk 24689\nLlBsYXllcg== 24690\nIGFsbG9jYXRpb24= 24691\nKGFjY291bnQ= 24692\nIHN0cnVjdHVyYWw= 24693\ndmFibGU= 24694\nLW9mZnNldA== 24695\nLkFwcENvbXBhdEFjdGl2aXR5 24696\n0LDQvA== 24697\nLkFkZFdpdGhWYWx1ZQ== 24698\nIGljb25z 24699\nIHNodXRkb3du 24700\nX2xvdw== 24701\nIENvbXBhcmU= 24702\nIENl 24703\nPWhlYWQ= 24704\nbGFt 24705\nLnByZWRpY3Q= 24706\nX0RFQw== 24707\nIFNsZWVw 24708\nIEdyYXRpcw== 24709\nIHN1Z2dlc3Rpb24= 24710\nIERFTA== 24711\nY2FmZg== 24712\nYXZpcnVz 24713\nTm90aGluZw== 24714\nnos= 24715\nIHdpZGVzcHJlYWQ= 24716\nIG1lY2hhbmlzbXM= 24717\nIHRleHRBbGlnbg== 24718\nb2NjdXA= 24719\nIFJhaWw= 24720\nOk5T 24721\nIGZpYmVy 24722\nIG1r 24723\nIHZpbnRhZ2U= 24724\nLWxvbmc= 24725\nLnJlZHVjZQ== 24726\nLkVudGl0aWVz 24727\nKHJlY29yZA== 24728\nIHBsZWFzYW50 24729\nRlJJTkc= 24730\nLkNlbGxz 24731\nT1RU 24732\nCWVsc2VpZg== 24733\nNjQ5 24734\nNzI0 24735\nX2NvbmZpcm0= 24736\nIFZpZXdHcm91cA== 24737\nc3lt 24738\nIHByYXk= 24739\nIHN1c3BlY3RlZA== 24740\nQ29udGFpbnM= 24741\nOTgz 24742\nIGJvcmRlcnM= 24743\nIGNvbXBvbmVudERpZA== 24744\nQVNTRVJU 24745\nIGluZmluaXRl 24746\nLW9yZGVy 24747\nIGhlbGxv 24748\nIEdyYWRl 24749\nLmN1cnJlbnRUaW1lTWlsbGlz 24750\nYXBvbGlz 24751\nemg= 24752\nCU9iamVjdA== 24753\nOlxc 24754\nSE8= 24755\ndmFsdWF0aW9u 24756\nIHZvY2Fi 24757\nNzE5 24758\nIGNvdXBvbg== 24759\nYXRhYmFzZXM= 24760\nLkdldFR5cGU= 24761\nTGVhcm4= 24762\nNzky 24763\nXT0i 24764\nIEdhcnk= 24765\nb3RpdmU= 24766\nIGFzaA== 24767\nIGJpYg== 24768\nWFhYWA== 24769\nIGJhbGFuY2Vk 24770\nVkFMVUU= 24771\nIE5hdA== 24772\nX0Fk 24773\nPEU= 24774\n5Yy6 24775\nIE1ldGhvZEluZm8= 24776\nODk3 24777\nTElC 24778\nIGNvbnNpZGVyYWJsZQ== 24779\nIEluZHVzdHJ5 24780\ndGVzdHM= 24781\nLnNldFRpdGxl 24782\nIEJsdWV0b290aA== 24783\nIG1hcHBlZA== 24784\nIEJydWNl 24785\nIE1haW5XaW5kb3c= 24786\nCXN0YXR1cw== 24787\nIHJheg== 24788\nIE1hbmQ= 24789\nIGNsYXNzaWZpY2F0aW9u 24790\nUGVybWlzc2lvbnM= 24791\nOTY5 24792\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 24793\nIGNvbnRhaW5lcnM= 24794\nOnNldA== 24795\nX3htbA== 24796\nIHdoaWxzdA== 24797\nVGhyb3VnaA== 24798\nIHZhbGlnbg== 24799\nIHdvcmxkcw== 24800\nQ09SRA== 24801\nRURJQQ== 24802\n0YDQvtCy 24803\nIHNwYXJl 24804\nIEhhZA== 24805\nIERFRg== 24806\nKHB0cg== 24807\nIHdhcm1pbmc= 24808\nODk4 24809\n4KS+ 24810\nIGNvbnNlbnN1cw== 24811\nYWduZQ== 24812\nQ1RM 24813\nIOyV 24814\nLk1haW4= 24815\nd2ViRWxlbWVudA== 24816\nIHBpc3Q= 24817\nRmxhc2g= 24818\nQXBwZW5k 24819\nLnR3aW1n 24820\nVGFw 24821\nIHZlZ2V0YWJsZXM= 24822\nYWxn 24823\nMDU4 24824\nLnNhbXBsZQ== 24825\nIGNvYWNoaW5n 24826\nKGluZA== 24827\nQ2VsbFZhbHVl 24828\nQ2hlY2tCb3g= 24829\nIEhlbGw= 24830\nUk9PVA== 24831\nNzk2 24832\nIHN0YWRpdW0= 24833\nIGludmVzdGlnYXRpbmc= 24834\nKSU= 24835\nc3RlZA== 24836\nOTY1 24837\nIFdyaXRpbmc= 24838\nIOqy 24839\nIHVubw== 24840\nIHt7LS0= 24841\nIGNvb3Jkcw== 24842\nIHVuc2Vy 24843\nb3JnYW5pemF0aW9u 24844\nIENyaW1l 24845\nIERlbW9jcmF0 24846\nNTc5 24847\nIHZpbg== 24848\nL2ZpbGU= 24849\nMDc4 24850\nLWFwaQ== 24851\nIEF5 24852\nIGZ1bmRlZA== 24853\nIEJyZXhpdA== 24854\nIEdo 24855\nZW50aW5h 24856\nY2FzZXM= 24857\nIGRhc2g= 24858\nICEhfQo= 24859\nSEk= 24860\nT2ZmaWNl 24861\nIGNhcHRhaW4= 24862\nIHdvcnNoaXA= 24863\nXEM= 24864\nNzMz 24865\nODUx 24866\nIGdsb2Jl 24867\nX2JvYXJk 24868\nIGJhYmllcw== 24869\nODc2 24870\nIGNvbnNlY3V0aXZl 24871\nIGVuaGFuY2Vk 24872\nZXJldW0= 24873\nIEFkdmlz 24874\nIGdyYWlu 24875\nNzcx 24876\nIGNyYXc= 24877\nYW5jZWxsYXRpb25Ub2tlbg== 24878\nLmFscGhh 24879\nX1dJVEg= 24880\nIE90dA== 24881\nIENvb2w= 24882\nLmJhdGNo 24883\nIHZlcmlmaWVk 24884\nKGNhbGxiYWNr 24885\nIHJlZ2FyZHM= 24886\nNjgz 24887\nIEludFB0cg== 24888\nb3VjaGVy 24889\nIGtpbg== 24890\nIHRvdWNoZWQ= 24891\naXTDoA== 24892\nYXRob24= 24893\nIGFkamFjZW50 24894\nIGFjY29tcGFuaWVk 24895\nTEVBUg== 24896\nIGltcGxpZXM= 24897\nIGhpbGw= 24898\nIEJhbHRpbW9yZQ== 24899\nPSIt 24900\nRmluYWxseQ== 24901\nODgz 24902\nU2Ft 24903\naWNvcHQ= 24904\nIHNvZA== 24905\nIG1hag== 24906\nIFNoaXBwaW5n 24907\nIGdldEFsbA== 24908\nIGNvYWNoZXM= 24909\nIGRvbmF0aW9ucw== 24910\naWxvdA== 24911\nIFRhcg== 24912\nY2Vycg== 24913\nIGJhZGdl 24914\nIG1hcmtlcnM= 24915\nIFJhbmQ= 24916\nYWlzZWQ= 24917\naXNzYW5jZQ== 24918\nIGV4cGxvcmluZw== 24919\nODI3 24920\ndWNlZA== 24921\nIEluZG9uZXNpYQ== 24922\nIGJlbmVhdGg= 24923\nIG1hZ25ldGlj 24924\nIG11c2V1bQ== 24925\nbWF0Y2hDb25kaXRpb24= 24926\nIGRpc3J1cHQ= 24927\nIHJlbWluZA== 24928\nIFRN 24929\nIC8+PA== 24930\nIGZvb2w= 24931\nIGVzaw== 24932\nLk51bGw= 24933\nIERpZXM= 24934\nX09VVFBVVA== 24935\nX1RZUEVE 24936\nIHBhaW50ZWQ= 24937\nNjcz 24938\nNzM1 24939\nIHNvcGhpc3RpYw== 24940\nIEJlYXI= 24941\nKm4= 24942\nX1BBQ0s= 24943\nIGRlbGl2ZXJpbmc= 24944\nIENPVU5U 24945\n5Y2V 24946\nIGplZw== 24947\nLWNhcg== 24948\nZm5hbWU= 24949\nIHJhbmdpbmc= 24950\nODQ4 24951\nIE5lZw== 24952\nLyoqKioqKi8= 24953\nIENIQVI= 24954\nIHVsdHJh 24955\nR3JhZA== 24956\nPXQ= 24957\nIGp1ZGdlcw== 24958\nIERpc2U= 24959\nYW5uZXJz 24960\nOTg1 24961\nODkx 24962\nODYx 24963\nIHNjYWw= 24964\nX2NhbA== 24965\nIENPTk5FQ1RJT04= 24966\nX2VtYmVk 24967\nKGZu 24968\nIENyYWZ0 24969\nMDQ3 24970\nIFBhcw== 24971\nIiktPg== 24972\nLmNvbnZlcnQ= 24973\nLnJlc291cmNl 24974\nIFNUQVRVUw== 24975\nw7RuZw== 24976\nIFRpdA== 24977\nIGNsYXNzcm9vbQ== 24978\nIEFyY2hpdGVjdA== 24979\nIEtpbmdz 24980\nIHN0ZWFkeQ== 24981\nLyohCg== 24982\nIEdlbmU= 24983\nKSI7Cg== 24984\naWNpYQ== 24985\nc3Rhbg== 24986\nIENvbnN0cnVjdGlvbg== 24987\ndW1wZXI= 24988\nOTUx 24989\nd2M= 24990\nIENCUw== 24991\naW5naW5n 24992\nLXBhcnR5 24993\nKGRyaXZlcg== 24994\nTUFSSw== 24995\nMDgy 24996\nIG5lc3RlZA== 24997\nZXdhcmQ= 24998\nIGRlcGVuZGVuY3k= 24999\nIG1hbGVz 25000\nOTI4 25001\nIE9ORQ== 25002\nIFByb2R1Y3Rpb24= 25003\nXVsk 25004\n44O844M= 25005\nX0xPQUQ= 25006\nIEJvbA== 25007\nZWxyeQ== 25008\nODMx 25009\noOmZpA== 25010\nIFJlcXVpcmU= 25011\nIHBsYWNpbmc= 25012\neHh4 25013\nQ0FMRQ== 25014\nIHRodW1i 25015\nODI0 25016\nQ2hvb3Nl 25017\nIHByb3RvdHlwZQ== 25018\nVk9JRA== 25019\nIGxlc2JpYW4= 25020\nNzQx 25021\nIHRyYWl0cw== 25022\nU2hhcnA= 25023\nIGNvbnN1bWU= 25024\nVHJ1dGg= 25025\nIGFjdGlvblBlcmZvcm1lZA== 25026\nIEVudmlyb25tZW50YWw= 25027\nIERlYW4= 25028\nIGVzdGFkbw== 25029\nc2FtZQ== 25030\nIG51bWVyaWM= 25031\nIHRyYW5zaXQ= 25032\nLkVtYWls 25033\nLXNpZGU= 25034\nX1JVTg== 25035\nIFZpbGxhZ2U= 25036\nX09QRU4= 25037\n6KY= 25038\nLnJlbQ== 25039\nLXdhcm5pbmc= 25040\nYW55YQ== 25041\nUHJvcGVydHlDaGFuZ2Vk 25042\nICghXw== 25043\nKGNoZWNr 25044\naWxpYQ== 25045\nIFNvZnQ= 25046\nc3RlcHM= 25047\nIE1hZHJpZA== 25048\nTWVtb3J5V2FybmluZw== 25049\nIGhhbmRsZXJz 25050\nIGV4cGVyaWVuY2luZw== 25051\nIGluc3BlY3Q= 25052\nYnV0dG9ucw== 25053\nUmVjZWl2ZU1lbW9yeVdhcm5pbmc= 25054\nY2hlbXk= 25055\nTGlua3M= 25056\nIHVybGxpYg== 25057\nLlN5c3RlbUNvbG9ycw== 25058\nIEVpZ2Vu 25059\nIHB1bmlzaG1lbnQ= 25060\nOlVJQ29udHJvbA== 25061\nYmFyYQ== 25062\nLXNldA== 25063\nIH0NCg0KDQo= 25064\nIHRvbGVyYW5jZQ== 25065\nIGludGVyZmFjZXM= 25066\nLnJlZGlyZWN0 25067\naWdoYm9ycw== 25068\nY3NyZg== 25069\nX2JhY2tncm91bmQ= 25070\nLlV0aWxz 25071\nX0hU 25072\nNjky 25073\nIEludGVyZXN0 25074\naW1vcw== 25075\nIGdyYW50cw== 25076\nMDgz 25077\nIGV4YW1pbmVk 25078\n0JQ= 25079\nIGNm 25080\nZm9yZ2U= 25081\nYmFja3M= 25082\nIE9iamVjdHM= 25083\nX3NlbnQ= 25084\nLmVudHJ5 25085\nIFRIRU4= 25086\nZWxsaWRv 25087\nY2lh 25088\nLHJlcw== 25089\nNjU5 25090\nNjgx 25091\nL3N0ZGM= 25092\nLm5k 25093\nKEludA== 25094\nIEF1dGhvcnM= 25095\nIEFwcENvbXBhdEFjdGl2aXR5 25096\nJ3s= 25097\nIG1lZGk= 25098\nTXVzaWM= 25099\naWdt 25100\nY2VpcHQ= 25101\nIGF1c3M= 25102\nIHRhcmdldGluZw== 25103\nIEtleXM= 25104\naG4= 25105\nOl0K 25106\nIG1pbmVyYWw= 25107\nw64= 25108\nLmNh 25109\nNzYx 25110\nb21lZA== 25111\nIHNoZWV0cw== 25112\nIGNhbWI= 25113\nIGRlYWRseQ== 25114\nLmluamVjdA== 25115\nKHVuaXQ= 25116\nIFNlbGVjdGlvbg== 25117\nLmdtcw== 25118\nKGNvbm5lY3Rpb24= 25119\nICQoIg== 25120\nw6ltb24= 25121\nIEN1cnJlbnRseQ== 25122\ncHRl 25123\nX3BhdGhz 25124\nODQ3 25125\nbGVhZg== 25126\nIGltcGxpY2F0aW9ucw== 25127\ncG9zYWw= 25128\n5L2N 25129\nWy8= 25130\nYW5jaWE= 25131\n6Zs= 25132\nbXVs 25133\nY2ll 25134\nIGdlaWxl 25135\nNjc5 25136\naW1hbHM= 25137\nVUlWaWV3 25138\nIHN1cnJl 25139\nc2VyaWFsaXpl 25140\nSVNP 25141\nIGFyYml0cmFyeQ== 25142\nIHNvY2thZGRy 25143\nLmZu 25144\nIE1lcmM= 25145\nIGNhc3Rpbmc= 25146\nS2V5RG93bg== 25147\nIG5ld1ZhbHVl 25148\nb3BlbnM= 25149\nNzE3 25150\nVG9kbw== 25151\nIGZsZXhpYmlsaXR5 25152\nCQkJCSAg 25153\nVmVsb2NpdHk= 25154\nw7pu 25155\ncm93aW5n 25156\nIGNvbXB1dGVk 25157\nYCkK 25158\nc3RhdGVtZW50 25159\nIHJp 25160\nX2NhcnQ= 25161\nTG93 25162\ndHJhbnNmZXI= 25163\nLm5hdg== 25164\nIGdyYXZl 25165\nIERvb3I= 25166\nCWFsZXJ0 25167\nNjkx 25168\nNjk4 25169\nLnN1YnNjcmliZQ== 25170\nLXByb2ZpbGU= 25171\nCWJhc2U= 25172\nIOKIkg== 25173\nX18KCg== 25174\nIGVuZ2luZWVycw== 25175\nIGV4cGxvc2lvbg== 25176\nIGRhcmk= 25177\nNjgy 25178\nCUxvZw== 25179\nb25hbA== 25180\nIGlzb2xhdGVk 25181\ne2k= 25182\nIE1zZw== 25183\nRnV0dXJl 25184\nIHJhY2lzdA== 25185\nLXdyYXA= 25186\nIFZlcnM= 25187\nYm9yZw== 25188\nSVNJT04= 25189\nINGA0LDQ 25190\nIFlhbg== 25191\nODM2 25192\naW5pdFdpdGg= 25193\nIG5vbWlu 25194\nKGVtcHR5 25195\nw61u 25196\n44Kk 25197\nCXdpZHRo 25198\nIGNoYW1iZXI= 25199\nL2FqYXg= 25200\nRU1Q 25201\nMDkz 25202\nIG5lY2Vz 25203\naXZvcw== 25204\nbG9naWM= 25205\nKikm 25206\nY3JpcHRz 25207\nOTc2 25208\nUm93QXQ= 25209\nMDUz 25210\naWJsaW5ncw== 25211\nIGVhcnM= 25212\nIGNvbXB1dGluZw== 25213\nIG1ha2Vy 25214\nIE5laXRoZXI= 25215\nYnJlYWRjcnVtYg== 25216\nIHNlcmlhbGl6ZQ== 25217\nIFdpdGhpbg== 25218\nIGRlbGw= 25219\nX1RSQUNF 25220\nMDky 25221\nPWE= 25222\nIHdpc2hlcw== 25223\nLWluY2g= 25224\nIERvcg== 25225\nIGlubm9jZW50 25226\nIERvbA== 25227\nIGludGVucw== 25228\nZm9yY2Vk 25229\nMDU0 25230\nIEJJVA== 25231\nIHBob3RvZ3JhcGhz 25232\nIGNhc2E= 25233\nIExlbg== 25234\nXEZyYW1ld29yaw== 25235\nLlNpbXBsZQ== 25236\nIGRlYXI= 25237\nODk1 25238\nKS8o 25239\naXBwaQ== 25240\nIG93bnM= 25241\nUGxheWVycw== 25242\nIHByb3Bvc2Fscw== 25243\nLnBp 25244\ndXNhbGVt 25245\nRGFtYWdl 25246\nIGNhbG9yaWVz 25247\nIENyZWF0aXZl 25248\nIFsk 25249\nIC8vDQo= 25250\nNzg2 25251\nQW5kVmlldw== 25252\nw6htZQ== 25253\nLmN1c3RvbQ== 25254\nX2ZhY3Rvcnk= 25255\nY29tbWFuZHM= 25256\nX2xvb2s= 25257\nIHN0cmNtcA== 25258\nWU4= 25259\nYWlyZWQ= 25260\nIGF1ZGl0 25261\n0L7RgdGC 25262\nIFJldmVyc2U= 25263\ncm9wcmlhdGU= 25264\nZXRpY3M= 25265\nPHZlY3Rvcg== 25266\nLnNlbGVuaXVt 25267\nLm9y 25268\nIHByZWRpY2F0ZQ== 25269\nIGZpbmlzaGluZw== 25270\nIGtsZQ== 25271\nIFJlcG9z 25272\nIEtoYW4= 25273\nIE1ha2luZw== 25274\nIEZT 25275\nIHB1dGU= 25276\nCXN0YXRl 25277\nX1NVUFBPUlQ= 25278\nJy0= 25279\nb3JpZW50YXRpb24= 25280\nIGV4aXN0ZWQ= 25281\nYXR1cmE= 25282\nIGV4cGVjdHM= 25283\nIFNoYWRvdw== 25284\nOTY2 25285\nIG9yZ2FuaXo= 25286\n5Z6L 25287\nIHN1c3BlbnNpb24= 25288\nNjY5 25289\nIHVpdA== 25290\nIHNpbXVsdGFuZW91c2x5 25291\nIEFmZmVybw== 25292\nOiIpOwo= 25293\nIHJvY2tldA== 25294\nY2Fz 25295\nZXRlcm1pbmU= 25296\nYWNldXQ= 25297\nNjkz 25298\neGw= 25299\nIEFNRA== 25300\nKGdyYXBo 25301\nNzU4 25302\nODcy 25303\nYXNzb2Np 25304\nX0NS 25305\nLmFyYW5nZQ== 25306\nMDQ5 25307\nKGpMYWJlbA== 25308\nIGJlZWY= 25309\nUXVpY2s= 25310\nLmNhcmQ= 25311\nXSk6 25312\nLWdy 25313\nNzk3 25314\nLkdPTkU= 25315\nX0NMT1NF 25316\nIE5ldg== 25317\nw61hcw== 25318\nIHN0ZXBwZWQ= 25319\nIEZyZWVkb20= 25320\nIFdS 25321\nTlNBcnJheQ== 25322\nX3J4 25323\nX2RpYWxvZw== 25324\nIGhvdGVscw== 25325\nOTUz 25326\nIChcPA== 25327\nIERpYW1vbmQ= 25328\nIGFzc3VtcHRpb24= 25329\ndW1p 25330\nKGl0ZW1z 25331\nDQ0NCg== 25332\n5rOV 25333\nIG5lbA== 25334\nQm9va3M= 25335\n5Y6/ 25336\ndXNi 25337\nIEZJTg== 25338\nODgx 25339\n5qw= 25340\nIGNvcnBvcmF0aW9ucw== 25341\nVVNB 25342\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 25343\nOTI5 25344\nLnByb3BlcnR5 25345\nZXdpc2U= 25346\nX3Bsb3Q= 25347\nIj4nOwo= 25348\nIHBlcHBlcg== 25349\nOTg5 25350\nIHNoZWQ= 25351\nIE1lZGl1bQ== 25352\nIENvb2tpZQ== 25353\nODg5 25354\nIG92ZXJzZWFz 25355\nZWRvcg== 25356\nYXN1cmVtZW50 25357\nNzY2 25358\n5a2Y 25359\nICcuJw== 25360\nIHBocA== 25361\nIFBST0M= 25362\nIGV4Y2VwdGlvbmFs 25363\nKHRo 25364\nIEpldA== 25365\nIG9jY3VwaWVk 25366\nLnNldEltYWdl 25367\nIFJlbGF0ZWQ= 25368\ndWNrZXI= 25369\nTWVtYmVycw== 25370\nUFJJTlQ= 25371\nIEdsbw== 25372\nX1ZJRVc= 25373\nfSIsCg== 25374\nIGFkb3B0aW9u 25375\nW10pCg== 25376\nODQy 25377\nIE1pc3NvdXJp 25378\nIExpbmNvbG4= 25379\nZXJhbGQ= 25380\nUG9wdXA= 25381\nIGZhdGU= 25382\nLWJvb3RzdHJhcA== 25383\nZmVjdGlvbnM= 25384\nIFBvbGw= 25385\nX0FSR1M= 25386\naW5hbmNl 25387\nNjk3 25388\nLWhvbWU= 25389\nLiks 25390\nX2RvbmU= 25391\nNjk0 25392\nOgoKCg== 25393\nIGRpc2N1c3Npbmc= 25394\nIFNRTEV4Y2VwdGlvbg== 25395\nIGVsZWN0cm8= 25396\nCXJlcQ== 25397\nIHp3 25398\nODg2 25399\nIGx1aQ== 25400\nOTMy 25401\nIG92ZXJuaWdodA== 25402\nJHVzZXI= 25403\nIFdBWQ== 25404\nIGFsbGVyZw== 25405\nIGRpc2FwcG9pbnRlZA== 25406\nIHJhZGlhdGlvbg== 25407\nIGltcHJlc3NlZA== 25408\naWZpY2F0ZXM= 25409\nIHRvYg== 25410\nQ0xBU1M= 25411\nIGN1ZGE= 25412\nX2RldA== 25413\nLXBvc3Q= 25414\ndWx1 25415\nVHJhbnNsYXRpb24= 25416\nLWhhbmQ= 25417\nLnllYXI= 25418\nIE1vbmdv 25419\nIHVuY2xlYXI= 25420\nLmVuZ2luZQ== 25421\nV0VCUEFDSw== 25422\ncmljZXM= 25423\nX0FDQ0VTUw== 25424\nIGhvbGlkYXlz 25425\ncGVyY2VudA== 25426\nLklkZW50aXR5 25427\nIEdvdg== 25428\nIHBhc3Npb25hdGU= 25429\nISEu 25430\nIEdyZWVjZQ== 25431\ncGx1c3BsdXM= 25432\nJykpOw== 25433\nR1A= 25434\nIGV4Y2l0 25435\nLnRhYlBhZ2U= 25436\nX2NvbmQ= 25437\nIHNwb25zb3I= 25438\nTU9EVUxF 25439\nX3Byb2M= 25440\nICQK 25441\nIHJhdGlvbmFs 25442\nLlRvb2w= 25443\nIGlocg== 25444\nY2Nh 25445\n5ZOB 25446\nIEVzdGF0ZQ== 25447\nSUJVVEU= 25448\nQWN0aW9uUGVyZm9ybWVk 25449\nIFNvbGFy 25450\npoI= 25451\nIGVxdWl0eQ== 25452\ndGlk 25453\nOTM4 25454\nIHJlY2lw 25455\nLnNpbXBsZQ== 25456\nbWs= 25457\nNjg5 25458\nIEx1a2U= 25459\nIEd1YXJkaWFu 25460\nIGVuY3J5cHRlZA== 25461\nIGRvbWluYW50 25462\nLnBsYWNl 25463\nIE5W 25464\nODM5 25465\nIHRvbmd1ZQ== 25466\nKEdldA== 25467\nIHN0YWlubGVzcw== 25468\nLlBsYXk= 25469\nIGVi 25470\nYWNp 25471\nLmJ1ZmZlcg== 25472\ncmVhZGNydW1icw== 25473\nIHZhY2NpbmU= 25474\ncHJvbQ== 25475\nOTc5 25476\nIHVzZXJJbmZv 25477\nIHNsdWc= 25478\nU2VyaWFsaXplZE5hbWU= 25479\nLXdpZGU= 25480\nIHJlYWN0aW9ucw== 25481\nIFlhbmc= 25482\nIEFkZHM= 25483\nKHVzZXJJZA== 25484\nIHBsYXRlcw== 25485\nIE1FTQ== 25486\nIGJhaWw= 25487\nSW5zaWRl 25488\nZXRlZA== 25489\nIGVsc2lm 25490\nIHNha2U= 25491\nIGN5Y2xlcw== 25492\nIOyX 25493\nCUk= 25494\nLWNvbGxhcHNl 25495\nODQx 25496\nIEdNVA== 25497\nODE0 25498\nRGVjbGFyYXRpb24= 25499\nIGdyb3M= 25500\nIHJlYWNoZXM= 25501\nIGN1c3RvZHk= 25502\nVW50aWw= 25503\nNzUz 25504\nODU2 25505\ndHU= 25506\nIENoZW4= 25507\nIG54 25508\nKGFkZHI= 25509\nIE9mZmVy 25510\nIGNvbGxlZw== 25511\nYXNzYWRvcg== 25512\nNjc0 25513\nIG1hcHBlcg== 25514\nODU0 25515\nIFNJR05BTA== 25516\nIEJsb29t 25517\nIEhvbGw= 25518\nIEltcGVy 25519\nLWRlcw== 25520\nX3NpdGU= 25521\nUHJvYw== 25522\nRXF1 25523\nIGF0b21pYw== 25524\nIFdvbWFu 25525\nc2VudA== 25526\nNzM4 25527\nODE3 25528\nc2Nhcg== 25529\nIGludGVsbGlnZW50 25530\nIEdldHRpbmc= 25531\nIFJlZ2lzdHJhdGlvbg== 25532\nIFBoaWxs 25533\nIGtpbGxlcg== 25534\ndW5pY29kZQ== 25535\nCgkJCg== 25536\nIEphY29i 25537\nIENvbnN0 25538\nIGxvY2F0ZQ== 25539\nIGNhdXM= 25540\nNzQ5 25541\nIFNjaG9sYXI= 25542\nIGNvbnN0aXR1dGlvbmFs 25543\nIGluZmxhdGlvbg== 25544\nIEdvdA== 25545\nPWFycmF5 25546\nZW5kdW0= 25547\nIHRyYW5zbGF0ZWQ= 25548\nIGRpdm9yY2U= 25549\nRW50cmllcw== 25550\nIHNvcg== 25551\nIFF1b3Rl 25552\naXJsaW5lcw== 25553\nVUs= 25554\nIGV4Y2Vs 25555\nKG9wdA== 25556\nIEFEVg== 25557\nLDos 25558\nIGNvbnRhY3RlZA== 25559\nNzQy 25560\nIERB 25561\nIHJpbmdz 25562\nIEluZHVzdHJpYWw= 25563\nLmdldENvbnRleHQ= 25564\nIGZvcmdvdHRlbg== 25565\nIFRhbg== 25566\nIHBhbnRz 25567\nIG92 25568\nIGRlY29kZXI= 25569\nIFBhcnRpYWw= 25570\nIHZj 25571\nIGJhdHRsZXM= 25572\nQXJpYWw= 25573\nRlJJTkdFTUVOVA== 25574\naXJhdGVz 25575\nLHc= 25576\nYWludGVuYW5jZQ== 25577\nIE9k 25578\nIFRlY2hub2xvZ2llcw== 25579\n5YmN 25580\nIENhcnRlcg== 25581\nLmZpbmRBbGw= 25582\nTm9tZQ== 25583\nQmVu 25584\nIFVzYWdl 25585\nIFBpY3R1cmU= 25586\nIGJhZGx5 25587\nX3BhbmVs 25588\nIHBhdGVudA== 25589\nIFByb3RvY29s 25590\nbG90dGU= 25591\nCXBsYXllcg== 25592\namVjdGlvbnM= 25593\nNzQ2 25594\nIGRvdQ== 25595\nX3JlbGVhc2U= 25596\ndXJuaXR1cmU= 25597\nX3RheA== 25598\nIEZpZWxkcw== 25599\nLmRhdGFzZXQ= 25600\nX21hc3Rlcg== 25601\nQ0xVREU= 25602\nIFBoYXJt 25603\nYnN0 25604\nIG9wZXJhdGlvbmFs 25605\nLmNlbGw= 25606\nIGlkZW50aWZ5aW5n 25607\nIGp3dA== 25608\ndHVwbGU= 25609\nIFRD 25610\nIENybw== 25611\nOTM2 25612\naXhtYXA= 25613\nLWNvbXBvbmVudHM= 25614\nZ2VuZXJhbA== 25615\nIG96 25616\nX0Rl 25617\nX2RvdWJsZQ== 25618\nIFRvbw== 25619\nMDg4 25620\nLlZpZXdHcm91cA== 25621\nODc5 25622\nZ2F0ZQ== 25623\nZGluZ3M= 25624\ncGhvdG9z 25625\nIGdyYW5kZQ== 25626\nb2xsZWN0 25627\nX2xpbg== 25628\nIGF3ZnVs 25629\nZmlsdGVycw== 25630\nIGFsdGVybmF0ZQ== 25631\nZXNw 25632\nIGNvbXByZXNz 25633\nZW8= 25634\nIFNjYWxl 25635\nIGluZGlyZWN0 25636\nIGludm9pY2U= 25637\nCgoKCgoKCgoKCgoKCgoKCg== 25638\nU3RhcnRpbmc= 25639\nIFBsYXllcnM= 25640\naWVsZQ== 25641\nLnRoZW4= 25642\nOTgx 25643\nT3Jk 25644\nIFR1cGxl 25645\nIGJvdXQ= 25646\nIFN0YXRpc3RpY3M= 25647\nUHJldmlldw== 25648\nIHB1enpsZQ== 25649\nIFdpZHRo 25650\nU1RBVEU= 25651\nIG92ZXJsYXk= 25652\nCW9u 25653\nIGluZnI= 25654\nIHNtYWxsZXN0 25655\nbG9ja2Vk 25656\n0YLQvg== 25657\nc3Ns 25658\nNzc5 25659\nIGRlZW1lZA== 25660\nIHNjbw== 25661\ncmVjaw== 25662\nIGpCdXR0b24= 25663\nIG1pc3Npb25z 25664\nODcx 25665\n56ew 25666\nLlNlbGVjdGVkSW5kZXg= 25667\nVEFCTEU= 25668\nU2VwdA== 25669\nIGFja25vd2xlZGdl 25670\nIHN0cnRvdGltZQ== 25671\nIFRlbGw= 25672\nIERhaw== 25673\nIGFsdW1pbnVt 25674\nIGZlbmNl 25675\nIFN0YXJz 25676\nQ09ORklH 25677\nIHJldHJvZml0 25678\nIGVtcGhhc2lz 25679\nL2hlYWRlcg== 25680\nIFNvbWV0aGluZw== 25681\naW5pc2hlZA== 25682\nPSciLiQ= 25683\nIFZhbGlkYXRvcnM= 25684\nIHBvbGFy 25685\nc2VjdGlvbnM= 25686\nOTQ0 25687\nLmFzcHg= 25688\nIGFzcGly 25689\nLk1vY2s= 25690\nQ29kZUdlbg== 25691\nIHBldXQ= 25692\nOTcx 25693\nIGFjY2VwdGluZw== 25694\nIGJhY2tpbmc= 25695\nUGljdHVyZQ== 25696\nL2Fw 25697\n0LXQsw== 25698\nX1NFQw== 25699\nLXVzZQ== 25700\nYW5ub3RhdGlvbg== 25701\nIGNvZ25pdGl2ZQ== 25702\nIGdyaXA= 25703\naG91cg== 25704\nIExlZ2Fs 25705\nIGVwaWM= 25706\nLnRvb2xTdHJpcA== 25707\nLm5vdGlmeQ== 25708\nLkxhc3Q= 25709\nT1JJWg== 25710\nTWlkZGxld2FyZQ== 25711\nY3JpcHRpb25z 25712\nbGFzaA== 25713\nX0ZPVU5E 25714\nIExpdmVycG9vbA== 25715\nIHt9Iiw= 25716\nOTMx 25717\nSW5zdGFsbA== 25718\nIG5pdA== 25719\nIGZpZ3VyZWQ= 25720\nW2xlbg== 25721\nLldpbg== 25722\nLnBsYXRmb3Jt 25723\nODUz 25724\nIGdhbWJsaW5n 25725\nKGR0 25726\nYXZlcnk= 25727\nCWluY2x1ZGU= 25728\nV2hldGhlcg== 25729\nUm91dGluZw== 25730\nIHRoZXJhcA== 25731\nUmVtb3Rl 25732\nIExvc3M= 25733\neWxs 25734\nIGFwcHJvYWNoZWQ= 25735\nIFZlaGljbGU= 25736\nIEFscGhh 25737\nIHZvY8Oq 25738\nYW5zd2Vycw== 25739\nTlNEaWN0aW9uYXJ5 25740\nOTU0 25741\nY29uc2lkZXI= 25742\ndW51c2Vk 25743\nIEZhbg== 25744\nb3JhYmxl 25745\nZnJl 25746\nODcz 25747\nIERJU0NMQUlN 25748\nIEFjdG9y 25749\nLl0= 25750\ndG9IYXZl 25751\nLnVzZXJJZA== 25752\nIHNwZWVkcw== 25753\nZXdheQ== 25754\nIHJlY3Vycw== 25755\nINCz 25756\nX3ByaXY= 25757\nIeKAnQoK 25758\nQ2hvaWNl 25759\nIHNldHRsZQ== 25760\nIHBsYW5lcw== 25761\nJ30s 25762\nVG9t 25763\nSVRFUg== 25764\nISIK 25765\n5bs= 25766\nYWNoZWxvcg== 25767\nIHNlcGFyYXRpb24= 25768\nIGRhbA== 25769\nYWRq 25770\nIHJlZ2lzdGVycw== 25771\ncml6 25772\nIE5vdGljZQ== 25773\nIGx1 25774\nIGNvdXJhZ2U= 25775\nIGF4ZXM= 25776\nY2VsbGVudA== 25777\nLmFzeW5j 25778\nMDcz 25779\nIGNvbXBhdGliaWxpdHk= 25780\n56s= 25781\nICEKCg== 25782\nCXRpdGxl 25783\nWUxF 25784\nCW1lc3NhZ2U= 25785\nVVVJRA== 25786\nT0xERVI= 25787\nIEhI 25788\nIFN0eWxlU2hlZXQ= 25789\nIGFjY2Vzc2Vk 25790\nLnZhbGlkYXRpb24= 25791\ndGFza3M= 25792\nIHBvbGx1dGlvbg== 25793\nLmNhbnZhcw== 25794\nIGluZ3JlZGllbnQ= 25795\nIENhYmlu 25796\nQWg= 25797\nb2xkb3du 25798\nIE5PSQ== 25799\nIMOX 25800\nW2Y= 25801\nZWR1Yw== 25802\neWFsdHk= 25803\nKG5vdA== 25804\nX1N0YXRl 25805\nOTMz 25806\nYW1lbg== 25807\nNzk1 25808\nNzM5 25809\nIGRhbw== 25810\ndWRhZA== 25811\nZWxsZXJz 25812\nfSY= 25813\nbGljaXR5 25814\nX1dJTkRPVw== 25815\nIHRhdHRv 25816\ndmFsb3I= 25817\nLlJhbmdl 25818\nIHJlZmVyZW5jZWQ= 25819\nIFJlc2VydmU= 25820\nTW9uZXk= 25821\nODc0 25822\nU0NSSVBU 25823\nL3Byb2R1Y3Q= 25824\nY2hvaWNlcw== 25825\nIHRpbg== 25826\n44KT 25827\nOTE4 25828\nIHNlcGFyYXRvcg== 25829\nIHBrZw== 25830\nYW1tZWQ= 25831\nIE1BVA== 25832\nISEKCg== 25833\nIHJhaWQ= 25834\nIG1vdGl2YXRpb24= 25835\nIFhQ 25836\nIEJhY2tncm91bmQ= 25837\nIFF1YXRlcm5pb24= 25838\nLmRlZmluZVByb3BlcnR5 25839\naWtlcg== 25840\nCXBhcmVudA== 25841\nIE9yaWdpbmFsbHk= 25842\nYW50YWdl 25843\nIEhhbnM= 25844\nIHRpbWVsaW5l 25845\nLmN1cg== 25846\nb3BpYw== 25847\nIFNlcXU= 25848\nbXVzdA== 25849\nIENvYWw= 25850\nIGZvcm1hdHRlcg== 25851\nX1JHQg== 25852\nIF8oIg== 25853\nJ30pLAo= 25854\nID09PT09PT09PT09PT09PT09 25855\nIEZVTkNUSU9O 25856\nIGxuZw== 25857\naWNhdGVz 25858\nbGl2ZQ== 25859\nX2VuZ2luZQ== 25860\nIHRvd25z 25861\nODY4 25862\nJykpCgo= 25863\nIFBL 25864\nKGFwaQ== 25865\nCXNjYW5m 25866\nMDg5 25867\ncGFja2V0 25868\nLnBob25l 25869\n4YA= 25870\nIEFuZHk= 25871\nX05BTUVT 25872\nOTgy 25873\nUExZ 25874\nOTU1 25875\nIG1pbnM= 25876\naW1p 25877\nIGJyaWNr 25878\nIGJsYWRl 25879\nLnN0ZG91dA== 25880\nfWA7Cg== 25881\nU2hpZnQ= 25882\nCXNi 25883\nIENoZWNrcw== 25884\nIHBoZW5vbWVub24= 25885\nQXZhdGFy 25886\nIG1pbmlzdHJ5 25887\ncm9zZQ== 25888\nCUZpbGU= 25889\nODc4 25890\nIHRpdGxlZA== 25891\nKExPRw== 25892\nIGdhbg== 25893\nZGVzaWdu 25894\nKCksDQo= 25895\nIGJvbmVz 25896\nc3Rt 25897\nxZvEhw== 25898\nIElucHV0U3RyZWFt 25899\nIHZvbHVudA== 25900\nIFNlcmlhbGl6YWJsZQ== 25901\nIGZpZ2h0ZXI= 25902\nIERyYWc= 25903\nVHdpdHRlcg== 25904\nIHN1YnNpZA== 25905\n57w= 25906\nIGZvcnVtcw== 25907\nLmxvYWRpbmc= 25908\nbG9nZ2Vk 25909\nX3RoaXM= 25910\nIHRlcnJhaW4= 25911\nIGlycmU= 25912\nIEluZw== 25913\nIENO 25914\nX29iamVjdHM= 25915\nLnVpZA== 25916\nIGNvbnNjaW91c25lc3M= 25917\nVElOR1M= 25918\nIEdhbGw= 25919\nIHBvcnRyYXk= 25920\nMDU2 25921\nIERldmVsb3Blcg== 25922\nIHBhcnRpY2lwYW50 25923\nICI7DQo= 25924\nL21vZGVs 25925\nNzk0 25926\nIE9wZXJhdGlvbnM= 25927\nXlw= 25928\nIExhdGVy 25929\nIHJhaXNlcw== 25930\nLW5vbmU= 25931\nLm1ldGE= 25932\nPScuJA== 25933\nRmluaXNoZWQ= 25934\nIHJlcGxhY2luZw== 25935\nIHNhbXBsaW5n 25936\nIEplbg== 25937\nIlRoZXJl 25938\nUkVBTA== 25939\nQUxF 25940\n7Iqk 25941\nT3JkZXJz 25942\nX3BhcmFtZXRlcg== 25943\nIE9seW1waWM= 25944\nIHRyw6hz 25945\nIGFyZW5h 25946\naW9s 25947\nOz8+ 25948\nIGltcGFjdHM= 25949\nIFdT 25950\nOmdldA== 25951\nIGZsaWdodHM= 25952\nIFJ1c3NlbGw= 25953\nY2FtZXJh 25954\nRm4= 25955\nc2lnbWE= 25956\nIGZvcmNpbmc= 25957\nIGxvY2Fscw== 25958\nIGRlcGFydHVyZQ== 25959\nIGNlbGVicmF0aW9u 25960\nIFNheQ== 25961\nODg0 25962\n77yS 25963\nIEhpbGxz 25964\nLmhhc093blByb3BlcnR5 25965\nIHR5cGluZ3M= 25966\nLkFQSQ== 25967\nIGRvbmF0aW9u 25968\nT3BlcmF0aW9uRXhjZXB0aW9u 25969\nLkFjdGl2aXR5 25970\nY3BsdXNwbHVz 25971\nIENoYXJsaWU= 25972\nIGltcG9ydGVk 25973\nIGRhbm4= 25974\nIG9jY2FzaW9ucw== 25975\nIGltcGxlbWVudGluZw== 25976\nIHB1cnBsZQ== 25977\nLmRpYWxvZw== 25978\nU1FMRXhjZXB0aW9u 25979\nZXJubw== 25980\nIHdhcnM= 25981\nIHBhc3Rl 25982\nIGRlY3JlYXNlZA== 25983\nIGhhcnNo 25984\nIGVsYWJvcg== 25985\naW5wdXRz 25986\nIFZpZXdz 25987\nIGVycm9yTWVzc2FnZQ== 25988\nX211bA== 25989\nCXdyaXRl 25990\nIENvcA== 25991\nIEFubnVhbA== 25992\nKGJ1dHRvbg== 25993\nIHZpZGE= 25994\nYmFycw== 25995\nIEhhcnZhcmQ= 25996\nCWV4cGVjdA== 25997\nIGluZGV4ZXM= 25998\nIGRvY3VtZW50YXJ5 25999\nIGZsZXNo 26000\nT1JMRA== 26001\nIERlbHRh 26002\nTUFORA== 26003\nQnJ1c2g= 26004\nLWNvbHVtbg== 26005\nIGRldmVsb3BtZW50cw== 26006\nOTc0 26007\nNzgz 26008\nbWV0aG9kVmlzaXRvcg== 26009\nc2xpY2U= 26010\nIFBETw== 26011\nIGludmVzdGluZw== 26012\nODY3 26013\naXJhYmxl 26014\nIHhtbG5z 26015\n77yb 26016\nYXJ0YQ== 26017\nIHRoZW9yaWVz 26018\nX2NpdHk= 26019\nICRfXw== 26020\nQ3JlYXRpbmc= 26021\nKHBy 26022\nRHJvcGRvd24= 26023\naXNtYXRjaA== 26024\nIE5FVA== 26025\nOTI2 26026\nJ10pKXsK 26027\nIFZhbHVlcw== 26028\nIFNFTw== 26029\nIFNUQVQ= 26030\nIGVjb3N5c3RlbQ== 26031\nIHRlbXB0 26032\nIFxc 26033\nIC8vewo= 26034\nIENocmlzdG9waGVy 26035\nIEtlbnR1Y2t5 26036\nIEh0dHBTZXJ2bGV0UmVzcG9uc2U= 26037\nIGh5YnJpZA== 26038\neW9u 26039\nIGZlZWRpbmc= 26040\nIEV4dHJh 26041\nTm9ybQ== 26042\nSVRDSA== 26043\nIFNlYW4= 26044\nIFVwbG9hZA== 26045\nbXVu 26046\ncHVy 26047\nIHBlcnNpc3RlbnQ= 26048\nIElEQw== 26049\nIFBlcmZvcm0= 26050\nODYz 26051\nLm1lcmdl 26052\nX3Jvb20= 26053\nTWVhbndoaWxl 26054\nIT0n 26055\nIFdlbA== 26056\nQXJnc0NvbnN0cnVjdG9y 26057\nODg3 26058\nLkRhdGFiYXNl 26059\nIGNvdW50aW5n 26060\nKCkq 26061\nlOWbng== 26062\nIFRPUA== 26063\nbWlsbA== 26064\nIERU 26065\nSUdORUQ= 26066\nOTU2 26067\nIEtC 26068\nIGNvbXBseQ== 26069\nU291dGg= 26070\nX2NvbGxlY3Rpb24= 26071\nQ2hhcHRlcg== 26072\nIGV4cGxhaW5pbmc= 26073\nX0FN 26074\nX3Rz 26075\nY2FyZHM= 26076\nIHF1ZWw= 26077\nIHBvbGU= 26078\nIHRvdWNoZG93bg== 26079\nIE90aGVycw== 26080\nIHBlZXJz 26081\nIFR5cGVFcnJvcg== 26082\nNzYz 26083\nIHNpeHRo 26084\nIGNoZWVy 26085\nIGRpc3B1dGU= 26086\nOTYz 26087\nODkz 26088\ndXNj 26089\nKV0s 26090\ndGh1bWI= 26091\nIGhpZGluZw== 26092\nIFNJRw== 26093\nbGlrZXM= 26094\nIFBBR0U= 26095\nLlJlZmxlY3Rpb24= 26096\nIGhlYWRxdWFydGVycw== 26097\nVElORw== 26098\nIEdob3N0 26099\nTUxF 26100\nJAo= 26101\nIGNvbnRyYXJ5 26102\nZXh0ZW5k 26103\nJ10pLg== 26104\nRkZFQ1Q= 26105\nIFBpbnRlcmVzdA== 26106\nw7ptZXJv 26107\ncmljYW5l 26108\nCXNlc3Npb24= 26109\nIGNyeXN0YWw= 26110\nLUNvbnRyb2w= 26111\nb3Zlcm5tZW50 26112\nb2dyYWY= 26113\nOTYx 26114\nLWFjdGlvbg== 26115\ndm9sdW1l 26116\nZnRlbg== 26117\nIHVuY29u 26118\nIGFuaW1hdGU= 26119\nIGxlYXNl 26120\nc2Ny 26121\nIHJlZnVzZQ== 26122\n44CL 26123\nZnRw 26124\naW5mb3JtYXRpb24= 26125\nIGV2YWx1YXRlZA== 26126\nIGluamVjdGlvbg== 26127\nIGphY2s= 26128\nIHdvcmtzaG9w 26129\n5rOo 26130\nUFRI 26131\nIFRz 26132\nb2ZmZXI= 26133\nCW9z 26134\nIGtpbmdkb20= 26135\nTWlzc2luZw== 26136\nIGxhd21ha2Vycw== 26137\nZXh0RmllbGQ= 26138\nIHNpbmdpbmc= 26139\nYWJp 26140\nL2NsaWVudA== 26141\nLm1lZGlh 26142\nQVRFR09SWQ== 26143\nU2lnbmF0dXJl 26144\nJScsCg== 26145\nIEZ1Y2s= 26146\nXVs6 26147\nIHNlbnNvcnM= 26148\nL2NvbQ== 26149\nIFByaW1hcnk= 26150\nLlNRTA== 26151\nX3Byb2dyYW0= 26152\nIHBpbGxz 26153\nIGludGVncmFs 26154\nIGZsZWV0 26155\nIGRyb3BwaW5n 26156\nLnNs 26157\nQmVlbg== 26158\nIHBldHM= 26159\nIGFkdmlzZWQ= 26160\nIGRyYWdvbg== 26161\nX0VESVQ= 26162\nKGlt 26163\nOTM5 26164\nRkVS 26165\nIERydWc= 26166\nKHJhbmRvbQ== 26167\nIGNvbXByZXNzaW9u 26168\nb3VzdA== 26169\nWyU= 26170\nIGJ1eWVy 26171\naG9w 26172\nUm9sZXM= 26173\nbWFuYWdl 26174\nIHBhaW5mdWw= 26175\nIEJyYW5jaA== 26176\nLW1vZGFs 26177\nZW5hbnQ= 26178\nIE1lc2g= 26179\nL2ZvbnQ= 26180\nIEdyYWhhbQ== 26181\nIOKY 26182\nIG5j 26183\nIEZyYW5jaXM= 26184\nIHNwZWNpZmljYXRpb24= 26185\nIGRhbWFnZXM= 26186\nLWNvbmZpZw== 26187\nIHRoZW9yZXQ= 26188\nc2VjdXJl 26189\nX211bHRp 26190\nYWNldXRpY2Fs 26191\nIGRlbWFuZGluZw== 26192\nZW5uZQ== 26193\nSVNUUw== 26194\nMDk0 26195\nKCkpKTsKCg== 26196\nUmVhc29u 26197\nUmVjZW50 26198\ncGhhc2U= 26199\nIHBzeQ== 26200\nX01BTg== 26201\nIHZvbHVudGVlcg== 26202\n5b8= 26203\naXN0cmlidXRlZA== 26204\nbGlv 26205\nIHByb2R1Y3Rpdml0eQ== 26206\nX2NvbW0= 26207\nU3ByaW5n 26208\nbmlz 26209\nLndlaWdodA== 26210\nIENhbmNlcg== 26211\nQWxsb2M= 26212\nIFR3ZWV0 26213\nIHNlcGFyYXRlbHk= 26214\nCWNoZWNr 26215\nX3Byb3BlcnRpZXM= 26216\nLlVuaXQ= 26217\nODI5 26218\nX0NMSw== 26219\nIGd0 26220\nICgpOwoK 26221\nIGhhbmR5 26222\nODM0 26223\nIFRob21wc29u 26224\nIHVubmVjZXNzYXJ5 26225\nIFJlYWRlcg== 26226\nODk0 26227\nR04= 26228\nPXJlcXVlc3Q= 26229\nIFV0aWxpdHk= 26230\nLlJlcG9zaXRvcnk= 26231\nIEF4 26232\naHlkcg== 26233\nNzkx 26234\naWV1 26235\nIHRoeQ== 26236\nIGx0 26237\nX21haWw= 26238\n5L+u5pS5 26239\nYWlsYW5k 26240\nIFBoaWxpcA== 26241\nIGJpdHRlcg== 26242\nIGJldHRpbmc= 26243\nODM3 26244\nIHRpbWVk 26245\nb2Nrcw== 26246\nMDc2 26247\nJ2E= 26248\nIGFsZ29yaXRobXM= 26249\nIHJlaW50ZXJwcmV0 26250\nIHRvc3M= 26251\ncm9nZW4= 26252\nIGhvcGVk 26253\nKHNlbGVjdGVk 26254\nIHZlbnR1cmU= 26255\nVEVY 26256\nIExlYXZl 26257\nLlN1YnN0cmluZw== 26258\nIGdyYXRlZnVs 26259\nNzQz 26260\ndWth 26261\nIENvbnN1bWVy 26262\nIGFnZ3JlZw== 26263\nQ2lyY2xl 26264\n4LiB 26265\nX2Jsb2Nrcw== 26266\nIGxlZ2FsbHk= 26267\nICJ8 26268\n44OD 26269\nLmJvYXJk 26270\nLkFi 26271\nRnVuY3Rpb25z 26272\ncmVjaXBl 26273\n6Ic= 26274\nIE94Zm9yZA== 26275\nIHdob2xlcw== 26276\nLkJ1aWxk 26277\nX2NoYW5nZWQ= 26278\naGFp 26279\nIGRlcGFydG1lbnRz 26280\nOTY0 26281\nSW1w 26282\nIGNvYWxpdGlvbg== 26283\nSU5GUklOR0VNRU5U 26284\nIGVtcG93ZXI= 26285\naXRjaGVz 26286\nTm9ydGg= 26287\nIGluZmxhbW0= 26288\nT05TRQ== 26289\nIG1pc3NpbGU= 26290\nIFJhag== 26291\nIElzc3Vl 26292\nIGF0b2k= 26293\nY2FsZWQ= 26294\nLkNvbnRyb2xsZXJz 26295\nIFdvbGY= 26296\nIGNydXNoZXJz 26297\n4buH 26298\nLkF1dGg= 26299\nLmFkZEF0dHJpYnV0ZQ== 26300\naGlz 26301\nIGJvb3Rz 26302\nLmNsZWFu 26303\nY2FtcA== 26304\nIHRlbmFudA== 26305\nIHR1bmU= 26306\nIHt9Jy4= 26307\nIHdvcmtvdXQ= 26308\nUmVwbw== 26309\nIHBhcnRpYWxseQ== 26310\nTUlTU0lPTg== 26311\namFtaW4= 26312\nIFNC 26313\nIGRldGVybWluYXRpb24= 26314\nICcnKTsK 26315\nIEJlbmc= 26316\nIHZvcw== 26317\nIGluaGFi 26318\nL2xhbmc= 26319\nc2J1cmdo 26320\nRXhlY3V0b3I= 26321\naG9uZQ== 26322\nIENoYWxsZW5nZQ== 26323\nX2xpbmtz 26324\nLkxldmVs 26325\nIHVuZGVyZ3JvdW5k 26326\nLWNvZGU= 26327\nOTU5 26328\nIG9wdGltaXphdGlvbg== 26329\nbG9nZ2luZw== 26330\nX2Rlc3Q= 26331\nIHNuYWtl 26332\nIGNoZW1pY2Fscw== 26333\nX0lNUE9SVEVE 26334\nYWRvb3A= 26335\nIFRIQVQ= 26336\nbWFuYWdlZA== 26337\nIHJlZHVjZXM= 26338\nIFJFQUw= 26339\nIEd1eQ== 26340\nX0dFTkVSSUM= 26341\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 26342\nLmFtb3VudA== 26343\nIGRlcmU= 26344\nZ2V0VGltZQ== 26345\nIHBhbnQ= 26346\nYW5vbnltb3Vz 26347\nIGhhcm1vbnk= 26348\nIEFsYW4= 26349\nIHNjZW5hcmlvcw== 26350\nIGRpcnQ= 26351\naHRhZ3M= 26352\nTWM= 26353\nU2hlbGw= 26354\ncmlu 26355\new0KDQo= 26356\nLnBvdw== 26357\nCWNsaWVudA== 26358\nIGNvbnNwaXJhY3k= 26359\nIGFkbWlzc2lvbg== 26360\nIFJlZ2lvbmFs 26361\nIFZpZXdDb250cm9sbGVy 26362\nIFBoaWxpcHBpbmVz 26363\nIGRlcG9z 26364\nIHBhcA== 26365\nOTYy 26366\nIFBhZA== 26367\nUGF1bA== 26368\nLkNvbWJvQm94 26369\nIHR1dG9y 26370\nIFJlY2lwZQ== 26371\nd3JpdGluZw== 26372\nIGNvbnRyaWJ1dG9y 26373\nT1RI 26374\nU21hbGw= 26375\nVkk= 26376\nIGhhY2Vy 26377\nZXF1 26378\nIEV4YW1wbGVz 26379\naHVtYW4= 26380\nLm1lc3NhZ2Vz 26381\nCXR5cA== 26382\nICgNCg== 26383\nIFNTTA== 26384\nTEVO 26385\nIFJvbW5leQ== 26386\nKGdyaWQ= 26387\nCW1pbg== 26388\nID4KCg== 26389\nIGZydWl0cw== 26390\nIHZvdGVy 26391\nSW5saW5l 26392\ncGFuZQ== 26393\nIENvbGxlY3Rpb25z 26394\nY2hhcnNldA== 26395\nIHNwYW0= 26396\nemI= 26397\naXRlbWFw 26398\nIHN1Y2NlZWRlZA== 26399\nX0NPTA== 26400\nIGVsYXBzZWQ= 26401\naW1ldGVy 26402\nIHJlY292ZXJlZA== 26403\nVGVuc29y 26404\naGF0dGFu 26405\nLnNldHVw 26406\naXN0bw== 26407\nKGhlYWQ= 26408\nOTc3 26409\nIFNJWkU= 26410\nIHRhY3RpY3M= 26411\nIGRpc3R1cg== 26412\nIHByZXZhbA== 26413\naWNpb3M= 26414\nKFZhbHVl 26415\nX2NvbHM= 26416\nIEZhdA== 26417\nIHNlYWw= 26418\nIHNvbnM= 26419\nIGVuc3VyZXM= 26420\nMDk1 26421\nIHByZXNzaW5n 26422\nPSY= 26423\naWdlbm91cw== 26424\nIGhhcmFzc21lbnQ= 26425\nX0pTT04= 26426\nIGlnbm9y 26427\neW5vbWlhbA== 26428\nb21lcg== 26429\nX3N0YXRpYw== 26430\nIHNpZ25pZmljYW5jZQ== 26431\nIGNpcmNsZXM= 26432\nX1N5c3RlbQ== 26433\nIGRpc2NpcGxpbmU= 26434\nIGRyZXNzZWQ= 26435\nIHNwaGVyZQ== 26436\nOTI3 26437\nIGNsaW1i 26438\nNzU5 26439\nX2FjdGlvbnM= 26440\nIEJhYg== 26441\nICc9Jyw= 26442\nX3NjaGVtYQ== 26443\nInVzZQ== 26444\nIHVuZGVycw== 26445\nIGN1cHM= 26446\nLnNjcmVlbg== 26447\nL25ldw== 26448\nIGFwcGVhcmluZw== 26449\nVE9Q 26450\ndmlzZWQ= 26451\nY2xhbmc= 26452\nIGludmVzdGlnYXRvcnM= 26453\nIG15c3RlcmlvdXM= 26454\nIHByb21pc2luZw== 26455\nIHF1YWxpZnk= 26456\nIGNhdmU= 26457\nIGVxdWlw 26458\nPXg= 26459\nR1Q= 26460\nKGxpbms= 26461\nLnZlbG9jaXR5 26462\nLmVyYXNl 26463\nb3Rlcg== 26464\nKysrKysrKys= 26465\ncHJvZml0 26466\nIHpvbmVz 26467\nX3VpZA== 26468\nLXNlcg== 26469\nIG9iamVjdGl2ZXM= 26470\nIG1pbGY= 26471\nd2Via2l0 26472\nKG1hdGNo 26473\nbmVo 26474\nIEFzc29jaWF0ZWQ= 26475\nIFRvZG8= 26476\nPWQ= 26477\nMDY1 26478\nQ2Ft 26479\nIHZvY2Fs 26480\nIHN1ZG8= 26481\nKEVY 26482\nIHRyb3U= 26483\nQUJD 26484\nLmJlYW4= 26485\nIEdyb3VuZA== 26486\nIFJFU1Q= 26487\nd2VldHM= 26488\nSW5n 26489\naW1vbg== 26490\nOTQ2 26491\nX2J1cw== 26492\nIENPTE9S 26493\ndW50bw== 26494\nIGZvc3M= 26495\nIExpbmtz 26496\nODY5 26497\nw6RuZw== 26498\nL2Zvcm1z 26499\ncHJpc2Vz 26500\nIGFjaGlldmVtZW50 26501\nQ0FMTA== 26502\n0LXQu9GM 26503\nIFZlcmlmeQ== 26504\nX1NPVVJDRQ== 26505\nYXB0Y2hh 26506\nSURE 26507\nX3JlZmVyZW5jZQ== 26508\nR29sZA== 26509\nICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 26510\nOTQ3 26511\nUmVjZWl2ZXI= 26512\nMDk5 26513\nIGFq 26514\nX2RpcmVjdGlvbg== 26515\nfV0= 26516\nIENvbXBldA== 26517\nIGJhbmc= 26518\nNzk4 26519\nIENhc3M= 26520\nLXVybA== 26521\ndGVjaG4= 26522\nIEplcnVzYWxlbQ== 26523\nbG9uZ2l0dWRl 26524\nJyk7DQoNCg== 26525\nIHdpbm5lcnM= 26526\nVGFza3M= 26527\nIERNQQ== 26528\nIHRvb2x0aXA= 26529\njrc= 26530\nIEJyYQ== 26531\nX2R1cmF0aW9u 26532\nY3VyeQ== 26533\ncGFyZW50cw== 26534\nLS0tLTwv 26535\nIHBhc3Nwb3J0 26536\nODQ5 26537\nV0M= 26538\nINC7 26539\nY2Vzc2lvbg== 26540\nIFllbGxvdw== 26541\nIGVuY3J5cHRpb24= 26542\nJwoKCg== 26543\nIGxpc3Rpbmdz 26544\nIENvbW11bmljYXRpb25z 26545\nLl8K 26546\nICIiIg0K 26547\nIGZi 26548\nIHN0cmljdGx5 26549\nIExpdGVy 26550\nIEVudGVycHJpc2U= 26551\nX2JvdHRvbQ== 26552\nQUtF 26553\na2V0 26554\nIHRhbQ== 26555\nQmV0d2Vlbg== 26556\nX1RPUA== 26557\nRGlzYWJsZQ== 26558\nIGZpbGluZw== 26559\nIENocm9u 26560\nU0VRVQ== 26561\nICZfX18= 26562\nODQ2 26563\nIGZhbA== 26564\nIFNMT1Q= 26565\nRW1iZWQ= 26566\ndXRoZXI= 26567\nIFJlc3RhdXJhbnQ= 26568\nIHJlYWxpc3RpYw== 26569\nIScpOwo= 26570\nIERFQUw= 26571\nIFBlcmlvZA== 26572\nLmdldFg= 26573\nIHNlaHI= 26574\nIl0nKS4= 26575\nOTQz 26576\nZXNzYQ== 26577\nCW1lbWNweQ== 26578\nIGFja25vd2xlZGdlZA== 26579\nc2VuYWw= 26580\nIFVuaXZlcnNhbA== 26581\nICcnOwoK 26582\nL3dpa2k= 26583\naWVubmU= 26584\nIE5TQXJyYXk= 26585\nIGFjY2VwdGFuY2U= 26586\nIGxpdmVy 26587\nIHRvb3Ro 26588\nIGFjY3Vz 26589\nCUxPRw== 26590\ndmFsdQ== 26591\n5YC8 26592\nIHNlY3RvcnM= 26593\ncGVyaW1lbnRhbA== 26594\nL2NsYXNz 26595\nX2dv 26596\nTWljaGFlbA== 26597\nb2xhdGlsZQ== 26598\nIFBST0Y= 26599\nIGNvbXByb20= 26600\nc3BlY2lhbGNoYXJz 26601\nIOKc 26602\nIGlzRXF1YWxUb1N0cmluZw== 26603\nIEh1bmc= 26604\nLmFzTGlzdA== 26605\nL2dv 26606\nPj4o 26607\nIEtpcg== 26608\nIGludHJvcw== 26609\nIHNrZXRjaA== 26610\nIHNraWxsZWQ= 26611\nIGltbWVy 26612\nIGFkZXF1YXRl 26613\nX3JlcA== 26614\nKGhlYWRlcg== 26615\nX2xpa2U= 26616\nIHBlcmNlaXZlZA== 26617\nc3No 26618\nIGFzc3VtaW5n 26619\nIGZm 26620\nX3V1aWQ= 26621\ndWxhcw== 26622\nIGRlbW9jcmF0aWM= 26623\nLmVudGl0aWVz 26624\nU2VyaWVz 26625\nYXBob3Jl 26626\nIG5ld2Vy 26627\nfSg= 26628\nU0VD 26629\nYWlybw== 26630\nIGNvbW1vZA== 26631\nIHByaXZpbGVnZQ== 26632\nIGRldXg= 26633\nIEhvcA== 26634\nLicv 26635\nY3RpYw== 26636\nLic7Cg== 26637\nPD89 26638\nIFVU 26639\nZXRpZXM= 26640\nX0NPTlRFTlQ= 26641\nLnJlbGVhc2U= 26642\nLmRpc21pc3M= 26643\nIGZj 26644\nb3VuZ2U= 26645\ncHdk 26646\nX3ByZXY= 26647\nTWdy 26648\nIEJ1ZmZlcmVkUmVhZGVy 26649\nd3JpdHRlbg== 26650\nIEVi 26651\nICkKCgo= 26652\ndWl0bw== 26653\nIGNvbnRyb3ZlcnN5 26654\nIGRpc3Bvc2Vk 26655\nIGZvdG8= 26656\nTGlzdFZpZXc= 26657\nL2NyZWF0ZQ== 26658\nIENPTA== 26659\nY29tbXVuaWM= 26660\nMDY4 26661\nIGZyZWVseQ== 26662\ndW5hbA== 26663\nb3ZpZA== 26664\nCXRy 26665\ncGFnaW5hdGlvbg== 26666\nIENvbW1vbnM= 26667\nRWxlbQ== 26668\nIFJFTQ== 26669\nIGNvcnJlbGF0aW9u 26670\nKCkrIg== 26671\nIEhpZGU= 26672\nYW5kaW5n 26673\nKHZlYw== 26674\naXRvcw== 26675\nIEN1bHQ= 26676\nIG51dHJpdGlvbg== 26677\ndmFscw== 26678\nIGRldGVybWluaW5n 26679\nbG9yZA== 26680\nIHNjYW5kYWw= 26681\nIHNoYWxsb3c= 26682\nb2Rhc2g= 26683\nX3NlcmlhbA== 26684\nIFNsbw== 26685\nIGRpc3Bvbg== 26686\nUGxvdA== 26687\naWNrbGU= 26688\nIGVsbA== 26689\nIHVuZW1wbG95bWVudA== 26690\nRk0= 26691\ncm9ucw== 26692\nbMSx 26693\nTW8= 26694\nRXhpc3Q= 26695\nSURT 26696\nQ2hv 26697\nIEtleWJvYXJk 26698\nLnBhcnNlcg== 26699\nLkdldE9iamVjdA== 26700\nIHNwZWxscw== 26701\nIGdlc2No 26702\nIG1hZ25pdHVkZQ== 26703\nX1NM 26704\naXNkaWN0aW9u 26705\nICcpOwo= 26706\naWxpYW5z 26707\nIHNoYXI= 26708\nIFByb2I= 26709\ndWlsdGlu 26710\nIHR1bm5lbA== 26711\nPkM= 26712\nIFdhcnJlbg== 26713\nIG9wdGltaXplcg== 26714\nIFNFUlZJQ0VT 26715\nX29wZXI= 26716\nZ2V0QXR0cmlidXRl 26717\nIE1jSw== 26718\nX3NlbGY= 26719\nMDg0 26720\nLnJz 26721\nIikKCgo= 26722\nR2V0Q29tcG9uZW50 26723\nZXJjZQ== 26724\nIHRvdXM= 26725\ndW5pdHM= 26726\nJ10pOw0K 26727\nWm9vbQ== 26728\nL0U= 26729\nIG9ic2M= 26730\nIGZhc3Rlc3Q= 26731\nb25saW5l 26732\nIHBlYWNlZnVs 26733\nZmZlbg== 26734\nIGNhcmdv 26735\nCXBy 26736\nIHNlZWtz 26737\nenU= 26738\nMDc0 26739\nVHJpbQ== 26740\nIHdhcmQ= 26741\nIHZlcmQ= 26742\nIGJsb2dz 26743\nLmV4Y2VwdGlvbnM= 26744\nIFByZW1pdW0= 26745\nIE5ldGhlcmxhbmRz 26746\nU2FmZQ== 26747\nRmluaXNo 26748\nIEFsYnVt 26749\nX0FDQw== 26750\nPXRoaXM= 26751\ndmlydHVhbA== 26752\nXT4= 26753\nX0xBQkVM 26754\nIE5pY2g= 26755\nX3dpbg== 26756\nIEFhcm9u 26757\nV1A= 26758\nOyQ= 26759\nYWltcw== 26760\nIEltYWdlVmlldw== 26761\nIGVuZGxlc3M= 26762\nRVJB 26763\nX0RJU0FCTEU= 26764\nIGNhbmNlbGxlZA== 26765\nLXVz 26766\nIGluc3BlY3Rpb24= 26767\nZW1pbg== 26768\nIEdyZXk= 26769\nLW9wZW4= 26770\nIGl0ZXJhdGlvbnM= 26771\nLm93bmVy 26772\nIGtlcmFz 26773\nLlBhc3N3b3Jk 26774\nIFJ5 26775\nIElOUw== 26776\nQWly 26777\nIFNldmVyYWw= 26778\nLlRhYlN0b3A= 26779\nSU5HTEU= 26780\nIEhhaXI= 26781\nIENhbnZhcw== 26782\nQUFBQQ== 26783\nIGZsYXc= 26784\nY2VkZXM= 26785\nLlJlcG9ydA== 26786\n7Yo= 26787\nIFRpcHM= 26788\nY3JpcHRvcnM= 26789\nLnRyYW5zYWN0aW9u 26790\nLlNwcmluZw== 26791\nIHZpZXdlcg== 26792\nIGluc2lnaHRz 26793\n6L6T 26794\nb3JkaW9u 26795\nVUlOVA== 26796\nc2Vlaw== 26797\nIEF1Zg== 26798\n7J6Q 26799\nIHN0cmFpbg== 26800\nVG9vbHRpcA== 26801\nIGR6 26802\naWduYWw= 26803\nYWR0 26804\nIHVj 26805\nZmluaXRl 26806\nIG5t 26807\nLmNtZA== 26808\nIE15U3Fs 26809\nW2RhdGE= 26810\nLmphY2tzb24= 26811\nLnRyZWU= 26812\nUmVxdWVzdFBhcmFt 26813\nX2FnZW50 26814\nIildDQo= 26815\nIGFzc2Fzcw== 26816\nKENvbnN0YW50cw== 26817\nOnNz 26818\nIE1BTg== 26819\nKy0rLQ== 26820\nIEJvdHRvbQ== 26821\ncHJpbnRz 26822\nIFNhbWU= 26823\nQEF1dG93aXJlZA== 26824\nc3dhcA== 26825\naWNpw7Nu 26826\nIHByb3Rlc3RlcnM= 26827\nIGhvbmV5 26828\nIFZldGVy 26829\nKENhbGVuZGFy 26830\nLWFk 26831\nIEJyb29rbHlu 26832\nTGlmZQ== 26833\nX1ZBUg== 26834\nemVjaA== 26835\nIENBTEw= 26836\nX0NBU1Q= 26837\nIEVsZWN0aW9u 26838\nIHRoaWNrbmVzcw== 26839\nVmVyeQ== 26840\nX0lOVEVHRVI= 26841\nLWRldg== 26842\nKSkpKQ== 26843\nYXBhdA== 26844\nb29vbw== 26845\nZGVtbw== 26846\nIHBhcnNlRmxvYXQ= 26847\nIFJhdGhlcg== 26848\nU1RJVA== 26849\nbWFrZXI= 26850\nW2N1cnJlbnQ= 26851\nY2hyb25v 26852\nIGNocmlzdA== 26853\n44Gq 26854\nIERldGFpbA== 26855\nxrDhuw== 26856\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 26857\nIHN1bA== 26858\naWRlbmN5 26859\nUXVl 26860\nIGVsZWdhbnQ= 26861\nYXBvbnM= 26862\nIGRpc2hlcw== 26863\nIGludGVnZXJz 26864\nKHJlYWQ= 26865\nMDU3 26866\nZmluZFZpZXdCeUlk 26867\nIEFtb3VudA== 26868\nIFNraXA= 26869\nIGhhYml0cw== 26870\nKiko 26871\nIG1vbnN0ZXJz 26872\nTUFD 26873\nOmVuZA== 26874\nIGZyYW5r 26875\nQXNzZW1ibHk= 26876\nIGRmcw== 26877\nIG5ldXQ= 26878\nX1RZUEVT 26879\nZXF1YWw= 26880\nbG95ZA== 26881\nKHVyaQ== 26882\nIGNoaQ== 26883\nIGRlZmVuZGFudA== 26884\nIGNvbmZsaWN0cw== 26885\nIHZpbA== 26886\nLWpz 26887\nIFBlYWNl 26888\nIG11dGFibGU= 26889\nKXNlbmRlcg== 26890\nIEZvY3Vz 26891\n5bu6 26892\nIGFwcHJlY2lhdGVk 26893\nc2xlZXA= 26894\nIFJFRA== 26895\nQ3VsdHVyZQ== 26896\nIGRlc2lnbmVycw== 26897\nX2dlbmVyYXRvcg== 26898\nY29kZXM= 26899\nL2V4 26900\nLkdldFZhbHVl 26901\ndW1ibGVk 26902\nLnNjYWxhanM= 26903\ncGVyb3I= 26904\nIHZldGVyYW5z 26905\nIH0pDQo= 26906\nIHVuZm9ydHVuYXRlbHk= 26907\nX0NSRUFURQ== 26908\nTWFzcw== 26909\nIENMQUlN 26910\nIE1lZXQ= 26911\nX3N1cHBvcnQ= 26912\nQmFuaw== 26913\nKCkuCg== 26914\nRGFyaw== 26915\nX0xPVw== 26916\nIE1pbmluZw== 26917\nIE93bmVy 26918\naWVyYQ== 26919\nQ2xpZW50ZQ== 26920\nIGVuY291cmFnaW5n 26921\nPlM= 26922\nIGJveWZyaWVuZA== 26923\nIEhhbGY= 26924\nIEFDQw== 26925\nQWZm 26926\nX2Fy 26927\nLWxpZmU= 26928\nY3g= 26929\nLkpCdXR0b24= 26930\naXphZG8= 26931\nLnplcm8= 26932\nLm9wZW5xYQ== 26933\nb3Rvbg== 26934\nLnRleHRDb250ZW50 26935\nIHRvbGw= 26936\nYXRpZQ== 26937\nIGJhbGxvdA== 26938\nLW51bWJlcg== 26939\nLkV4Y2VwdGlvbg== 26940\nCXBhcmFtcw== 26941\nY2lyY2xl 26942\nLW1hcA== 26943\nIG5hcA== 26944\nIFJvYm90 26945\nIEljaA== 26946\ncmVnaXN0cmF0aW9u 26947\nQW1hem9u 26948\ncm9sbG1lbnQ= 26949\nKGV4cA== 26950\nIHRhbmtz 26951\nIEdvcmRvbg== 26952\nIG1hY2hpbmVyeQ== 26953\nIGJhc2VsaW5l 26954\n5os= 26955\nMDg2 26956\n2Kk= 26957\nIENvbnZlbnRpb24= 26958\nCWNvbmZpZw== 26959\nb29raWVz 26960\nbXVsdA== 26961\nUmVjb3Jkcw== 26962\nIEVTVA== 26963\nIGdhcmJhZ2U= 26964\nIGNvbmZvcm0= 26965\naWRhbA== 26966\nIGJhcmc= 26967\nIHN1cnZpdmVk 26968\nIGludmVzdGlnYXRpb25z 26969\nOTM1 26970\nLmNvbnRhaW5zS2V5 26971\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 26972\nb3J0aW9u 26973\nIGhvcnI= 26974\nX2h0dHA= 26975\nIG1hbnQ= 26976\nXTsNCg0K 26977\nYmluYXJ5 26978\nOTQ4 26979\nZW1wbA== 26980\nIGlucXVpcnk= 26981\nIE1lYW53aGlsZQ== 26982\nMDk4 26983\nIGNvbGxlY3Rpbmc= 26984\nLkVudGl0eUZyYW1ld29yaw== 26985\nIiwKCg== 26986\nIFBpYw== 26987\nQEluamVjdA== 26988\naWNrbmVzcw== 26989\nIEJpbmRpbmc= 26990\nIGNvbnRyb2xsaW5n 26991\ncmV2ZXJzZQ== 26992\nIGNoYWlycw== 26993\nc2VtYmxlZA== 26994\nKGFkZA== 26995\nRGlzYWJsZWQ= 26996\nYW5hcw== 26997\nLnRyYW5zbGF0ZQ== 26998\nLS0tLS0tLS0tLS0K 26999\nIHJlZmxlY3RlZA== 27000\nIl0KCg== 27001\nRXh0ZXJuYWw= 27002\nQXJyb3c= 27003\nU2luZ2xldG9u 27004\nJXg= 27005\nIMU= 27006\nIGFuY2VzdA== 27007\nIE9ybGVhbnM= 27008\nCWNtZA== 27009\nIHByb2hpYml0ZWQ= 27010\naXRobWV0aWM= 27011\nKGNoYW5uZWw= 27012\nX2Nzcw== 27013\nRm9yd2FyZA== 27014\nLnNvY2tldA== 27015\nIGx1Yw== 27016\n4oY= 27017\nIEZpcmVmb3g= 27018\nIE1vdmllcw== 27019\nKV8= 27020\nLmVuZHM= 27021\nKHNoYXBl 27022\nIGRlYWx0 27023\nIHNhdmVz 27024\nIGdsb3J5 27025\nIG1lam9y 27026\nIGJyZWF0aGluZw== 27027\nIGVsbGVy 27028\nZ2V0RGF0YQ== 27029\nIGFuZ2xlcw== 27030\nIHRvb2xiYXI= 27031\nIHNwYWNpbmc= 27032\nMDU5 27033\nSVBT 27034\nIGZsb29ycw== 27035\nX0FDVElWRQ== 27036\nIHNodWZmbGU= 27037\nL3NoYXJlZA== 27038\nIEVsZQ== 27039\nZWRpc2g= 27040\nIHdlYmNhbQ== 27041\nLmV4cGVjdA== 27042\naWxvYw== 27043\nIEluY2x1ZGVz 27044\nIHR3ZWV0ZWQ= 27045\nIDop 27046\nIEVzc2F5 27047\nRml4 27048\nLWJldHdlZW4= 27049\nX3dlYg== 27050\nLmNvbnY= 27051\nIHJhY2lzbQ== 27052\nIHJlZmxlY3Rz 27053\ndW1t 27054\n0LjRgtC1 27055\nX2Zvb3Rlcg== 27056\nL2RvY3M= 27057\nIFBvdXI= 27058\nTmdNb2R1bGU= 27059\nLmluaXRpYWxpemU= 27060\ncGF0dGVybnM= 27061\nX0lu 27062\nIEFiYg== 27063\nKg0K 27064\nIHNlbnRpbWVudA== 27065\nYnVmZg== 27066\nX2NvdW50cw== 27067\nIHJldXNl 27068\nY2h1bms= 27069\nIGltcG9zZWQ= 27070\nUHJpbWFyeUtleQ== 27071\nRm9yZWdyb3VuZA== 27072\nIGNvbnN1bWVk 27073\nPyE= 27074\nIGRpY2s= 27075\nIGNocm9u 27076\nIEZlcm4= 27077\nIHJlc3BvbnNpdmU= 27078\nOTU4 27079\nIGluc2VjdA== 27080\naWN1bHR5 27081\nIHJ3 27082\nIGFsaWtl 27083\nIHN1YnNldA== 27084\nIENvb2tpZXM= 27085\nIFBhaXI= 27086\nIHRpZXI= 27087\nSUZP 27088\nYXZvdXI= 27089\nIFFV 27090\nLHNpemVvZg== 27091\nIG1lcmdlZA== 27092\nbXY= 27093\naXRvbA== 27094\neWxvbg== 27095\nIGp1bXBlZA== 27096\nLnJvbGU= 27097\nZW5zYWpl 27098\nUnVsZXM= 27099\nIGJyb3dzZQ== 27100\nQW5pbWF0b3I= 27101\nIHlvZ2E= 27102\nIHZhcmlhbnRz 27103\nIGNvdXJ0ZXN5 27104\ndXJhbg== 27105\ncGJz 27106\nZWxzZWlm 27107\nQWx0 27108\nIExhbmU= 27109\nQ0xL 27110\nSU1BUlk= 27111\nX1BST1BFUlRZ 27112\n77yQ 27113\nIGNoYW4= 27114\nIGdyYWR1YWxseQ== 27115\nIHNoYWtl 27116\nIGJsb25kZQ== 27117\nLi4uIik7Cg== 27118\nLXNleA== 27119\nIGdhbWVwbGF5 27120\nYWNpZXM= 27121\nLnJlZnJlc2g= 27122\nVVNC 27123\nIFBsb3Q= 27124\nV2Fz 27125\naXNzaXBwaQ== 27126\nIFRlbnNvcg== 27127\nIGNyeXB0b2N1cnJlbmN5 27128\nIGRpZmZpY3VsdGllcw== 27129\nRGVsZXRlZA== 27130\nV2l0aG91dA== 27131\nX2FwcGVuZA== 27132\nX3Zlcg== 27133\nOTY3 27134\nIikpDQo= 27135\nIGhvbmVzdGx5 27136\nIHBpdm90 27137\nIHRlbXBz 27138\nX3Bz 27139\nIFVubGlrZQ== 27140\nWzot 27141\nVlM= 27142\nX2luZg== 27143\nIGp1bmlvcg== 27144\nIGFuaW1hdGlvbnM= 27145\nIGZpbGVwYXRo 27146\nPzwv 27147\nW1w= 27148\nIG9wZXJhdGVz 27149\nX3JlZA== 27150\nIEJvb3RzdHJhcA== 27151\nbGVhZA== 27152\nZWZmZWN0 27153\nwr0= 27154\nIFN0ZXI= 27155\nIEJ1Y2s= 27156\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 27157\nIGRlcHV0eQ== 27158\nVGhhbg== 27159\n4bq/ 27160\nT05FTlQ= 27161\nIEhlYXQ= 27162\nZXRoZWxlc3M= 27163\nXSl7Cg== 27164\nIGtvc3Rlbmxvcw== 27165\nKCk7Ly8= 27166\nIGRlcGxveWVk 27167\nPnt7JA== 27168\nIHVuaWNvZGU= 27169\ncGxhY2Vz 27170\nIENvZmZlZQ== 27171\nLlNF 27172\nIFBBUg== 27173\nKHR4dA== 27174\nZ2VicmE= 27175\nIGZpcmVz 27176\nTWFpbldpbmRvdw== 27177\nbWVkaXVt 27178\nICjigJw= 27179\nIGxn 27180\nIGNtcA== 27181\nL2Jhc2U= 27182\nX2xheWVycw== 27183\nX2VudHJpZXM= 27184\nIGFkbWluaXN0ZXI= 27185\nIFNVQ0g= 27186\nQlA= 27187\nIFNjb3R0aXNo 27188\nCQ0KCQ0K 27189\nZ3VhcmQ= 27190\nIFN0cm9uZw== 27191\nSW5zbg== 27192\nIENBUA== 27193\nYXN1cnk= 27194\nIFNFRQ== 27195\nQ2xvY2s= 27196\nZXJpZQ== 27197\nXG1vZGVscw== 27198\nICQk 27199\nIENhYg== 27200\nIHd1cmRl 27201\nIHNvbGRpZXI= 27202\nIGNsaXBz 27203\nIGFycmFuZ2VtZW50 27204\nIFdvbmRlcg== 27205\nIEhvcm4= 27206\nIHNjYXJlZA== 27207\nIGN1cmU= 27208\nbWtkaXI= 27209\nIGFsaWduZWQ= 27210\nIFBpbms= 27211\nIGxhbmRlZA== 27212\nRGltZW5zaW9u 27213\nU2Nyb2xsUGFuZQ== 27214\nLmNoYXQ= 27215\nLldpdGg= 27216\nIFRyYWlu 27217\nXS4K 27218\nIHRoaXJ0eQ== 27219\nIGR1cmFibGU= 27220\nIGxk 27221\nIGxhdGVpbml0 27222\nIGNoYXJ0cw== 27223\nIGluc3VsdA== 27224\nLkZhdGFs 27225\nX2N0 27226\nIG1hc2tz 27227\nQ0xVREVE 27228\nUHJlc2lkZW50 27229\nIGNvbG91cnM= 27230\nZ21lbnRz 27231\nLmF0dHJpYnV0ZXM= 27232\nIEZsZXg= 27233\nIENsb2Nr 27234\nw61jdWw= 27235\naW1lbg== 27236\nSk8= 27237\nIFJlZ2V4 27238\nX0xJTks= 27239\nIGNvdWNo 27240\nIElOUFVU 27241\nIGJlYXRpbmc= 27242\nYnVzaW5lc3M= 27243\ncHJlY2Vk 27244\nLnVuaXQ= 27245\nIEZlbA== 27246\nTmV2ZXI= 27247\nb3NwZWw= 27248\nLnN0YXJ0c3dpdGg= 27249\nIEVQQQ== 27250\nLm9ubHk= 27251\nIHByZXZlbnRpbmc= 27252\neWVy 27253\nQ29sdW1uTmFtZQ== 27254\nIGVsZXZhdGlvbg== 27255\nZmx1 27256\naWN5Y2xl 27257\nIG9mZmxpbmU= 27258\nVG9vbGJhcg== 27259\nIGNvbXBldGluZw== 27260\nKV0u 27261\nIG1vZw== 27262\nIGlzVmFsaWQ= 27263\nQXNr 27264\nX2F2 27265\nX2xhdA== 27266\nQU5D 27267\nIEpvaA== 27268\na2Vycw== 27269\nIGd1YXJkcw== 27270\nIGNoYWlucw== 27271\nIFNpbXBsZURhdGVGb3JtYXQ= 27272\nLnN0YXRpYw== 27273\nIHZlc3NlbA== 27274\nIG11ZA== 27275\nIHN0YWJpbA== 27276\nIHN0cmV0 27277\nZ20= 27278\nYW1hdGlvbg== 27279\n55w= 27280\nLXdpdGg= 27281\nIHJvcw== 27282\nX1BB 27283\nIHJlc3VsdGFkbw== 27284\nIGNvbmZpZGVudGlhbA== 27285\nIFRva3lv 27286\nCXVzaW5n 27287\nIE1hdGhm 27288\nb21iaW5l 27289\nIEVTUE4= 27290\nIGRlYWxlcnM= 27291\nIGRpc21pc3NlZA== 27292\nVFJZ 27293\nIHRlZW5z 27294\ncmVjb3Jkcw== 27295\nIHdpbmdz 27296\nZ2FsbGVyeQ== 27297\nYWNjb3VudHM= 27298\nX0xJQg== 27299\nIGphY2tldA== 27300\nIE5TT2JqZWN0 27301\nIHN0b25lcw== 27302\nIERlbGl2ZXJ5 27303\nIERpZXQ= 27304\nL3dhdGNo 27305\nIHRvaWxldA== 27306\nIEd1ZXN0 27307\nLmRheQ== 27308\nMDY3 27309\nIGludHZhbA== 27310\nMDg3 27311\nVmlzaXQ= 27312\nIGludmVzdGlnYXRlZA== 27313\nIHBlbnRydQ== 27314\nIFRoZWF0cmU= 27315\nYW5kaWRhdGVz 27316\nTGFuZw== 27317\nIFNlcnY= 27318\nIGNvbnRyb2xsZXJz 27319\nIHNldFRpdGxl 27320\nTlA= 27321\nYW15 27322\nZmxhdA== 27323\nKHVp 27324\nMDY5 27325\nX2RvY3VtZW50 27326\n6IO9 27327\nIENvaW4= 27328\nIEFkYW1z 27329\ncHRpYw== 27330\nIHByb2R1Y3RpdmU= 27331\nIGFjY29tcGxpc2hlZA== 27332\nDQoNCg0KDQo= 27333\nIGRlZmVycmVk 27334\naWVudGVz 27335\nIHNpbmM= 27336\nb2xhcnM= 27337\nUmlnaHRhcnJvdw== 27338\nIHZhcmlhdGlvbnM= 27339\nKG9mZnNldA== 27340\nOTU3 27341\nLkxheW91dEluZmxhdGVy 27342\nIHN1c3BlbmQ= 27343\nIHByZXZlbnRpb24= 27344\nX3ByaXZhdGU= 27345\nX2pz 27346\n4piF 27347\nIHdpZWRlcg== 27348\nYXR1bQ== 27349\nkow= 27350\nIGFwcGVhcmFuY2Vz 27351\nLkRvY3VtZW50 27352\nIHZhbGlkYXRlcw== 27353\nY2FsZW5kYXI= 27354\nfSI7Cg== 27355\nLmRlbW8= 27356\nY29udXQ= 27357\nIGNvcnJlY3Rpb24= 27358\nIERlYWw= 27359\nIGJhdHRlcmllcw== 27360\nLmR1cmF0aW9u 27361\nLFw= 27362\nX21hcmtlcg== 27363\nbXVsdGk= 27364\nIGhhbHQ= 27365\nIGNtcw== 27366\nIHNoYXBlZA== 27367\nQnJv 27368\ncmVkdWNl 27369\nICMjIyM= 27370\nQ1RPUg== 27371\nIEJlbmVm 27372\nIGljb25pYw== 27373\nIHBpYW5v 27374\nIGVmZmVjdGl2ZW5lc3M= 27375\nfC4K 27376\nIGFqYXg= 27377\nIHZvbHVtZXM= 27378\n4Lih 27379\nIGNsanM= 27380\nICAgICAgICAgICAgICAK 27381\nYXRocw== 27382\ncmFpdHM= 27383\n5aSn 27384\n0ZY= 27385\nX211bHQ= 27386\nIGZhc2NpbmF0aW5n 27387\nQXZlcmFnZQ== 27388\nIHByw6k= 27389\nIENoYWlybWFu 27390\nLmZpbmRFbGVtZW50 27391\nX3Bpbg== 27392\nIGNvbXBhcmluZw== 27393\nIGRhcmtuZXNz 27394\nLUZp 27395\nLXNlcnZlcg== 27396\nIHNlbGVjdGluZw== 27397\nc3RlcmRhbQ== 27398\nIFBhcnRz 27399\nRk9STUFUSU9O 27400\nIG5vdGluZw== 27401\nIHBpbGU= 27402\nb2dz 27403\nIHBhbGV0dGU= 27404\nX2Rv 27405\naXRpemU= 27406\nMDc5 27407\nKCko 27408\nIGRlZmluaW5n 27409\nIHJlbWFpbmRlcg== 27410\nVW5pdHM= 27411\nX1RBU0s= 27412\nSHR0cENsaWVudA== 27413\nU29jaWFs 27414\nIGZ1bmRyYQ== 27415\nTlI= 27416\nY2hlc3Q= 27417\nQ3VycmVuY3k= 27418\nLmFkYXB0ZXI= 27419\nIGRvcA== 27420\ndW50aW5n 27421\nQU5HVUFHRQ== 27422\nIkhl 27423\nCWluZGV4 27424\nX3BhY2thZ2U= 27425\nLkljb24= 27426\nIHJlcGV0 27427\nbWFzcw== 27428\nPSIuJA== 27429\nIFN1ZA== 27430\nIGxpZA== 27431\ncHJvdmluY2U= 27432\n7Jw= 27433\nR1BJTw== 27434\n0Jo= 27435\nIE15U1FM 27436\nIGRvY3M= 27437\nIEdB 27438\nIGlwc3Vt 27439\nS2VybmVs 27440\nIGFjY2VwdHM= 27441\nIGZpdHRpbmc= 27442\nIGN1YW5kbw== 27443\nIGR1cGxpYw== 27444\nIEJyb3RoZXI= 27445\nIEtsZQ== 27446\nbnVtcw== 27447\nIG1vcnBo 27448\nICMjIyMjIyMj 27449\nIENHUG9pbnQ= 27450\nPHVuc2lnbmVk 27451\n5L6L 27452\nIER1a2U= 27453\nLnNldEJvdW5kcw== 27454\ncXM= 27455\nb3JpYw== 27456\namVy 27457\nIHJlZ2FyZGVk 27458\nSHR0cFJlcXVlc3Q= 27459\nIGJvbmRz 27460\nIHRob3JvdWdobHk= 27461\nZW5jZW50 27462\nIGhpZ2hsaWdodGVk 27463\nIGFjcmVz 27464\nIHdvcmtwbGFjZQ== 27465\nIEx1eA== 27466\nIHF1b3Q= 27467\nOTg2 27468\nLmluZmxhdGU= 27469\nIGRvY3VtZW50ZWQ= 27470\nIGFkZGljdGlvbg== 27471\nIG11dGF0aW9u 27472\nLmNpdHk= 27473\nIGJvdHRsZXM= 27474\nIFJlcG9zaXRvcnk= 27475\nb25u 27476\nZXJybm8= 27477\nQVJJQUJMRQ== 27478\n5bqm 27479\nX0JFR0lO 27480\nZ2xhcw== 27481\nJ30pCg== 27482\nIE1hc3NhZ2U= 27483\nIFdoaXQ= 27484\ncmVnZXg= 27485\nV0E= 27486\nIG91dGxldA== 27487\nLWhlYWQ= 27488\nIGV4cGlyZWQ= 27489\nIFRoYWk= 27490\nL2luY2x1ZGU= 27491\nZ3JhZGllbnQ= 27492\nc2NhbmY= 27493\nIHNlYW0= 27494\nd2Fs 27495\nCWJ1Zg== 27496\nQmVhcmVy 27497\nIHByZWNpb3Vz 27498\naWZhY3Rz 27499\nY29vcmQ= 27500\nIGV4cGxvcmF0aW9u 27501\nLmdldFk= 27502\nKGhhbmRsZQ== 27503\nVG9waWM= 27504\nIFZlbnQ= 27505\ncmhz 27506\nLS0tLS0tCg== 27507\nIEJyaWdodA== 27508\nIGd1aWxk 27509\nbW90aGVy 27510\nc3Rvcm0= 27511\nIG11bmljaXBhbA== 27512\nIGluaw== 27513\nLlRZUEU= 27514\nd2w= 27515\nLi4uPC8= 27516\nX0RFVg== 27517\nPSIuLw== 27518\nX2Jvb2s= 27519\ndGh5 27520\naXR6ZXJsYW5k 27521\nb3BsZXM= 27522\ndHJhY3Rpb24= 27523\nIENhbWVyb24= 27524\nIEFuZHJl 27525\nLnJlc3VsdHM= 27526\nIGNocm9tZQ== 27527\nIHNlY3VyZWQ= 27528\nIHN1cmZhY2Vz 27529\nKTw= 27530\nIHRvYmFjY28= 27531\nCXNwcmludGY= 27532\nIGVzY2Fs 27533\nIHN0ZGVycg== 27534\nIE1lbGJvdXJuZQ== 27535\nIGRpc3RyaWN0cw== 27536\nIG1hdHQ= 27537\nb2hlbg== 27538\nIGRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 27539\nKE1vZGVs 27540\nIHNlbnNpdGl2aXR5 27541\nS0E= 27542\ndHJhbnNwb3J0 27543\nLmdldERhdGU= 27544\nIHN1YnRsZQ== 27545\nVUdJTg== 27546\nLm1vdXNl 27547\nIGFsdGVybmF0aXZlcw== 27548\nIGVsbGU= 27549\nY29yYXRpb24= 27550\ncmVhdGlvbg== 27551\n5ps= 27552\nX05PUk1BTA== 27553\nRGlzcGxheU5hbWU= 27554\nIGZhbmN5 27555\nSVNFRA== 27556\nTU9E 27557\nLlJlYWRPbmx5 27558\nIFVi 27559\nIEN1 27560\naWNvbA== 27561\nIE5lbHNvbg== 27562\nIENPUg== 27563\nYW56YQ== 27564\nIFNwYXJr 27565\nICJcXA== 27566\nLS0KCg== 27567\nd29vY29tbWVyY2U= 27568\nIHJlbWVtYmVyZWQ= 27569\ndmVyaXR5 27570\nIEV4dGVuc2lvbg== 27571\nIFBE 27572\nIHNlYXJjaGVz 27573\nLnNv 27574\nIEZvb3Rlcg== 27575\nID0n 27576\nIFdBUk5JTkc= 27577\nLWxv 27578\nCXRhYmxl 27579\nIGRyYXdlcg== 27580\ncGljdHVyZQ== 27581\nIEZhbnRhc3k= 27582\nc3Rvcnk= 27583\nIG3Dqm1l 27584\nIwoK 27585\nX3NsaWNl 27586\nb2x0YWdl 27587\nSGFy 27588\nL3k= 27589\nIEVS 27590\nZGll 27591\nIFBPUw== 27592\nLmFjdGlvbnM= 27593\nKE1haW4= 27594\nZXdhcnQ= 27595\nYXBldXQ= 27596\nIFNURQ== 27597\naWRkaW5n 27598\nLnJlYWRMaW5l 27599\nIHNlYXJjaGVk 27600\nV2Vk 27601\nLmZpZ3VyZQ== 27602\ndWdodGVycw== 27603\nKCkuX18= 27604\nIG9yYml0 27605\nc2hpcHBpbmc= 27606\nIGZyaWVuZHNoaXA= 27607\nIFNoaWZ0 27608\nLW9y 27609\ncXVv 27610\nV0hFUkU= 27611\nIEVzcA== 27612\nLmZvcndhcmQ= 27613\nb2ZmaWNl 27614\nIGnDpw== 27615\nIENoZWxzZWE= 27616\nSXRlbVNlbGVjdGVk 27617\nYWNoZXJz 27618\nZGVsZXRlZA== 27619\ncm91cw== 27620\nICItIg== 27621\nIEdyYW4= 27622\nIPCfmA== 27623\nLXBvd2Vy 27624\nZXR0YQ== 27625\nIHJlbWluZGVy 27626\nZW5zb3Jz 27627\nIEFsbG93 27628\nxJlk 27629\nX3RlYW0= 27630\nIGNyb3du 27631\ndGlja2V0 27632\nIGNvbGxlY3Rpb25WaWV3 27633\nbGFjZQ== 27634\nIGZpeGVz 27635\nIEh1Yg== 27636\nY2F0YWxvZw== 27637\nIElkZW50aXR5 27638\nIGV4Y2Vzc2l2ZQ== 27639\nIE5hdmlnYXRvcg== 27640\nX0JS 27641\nLXBsYXk= 27642\nIENhbXBhaWdu 27643\nICAgICAgICAgICAgICAgCg== 27644\nYXNpdmU= 27645\nIHdj 27646\nIEJlaWppbmc= 27647\nL3d3dw== 27648\nIG1ha2V1cA== 27649\nIGRpc3RhbmNlcw== 27650\nIHNhdGlzZnk= 27651\nQ09ORA== 27652\nIHdvdW5k 27653\nKCld 27654\nIHZpb2xhdGlvbnM= 27655\nIHN0YXlz 27656\nLyM= 27657\naWxpbmU= 27658\nXEV4Y2VwdGlvbg== 27659\nIE1vdGlvbg== 27660\nIGhlYWw= 27661\nX3BsYW4= 27662\ncmFzZXM= 27663\nKG1haW4= 27664\nQXBwbGU= 27665\nIGNvbXBsZXRpbmc= 27666\nIGRldGVybWluZXM= 27667\nU2Nhbg== 27668\nIHN0ZWFs 27669\nIFNvYw== 27670\nQW5hbHlzaXM= 27671\nIGZhdm9yaXRlcw== 27672\nIGNhbXBv 27673\nb25lcg== 27674\nIEZsaWdodA== 27675\nLi4uCgoKCg== 27676\nKSkpKSk7Cg== 27677\nLWNvdW50 27678\nIHB3 27679\nQXNTdHJpbmc= 27680\nIHNleHVhbGx5 27681\nRmlyc3ROYW1l 27682\nIEVzY29ydA== 27683\nY2FsYw== 27684\nIFdpa2lwZWRpYQ== 27685\nIGRvY2tlcg== 27686\nIFN3ZWV0 27687\nJ2lk 27688\nSW50bw== 27689\nIEh1bnQ= 27690\nLmVxdWFsVG8= 27691\nIGxhYm9yYXRvcnk= 27692\nIEJVU0lORVNT 27693\nRmlsZURpYWxvZw== 27694\nVHJlZU5vZGU= 27695\nLkVuYw== 27696\nIE1heGltdW0= 27697\nIG1vdGhlcnM= 27698\n5rU= 27699\nIGZyYWN0 27700\nLnN0YXJ0c1dpdGg= 27701\nIGhhcmRjb3Jl 27702\nLm9i 27703\n5aeL 27704\nID48Lw== 27705\nX3Jv 27706\nKCgq 27707\nPz8/Pw== 27708\nX3ZlcnRleA== 27709\na2VpdA== 27710\nIEhhbGxvd2Vlbg== 27711\nVEk= 27712\nIFZh 27713\nX2Nhcg== 27714\nPSJ7eyQ= 27715\nIHJhbmRvbWx5 27716\n0LDQvdC40LU= 27717\nIHNob2NrZWQ= 27718\nIFBva8OpbW9u 27719\nc2lnbmFs 27720\nIFNESw== 27721\nbWlkZGxld2FyZQ== 27722\nIHRyZWF0aW5n 27723\nIGJ1cm5lZA== 27724\nRGVwYXJ0bWVudA== 27725\nIFNwZWN0 27726\nIGNsaWVudGU= 27727\nIFJlZGRpdA== 27728\nX2F2Zw== 27729\nIGluc3RhbGxpbmc= 27730\nX2FscGhh 27731\nLGRhdGE= 27732\nIHNldElk 27733\nIExpc3RWaWV3 27734\nKHByb3BlcnR5 27735\nIGNyb3NzaW5n 27736\nIE9iag== 27737\nIFdhcmQ= 27738\nIFJlZGlyZWN0VG8= 27739\nIFByZXNlbnQ= 27740\nIGRyYXdz 27741\nY2hlZHVsZWQ= 27742\nIGxlZ2lzbGF0aXZl 27743\nIHR3aXN0 27744\nIFN0cmE= 27745\nIEFGUA== 27746\nIENoYXA= 27747\nLXBy 27748\nOkNHUmVjdA== 27749\nIGNlcw== 27750\nUm91dGVz 27751\nbm9m 27752\nIHZpc2E= 27753\nIFRDUA== 27754\nIEVWRU4= 27755\naXZpYWw= 27756\nIExldHRlcg== 27757\nUkFZ 27758\nIGltcGxvZGU= 27759\nLmVx 27760\nPScr 27761\nIG1vdGl2YXRlZA== 27762\nLnZpc2libGU= 27763\nLnNob3J0 27764\nPm1hbnVhbA== 27765\nIFRlY2huaWNhbA== 27766\nIGNvcnBvcmF0aW9u 27767\nIEhX 27768\nYW5rYQ== 27769\nVEFJTA== 27770\naXN0YXM= 27771\nIHBlcmZvcm1z 27772\nIEJlaGF2aW9y 27773\nLkZvcg== 27774\nX09SREVS 27775\nIEtpY2s= 27776\nIGNhbGxiYWNrcw== 27777\nX2Ry 27778\ndWVnbw== 27779\naHVi 27780\ndWZmaWNpZW50 27781\nc2t5 27782\nIGJw 27783\naHRhYmxl 27784\nIE9OTFk= 27785\nIEFVVEhPUlM= 27786\nLkFyZ3VtZW50 27787\nIn07Cg== 27788\nIFRodW5kZXI= 27789\nIEtvbQ== 27790\nLlNob3VsZA== 27791\nQVVUSA== 27792\nYWh1 27793\nX3BheW1lbnQ= 27794\nIHN0YXJ0ZXI= 27795\n7ISc 27796\n7Jqp 27797\nQmxvZw== 27798\nLnBhdGNo 27799\nIGdvdmVybmVk 27800\nYXNzeQ== 27801\nLWZvdW5k 27802\nIHRoZWF0ZXI= 27803\nIEZvbnRXZWlnaHQ= 27804\nIEJhdG1hbg== 27805\nIklm 27806\nLlJhbmRvbQ== 27807\nX2RlbHRh 27808\nIENF 27809\nQXV0aGVudGljYXRlZA== 27810\nIGRyb25l 27811\nIGNvdXM= 27812\ncmFkaXVz 27813\nTWVy 27814\nKE5vbmU= 27815\nIE5K 27816\nX2hlYWRlcnM= 27817\nIGFtZXI= 27818\ncHl0ZXN0 27819\nIEFjdGlvbnM= 27820\nCQkJICAgIA== 27821\nIGV0dA== 27822\nIGhvbHk= 27823\nIHVuY29tZm9ydA== 27824\nIE5pbg== 27825\nIERlY2ltYWw= 27826\nIE1lc3NhZ2Vz 27827\nLnNlbmRlcg== 27828\nXV0pCg== 27829\nIGVtYnJhY2U= 27830\nVGhvdWdo 27831\nL3Nw 27832\nIGN1bHR1cmVz 27833\nIGhpZ2h3YXk= 27834\ndGFy 27835\nLmZhaWw= 27836\nX2hpZGRlbg== 27837\nIGNvbXBvbmVudERpZE1vdW50 27838\nIFdyaWdodA== 27839\nIGphZw== 27840\nX2ls 27841\nLi4vLi4vLi4v 27842\naWd1 27843\nRm9vZA== 27844\nIGFjZQ== 27845\nIGHDsW9z 27846\nVVNE 27847\nIG11dHVhbA== 27848\nTG9naWM= 27849\nIHRlbXBsZQ== 27850\nIGJyaWVmbHk= 27851\nIFRyaXA= 27852\nY2xhc3NtZXRob2Q= 27853\nZGVmYXVsdHM= 27854\nIGNodW5rcw== 27855\nLCwsLA== 27856\nIFJlYXNvbg== 27857\nJGlk 27858\nLXVwcw== 27859\nIGRhbW4= 27860\nIHRydWNrcw== 27861\nIHVubGltaXRlZA== 27862\nIHNjdWxwdA== 27863\nIENhcmRz 27864\nIGF1dG9y 27865\nIFRlc3Rpbmc= 27866\nIGRpZXNl 27867\nc2hvcHM= 27868\n57Q= 27869\nKHBheWxvYWQ= 27870\nIFBBVEg= 27871\nIE1lbW9yaWFs 27872\nIHJpZGljdWxvdXM= 27873\nZWdyZWU= 27874\nLXdpbm5pbmc= 27875\nIHJlaGFi 27876\nIHNvcGhpc3RpY2F0ZWQ= 27877\nd3BkYg== 27878\nCXBhdGg= 27879\nISI7Cg== 27880\nX1NZUw== 27881\nLnNwZWVk 27882\nIHNvYXA= 27883\nc3VmZml4 27884\nV3JhcA== 27885\nIGVuaGFuY2VtZW50 27886\nw4k= 27887\nw7pi 27888\nIHBsYXlsaXN0 27889\nIG1peGluZw== 27890\nYW50aWRhZA== 27891\nPSIiOwo= 27892\nIFJldmlzaW9u 27893\nIEJlYXQ= 27894\nLmluYw== 27895\nLXdheQ== 27896\nZW5jaWFz 27897\ndWxlcnM= 27898\nQ2F0 27899\naWRlbA== 27900\nIFNoaXA= 27901\nLnNldENvbG9y 27902\nIHRocmVhdGVuaW5n 27903\nLm1vZHVsZXM= 27904\nIGFmdGVyd2FyZHM= 27905\nIERhc2hib2FyZA== 27906\nCiAK 27907\nU2lnbmFs 27908\nIHByaW1lcg== 27909\nb3JuZXlz 27910\naWNpYXJ5 27911\nIGxpZ25l 27912\nX3ByZWRpY3Q= 27913\nIGFlc3Q= 27914\nX2h0dHBz 27915\nPjo= 27916\nIExleA== 27917\nIHJlbmNvbnRyZXM= 27918\nZWdyYWw= 27919\nc2NhbGE= 27920\nX2ZhbWlseQ== 27921\nw59lbg== 27922\nX3N5bQ== 27923\nIHVuY2VydGFpbnR5 27924\nIFZBTFVF 27925\nIH07DQoNCg== 27926\nIGJyb2FkZXI= 27927\nIGhvcnNlcw== 27928\n44Gd 27929\nIEthbA== 27930\nb2Jh 27931\nX0lORVQ= 27932\nIEtpbGw= 27933\nanF1ZXJ5 27934\nYW1pbmF0aW9u 27935\nW0Ai 27936\nIG11ag== 27937\nIyMjCg== 27938\nRmlyc3RPckRlZmF1bHQ= 27939\ndGhlblJldHVybg== 27940\nQ2hl 27941\nL2Zvb3Rlcg== 27942\nIHBhcmtz 27943\nYXNqZQ== 27944\nIEd1bGY= 27945\nIG1vZGVzdA== 27946\nLkluaXQ= 27947\n77yfCgo= 27948\nIHByb3NwZWN0cw== 27949\nIHN2Zw== 27950\nIOWP 27951\nLkRpYWxvZw== 27952\nX05FVA== 27953\nICgoJA== 27954\nIGVr 27955\nIFdhcm5pbmc= 27956\nIE1L 27957\nPExN 27958\nICcNCg== 27959\naWVt 27960\naGV0aWM= 27961\nIGl4 27962\ndGhpbms= 27963\nLXNoYWRvdw== 27964\nIEVsZA== 27965\nIE5ldmFkYQ== 27966\nIExlYWY= 27967\nIEdST1VQ 27968\nIHByb21v 27969\nZW50aW5l 27970\nCU1hcA== 27971\nIE1vZGVscw== 27972\nIEtyaXN0 27973\nX2tlcm5lbA== 27974\nLW1hZGU= 27975\nIGNlcnI= 27976\nQXNzZXRz 27977\nZWxsYXI= 27978\nIGludm9rZWQ= 27979\nLnZ1ZQ== 27980\nIGN1bHRpdg== 27981\nQ2xvc2Vk 27982\nIGdlbmVyYXRlcw== 27983\nZmZmZmZm 27984\ndGhlc2l6ZQ== 27985\nc3FydA== 27986\nIENhc3RsZQ== 27987\nLmNhcg== 27988\nIGtlZW4= 27989\ndW5kYQ== 27990\nIENyb3c= 27991\nIFNpbmdo 27992\neXRob24= 27993\nIGJlYW5z 27994\nbGFyZw== 27995\n5paH5Lu2 27996\nQXdlc29tZQ== 27997\ndW5jYXRl 27998\nUGF0aHM= 27999\nb2pp 28000\nKGN1cnI= 28001\nQ09ORFM= 28002\nIG1pbQ== 28003\nIHNob3VsZGVycw== 28004\nSGFyZA== 28005\nYXN0ZXM= 28006\n0LDQtdGC 28007\nIGNvbnZpbmNl 28008\nZGVjZXNz 28009\nbWFkZQ== 28010\nIENNRA== 28011\nLklt 28012\nIGNoYW9z 28013\nZW5zaXZlbHk= 28014\nIGNvb2xpbmc= 28015\nIGJ1cmllZA== 28016\nKCdA 28017\nX1Nl 28018\nCQkJCQkJCQkJCQkJCQkJCQ== 28019\nLmNvbXBhbnk= 28020\nLnN1Ym1pdA== 28021\ncGhhbnQ= 28022\nIGJvb3RzdHJhcA== 28023\nX2hlbHA= 28024\n4Kc= 28025\nLmR1bXA= 28026\nIGRpZmVy 28027\nX21hcHBpbmc= 28028\nIGNpcmN1bGFy 28029\nIGVzY29ydHM= 28030\nIGJlcmU= 28031\nIGdyYWR1 28032\nIExlZ2VuZA== 28033\naW1lZGlh 28034\nIEJhcmNlbG9uYQ== 28035\nIGJlZHM= 28036\n5Yiw 28037\n44CK 28038\nX3ZvbHVtZQ== 28039\nIHRyZW1lbmRvdXM= 28040\nIHNjYWxpbmc= 28041\nIHBpbnM= 28042\nZW5hcw== 28043\ndHlwZXBhcmFt 28044\nRGFzaGJvYXJk 28045\ncmVuZGVyZXI= 28046\nIHNwaQ== 28047\nICYk 28048\nIFNraW4= 28049\nYWxtYXJ0 28050\nIGhvY2tleQ== 28051\nICciLiQ= 28052\nIGVycm5v 28053\nIGJldw== 28054\nRm9sbG93aW5n 28055\nLk1vZHVsZQ== 28056\nZXJhYmxl 28057\nIE1pbGl0YXJ5 28058\nIFJpbw== 28059\nX2F2YWlsYWJsZQ== 28060\nIFN1cmZhY2U= 28061\nIHN0YWI= 28062\nSUZJRVI= 28063\nIExJU1Q= 28064\nIGRhc2hib2FyZA== 28065\nIGNsdXN0ZXJz 28066\nLnBsdWdpbg== 28067\nIGpvdQ== 28068\nIERlY29y 28069\nRm91cg== 28070\nIGRlbGxl 28071\nKioqKioqLwo= 28072\naWF6 28073\naW5kZQ== 28074\nY2hpbmc= 28075\nIGdldEl0ZW0= 28076\nLkFkZHJlc3M= 28077\nbWVudGVk 28078\nQW1lcmlj 28079\nUGxhaW4= 28080\nIHVzYg== 28081\nIFByYWN0aWNl 28082\nX21lbnQ= 28083\nLmJsdWU= 28084\nSGludA== 28085\n0YDQsNCy 28086\nIGNvbm5lY3Rvcg== 28087\nIGluaGVyaXRlZA== 28088\n0LjQsg== 28089\nIGludGVydmFscw== 28090\nIGNlcmU= 28091\nIHVk 28092\nIGluY29u 28093\nLkV4aXN0cw== 28094\nIE1pYw== 28095\nRks= 28096\nKGNhcmQ= 28097\nLlNldHRpbmdz 28098\nIGV4aGliaXRpb24= 28099\nIG9uUHJlc3NlZA== 28100\nIHJlc3RvcmVk 28101\nZW5ndQ== 28102\nLmRlZg== 28103\nIHJlY3Y= 28104\nLiIpOw0K 28105\nZW5jb2Rlcg== 28106\nYXRoZXJpbmU= 28107\nKGRlc3Q= 28108\nYXplZA== 28109\nI2VuZHJlZ2lvbg== 28110\nc2VtYmw= 28111\nLE0= 28112\nb2J5 28113\nINC/0LXRgA== 28114\nLkNhbGw= 28115\nIGF0dGVuZGFuY2U= 28116\nLWJvcmRlcg== 28117\nIGFkZHJlc3Npbmc= 28118\nw6pu 28119\nIExldg== 28120\nIGJhc2g= 28121\nYmVuY2g= 28122\nQ3JlZGVudGlhbHM= 28123\nU3BhY2luZw== 28124\nKG9m 28125\nX1JFU0VU 28126\naWd1b3Vz 28127\nIGNydWVs 28128\nIGNyb3NzZWQ= 28129\nIGxldXI= 28130\nIEdvbGY= 28131\nb3JyZWN0 28132\nIHBhY2tldHM= 28133\nIERhdGFTZXQ= 28134\nIHBhcnRseQ== 28135\nU0VRVUVOVElBTA== 28136\nIGluZGljYXRpb24= 28137\nIFNhbHQ= 28138\nYWNpYQ== 28139\nICopOwo= 28140\nCWluZm8= 28141\nIFZpZXdCYWc= 28142\nb256 28143\nIGVkaXRvcmlhbA== 28144\nIEFyZW5h 28145\nIHNpcg== 28146\nX1N0YXRpYw== 28147\nKHNvY2tldA== 28148\nc3U= 28149\nY2hvb3Nl 28150\nLm1vbnRo 28151\nLk15 28152\nMDk2 28153\nw6lyaQ== 28154\nO2ZvbnQ= 28155\nZG9lcw== 28156\nIGNvbnZlcnRlcg== 28157\nIHNhbHY= 28158\nIGxy 28159\nIGluZmx1ZW5jZWQ= 28160\nKGZlYXR1cmU= 28161\nIFF1ZWVucw== 28162\nbGV0dA== 28163\nX01PTg== 28164\nJmFtcA== 28165\nVG91Y2hhYmxlT3BhY2l0eQ== 28166\nT0ZG 28167\nIG1ldGFib2w= 28168\nKGl0ZXI= 28169\nIHZpdGFtaW4= 28170\nIElORElSRUNU 28171\nYXV0b20= 28172\nX3B1YmxpYw== 28173\nIGFkanVzdG1lbnQ= 28174\nIHNwZWNpYWxpemVk 28175\nd2luZG93cw== 28176\nLmFkZEFsbA== 28177\nIGFjY29yZGluZ2x5 28178\nIEpPcHRpb25QYW5l 28179\nIGNlbGxzcGFjaW5n 28180\nIHF1YWQ= 28181\nIGNyZWVw 28182\nIG91dGxldHM= 28183\nfWApCg== 28184\nIHByaWVzdA== 28185\nX1RIUkVBRA== 28186\nIE1hcng= 28187\nIEJ5VmFs 28188\nIGN1YWw= 28189\n6Z2i 28190\nIHRlbXBvcmFyaWx5 28191\nQW5u 28192\na2VsZXRvbg== 28193\n5aU= 28194\nIExPQw== 28195\nYXVlcg== 28196\nZGVyaXZl 28197\nIGJlaGF2aW9ycw== 28198\nYXNlbmFtZQ== 28199\nIENlbnR1cnk= 28200\nIGhvcnJpYmxl 28201\nTUVTUw== 28202\nX0xpc3Q= 28203\nd2Vp 28204\nUGF0 28205\nIENob2ljZQ== 28206\nX0ZST00= 28207\nCWxpbmU= 28208\nLmludm9rZQ== 28209\nLkJvdHRvbQ== 28210\nIG5vd2hlcmU= 28211\nLiIKCgoK 28212\nX2V4cG9ydA== 28213\nIHN0cnVnZ2xlZA== 28214\nLkFwcGVhcmFuY2U= 28215\nIEpCdXR0b24= 28216\nIEplcmVteQ== 28217\nKFtb 28218\nIGtpY2tlZA== 28219\nbWFyc2hhbA== 28220\nc3RhZmY= 28221\nZXNpdHk= 28222\nIHF1aXo= 28223\nX2VmZmVjdA== 28224\nIH0pKTsKCg== 28225\nbWVs 28226\nYmFubmVy 28227\nIFBJTg== 28228\nIGludmVudGlvbg== 28229\nIGNvbnNvbGlk 28230\nIG9wcw== 28231\nIEJldHdlZW4= 28232\namFjaw== 28233\nZXJuYXRpb25hbA== 28234\nIHNhY3JpZmljZQ== 28235\nYWdhdGlvbg== 28236\nIEpveQ== 28237\nIGFtZW5kbWVudA== 28238\nIFNvbGQ= 28239\nIHByaXNvbmVycw== 28240\n0LDQvdC90Ys= 28241\nRG9jdW1lbnRz 28242\nKV0pCg== 28243\ndXN0ZWQ= 28244\nIExpbmVhckxheW91dA== 28245\nb3Nv 28246\nX0VN 28247\nLnNlbGY= 28248\nLk1pZGRsZQ== 28249\nKS8v 28250\nIFwn 28251\nIGZ1Y2tlZA== 28252\nIE11cnJheQ== 28253\nIHByb2ZvdW5k 28254\nX0VMRU1FTlQ= 28255\ndWx0YQ== 28256\naWxlcnM= 28257\ncG9ydGZvbGlv 28258\nSnVuZQ== 28259\ndGNw 28260\nbW9kaWZpZWQ= 28261\nIFRyYWNl 28262\nIEtlbA== 28263\nYWx5emVy 28264\nKT0+ 28265\nIFJlcGFpcg== 28266\nX0JF 28267\nQnJhbmQ= 28268\ndWFydA== 28269\ncHJldmlldw== 28270\nIGluaXRpYXRpdmVz 28271\ncnVubmluZw== 28272\nYmFuZw== 28273\nCXVwZGF0ZQ== 28274\nIENvYWNo 28275\nUmljaA== 28276\nIHlvdXR1YmU= 28277\nIHJpdHVhbA== 28278\nYXBwYQ== 28279\nIFJvYmluc29u 28280\ncHJlY2lzaW9u 28281\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 28282\nPVtdCg== 28283\nIGNlbGVicmF0ZWQ= 28284\nT1RP 28285\nIGluY2x1c2lvbg== 28286\nSlA= 28287\nJzsNCg0K 28288\nIG5vdGFibGU= 28289\nKF8u 28290\nTWFuYWdlZA== 28291\nIGd1aWRlcw== 28292\nJm5ic3A= 28293\nYXRlZFJvdXRl 28294\nIEFkanVzdA== 28295\nIGNvbG9yZWQ= 28296\nX3Njb3Jlcw== 28297\nIFRlc2xh 28298\nX3Byb2dyZXNz 28299\nLmluc3Q= 28300\nWydf 28301\nLmZsYWdz 28302\nIGZjbG9zZQ== 28303\nX09QRVI= 28304\nxbx5 28305\nX25vdGU= 28306\nIHRyYW5zZ2VuZGVy 28307\n5ZU= 28308\nUklQVA== 28309\nIGFic2VudA== 28310\nIGFtZXQ= 28311\nIG9wZXJhbmQ= 28312\n66k= 28313\nIGhvb2Q= 28314\ndG9Mb3dlckNhc2U= 28315\nYXZv 28316\nIENpcmN1aXQ= 28317\nIExpbmQ= 28318\nLS19fQo= 28319\nPW0= 28320\nIHN1cHByZXNz 28321\nIE1BUA== 28322\naWFuZw== 28323\nLWFkbWlu 28324\nIHNpZGViYXI= 28325\nIEJ1 28326\nIEhleA== 28327\nLEY= 28328\nIFNpZ25hbA== 28329\nIHRyYW5zcGFyZW5jeQ== 28330\nIEZlZGVyYXRpb24= 28331\nL1Y= 28332\nUmVx 28333\nIHB1bHNl 28334\nIHRlbmRz 28335\nTnVtYmVycw== 28336\nJSc= 28337\nIGRlcG9ydA== 28338\nZGF0YXM= 28339\nX1VJTlQ= 28340\nX3RyYQ== 28341\nb2tv 28342\nICI/ 28343\nY29tcGV0 28344\nc29sZXRl 28345\ndW5kcnk= 28346\nIG92ZXJsYXA= 28347\nfWAsCg== 28348\nLmx5 28349\nX3N1bW1hcnk= 28350\nIExvc3Q= 28351\nLkNlbnRlcg== 28352\nIGRpc2FiaWxpdHk= 28353\nLlNlcmlhbGl6YXRpb24= 28354\nIGdlb20= 28355\nID86 28356\nIFdv 28357\nIHNoaXBwZWQ= 28358\nguaVsA== 28359\nIHVnbHk= 28360\nIGV4Y2l0ZW1lbnQ= 28361\nIGV4dGVyaW9y 28362\nIGNoZWNrb3V0 28363\nIGt1cg== 28364\nLEQ= 28365\nIEFsYXNrYQ== 28366\nIHN5bnRoZXRpYw== 28367\nIEJ1ZGdldA== 28368\nIFN1YnNjcmliZQ== 28369\nICYK 28370\nyJlp 28371\nIFl1 28372\nCXF1ZXJ5 28373\nfS4K 28374\nIHRyYWdlZA== 28375\nYXNzZW4= 28376\nIGFjY29tbW9kYXRpb24= 28377\nIHBoeXNpY2lhbg== 28378\nIHJlbmFtZWQ= 28379\nIHRpZGFr 28380\nesSF 28381\nIG1pbnVz 28382\nbnljaA== 28383\nMDk3 28384\nX0VYQ0VQVElPTg== 28385\ndGhyZWFkcw== 28386\nIHRpcmU= 28387\nX2NyZWF0ZWQ= 28388\nZW5zdXJl 28389\nIHdvcnRoeQ== 28390\nIGV4Y3VzZQ== 28391\nIGNsb3Ro 28392\nLnBhcmVudE5vZGU= 28393\nL3BsYXRmb3Jt 28394\nIFVGQw== 28395\nIEd0aw== 28396\ndW5ueQ== 28397\nIGdpYnQ= 28398\na2VsZXk= 28399\naHVt 28400\nKHR4 28401\nCWRldg== 28402\nIG91dGZpdA== 28403\nZG9vcnM= 28404\nIGZvbg== 28405\naWN1dA== 28406\ndm9sYXRpbGU= 28407\nIGhvbW9zZXg= 28408\nTWF4aW11bQ== 28409\nIGV4cGVuZA== 28410\nIH0pOwoKCg== 28411\nRXE= 28412\nb25kZXJz 28413\nZGVwYXJ0bWVudA== 28414\nIFBoeXNpY3M= 28415\nIn0pOwo= 28416\nIHBhcmFk 28417\nLlN0cg== 28418\nIHNlbGU= 28419\nSUZJRUQ= 28420\nIGRlbGl2ZXJz 28421\naXZhbg== 28422\nIHJlc3BvbnNpYmlsaXRpZXM= 28423\nIGFkdm9jYXRlcw== 28424\n6LU= 28425\nIFJJRA== 28426\nLnBhcmFtZXRlcnM= 28427\nTWV0cmljcw== 28428\ncm9uaWNz 28429\nIFVJVGFibGVWaWV3Q2VsbA== 28430\nQWJzb2x1dGU= 28431\naXBzZQ== 28432\neWx1bQ== 28433\nTUxFbGVtZW50 28434\nX1ZBTElE 28435\nPHRpdGxl 28436\nRGxn 28437\ncGFjZXM= 28438\nIHN5bmRyb21l 28439\nYmVhbnM= 28440\nX2RhdGFiYXNl 28441\nb3ppbGxh 28442\nIE1lZw== 28443\nREJH 28444\nIGx1Yg== 28445\nQmFnQ29uc3RyYWludHM= 28446\nYWJhZA== 28447\nIHByb2plY3RlZA== 28448\nX0JZVEU= 28449\nLlNpemVG 28450\nc3RyZWV0 28451\nCgoKCgoKCgoKCg== 28452\nIExPU1M= 28453\nIGRpcmVjdG9ycw== 28454\nL25ld3M= 28455\nIG51cnNpbmc= 28456\nIERvbmU= 28457\nLkhUVFA= 28458\nZGlzY291bnQ= 28459\nIFJvdA== 28460\nVG9NYW55 28461\nIGVuYWJsaW5n 28462\nIGF1c3Np 28463\nb3N0YQ== 28464\nICAgICAgICAgICAgICAgIA0K 28465\n6L29 28466\nIGhlbGljb3B0 28467\nIEluc2lkZQ== 28468\n5L+h5oGv 28469\naXNwZXI= 28470\nIEFsbGFo 28471\nQVJDSEFS 28472\nIHJvbGxz 28473\nQ29tcGFyZQ== 28474\nWFA= 28475\nSW5kZXhPZg== 28476\nU1VN 28477\nIGFzc3VyZWQ= 28478\nIFBoeXNpY2Fs 28479\nRW5kcG9pbnQ= 28480\nLkdsb2JhbA== 28481\nLmRldGFpbA== 28482\nIHRoZWZ0 28483\nLmp1cGl0ZXI= 28484\nIGh1bW9y 28485\nLlJlbmRlcg== 28486\nQWxleA== 28487\nLmNhcA== 28488\nIGJ1ZmZlcnM= 28489\nIGRpc3Bvc2U= 28490\ndGlvbg== 28491\nLnByZXNlbnQ= 28492\nemVs 28493\nLFA= 28494\nIGRlc3BlcmF0ZQ== 28495\nLmdldENvbHVtbg== 28496\nIHR3aW4= 28497\n7JY= 28498\nLmNhbg== 28499\nIGZsZWU= 28500\nIElyYW5pYW4= 28501\nIHN0aWNreQ== 28502\nIFVUQw== 28503\nTFQ= 28504\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 28505\nIGxpY2Vuc2luZw== 28506\nX1BPSU5U 28507\nIE1hcHM= 28508\nIGxvbA== 28509\nPW1vZGVscw== 28510\nLXRhYg== 28511\nIE5hc2g= 28512\nX2xvZ2dlcg== 28513\ndG9yY2g= 28514\nIENPTlNFUVVFTlRJQUw= 28515\nTm90RW1wdHk= 28516\nL3JlYWN0 28517\nIHBm 28518\nIGFzc2VydGlvbg== 28519\nIHN1YnNlcXVlbnRseQ== 28520\nX2Nhbg== 28521\nIHBhbmRlbWlj 28522\nb2d1ZQ== 28523\nIisK 28524\nX2VudA== 28525\nX1BhcmFt 28526\nLgoKCgoKCgoK 28527\nUmVzZWFyY2g= 28528\nQ2FwdHVyZQ== 28529\nIGJlbG92ZWQ= 28530\nZGVt 28531\nIGV4dHJhY3RlZA== 28532\nIGZpZ2h0cw== 28533\nRVJD 28534\nKGF1dGg= 28535\ncG9zaXRpb25z 28536\nIHJldmVyc2Vk 28537\nKHN0YWNr 28538\nIF8p 28539\ndXRvZmY= 28540\nX2Zsb3c= 28541\n54K5 28542\nKEdhbWU= 28543\nIGV4Y2x1ZGVk 28544\nIENTVg== 28545\nY2c= 28546\nIFRpdGFu 28547\ncGF1c2U= 28548\nIGNlcmNh 28549\nIGR1bXBzdGVy 28550\nTGVzcw== 28551\nIGtvdGxpbng= 28552\nYXN0ZXJ4bWw= 28553\nIHBvaW50ZXJz 28554\nIGZsb3dz 28555\nIFR1bg== 28556\nIE1haW5BY3Rpdml0eQ== 28557\nIGRpc2NyZXQ= 28558\nIGNvbWJpbmF0aW9ucw== 28559\ndmlzaXQ= 28560\nX2JpbmQ= 28561\nb290aW5n 28562\nZGF0ZXI= 28563\nX2xvb2t1cA== 28564\nLm5pbw== 28565\nIHN3ZWF0 28566\nIFJk 28567\nIHNjaWVudGlzdA== 28568\nIFBpeGVs 28569\nQE5nTW9kdWxl 28570\nUGxheWluZw== 28571\nIHVuZm9sZA== 28572\nVHJhbnNsYXRl 28573\nIExhd3JlbmNl 28574\nIEZJWE1F 28575\nQmlsbA== 28576\nIFJJR0hU 28577\nIHdoZXJldmVy 28578\nIG9vaw== 28579\ndmlkZW5jZQ== 28580\nIF1dOw== 28581\nIFNraWxs 28582\ndW5pc3Rk 28583\nIPCfmYI= 28584\nIGZlbWFsZXM= 28585\nLS0pCg== 28586\njrflj5Y= 28587\nIEZyZWQ= 28588\nT3ZlcmFsbA== 28589\n2YI= 28590\nIGVzc2VuY2U= 28591\nIHRoZXJlYnk= 28592\nIHdvdW5kZWQ= 28593\nIERPV04= 28594\nbGVzc29u 28595\ndGV4dHVyZQ== 28596\nUm91bmQ= 28597\nIGF1dG9tYXRlZA== 28598\nINCh 28599\nIFVwZGF0ZXM= 28600\nIHNoYWRl 28601\ncHVibGlzaA== 28602\nIEdlYXI= 28603\nPWxhbWJkYQ== 28604\nIGxldmVy 28605\nKSsi 28606\naGlsbA== 28607\nIHJhZGFy 28608\ncnlpbmc= 28609\nICIpLg== 28610\nZmlsbGVk 28611\nIGxpbmV1cA== 28612\nIGRs 28613\nIHdvcmtzcGFjZQ== 28614\nVm8= 28615\nX2R0 28616\n67I= 28617\nX0l0ZW0= 28618\nTlNVUkw= 28619\nLnZlcmlmeQ== 28620\nIEhhd2FpaQ== 28621\nR29k 28622\nTWFyY2g= 28623\nIFvigKZd 28624\nIHBlbG8= 28625\ndXJpb3Vz 28626\nIFBpdHRzYnVyZ2g= 28627\nLkl0 28628\nQ2xlYW4= 28629\nPlw8Xg== 28630\nIGlvcw== 28631\nc291bmQ= 28632\nIl07 28633\nIGZyZWVk 28634\ncm90dGxl 28635\nIExvd2Vy 28636\nW2NvdW50 28637\n5Z0= 28638\nIHBhbGU= 28639\nIFdheW5l 28640\nZWFydGg= 28641\nX2NhdGVnb3JpZXM= 28642\nVUNL 28643\nLm1ldGFkYXRh 28644\nIHN1bW1vbg== 28645\nSE9NRQ== 28646\n0L7Qu9GM0Lc= 28647\nIG1hbnVmYWN0dXJlZA== 28648\nIGRvY2s= 28649\nIGNvbXBldGl0b3Jz 28650\nX01PREVM 28651\nb2tpYQ== 28652\nIEhleQ== 28653\nzr8= 28654\nIGJhY2t3YXJk 28655\nIFBPU1M= 28656\ncm9wYQ== 28657\nIGNyaQ== 28658\nX09CSg== 28659\nVHJhbnNwb3J0 28660\nLWhpZ2g= 28661\nIGVyb3Rpaw== 28662\nX3Nsb3Q= 28663\nIGFydGlj 28664\nX2ZyYW1ld29yaw== 28665\nLXNlcmlm 28666\nIFNxbERiVHlwZQ== 28667\nJyko 28668\nKyIv 28669\nIHdvcmU= 28670\nU2ls 28671\nIHN0b3Jpbmc= 28672\nIFBoYXNl 28673\ndWFudA== 28674\nIGJ1bXA= 28675\naW5obw== 28676\nIGRpZ24= 28677\nIGJhY2tz 28678\ncXE= 28679\nKGhhc2g= 28680\nIGdlbw== 28681\nIHRlbmRlcg== 28682\nTG9nbw== 28683\nISkK 28684\nIE1Y 28685\nIEFydGh1cg== 28686\nZXNzb2E= 28687\nX0No 28688\nIGJlZHJvb21z 28689\nPSIjIj48 28690\nIHRocm9hdA== 28691\naW5zaWM= 28692\nLmludGVnZXI= 28693\nIHByaW1pdGl2ZQ== 28694\nVHJ1dGh5 28695\nIGZhY2lsaXRhdGU= 28696\nIGNyZWF0aXZpdHk= 28697\nIEROUw== 28698\nIGdyYQ== 28699\ndWV6 28700\nIGNvdW50bGVzcw== 28701\nIFBvbGFuZA== 28702\nJ00= 28703\nIERpc3Q= 28704\nIHZlc3Q= 28705\nIGNlcnRpZmljYXRpb24= 28706\n4buR 28707\naGVsZA== 28708\nZXh0ZW5zaW9ucw== 28709\nKHN0YXRpYw== 28710\nIGdyYWRlcw== 28711\nIFViZXI= 28712\n44Gf 28713\nIFtdKQo= 28714\nZGF0b3M= 28715\nIGdldERhdGE= 28716\nIENoYXJn 28717\nIEJT 28718\nLm1pY3Jvc29mdA== 28719\nLnZpZGVv 28720\nLmRpcmVjdGlvbg== 28721\nLT57Jw== 28722\nbHVh 28723\nYXBlc3Q= 28724\nIGJvaWxlcg== 28725\nZXJlaw== 28726\nIGRlY2lkZXM= 28727\nLmphcg== 28728\nSVND 28729\nIFdvcmRz 28730\nKENPTg== 28731\nRU1QTEFURQ== 28732\ncmVlemU= 28733\nc2hvdHM= 28734\nYXBwcw== 28735\ndW50ZWQ= 28736\nLnNldE5hbWU= 28737\nOjo8 28738\nLWJvbGQ= 28739\n6rI= 28740\n5a+G 28741\nTG9uZ3JpZ2h0YXJyb3c= 28742\nIHVuZmFpcg== 28743\nIGVhcm5pbmc= 28744\nIHNoZWxm 28745\nVVJFTUVOVA== 28746\nIGlkbGU= 28747\nX01FTlU= 28748\nLkN1c3RvbQ== 28749\nQUdFUg== 28750\nLSI= 28751\nX3N3aXRjaA== 28752\nYmVjYXVzZQ== 28753\nKXZpZXc= 28754\nbWFyZQ== 28755\nX2NvbmRpdGlvbg== 28756\nIFN0YXJ0aW5n 28757\nTXZj 28758\nKHByZQ== 28759\nZHVtcA== 28760\nX0xPQ0s= 28761\nYXRldGltZQ== 28762\nLmNhbGxiYWNr 28763\nIENlcg== 28764\nb3BvbA== 28765\naWJyYXJ5 28766\nIHJlc2VydmF0aW9u 28767\nCQkJCQkJCQo= 28768\nbGVjdG9y 28769\nZ3JhZHVhdGU= 28770\nIGdlbmVyb3Vz 28771\nIGlvbg== 28772\ncmljYW8= 28773\nbXE= 28774\nX2NvbXBsZXRl 28775\nKGN1cnNvcg== 28776\nIEZvcm1Db250cm9s 28777\nOmNlbnRlcg== 28778\nIHN1YnN0aXR1dGU= 28779\nIFBsYW5uaW5n 28780\nIHBlbnNpb24= 28781\nIHJlY29tbWVuZGF0aW9u 28782\nIFRhZ3M= 28783\nIGdlZg== 28784\nIGFsYnVtcw== 28785\nIHdhc2hpbmc= 28786\ncm9j 28787\nIHRyYWlucw== 28788\nYXRpbmdz 28789\nIGV4cG9uZW50 28790\nYWNrYmFy 28791\nLWxu 28792\nw6Fn 28793\nLkRhdGFBbm5vdGF0aW9ucw== 28794\nIEVJRg== 28795\nIE1hbGF5c2lh 28796\nCVBPUlQ= 28797\nb251cw== 28798\nIGNsZXZlcg== 28799\nIHBldQ== 28800\nPgoKCgo= 28801\nIEFyZ3VtZW50cw== 28802\nIGRlYnVnZ2luZw== 28803\nKHJpZ2h0 28804\nJ0Q= 28805\nY29tcHV0ZQ== 28806\nIGZpbmVzdA== 28807\nT1JBR0U= 28808\nIHNwZWN0YWN1bGFy 28809\ncGhyYXNl 28810\nIGluZGlh 28811\nIGxlZ2VuZGFyeQ== 28812\nYmlydGg= 28813\nIGNvbXBvc2l0ZQ== 28814\nIGdyb3dz 28815\nIFRE 28816\nIGVwaWQ= 28817\nIGxhdW5jaGluZw== 28818\nXV1b 28819\nTWludXRlcw== 28820\nIENoYQ== 28821\nIGNsZWFuZWQ= 28822\nIHdpdG5lc3Nlcw== 28823\ndWthbg== 28824\nCVR5cGU= 28825\nIGhhYmU= 28826\ncGFyYWdyYXBo 28827\nIEpQYW5lbA== 28828\nIEhhbm4= 28829\nIHZhcmllZA== 28830\nIFBva2Vtb24= 28831\nIE1VU1Q= 28832\n5Yqo 28833\nLnZpc2liaWxpdHk= 28834\nb3B1cA== 28835\nXls= 28836\nLmV4cGFuZA== 28837\nICInLA== 28838\nLmZhc3RlcnhtbA== 28839\nX2F1dG8= 28840\nIFNoZWV0 28841\nbWFya2Vy 28842\nUGFyY2Vs 28843\nZXdz 28844\nIFN0cmF0ZWd5 28845\nLW1ha2luZw== 28846\nIHVudmU= 28847\nIHRyYWlsaW5n 28848\nIGNsaWNrcw== 28849\nIEdldENvbXBvbmVudA== 28850\nCWNvbnRlbnQ= 28851\nSUdFTkNF 28852\nRVJORUw= 28853\nTlNNdXRhYmxlQXJyYXk= 28854\nIGJyZWF0 28855\nIGhhcm1mdWw= 28856\ntog= 28857\nIGJlc2lkZXM= 28858\nIGJvcmluZw== 28859\nIGJydXRhbA== 28860\ndmFuZw== 28861\nKHBhcnNl 28862\ncXVpY2s= 28863\nIHB5dGVzdA== 28864\nIHN3aXRjaGluZw== 28865\nKCldCg== 28866\nIOyE 28867\nTEVS 28868\nCWZvbnQ= 28869\nIG5ldHQ= 28870\nKV0KCg== 28871\nKC9c 28872\n5p6c 28873\ndG9BcnJheQ== 28874\nIGJyZWVk 28875\nIENBUg== 28876\nIFdlYXBvbg== 28877\nQWJz 28878\ndG90 28879\nIHNldE5hbWU= 28880\nYXB0aXZl 28881\nIDos 28882\nIGVzY2FwZWQ= 28883\nb3JkZW4= 28884\nIFByaQ== 28885\ndGh1bWJuYWls 28886\nIGRlc2NyaXB0aW9ucw== 28887\nL3N0eWxlcw== 28888\nIFBDSQ== 28889\nIGFscGhhYmV0 28890\nYXN0aWNzZWFyY2g= 28891\nTk9URQ== 28892\nIGNpYWxpcw== 28893\nIEdyaWZm 28894\nIHBvcnF1ZQ== 28895\nIHByb3RlaW5z 28896\ncGxheXM= 28897\nIHN0YXRpbmc= 28898\nIGltYWdpbmF0aW9u 28899\nIGZhY2lhbA== 28900\nIE1lY2hhbg== 28901\nIGFycmFuZ2Vk 28902\nX3VzZWQ= 28903\nIGFycmFuZ2VtZW50cw== 28904\nIFBpcGU= 28905\naG9zdG5hbWU= 28906\nIHByb3ZpbmM= 28907\nVGl0 28908\nLkZsYXRTdHlsZQ== 28909\nIFNwbGl0 28910\nIExvYWRlcg== 28911\nLmNj 28912\nIGNsaW5pYw== 28913\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 28914\nIGJha2luZw== 28915\nIEVOVA== 28916\nbmVhdGg= 28917\n44CBCgo= 28918\nQU5F 28919\nLkVudGl0eUZyYW1ld29ya0NvcmU= 28920\nYXBwZXJz 28921\nLmlj 28922\nIE5nTW9kdWxl 28923\nIEZPUk0= 28924\nICc7 28925\nLXByb2ZpdA== 28926\naHc= 28927\nZW5lbXk= 28928\nIEV5ZQ== 28929\nIGNhdXRpb24= 28930\ndG93bg== 28931\nIHVyZ2Vk 28932\nIEppbW15 28933\neW5jaHJvbm91cw== 28934\nLXNpemVk 28935\nbWFraW5n 28936\nLHs= 28937\nXScs 28938\nX09iamVjdA== 28939\nYWhvbWE= 28940\nIGFjdGl2aXN0 28941\nSU5WQUw= 28942\nIENvbW1lcmNpYWw= 28943\nIE9ybGFuZG8= 28944\nKHRhYg== 28945\nINio 28946\nQWxnb3JpdGht 28947\nIGhlcml0YWdl 28948\nR2V0TWFwcGluZw== 28949\nIGZhaWx1cmVz 28950\ncmlvcw== 28951\nYXRpdmE= 28952\nIHRldA== 28953\nIGNhcnBldA== 28954\nKFo= 28955\ndGhyZWU= 28956\nIGRpc2Nsb3N1cmU= 28957\nLkVSUk9S 28958\nX2NhbGxlZA== 28959\nIGRpYWw= 28960\nIG9jY2FzaW9uYWw= 28961\nLkVycg== 28962\nIGZ1bmNpb24= 28963\nY2FmZm9sZA== 28964\nIHJlbGVhc2luZw== 28965\n77yJCgo= 28966\nX1ZhbHVl 28967\nIFZhcmk= 28968\neWVsbG93 28969\nIHN0cnVnZ2xlcw== 28970\nLmNhbA== 28971\nIERha290YQ== 28972\nCWNsb3Nl 28973\nIHNhbmR3aWNo 28974\nIGFuYWx5dGljcw== 28975\nICoqKQ== 28976\nJiM= 28977\nIEpvcw== 28978\nIHBhc3NpdmU= 28979\nQVRUUg== 28980\nVGhyb3dhYmxl 28981\nIE11bg== 28982\nIFVpbnQ= 28983\nKGRpc3Bvc2luZw== 28984\nYXJhaw== 28985\nIExlYWRlcnM= 28986\nIGFmZmVjdGluZw== 28987\nIGl0ZW1WaWV3 28988\nIGVjb25vbWljcw== 28989\nZnY= 28990\n4LmA 28991\nLnJi 28992\nIE92ZXJhbGw= 28993\nIHdlYWx0aHk= 28994\nIGV2b2x2ZWQ= 28995\nbmRh 28996\nIEh1cw== 28997\ncmVzdHJpY3Q= 28998\ndW1lbg== 28999\nIEFncmljdWx0 29000\nIQoKCg== 29001\nIGV4cGlyZXM= 29002\nIHNwb2tlc3BlcnNvbg== 29003\naW50ZXJ2YWw= 29004\nIMOi 29005\nIHF1ZWVu 29006\nKG5pbA== 29007\naW5nbw== 29008\nSGVhcA== 29009\n2Y4= 29010\nIGNvbXBsYWlu 29011\nU3lt 29012\nIENsb25l 29013\nIFJ1 29014\nIFdJTEw= 29015\nIENyeXN0YWw= 29016\nL2NvbnRlbnQ= 29017\naW5nZW4= 29018\nb2ludG1lbnQ= 29019\nTGFzdE5hbWU= 29020\nYXZpY29u 29021\nIElCTQ== 29022\nIERpbWVuc2lvbg== 29023\nYW5o 29024\naWNpcGFudHM= 29025\nIEFubmU= 29026\nLnByb2dyZXNz 29027\nIGFsZ28= 29028\nb2JpbA== 29029\nIFZvaWNl 29030\nIEZF 29031\nIGdsaQ== 29032\nIHZlZA== 29033\nIHByZXZlbnRz 29034\nXENvbHVtbg== 29035\nIGZvbGs= 29036\nZXR0aQ== 29037\nIG1u 29038\nIENMQVNT 29039\nIGRpc3BsYXlpbmc= 29040\nIEts 29041\nIEZlcnI= 29042\nZHV0bw== 29043\nLmli 29044\nIGRhZG9z 29045\nJ25hbWU= 29046\nLXNwYWNl 29047\nIGl0YWxpYW4= 29048\nIGludmVyc2U= 29049\nIGRlbnNl 29050\ndXRlcg== 29051\nIElFbnVtZXJhdG9y 29052\nLXNpZ24= 29053\nIG5hdGlvbndpZGU= 29054\nIHBlcnNvbmE= 29055\nIHNvbHZlZA== 29056\nIGRyYW1hdGljYWxseQ== 29057\nTG9nb3V0 29058\nIGdyYXY= 29059\nIGFuYWx5c2Vz 29060\nb2xsbw== 29061\nIGxhbXA= 29062\nLnRlYW0= 29063\nIEVyb3Q= 29064\nPVsi 29065\nIGRhbmNpbmc= 29066\nID8+Lw== 29067\nIGNhdGVy 29068\nZmZl 29069\nIFNoYQ== 29070\nIEJvcw== 29071\nIFJFUVVJUkU= 29072\nIE1vbnN0ZXI= 29073\nIFJC 29074\nIElERQ== 29075\nIHN1aXRz 29076\nIGZvcm1EYXRh 29077\nKHRoZXRh 29078\nIHNwYXRpYWw= 29079\nPU5VTEw= 29080\nIFNxbENvbm5lY3Rpb24= 29081\nIOA= 29082\nIFZlbmV6 29083\nIE1vcm5pbmc= 29084\nIHB1YmxpY2F0aW9ucw== 29085\nIE5PTklORlJJTkdFTUVOVA== 29086\nZmlyc3ROYW1l 29087\ndWRz 29088\nV291bGQ= 29089\nX0hFQUQ= 29090\nIGludmVzdGVk 29091\nc3RhYmxl 29092\nZnJlZA== 29093\nIGNvbW1hbmRlcg== 29094\nU0VT 29095\n4oCUYQ== 29096\nYW5jaGU= 29097\nIE1vdmVtZW50 29098\n67M= 29099\nU3VpdGU= 29100\nIGp1cmlzZGljdGlvbg== 29101\n66as 29102\nIEJldGg= 29103\nalF1ZXJ5 29104\nIElzYQ== 29105\nIGRlbnRhbA== 29106\nLCo= 29107\nIExpbWl0 29108\naWxpYXRpb24= 29109\nPSJ7 29110\nYmFzdA== 29111\nIHR1cmI= 29112\naXN5 29113\nT09L 29114\nIGFkdm9jYXRl 29115\naW1hZw== 29116\nTEVDVElPTg== 29117\n0LvRjA== 29118\nKGNhdGVnb3J5 29119\nLmRlYw== 29120\nIHVuaXF1 29121\nX3Nu 29122\nIGF0dHJhY3RlZA== 29123\nIMOJ 29124\nIFJ1bm5pbmc= 29125\nX2VkZ2Vz 29126\nIERpc2FibGU= 29127\nX0FT 29128\n5Zu+ 29129\nIG5ldHdvcmtpbmc= 29130\nX2JyYW5jaA== 29131\nSGF2aW5n 29132\ndG9CZVRydXRoeQ== 29133\nR0k= 29134\nIGNhbXBz 29135\nc2Vw 29136\nLXBhcnQ= 29137\nICkKCgoKCgoKCg== 29138\ndXN0cmFsaWE= 29139\nIFJlcG9ydHM= 29140\ncml0bw== 29141\nIHdhaXN0 29142\nX3BsdXM= 29143\nIFdX 29144\nLXBlcnNvbg== 29145\nQXByaWw= 29146\nIHNhcg== 29147\nLnRhcg== 29148\nIGFncmljdWx0dXJhbA== 29149\ndGlj 29150\nIHRjcA== 29151\nIHNldFZhbHVl 29152\nYWdlbnRv 29153\nIEFwcGU= 29154\ncGlsZXI= 29155\nQ0FERQ== 29156\nIGFuY2hl 29157\nYXRjaGVy 29158\nIGNvbWljcw== 29159\nIGxicw== 29160\nX3NlZ21lbnQ= 29161\nJ109JA== 29162\naXR0ZXJz 29163\naWNoZXI= 29164\nR0lORQ== 29165\nIHV0aWxpemU= 29166\nIEN1cnNvcg== 29167\nX2V4cHJlc3Npb24= 29168\nIGRhZw== 29169\nPGxvbmc= 29170\nIHJoeXRo 29171\n5o+Q 29172\nIGNvbnN1bHRhdGlvbg== 29173\nWWV0 29174\nIikpCgo= 29175\nX01BQw== 29176\nY291bGQ= 29177\nICdcXA== 29178\nIFZv 29179\nCWh0dHA= 29180\nIGdz 29181\ncGhlcg== 29182\nLWdyaWQ= 29183\nSmFtZXM= 29184\nSnVs 29185\nIHNjaG9u 29186\nIHRlbnNvcmZsb3c= 29187\nIExPR0dFUg== 29188\nYW1hcw== 29189\nIHNjaXB5 29190\nIGNvbnZpY3Rpb24= 29191\nLmFn 29192\nIGFkbWluaXN0cmF0b3I= 29193\nKSl7DQo= 29194\nIG51bg== 29195\nImdyb3Vw 29196\nUG9y 29197\nIG51cnNl 29198\nZXhwcmVzc2lvbg== 29199\nYWt5 29200\nIEhlYXZ5 29201\nLm9wdA== 29202\nLmdldEFsbA== 29203\nIG92ZXJs 29204\nLyIs 29205\nX2NvdW50cnk= 29206\n544= 29207\nIEdFTkVS 29208\nX3JvdXRl 29209\nIERhbA== 29210\nwrQ= 29211\nb2xvYWQ= 29212\nIHVuY29tZm9ydGFibGU= 29213\nKG1lbnU= 29214\nIGhvc3RuYW1l 29215\nJyIpOwo= 29216\nIGNhbGN1bGF0aW9ucw== 29217\nLWNsaWNr 29218\nIHByb3RlY3RpdmU= 29219\n44Kv 29220\nX0Zvcm0= 29221\ndW5ncw== 29222\nQWN0dWFs 29223\nbWY= 29224\nIFByb2Nlc3Npbmc= 29225\nIEludmVudG9yeQ== 29226\nKG1hdHJpeA== 29227\nYXBwcm9wcmlhdGU= 29228\nd2Vn 29229\naWph 29230\nIGNocg== 29231\nIHJpZmxl 29232\nLXdzag== 29233\na2Fy 29234\nIGluZGVwZW5kZW50bHk= 29235\nSU9T 29236\nIGNvbnNpc3RlbmN5 29237\ndm4= 29238\nL3N5c3RlbQ== 29239\nIENoYW5nZXM= 29240\nIGV4cG9zZQ== 29241\naWNpZW50cw== 29242\nIHJlbGF0ZQ== 29243\nCW5leHQ= 29244\n6Kg= 29245\ndWRlcw== 29246\nIGdsYXNzZXM= 29247\nRlhNTA== 29248\nLi4uLi4u 29249\nIFBkZg== 29250\nIGFwcHJvdmU= 29251\nIHtc 29252\nIGV4aXN0ZQ== 29253\nKSko 29254\nQVJFTlQ= 29255\n0L7Qvw== 29256\nIExhdGVzdA== 29257\nIE5pZ2VyaWE= 29258\nLkludGVyZmFjZXM= 29259\nIHJlbW92ZXM= 29260\nRW5lbXk= 29261\nIGVuZm9yY2U= 29262\ndmVydHM= 29263\nCXBvcw== 29264\nX3RleHR1cmU= 29265\nV0FSRA== 29266\nIElOQ0lERU5U 29267\nKGNvbnRhaW5lcg== 29268\nIGRlZmVuZGluZw== 29269\nIFJY 29270\nIEhvb2s= 29271\nYnJpcw== 29272\nIEZsYXNr 29273\nR3JheQ== 29274\nLikK 29275\ndmlzaWJpbGl0eQ== 29276\nIFJlZGlyZWN0VG9BY3Rpb24= 29277\nZXJyYWw= 29278\nX2VsZW0= 29279\nIHJlc29u 29280\nZnJvbnRlbmQ= 29281\nX3ZhcmlhYmxlcw== 29282\nYXRlcmlh 29283\nICsi 29284\nYXZlbGVk 29285\nUklY 29286\nIGRlZmljaXQ= 29287\nX0NoZWNr 29288\nWVlZWQ== 29289\nVG9PbmU= 29290\nc3B5 29291\nIHVuaXRlZA== 29292\nZW5kZW50 29293\nIHBvZGU= 29294\n44GM 29295\nQ0FU 29296\nKGZtdA== 29297\nIEJvbnVz 29298\nIHJlY2s= 29299\nwro= 29300\nTW9kdWxlcw== 29301\nIHZhY3V1bQ== 29302\nUmFkaW8= 29303\nIERBTUFHRQ== 29304\nUGVu 29305\nIFBhcmtlcg== 29306\nOzsK 29307\nIFJlYWxseQ== 29308\nX25lZw== 29309\ncGVuZGluZw== 29310\nIG5vbWluZWU= 29311\nIENhdGVnb3JpZXM= 29312\nIFVsdHJh 29313\nV2VhcG9u 29314\nIGRlZmVuZGVy 29315\nSXNz 29316\nIEdlbmRlcg== 29317\nIERyZXNz 29318\nIGltcHJpc29u 29319\nIGJhbmtydXB0 29320\naW1lbnNpb25hbA== 29321\nUEhB 29322\nIFN0cmF0ZWc= 29323\nIFBST0ZJVFM= 29324\nIHBhdHJp 29325\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 29326\nZGVsZWdhdGU= 29327\nIGZvclN0YXRl 29328\nIGRldm90ZWQ= 29329\nX21ha2U= 29330\nIHRlcnJvcmlzdHM= 29331\nIFNuYXA= 29332\nX25hdg== 29333\nIEFB 29334\nIElhbg== 29335\nCWFwcA== 29336\nUGxhY2VtZW50 29337\nX2hkcg== 29338\nPEs= 29339\nIHNhbmc= 29340\nc3Ryb2tl 29341\nLVE= 29342\nPjw/PQ== 29343\nLW1vZGVs 29344\nYXZhbmE= 29345\nIFdhbmc= 29346\nICAgICAgICAgICAgIAo= 29347\nCWluaXQ= 29348\nIGVudHJlcHJlbmV1cg== 29349\nYXRpdm8= 29350\nTG92ZQ== 29351\nLW92ZXI= 29352\nV2F0ZXI= 29353\nIG1vZHM= 29354\nZ2VuY2U= 29355\nVGVjaG4= 29356\nPng= 29357\nLlRhc2s= 29358\nbW9uZXk= 29359\naWJhYmE= 29360\nJ30pOwo= 29361\nIFNwZWNpZmlj 29362\nIExpbmVhcg== 29363\nX09QVA== 29364\nSGFzaENvZGU= 29365\nKFBsYXllcg== 29366\nLkNvbnRhaW5zS2V5 29367\nIGNvbGxhcHNlZA== 29368\ndHJhbnNwYXJlbnQ= 29369\nX1JBTkdF 29370\nVmlld2Vy 29371\nKGNmZw== 29372\nIHNvcnRpbmc= 29373\nIGluZmVjdGVk 29374\nIE5hY2g= 29375\nIGFjY29tbW9kYXRl 29376\nLmVsZW1lbnRz 29377\nX1BBUlQ= 29378\nIFNleHk= 29379\nPWdldA== 29380\nKHllYXI= 29381\nIHhocg== 29382\nOl0= 29383\nb3dza2k= 29384\nIHN1bW1hcg== 29385\nIMK/ 29386\nIGludGU= 29387\nIHdvcmtmbG93 29388\nIFRhaXdhbg== 29389\ndmVyc2lvbnM= 29390\n5Y+R 29391\nIHN1cnByaXNpbmdseQ== 29392\nIG9wdGljYWw= 29393\nIHByb2Nlcw== 29394\nIGRpc2FncmVl 29395\nIG51ZXZv 29396\nIENBTQ== 29397\nc29ydGVk 29398\nbGVhc2Vz 29399\naXN0bGU= 29400\nSWRlbnQ= 29401\nCWV2ZW50 29402\namVjdGVk 29403\nQ2h1bms= 29404\nVmFycw== 29405\nLnByb3ZpZGVy 29406\nIHByb2NlZWRpbmdz 29407\nIGluY2x1c2l2ZQ== 29408\nIGFydHdvcms= 29409\nZW5kYW50cw== 29410\n77yaCg== 29411\nc2Vlbg== 29412\nIGxpZw== 29413\nIG1ha2Vycw== 29414\nX2Z1bg== 29415\nIGxlbmd0aHM= 29416\nUGF0aFZhcmlhYmxl 29417\nW2l0ZW0= 29418\n4Li1 29419\nRGVhZA== 29420\nRkZGRkZG 29421\nIFVyYmFu 29422\ndXBsZXM= 29423\naWNoZW4= 29424\nKG51bGxwdHI= 29425\nLnNwZWM= 29426\nLFN5c3RlbQ== 29427\nVVJBVElPTg== 29428\nKGpvYg== 29429\n5byP 29430\nIHRyYWNrZXI= 29431\nxZk= 29432\nIE1S 29433\nIFNRTGl0ZQ== 29434\nIGR0bw== 29435\nIDs7Cg== 29436\nIG1pbnQ= 29437\nIEludHJvZHVjdGlvbg== 29438\nY2Fv 29439\nIHF1ZXN0aW9uZWQ= 29440\nIGZpdHRlZA== 29441\ncmV2aXNpb24= 29442\nc3E= 29443\nIG1pZw== 29444\nX3VuaXRz 29445\nX2FzeW5j 29446\nIGZsaWNr 29447\nfSk7CgoK 29448\nIG5vdHJl 29449\nfWAs 29450\nRmlsdGVycw== 29451\nIG11bmRv 29452\nX2RheXM= 29453\nIGZybQ== 29454\ndXRj 29455\nIHZhbHM= 29456\nZXdpZHRo 29457\nIEdlbmVyYXRvcg== 29458\nIEFydGlzdA== 29459\nIElEcw== 29460\nIEFydGljbGVz 29461\ncmVhdGVy 29462\nIENvbXBvbmVudEZpeHR1cmU= 29463\nLj0= 29464\nIHJvdQ== 29465\nLW5v 29466\nLmJ1a2tpdA== 29467\nZWdn 29468\nIERpZmY= 29469\nYXRpY3M= 29470\n0YPRhw== 29471\n4oCUCgo= 29472\nIENoYXJsb3R0ZQ== 29473\nYnll 29474\nIH0pOw0KDQo= 29475\nIFZpaw== 29476\nIEJyb3c= 29477\nIGx2 29478\nIEdpYg== 29479\nLXdpbmc= 29480\nR0xJR0VOQ0U= 29481\nKEls 29482\nIEVuZ2luZWVy 29483\nLldhaXQ= 29484\nIFBpY3R1cmVz 29485\nIHJoZXQ= 29486\nIHRoZXJtYWw= 29487\nIHByYWlzZQ== 29488\nPD4oKTsKCg== 29489\nIFNwaWRlcg== 29490\nUGF1c2U= 29491\nIEJha2Vy 29492\nIHNsb3dlcg== 29493\nIH1dCg== 29494\nX2VucXVldWU= 29495\nIGRpc2FwcGVhcmVk 29496\nIFRpY2tldA== 29497\nSU5VWA== 29498\nX0xPQ0FM 29499\n0LDRgdGB 29500\nQEluamVjdGFibGU= 29501\nY29tbXVuaXR5 29502\nR2VzdHVyZVJlY29nbml6ZXI= 29503\n5Zu9 29504\nIHNjYWxlcw== 29505\nIC0o 29506\nLycr 29507\nIFNpdA== 29508\nIGV4ZWN1dGl2ZXM= 29509\nYXJkaW5n 29510\nIGFkdmVycw== 29511\nIGJhY2t3YXJkcw== 29512\nCWNvbnRleHQ= 29513\nIEhhbXA= 29514\nIFBG 29515\nIERlY2s= 29516\nIENyYWln 29517\nQW1lcmljYW4= 29518\nIGJlbGw= 29519\nIHByb2w= 29520\ndWZlbg== 29521\nIHJuZw== 29522\nYXJzaGFs 29523\nIFNpbXBseQ== 29524\nZmlyc3RuYW1l 29525\nc2hvcmU= 29526\nSnVseQ== 29527\nIG1vcnRhbGl0eQ== 29528\nIOKGkgoK 29529\nSGVscGVycw== 29530\nIGJlbmNobWFyaw== 29531\nZW1hZGU= 29532\nIG9yZ2FuaXNhdGlvbnM= 29533\nLmdzb24= 29534\nIFRleHRGaWVsZA== 29535\nIGNpdmlsaWFucw== 29536\nLkFycmF5cw== 29537\nIE1pc3Npc3NpcHBp 29538\nIGludGVybWVkaWF0ZQ== 29539\nZ2V0VXNlcg== 29540\nX2NsdXN0ZXI= 29541\nUmVsYXRpdmU= 29542\nZm9yZWlnbg== 29543\nLnF1ZXJ5U2VsZWN0b3JBbGw= 29544\nRm9yZWlnbktleQ== 29545\nIHJlYXNvbmFibHk= 29546\nLS0tLS0tLS0tCg== 29547\nQ2FyZHM= 29548\nIEthbQ== 29549\nIFRob3I= 29550\nIHJvbGxlcg== 29551\nLWVsZW1lbnQ= 29552\nIEN1cnJlbmN5 29553\nZGRpZQ== 29554\nQUxMWQ== 29555\nIFJB 29556\nIHBlcm1ldA== 29557\nYWFhYQ== 29558\nIGhvbWV3b3Jr 29559\nIFZpdA== 29560\nIG1vbGQ= 29561\nIEZlcg== 29562\nW3N0YXJ0 29563\nIHN0YXRpc3RpY2Fs 29564\nIHNjYXJ5 29565\nX0hPTUU= 29566\nLkJlZ2lu 29567\nQ29uc3RydWN0 29568\nb2dlbmlj 29569\nIERFQUxJTkdT 29570\nIHRhbWJpw6lu 29571\naXhvbg== 29572\nLmluZA== 29573\nYWNyZQ== 29574\nIHRyYW5zZm9ybXM= 29575\nIE5hcA== 29576\nLkJsb2Nr 29577\ndXNzaWE= 29578\ncGlyYXRpb24= 29579\ndWxlbnQ= 29580\nIGNlaWw= 29581\nQ2xhdXNl 29582\nbmFpcmU= 29583\nVEVT 29584\nIG5lYXQ= 29585\nU1RE 29586\nIFJlZ0V4cA== 29587\ncGVyZm9ybQ== 29588\nOik= 29589\nIHVuaW9ucw== 29590\nIHN1YmxpYw== 29591\nIHdpbmRz 29592\nbG9hdGluZw== 29593\nZ2xpY2g= 29594\nIHBhZ2luYXRpb24= 29595\nU2tpbGw= 29596\nQXBwbHk= 29597\nIE9wZXJhdG9y 29598\naXN0b2dyYW0= 29599\nIHF1YWxpdGllcw== 29600\nQ3Jvc3M= 29601\nIGRlY29t 29602\nXSwi 29603\nIEp1YW4= 29604\nLm1vZGFs 29605\nLkNoaWxk 29606\nIFJvZ2Vy 29607\nU1RJVFVURQ== 29608\nOkNHUmVjdE1ha2U= 29609\nYWxldHRl 29610\nIHN0YQ== 29611\nYXNpZGU= 29612\nIGJsdXI= 29613\nIFdh 29614\naWZldGltZQ== 29615\ncmVlZA== 29616\nY29udHJvbHM= 29617\nIGJpbnM= 29618\nINC/0L7Quw== 29619\nKi8sCg== 29620\nVUlT 29621\nIFJvdQ== 29622\nIERlbW8= 29623\nLWF3ZXNvbWU= 29624\nIENoYWlu 29625\nIGhhc3Rh 29626\nIEJhcnQ= 29627\nLktFWQ== 29628\nIHZlbmRvcnM= 29629\nbm9mb2xsb3c= 29630\nIERlc3Q= 29631\nX2J1aWxkZXI= 29632\nIGFyZ3Vlcw== 29633\nX2Fuc3dlcg== 29634\nZ290bw== 29635\nIFJFU1VMVA== 29636\nIE1PTg== 29637\nIHBvZGVy 29638\nb29ucw== 29639\nX0NBU0U= 29640\nIHJlcGxpYw== 29641\nIGZpbmFuY2luZw== 29642\nIERBVEU= 29643\nY2Vybg== 29644\nX3RyYWNr 29645\ndGllcw== 29646\nL2xvZ28= 29647\nIE5FR0xJR0VOQ0U= 29648\nZ2V0VHlwZQ== 29649\nPlQ= 29650\nYmV0 29651\nZ2lybA== 29652\nIElOQ0lERU5UQUw= 29653\nLXNpdGU= 29654\nLnRyaWdnZXI= 29655\nIExpc2E= 29656\nX2lucHV0cw== 29657\nIHJlbGF0aXZlcw== 29658\nTG9nZ2VkSW4= 29659\nQ29uZmlndXJl 29660\nSUs= 29661\nLmFjY2VwdA== 29662\nUmVzdW1l 29663\nIERyYWZ0 29664\nICo+KA== 29665\nIFdB 29666\nZWRpYW4= 29667\nZXJuZXNz 29668\nIExheW91dEluZmxhdGVy 29669\nKi8NCg0K 29670\nb3RoeQ== 29671\nIG9ibGlnYXRpb24= 29672\nU3Vic2NyaWJl 29673\nIHRodW1ibmFpbA== 29674\nZXhpc3Q= 29675\nIGluc2lzdGVk 29676\nIFVJQ29sbGVjdGlvblZpZXc= 29677\nIEFuZ3VsYXI= 29678\nIHRhYmxldHM= 29679\nIEltcGFjdA== 29680\n44CNCgo= 29681\nYWhv 29682\nIGNoYXJhY3RlcmlzdGlj 29683\nZ2Q= 29684\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 29685\nb3VydA== 29686\nYC4= 29687\nQXBwcm8= 29688\nQ29vcmRpbmF0ZQ== 29689\nUmVtZW1iZXI= 29690\nIG1hcmluZQ== 29691\nXT09Jw== 29692\nIEFkbWluaXN0cmF0b3I= 29693\nLmdldERlZmF1bHQ= 29694\nIGZvcmdvdA== 29695\nIFN0cnVjdHVyZQ== 29696\nVnVl 29697\nYXJzaW5n 29698\nbW9tZW50 29699\na3c= 29700\nX2N1cnNvcg== 29701\nQXR0YWNr 29702\nIGF0aGxldGlj 29703\nIGRpYWdub3NlZA== 29704\nIGVuZGU= 29705\n5Yig6Zmk 29706\nSG91c2U= 29707\nIFBBUkFN 29708\nIHdpa2k= 29709\nIE9wcA== 29710\nIGNvbnNlcnZhdGlvbg== 29711\nIHNuZA== 29712\nX3RlbQ== 29713\nc3Vic3Ry 29714\nIENhcGU= 29715\nLnNpbQ== 29716\nVVRJT04= 29717\nYW5hbg== 29718\n4oCZdW4= 29719\nIGd5 29720\nLXdvcms= 29721\nIGNvbXBlbGxpbmc= 29722\nPScj 29723\nCXN1Yg== 29724\nIGRpcmVjdG9yaWVz 29725\n7Yq4 29726\nIHRvdWNoZXM= 29727\nb3V0aW5lcw== 29728\nLkNvbGxlY3Rpb24= 29729\nc2NoZWR1bGU= 29730\nLmxhdA== 29731\nIERvY3RyaW5l 29732\nQ0FB 29733\nIFJlZmVy 29734\nIHNoaWZ0cw== 29735\nIGxpa2VsaWhvb2Q= 29736\ncHJldGVy 29737\nIEZlbWFsZQ== 29738\nIGludGVyY2VwdA== 29739\nIGxvdQ== 29740\n55m7 29741\nIHJ1Zw== 29742\nIENyb3du 29743\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 29744\nLXByb2R1Y3Q= 29745\nIHByb21wdGVk 29746\ndW5nbGU= 29747\nZG9ja2Vy 29748\nIFR1 29749\nIFVuaXF1ZQ== 29750\nX0Vycm9y 29751\ndWxvcw== 29752\nIOKE 29753\nIChg 29754\nR2V0dGluZw== 29755\nX3NjYWw= 29756\nIEVuaA== 29757\nw7x0 29758\nIHN1c3RhaW5lZA== 29759\nIHBhdGNoZXM= 29760\nIHByb3NwZXI= 29761\nIEdhemE= 29762\nX2xpZ2h0 29763\nIGluY29ucw== 29764\nLS0tLS0tLS0K 29765\nCQkgICAgICA= 29766\nU0Y= 29767\nQ04= 29768\nOiI7Cg== 29769\nIENvbGxpbnM= 29770\nKCop 29771\nIGNvbXBpbGF0aW9u 29772\nJ10NCg== 29773\nIGNvbnNlcXVlbmNl 29774\nLC4uLg== 29775\nIGRt 29776\nIEJMT0NL 29777\nQ2x1c3Rlcg== 29778\nIHNraQ== 29779\nKGFyZ2M= 29780\nVHVwbGU= 29781\nIGpvaW5z 29782\nIFNoZXJpZmY= 29783\nV2Fy 29784\naW5kaQ== 29785\nIGNvbW1lbnRlZA== 29786\nSE9TVA== 29787\nIGludml0YXRpb24= 29788\nYXBhbmVzZQ== 29789\nIHBlcm1pdHM= 29790\ncHJlY2VkZW50ZWQ= 29791\nX3pvbmU= 29792\nIEFteQ== 29793\nX1JE 29794\nTWluaW11bQ== 29795\nIGludm9jYXRpb24= 29796\nLmVuYWJsZQ== 29797\naWNodGVu 29798\nLW93bmVk 29799\nImlk 29800\nX1BPSU5URVI= 29801\nRmFj 29802\nIHNwZWNpZmljYXRpb25z 29803\nIG5vbWluYXRpb24= 29804\nIGdw 29805\nPCg= 29806\nIHJvYm90cw== 29807\nIEplcnJ5 29808\nIGhvbGRlcnM= 29809\nIHdhbmQ= 29810\nY21z 29811\nIH0pKQo= 29812\nLlRvYXN0 29813\nIElMaXN0 29814\nQmFzZWQ= 29815\nem9vbQ== 29816\nL3N0eWxl 29817\nIEJlY2s= 29818\nTWVu 29819\nIGNvbnRyaWJ1dGluZw== 29820\nIHVuZG8= 29821\nIE9I 29822\nIGFkZE9iamVjdA== 29823\nIGVpZ2Vu 29824\nc2lnbnVw 29825\n6ZSZ 29826\nIGRpc3RhbnQ= 29827\nUEFSQVRPUg== 29828\nIE1hcmk= 29829\nIG3DoQ== 29830\nRW1w 29831\nw7Nz 29832\nIOyImA== 29833\nZXZ0 29834\nK2o= 29835\ncGFyaw== 29836\nIFN0YXk= 29837\nIER1bg== 29838\nIHNveQ== 29839\nPiU= 29840\nYXppbmVz 29841\nIHRpZW1wbw== 29842\nKG1l 29843\ncHJlc2VudA== 29844\nLlRoaXM= 29845\nIGVkaXRvcnM= 29846\nRklFTEQ= 29847\nLldvcms= 29848\nIFVuaXZlcnNl 29849\nIGRydW5r 29850\nLnRpbWVy 29851\nIGFsdGVyZWQ= 29852\nIE5hcg== 29853\n66Cl 29854\nLkFjdGl2ZQ== 29855\naWRvcg== 29856\n560= 29857\nLmRlbHRhVGltZQ== 29858\nIGF3a3dhcmQ= 29859\nJnF1b3Q= 29860\nIFNhZmFyaQ== 29861\nIHRyaWNrcw== 29862\nTUVOVFM= 29863\nZGl2aXNpb24= 29864\nIHZhcnlpbmc= 29865\nIEhpZ2h3YXk= 29866\nIHBob3RvZ3JhcGhlcg== 29867\nIFN0ZXdhcnQ= 29868\nIGxhc3Rpbmc= 29869\nLlByZQ== 29870\nLmFtYXpvbmF3cw== 29871\nIEx1Y2s= 29872\nLkRlc2NyaXB0aW9u 29873\nIE5heg== 29874\nbmVn 29875\nIGPDsw== 29876\nPDwiXA== 29877\nIFN1cnY= 29878\nIFVuYw== 29879\nUmVjaXBl 29880\nLkJvcmRlclN0eWxl 29881\nIG1vZGlmaWNhdGlvbnM= 29882\nLWF0 29883\nQVRGT1JN 29884\naGRy 29885\nYWtv 29886\nIHN1YmxpY2Vuc2U= 29887\nIEp1bXA= 29888\nIGJlaW0= 29889\nIE1hbmhhdHRhbg== 29890\nLmJvb2w= 29891\nX2h3 29892\n0YLRjA== 29893\nQmlu 29894\nIGdhdGV3YXk= 29895\nIiI6 29896\nIFVJUw== 29897\nOiIr 29898\nLWRlZg== 29899\nIFJlZ3VsYXI= 29900\nL3Rlc3Rpbmc= 29901\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 29902\nc3RyaW5nc3RyZWFt 29903\nIGRpc3Bhcg== 29904\nIG1vYmls 29905\nLXJlYWQ= 29906\nIEFkYXB0ZXI= 29907\nIENoYW1waW9ucw== 29908\nIHNjaGVkdWxlcg== 29909\nIGtpbGxz 29910\nIE11bHRpcGxl 29911\naXJyb3I= 29912\nIGdvZHM= 29913\nQURP 29914\nYWt0ZQ== 29915\nIFVzdWFyaW8= 29916\nLmNpcmN1bGFy 29917\nIHJlY2VwdA== 29918\nIEV4cHI= 29919\nIGVsZGVybHk= 29920\nIG5pY2VseQ== 29921\nIGJlc3Rl 29922\nV2FudA== 29923\nIGNsYXNzaWNhbA== 29924\nLnNwcml0ZQ== 29925\nb2JqYw== 29926\nIE1hc29u 29927\nIHNpc3RlbWE= 29928\nLkJsYWNr 29929\nZXNv 29930\nIFplaXQ= 29931\nIGRpdmlk 29932\nIGVudGVycw== 29933\nX3N1YmplY3Q= 29934\nIFBsYW5ldA== 29935\nLndhcm5pbmc= 29936\nIEdyYW0= 29937\nX3Rva2Vucw== 29938\nIGhvdXNlaG9sZHM= 29939\nX2N1c3RvbWVy 29940\ndXNlck5hbWU= 29941\nY3Jvc3M= 29942\nIHBpb25l 29943\nIGFzc2lzdHM= 29944\nX1NN 29945\naWJv 29946\nIGxveWFs 29947\nIHVzZWxlc3M= 29948\nI2VsaWY= 29949\nIFVsdGltYXRl 29950\nQ29tZQ== 29951\nZ2Vs 29952\nIGRpY2g= 29953\neHl6 29954\naWtlbA== 29955\nb2JyYQ== 29956\nX3NjYW4= 29957\nIEludGVyaW9y 29958\nIE5pY2U= 29959\nIHBsYWM= 29960\nCXRhcmdldA== 29961\nIHZpcmFs 29962\nYXNzbw== 29963\nKCkv 29964\ndW5kZQ== 29965\nIEFkb2Jl 29966\nT3M= 29967\ndmlzaXRlZA== 29968\nIE9X 29969\nIEZlZWQ= 29970\nIFNlcXVlbmNl 29971\nIG1hbmFnZXM= 29972\naW5zb24= 29973\nIExvdWlzaWFuYQ== 29974\ne30p 29975\nIEhhYg== 29976\nIExE 29977\nIGJpcA== 29978\ncHJpdGVz 29979\nKGVsZW0= 29980\nLmhpYmVybmF0ZQ== 29981\nw6lsw6k= 29982\nIG9obmU= 29983\nX3RyYW5zYWN0aW9u 29984\nIGFubnVuY2k= 29985\nUHVibGlzaGVk 29986\nIEhvbmRh 29987\nIFRhbQ== 29988\nIFBhY2tldA== 29989\nX3NlbGVjdG9y 29990\nIGNoYWxsZW5nZWQ= 29991\nUHJvY2Vzc2luZw== 29992\nLWhvdmVy 29993\nIHRyYWluZXI= 29994\nX2NhbmNlbA== 29995\nIE5TRGljdGlvbmFyeQ== 29996\nYWJyaWM= 29997\nIE1MUw== 29998\nX3NlbnNvcg== 29999\nIHNocmluaw== 30000\nIEZY 30001\ndGhyZXNob2xk 30002\nCUhY 30003\nLW1hcms= 30004\nYC5g 30005\nU2NoZW1l 30006\nKGZ1bGw= 30007\nX3dyaXRlcg== 30008\nIFN5cw== 30009\nIGZsZWQ= 30010\nIENpbg== 30011\nLXdpZGdldA== 30012\nIFByZXZpb3Vz 30013\nR2VuZGVy 30014\nX3F1ZXN0aW9u 30015\nRmVlZA== 30016\nIHNjcnV0 30017\nKHByZWZpeA== 30018\n44CC44CC 30019\nIGluZmVjdGlvbnM= 30020\nUGFydHM= 30021\nIGhpZXJhcmNoeQ== 30022\nX0RFTEVURQ== 30023\nIFBhdGllbnQ= 30024\nX3BheQ== 30025\nIHByb21vdGVk 30026\nIOyL 30027\nIGNpdmlsaWFu 30028\nIGFncmljdWx0dXJl 30029\nIFBpZWNl 30030\nIHN0YW5jZQ== 30031\ndXRzY2hl 30032\nQXNzaWdu 30033\nLkFDVElPTg== 30034\nRmln 30035\nX3JhZGl1cw== 30036\nIFN5bmM= 30037\nZHVjZXI= 30038\nZmFpbHVyZQ== 30039\nZW5zZWQ= 30040\ncHRpbWU= 30041\nQk0= 30042\nX2RhdGV0aW1l 30043\ncXVpdm8= 30044\nUVVFVUU= 30045\n6ICF 30046\nQXBwZWFy 30047\nIHN1bW1pdA== 30048\nOnZvaWQ= 30049\nIHZpbmU= 30050\n6K6k 30051\nb25uZQ== 30052\nX1RSQU5T 30053\nLmdyZWVu 30054\nX2Nj 30055\nIGh1bmdyeQ== 30056\nICI+ 30057\nKCkpOw0KDQo= 30058\nRXh0cmFjdA== 30059\naXplbnM= 30060\nIHNvbHZlcg== 30061\nTm90aWZ5 30062\nIGVuZ2xpc2g= 30063\nIFNob3BwaW5n 30064\naW50ZXJmYWNlcw== 30065\nUkVR 30066\nIGlsbGVn 30067\nIFVJSW1hZ2VWaWV3 30068\nIGRpc2Nvbm5lY3Q= 30069\nIFVudGls 30070\nIENvbnNlcnZhdGl2ZQ== 30071\nQENvbHVtbg== 30072\nIHNoaWZ0ZWQ= 30073\nIDoNCg== 30074\nIGZpY2g= 30075\nIGRsYQ== 30076\nIHNob2U= 30077\nIiksDQo= 30078\ndWxhcml0eQ== 30079\nX1JFU1A= 30080\nV2VhdGhlcg== 30081\nVUlBcHBsaWNhdGlvbg== 30082\nLml0ZXJhdG9y 30083\nIGFnaW5n 30084\nLlBhcmVudA== 30085\nb3dpZQ== 30086\nKGVxdWFs 30087\nIENvbnY= 30088\nL2RlZmF1bHQ= 30089\nIG1lYXN1cmluZw== 30090\nLnByZXY= 30091\nLklzVmFsaWQ= 30092\nLkZhdA== 30093\nIHPEgw== 30094\na2V5d29yZHM= 30095\nd2l0aG91dA== 30096\nIHNvdmVyZQ== 30097\nIGV4Y2hhbmdlcw== 30098\nIG1lbHQ= 30099\nIGlzbGFuZHM= 30100\nIEludGVncg== 30101\nIGp1bXBpbmc= 30102\nIGdsZQ== 30103\nIGpvdXJuYWxpc20= 30104\nIGRhdGVk 30105\nTG9jYWxpemVk 30106\nIFJlZnJlc2g= 30107\nUGFydGljbGU= 30108\nIGFh 30109\nIFNUUklDVA== 30110\nIGJvZA== 30111\nLlByb2Nlc3M= 30112\nX0FVVE8= 30113\nIFB1Ymxpc2hlZA== 30114\nZXZlcnk= 30115\nIHRlY2hub2xvZ2ljYWw= 30116\nbHN4 30117\nIGlycml0 30118\nQWRkaXRpb25hbA== 30119\nIGRlbGltaXRlcg== 30120\nX2xhbmd1YWdl 30121\nLWFyZWE= 30122\nYm95cw== 30123\nIFR1YmU= 30124\nIHdhdA== 30125\nIG1lY2hhbmljcw== 30126\nX293bmVy 30127\nU3BlbGw= 30128\nIFN0b3JpZXM= 30129\nLkFwcGVuZExpbmU= 30130\nVGFibGVWaWV3 30131\naGVt 30132\nc3RpY2s= 30133\nb2xsb3dlcg== 30134\nSUZG 30135\nIFVW 30136\nb2xsaXNpb24= 30137\nU1VC 30138\nIGNvbXBhcmFibGU= 30139\nIGRvbmRl 30140\nc2FsZXM= 30141\nbGx2bQ== 30142\nIH1dLAo= 30143\nT1RUT00= 30144\nIFB1cnBvc2U= 30145\nTGFi 30146\nIGludGVydmlld2Vk 30147\nb2lz 30148\nYXNpbA== 30149\nLnNldElk 30150\nIEluc3RydWN0aW9u 30151\nLS0+ 30152\nIE1vZGlmaWVk 30153\nYXRpb25hbGx5 30154\nIE1lZXRpbmc= 30155\n6K+v 30156\nI3JlZ2lvbg== 30157\nIHJvdXRpbmc= 30158\nLmZvY3Vz 30159\nIFlvdXRo 30160\nPEQ= 30161\nIE5hZw== 30162\nY29udGFjdHM= 30163\nIGZvcm1pbmc= 30164\nIG1pZQ== 30165\nJyxbJy4uLw== 30166\nIEJQ 30167\nIGFwcGV0 30168\nIFRlYWNoZXI= 30169\nIFRQ 30170\nIGFubnVhbGx5 30171\nb3V0ZWRFdmVudEFyZ3M= 30172\nIFNwZWFrZXI= 30173\nIHJlbmFtZQ== 30174\nQ0ZH 30175\nKCIvLw== 30176\n5o6l 30177\nL3BhZ2Vz 30178\nIHByw6lz 30179\nIFNwZWxs 30180\nLkFsbG93 30181\nIElOVEVSUlU= 30182\nICgj 30183\n4oCZCgo= 30184\nX0dlbmVyaWM= 30185\nLmltc2hvdw== 30186\nX3RpbQ== 30187\nLWZhY2U= 30188\nKCYo 30189\nYXRpbnVt 30190\nIHJldm9sdXRpb25hcnk= 30191\nIEhvdXJz 30192\ncmFpbg== 30193\nIGFueXRpbWU= 30194\nIGFiYg== 30195\nLmpzcA== 30196\nU2Nyb2xsVmlldw== 30197\nIFRydXRo 30198\nIGFudGljaXBhdGVk 30199\nIGFjY2VudA== 30200\nLmNoZWNrZWQ= 30201\nIHNwZWNpZmllcw== 30202\nIGNhZg== 30203\nIGNlbGxwYWRkaW5n 30204\nIGNvb2tlZA== 30205\nIEh1Z2g= 30206\ncGVlaw== 30207\nX1JBVEU= 30208\nIGRvcm0= 30209\nLw0K 30210\nSVZJVFk= 30211\nLkNvbnRyb2xsZXI= 30212\nKHBhcnQ= 30213\nLmNvbnN0cmFpbnQ= 30214\nIGludmFzaW9u 30215\nTU9WRQ== 30216\nIGdsdWM= 30217\nbGVuYW1l 30218\nIGFtZW4= 30219\nZW5nbGlzaA== 30220\nIFN3aXR6ZXJsYW5k 30221\nIjsKCgo= 30222\ncGVzdA== 30223\nLmNvbGxlY3Q= 30224\nTmli 30225\nIERpY3Q= 30226\nIEVtYg== 30227\nKHN1YmplY3Q= 30228\nIG91dHJhZ2U= 30229\nIGRlY2lkaW5n 30230\nIHNlbnRlbmNlZA== 30231\nRmVjaGE= 30232\nIkE= 30233\nIHF1ZXI= 30234\nIGZvbnRGYW1pbHk= 30235\nIHF1YWRy 30236\nLVk= 30237\nX0NBQ0hF 30238\nIGFuYWx5emVk 30239\nIGdhaW5pbmc= 30240\nIEFnYWluc3Q= 30241\nIFNvdWw= 30242\ndGF1 30243\nIGxpZ2h0d2VpZ2h0 30244\nIFRG 30245\nIEVmZmVjdHM= 30246\nLlR5cGVz 30247\nLmFkZENsYXNz 30248\nIHZlZ2Fu 30249\n6YE= 30250\nLici 30251\nIEV4cGxvcmVy 30252\nLmRldGVjdA== 30253\nLnNoaWZ0 30254\nIG9ibGlnYXRpb25z 30255\nbGFzdE5hbWU= 30256\nIGFzc29jaWF0aW9ucw== 30257\nIFRpbWVTcGFu 30258\ndW50ZXI= 30259\nIEZyZXNo 30260\nQ29tcGF0aWJsZQ== 30261\nUHVi 30262\naWRnZXM= 30263\nLm9wdGlvbg== 30264\ndmFyaQ== 30265\nLmhhc2hDb2Rl 30266\nIGdlYg== 30267\nLnNlY3Rpb24= 30268\nLW5vdA== 30269\nIFN1Ym1pdA== 30270\nVE4= 30271\ncmVnaXN0cnk= 30272\nX21lZGlh 30273\nIG5hag== 30274\nZmZ0 30275\nIG1hdGU= 30276\nLXRoaXJk 30277\nIHBvY2tldHM= 30278\nZXN0YQ== 30279\nIGJlbnQ= 30280\nIE5vcmQ= 30281\nIHJldGFpbGVycw== 30282\nIE1vcnJpcw== 30283\nLiIiIgoK 30284\nV3Jvbmc= 30285\nIMWb 30286\nUmF5 30287\nLmVj 30288\nIEJpbmQ= 30289\nX0hBTkQ= 30290\nKG5vbg== 30291\naXNWYWxpZA== 30292\nIHNpbWlsYXJseQ== 30293\nX0xJTUlU 30294\nIGR5bmFtaWNz 30295\nIGRpc3RpbmN0aW9u 30296\n44GG 30297\nPE4= 30298\nIG9ydGg= 30299\nIFRveW90YQ== 30300\nIEthdGU= 30301\nIExT 30302\nb3JpZQ== 30303\nIFNwcmluZ3M= 30304\nIGZyZWFr 30305\nbGFzdG5hbWU= 30306\nX01VTFQ= 30307\nLXN0ZXA= 30308\nIig= 30309\nQUREUg== 30310\nIGVudGVydGFpbmluZw== 30311\nX0NPTkY= 30312\nIGRlY29kZWQ= 30313\nIHN0cmVhaw== 30314\nIHdhaXRlZA== 30315\nIG5vdGlmaWVk 30316\ncm9kdWNlZA== 30317\ndmlzdWFs 30318\nLkxheW91dFBhcmFtcw== 30319\n5rA= 30320\nZXNpYW4= 30321\nZml0cw== 30322\nc3ByaW5n 30323\nIEJlcm5pZQ== 30324\nVXNlckRlZmF1bHRz 30325\nIHBlZGVzdA== 30326\nQXBwZWFyYW5jZQ== 30327\nIFdpa2k= 30328\nIE5PVElDRQ== 30329\nIHNzaA== 30330\nIGR1cmFudGU= 30331\nIFppcA== 30332\nxLFy 30333\nIE5BVE8= 30334\nIHR3ZWx2ZQ== 30335\nIHJveWFs 30336\n77g= 30337\nIG1lcmNoYW50 30338\nIEZ1cm5pdHVyZQ== 30339\nJ10pLAo= 30340\nLFg= 30341\nIGZvbGRlcnM= 30342\nIEdhdGU= 30343\nCWZ1bmM= 30344\ncGljaw== 30345\nX3VzdWFyaW8= 30346\nIFZlcm0= 30347\nbWVudGlvbg== 30348\ndXJwb3Nl 30349\nIGFsZXJ0cw== 30350\neGlvdXM= 30351\nX3NpZw== 30352\nIEZ1 30353\nICg6 30354\nIGR1bWI= 30355\n5YWz 30356\nIGFjY3VyYXRlbHk= 30357\n6YeN 30358\nUkI= 30359\nLXNjcmVlbg== 30360\nIFZFUg== 30361\nam91cg== 30362\nIHJvbWFuY2U= 30363\ndWNjZWVk 30364\nLmNob2ljZQ== 30365\nIGFkaXA= 30366\nX2RpbXM= 30367\nU2VyaWFsaXphYmxl 30368\n44KL 30369\nLmpvYg== 30370\nIHByb2c= 30371\ndWNoYXI= 30372\nIGdlbnRseQ== 30373\nIFJTUw== 30374\naWN0dXJlZA== 30375\nX0VOQUJMRUQ= 30376\nCWxhYmVs 30377\nYXdrcw== 30378\nIEVuc3VyZQ== 30379\ncmVtZW1iZXI= 30380\n7KCV 30381\nIHRyYW5zbWl0 30382\ne3sk 30383\nLlRyYW5zYWN0aW9u 30384\ndXJzZQ== 30385\nX3JlbGF0aXZl 30386\nIHNpemVk 30387\nIFhY 30388\nIFByaW5jZXNz 30389\nIExhcnJ5 30390\nIHByw7M= 30391\nINGB0YLRgA== 30392\nIHNpc3RlcnM= 30393\nZXN0cnVjdA== 30394\nIGNoZWNrcG9pbnQ= 30395\nOmxlbmd0aA== 30396\nIENhcmxvcw== 30397\nL2ljb24= 30398\nX1RBUkdFVA== 30399\nVG9rZW5z 30400\nIHBhdGllbmNl 30401\nIFNlbGVjdGVk 30402\ncXR5 30403\nLnNob3dNZXNzYWdl 30404\nIHdpbGRsaWZl 30405\nIFByb3Bz 30406\nYm0= 30407\nLWFycm93 30408\nIHBhcmNlbA== 30409\nZmlyZWJhc2U= 30410\nIEJlbmphbWlu 30411\nY2Vzc28= 30412\nLnRpbQ== 30413\nIEdhcmM= 30414\nLmFueQ== 30415\nIEhPV0VWRVI= 30416\nIEtv 30417\nIGdyYWJiZWQ= 30418\nX2ZyYW1lcw== 30419\nIG9iamVjdEF0SW5kZXg= 30420\nIEFEVklTRUQ= 30421\nIHN1YnVy 30422\nCUdM 30423\nIH0pfQo= 30424\nLWxlbmd0aA== 30425\n7Iuc 30426\nIFBvdHRlcg== 30427\nX2J1ZmY= 30428\nLmd1aQ== 30429\nIEVuY29kaW5n 30430\nRWxlY3Q= 30431\nLW1lc3NhZ2U= 30432\nIO+/vQ== 30433\nIMiZaQ== 30434\nIEFyZ3VtZW50TnVsbEV4Y2VwdGlvbg== 30435\n0LDRhtC4 30436\nIG1pbmltaXpl 30437\nIHJlc3BvbmRpbmc= 30438\nJF9bJw== 30439\nIEluZGl2aWR1YWw= 30440\nw6Fj 30441\nIElOVEVS 30442\nIG1hc3R1cmI= 30443\nIEJpbg== 30444\nKCck 30445\n65Oc 30446\nIG9wZW5seQ== 30447\nID48 30448\nIHVudG8= 30449\nb2xvZ2ljYWxseQ== 30450\nIE11bA== 30451\nVklESUE= 30452\nIHNsaW0= 30453\nIENvbW1pc3Npb25lcg== 30454\nKG9u 30455\nIHVuZGVybmVhdGg= 30456\nL2Ri 30457\ndm90ZQ== 30458\nKE1lc3NhZ2U= 30459\nIFBvcGU= 30460\nRGVmaW5lZA== 30461\nIHN3aWZ0 30462\ndXJm 30463\nIGFkYXB0ZWQ= 30464\nU0VM 30465\nIHJldmVudWVz 30466\nIGRpdmluZQ== 30467\nPXk= 30468\nR3JhZGllbnQ= 30469\nX2FjdA== 30470\nIC8qITw= 30471\nIHBvbHlnb24= 30472\nIEZEQQ== 30473\nIENhcnI= 30474\nYXRhYmxlcw== 30475\nKHN0ZG91dA== 30476\nIHJlZnJpZ2Vy 30477\nIGNvb3JkaW4= 30478\nYXZvcml0ZXM= 30479\n0YjQuA== 30480\nIGNvbXBhc3Npb24= 30481\nIFBPU1NJQklMSVRZ 30482\nLXNlY29uZGFyeQ== 30483\ndXJhY3k= 30484\nIGNvbXByb21pc2U= 30485\nX0FW 30486\nX29z 30487\nIGJlc2lkZQ== 30488\ng50= 30489\nIGxu 30490\nLnBsdWdpbnM= 30491\nQ2FwYWNpdHk= 30492\nYWxhaA== 30493\nLmJpbg== 30494\nIENSQw== 30495\nX2JhbGFuY2U= 30496\nIGZsZXhEaXJlY3Rpb24= 30497\nIGFtYml0 30498\nIG5pY2tuYW1l 30499\nIEZvcmNlcw== 30500\nQ0xF 30501\nIFNoZWxs 30502\nIHNhaWw= 30503\nIFdyaXRlcg== 30504\nIEFsaWNl 30505\nZHc= 30506\nIEluZGlhbnM= 30507\nIE1hcnNoYWxs 30508\nX1NSQw== 30509\nIG5vcm1hbGl6ZWQ= 30510\nIEphZw== 30511\n44KS 30512\nemVpdA== 30513\ncnBj 30514\nw61j 30515\nLmlubGluZQ== 30516\nIHRyYXZlcnM= 30517\nX251bWVyaWM= 30518\nIHV0aWxpdGllcw== 30519\nIGV2YWM= 30520\nSU5QVVQ= 30521\nCXJlZ2lzdGVy 30522\nTVg= 30523\nIENhbXBiZWxs 30524\nIGRhdGFzZXRz 30525\nIGRlbWFuZGVk 30526\nIGluaXRpYWxTdGF0ZQ== 30527\nZ2Fu 30528\nIGVp 30529\nVW5leHBlY3RlZA== 30530\nLXdlYg== 30531\ndHJhaXQ= 30532\nLFk= 30533\nIFRvZGQ= 30534\nIHNrZWxldG9u 30535\nIG9wdGltaXpl 30536\n56ys 30537\nIFVwb24= 30538\nIFN0T2JqZWN0 30539\nIGFwbGlj 30540\nLic8Lw== 30541\nQUND 30542\nYWxvdXM= 30543\nIGhhc2hDb2Rl 30544\nIEJpYg== 30545\nSU5BTA== 30546\nIGludmlzaWJsZQ== 30547\nIGhldGVy 30548\nIHNhZmVy 30549\nfS8v 30550\nLnRoZW1l 30551\nLm5hdmlnYXRpb25Db250cm9sbGVy 30552\nX21lc2g= 30553\nc2tpbGw= 30554\nIFZpb2w= 30555\nwrI= 30556\nIEVPRg== 30557\nIEtp 30558\neW1tZXRyaWM= 30559\nIG1heGxlbmd0aA== 30560\nxaM= 30561\nZnJpZW5kcw== 30562\nIEV2YW5z 30563\nIGxlbW9u 30564\nICgu 30565\nU2xpZGU= 30566\nIFRoYWlsYW5k 30567\nIENhbm4= 30568\nIGFtZW5k 30569\nIGNpcg== 30570\nIHNpbGx5 30571\nZXNpbWFs 30572\nX3BpYw== 30573\ncHJvY2Vzc29y 30574\nSmF2YVNjcmlwdA== 30575\nIGV2aWRlbnQ= 30576\nX2Rp 30577\nPlA= 30578\ndnJvbg== 30579\nLlVO 30580\nIHBhaW50ZXI= 30581\naXphcnJl 30582\nIGxhdg== 30583\nIHBvbQ== 30584\ncHJlZw== 30585\nPWZ1bmN0aW9u 30586\nKHNlcmlhbA== 30587\naWZpY2E= 30588\ndW1pbmc= 30589\n5Zyw 30590\n44GC 30591\nLW9w 30592\nVUNI 30593\nIEhlbmQ= 30594\nLnByb3BUeXBlcw== 30595\nIHlv 30596\nIHJvdXRpbmVz 30597\nIGNhcmluZw== 30598\nU2Vt 30599\nIHJlc2VydmVz 30600\nIHByaW9yaXRpZXM= 30601\ncmVkaXRz 30602\nSVNUUg== 30603\nQ29udGVudFR5cGU= 30604\nIFNjaHc= 30605\nL21lZGlh 30606\nIGVzdHI= 30607\nIGNsaW1iaW5n 30608\nLXdlZWs= 30609\nY2hlcmNoZQ== 30610\nc2Vuc29y 30611\nVG9BcnJheQ== 30612\nIE1vbnRyZWFs 30613\nIGNsb3Vkcw== 30614\nIEluamVjdGFibGU= 30615\nIFJpY2U= 30616\nIHByb3BhZ2FuZGE= 30617\nX3Byb3ZpZGVy 30618\nIGluZG9vcg== 30619\nIGluYXVn 30620\nIGRpcGxvbQ== 30621\nIG1lc3NhZ2luZw== 30622\nX211dA== 30623\n5aaC 30624\nIGt3 30625\nT05T 30626\nYXJpYW5z 30627\nUlBD 30628\nKV0NCg== 30629\nLXJheQ== 30630\nIFNvcg== 30631\nbWFsbA== 30632\nIG1hcmtldHBsYWNl 30633\nIHZ0aw== 30634\nTWE= 30635\nb2dhbg== 30636\naWdp 30637\nIHNwb25zb3JlZA== 30638\nIERhbmk= 30639\nLlNFVkVS 30640\nPicuJA== 30641\nbXVsdGlwYXJ0 30642\nIFdvbA== 30643\nIHRhYmxlTmFtZQ== 30644\nIFVzZXJuYW1l 30645\nQmFja2dyb3VuZENvbG9y 30646\nIGZyaWdodA== 30647\nX0VNQUlM 30648\nU2VwdGVtYmVy 30649\nX3ZhbHM= 30650\nb3BpYQ== 30651\nIHNwb3R0ZWQ= 30652\nLUNo 30653\nIGRhdGFTb3VyY2U= 30654\nLyIK 30655\n0LXQutGC 30656\nIFJlcXVlc3RNZXRob2Q= 30657\nIFJlcGxhY2U= 30658\nLWRv 30659\nYWhu 30660\nIFBoRA== 30661\nXS4KCg== 30662\nTk9O 30663\nZ2VtZW50 30664\nIFRocg== 30665\nIHF1aWV0bHk= 30666\nIHRvcnR1cmU= 30667\nIHRlYXM= 30668\nIENZ 30669\nIGF0cg== 30670\nZGV2ZWxvcG1lbnQ= 30671\nLWRldGFpbA== 30672\nIGxpZ2h0ZXI= 30673\nIGFyZ3Vpbmc= 30674\nIGRlc2VydmVz 30675\nIGN1cnJpY3VsdW0= 30676\nX0NPTlRFWFQ= 30677\nxYJ5 30678\nSElURQ== 30679\nCUlE 30680\nL3VwbG9hZHM= 30681\nIHRpdHM= 30682\ncmVv 30683\nX2Ryb3A= 30684\nLlVURg== 30685\nIHBpY2t1cA== 30686\nIGdyb2Nlcnk= 30687\nIFB1cmU= 30688\nIGVhc2llc3Q= 30689\nUGhpbA== 30690\nLmZlYXR1cmU= 30691\nKCIq 30692\nIGludmVzdG9y 30693\ndG9r 30694\nIGphcg== 30695\nTG9z 30696\n4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 30697\nLnF1ZXVl 30698\nLXNwZWVk 30699\nTWFs 30700\ndW1ibHI= 30701\nIENPTlNU 30702\nIEhSRVNVTFQ= 30703\nIERhbmNl 30704\nKGZpbGVQYXRo 30705\nIGF0dHJpYnV0ZWQ= 30706\n4KWN 30707\nIEJ1bmQ= 30708\nY29pbnM= 30709\nIHPDo28= 30710\nIHBpcg== 30711\ncGVyc29uYWw= 30712\nIHByZWxpbQ== 30713\nIHByb3Bvc2U= 30714\nIFRM 30715\nXV0p 30716\nIFN1YnNjcmlwdGlvbg== 30717\nIEtyZQ== 30718\nLGxlbg== 30719\nLkZpcnN0T3JEZWZhdWx0 30720\nKS0t 30721\nX3Byb2R1Y3Rz 30722\nLkdldEJ5dGVz 30723\nU2hpcA== 30724\nIGVuY3J5cHQ= 30725\nIFNH 30726\nIE15c3Q= 30727\naGly 30728\nIGl0ZXJhdGU= 30729\nIGludGVuZA== 30730\nLm1vY2tpdG8= 30731\nIGNoYXB0ZXJz 30732\nKGFuZ2xl 30733\nIFZsYWQ= 30734\n6K6+ 30735\nJy4KCg== 30736\nUmVzcG9uc2VCb2R5 30737\nIEFiZA== 30738\nZGVhbA== 30739\nIGJhcnJpZXJz 30740\nLW91dGxpbmU= 30741\nYmlsbA== 30742\nIEZhbGxz 30743\nX3NlY29uZA== 30744\nLmluY2x1ZGU= 30745\nLmNlaWw= 30746\nIG9jY3VwYXRpb24= 30747\ncGhvbnk= 30748\nLm1vdmVUbw== 30749\nIEplbm5pZmVy 30750\nQVNURVI= 30751\nOyI+PA== 30752\nIEVuYWJsZWQ= 30753\nIHRlcm1pbmF0ZQ== 30754\nIElv 30755\nbGF0aW9ucw== 30756\nIFRIRU9SWQ== 30757\nIGVhcmxpZXN0 30758\nIHJhY2s= 30759\nIFNjYXI= 30760\nc2hha2U= 30761\nY2hpcA== 30762\nIHV2 30763\nIGFsbGlhbmNl 30764\n0L/QuNGB 30765\nIEdPT0RT 30766\nemlvbmU= 30767\nIFZJ 30768\nIHst 30769\nIGZpbHRlcmluZw== 30770\nIG1pc2Nvbg== 30771\nLkRvY2tTdHlsZQ== 30772\nIGJ1c2g= 30773\nIGp1bms= 30774\n5ow= 30775\nIFFVRQ== 30776\nIGhvb2tz 30777\nIGZpcm13YXJl 30778\nIG1pZGRsZXdhcmU= 30779\nZGlj 30780\nIE9ha2xhbmQ= 30781\nIGFycml2ZXM= 30782\nUGF5bG9hZA== 30783\ncGl4ZWw= 30784\nXXw= 30785\nIHN0YXJ0RGF0ZQ== 30786\nLlBSTw== 30787\nX2F1ZGlv 30788\nIG1pZGZpZWxk 30789\naWdpZGJvZHk= 30790\nIFN3aXNz 30791\nIENsaXA= 30792\nIER1bXA= 30793\nIFRleHRCb3g= 30794\nIGdlaA== 30795\neWllbGQ= 30796\nb2Rz 30797\nIHJlZmVyZW5kdW0= 30798\nQmFja2VuZA== 30799\nIENyZWFt 30800\nIGRvbWluYXRlZA== 30801\nIEFyY2hpdmU= 30802\nIHJpZGVycw== 30803\nLnByZXBhcmVTdGF0ZW1lbnQ= 30804\nIHF1YW5kbw== 30805\nIGNoZWY= 30806\nd2lraQ== 30807\naW5lbA== 30808\nYW1wbGluZw== 30809\nKCJcXA== 30810\nIHNhZw== 30811\nX3Byb3h5 30812\n44GV 30813\ncGRv 30814\nLmdldEVsZW1lbnRzQnlUYWdOYW1l 30815\nIGRlbW9uc3RyYXRpb24= 30816\nIE5QQw== 30817\nIGFyY2hpdm8= 30818\nZW5kYW5jZQ== 30819\nIGVmZmljaWVudGx5 30820\nKGFjdHVhbA== 30821\nLnRhYmxlVmlldw== 30822\nIG11c2g= 30823\nIGJlYXJz 30824\nX3RocmVhZHM= 30825\namFz 30826\nYWh1bg== 30827\nIG5ldXJhbA== 30828\nIGRlc2lnbmluZw== 30829\nIEdEUA== 30830\nIGxpZnRlZA== 30831\n55uu 30832\nIEpvaW50 30833\nIEluY2x1ZGU= 30834\nIEdpYW50cw== 30835\nIHdpdGhkcmF3YWw= 30836\nIFJlbnQ= 30837\nbmF0aXZl 30838\nIFNlZWs= 30839\nZ3Jlc3Npb24= 30840\nX0NQVQ== 30841\nXFM= 30842\nIFNoaWVsZA== 30843\nIHNvbGlj 30844\nIGJvb20= 30845\neWVjdG8= 30846\nIG1hbnVmYWN0dXJl 30847\nIOKAiw== 30848\nIGJib3g= 30849\nIGVhcnRocXU= 30850\nb2xsZWN0b3Jz 30851\nOkAiJQ== 30852\nIGxvb3Bz 30853\nSmU= 30854\nYWxraW5n 30855\nIFdoYXRz 30856\nIEJveXM= 30857\nLmJvb2s= 30858\nQVJHRQ== 30859\nX3BpeGVs 30860\nIHN1c3BlY3Rz 30861\nzrk= 30862\ndXNw 30863\nIEJNVw== 30864\naWVjZXM= 30865\nKHBlcnNvbg== 30866\n5byA 30867\n6bs= 30868\nIFBvZGNhc3Q= 30869\nIGJvdQ== 30870\nKEl0ZW0= 30871\nw7s= 30872\nKElucHV0 30873\nSHR0cEdldA== 30874\nIGJ1cmc= 30875\nKV4= 30876\nQk9BUkQ= 30877\nKi8s 30878\nIGd1bHA= 30879\nIEJlbm4= 30880\nIGRlY2tz 30881\nLnN0YXR1c0NvZGU= 30882\nIGFjdXRl 30883\nIGh1Zw== 30884\ndWd1 30885\nIHBsZWQ= 30886\nLCIl 30887\naGFwZQ== 30888\nINC30LDQvw== 30889\nIE1haW5l 30890\nLnJlYWw= 30891\nIGRhbGFt 30892\nIE1pbm9y 30893\nLkZsb2F0 30894\nZGlzcA== 30895\nIHRs 30896\nIGVuY291bnQ= 30897\nPT4k 30898\nIGZn 30899\ndGVlcw== 30900\nIFJlY29tbQ== 30901\nw6Rs 30902\nIGNoZW1pc3RyeQ== 30903\nQmxvY2tz 30904\nT0lE 30905\nIGZvcmV4 30906\nIEFwcGVuZA== 30907\nIHsq 30908\nIFN1cHBseQ== 30909\nQ0dGbG9hdA== 30910\nKGJs 30911\nIGF0ZQ== 30912\nYWRvcmE= 30913\nIGd1c3Q= 30914\nQXNzb2Np 30915\nPi4K 30916\nRkVUQ0g= 30917\nLnNlcmlhbA== 30918\nd2lkZ2V0cw== 30919\nYXJkbGVzcw== 30920\naWVmcw== 30921\nX0ZVTEw= 30922\nZXJuZXRlcw== 30923\nIFByZWQ= 30924\n2K0= 30925\n5LqL 30926\ndWJlcm5ldGVz 30927\nIExhdXJh 30928\nIGxhYmVsZWQ= 30929\nSGlnaGxpZ2h0 30930\nIGFubm95aW5n 30931\nL3VwZGF0ZQ== 30932\nKGRlc2NyaXB0aW9u 30933\nIGludGltaWQ= 30934\nJGM= 30935\nIikpKQo= 30936\nLkFQ 30937\nIFtdKg== 30938\nIEVYSVQ= 30939\nLkhvc3Q= 30940\nIE9QRU4= 30941\nLnNlbmRNZXNzYWdl 30942\nX2NhbWVyYQ== 30943\nX3RpbGU= 30944\nIHRoZXJt 30945\nb25vbW91cw== 30946\nIGRpc2Fkdg== 30947\nIG5hYXI= 30948\naW5kZXhPZg== 30949\nIFBQ 30950\nLnByb3RvY29s 30951\nQUZF 30952\nIHRleHR1cmVz 30953\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 30954\ndW1iYWk= 30955\nLnN0YXRz 30956\nIEdF 30957\nIGll 30958\nIFNURA== 30959\nIE1hbm4= 30960\nLnJlZmxlY3Q= 30961\nS0I= 30962\nIGRpdmU= 30963\nLndhdg== 30964\nLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 30965\nL3NldHRpbmdz 30966\nLmxpZmVjeWNsZQ== 30967\nIGRhdWdodGVycw== 30968\nb3J1cw== 30969\ndWJlcg== 30970\nTklORw== 30971\nc3RyaQ== 30972\nIFRpcA== 30973\nIHpu 30974\nIHN3aXRjaGVk 30975\naW5ldA== 30976\ndWZmeQ== 30977\nIFRyYW5zcG9ydGF0aW9u 30978\nKGNvbmY= 30979\nZnJpY2E= 30980\nIFhM 30981\nIExlYWQ= 30982\nX3BlcmNlbnQ= 30983\nPE1hcA== 30984\nIHRocnVzdA== 30985\nb3Ji 30986\naWtr 30987\nIHRyYXVtYQ== 30988\nQWNjZXNzb3I= 30989\nIEZpdA== 30990\nIFN0cmluZ0J1ZmZlcg== 30991\nZXhwbA== 30992\nKHNjcmVlbg== 30993\nIGF1ZGllbmNlcw== 30994\nIE9QVElPTg== 30995\nX3JvdW5k 30996\nW25vZGU= 30997\nYmVo 30998\nLT5fXw== 30999\ncGVybWlzc2lvbnM= 31000\nIERldGVybWluZQ== 31001\nLk1hbg== 31002\nIGFkdmFuY2Vz 31003\nLklucHV0U3RyZWFt 31004\nIHN0cm9uZ2VzdA== 31005\nIGVCYXk= 31006\nICMt 31007\nIGRpcm5hbWU= 31008\nIFNNUw== 31009\nIG1lZGljYXRpb25z 31010\nIGFtZW5kZWQ= 31011\nIGNodXJjaGVz 31012\nIEltcGVyaWFs 31013\nJHJvdw== 31014\nIE1hZGlzb24= 31015\nIEluc3A= 31016\nIGFmZmFpcg== 31017\nIHBzeWNob2xvZ3k= 31018\ndmg= 31019\nIHNldmVyaXR5 31020\n4oCQ 31021\nIHN0cmlwcw== 31022\nQUg= 31023\ndmVydGlzaW5n 31024\nIGNvbnNl 31025\nSU1BR0U= 31026\nIFN0YXRz 31027\nCXNj 31028\nLkN1cnNvcg== 31029\nIGZyZWV6ZQ== 31030\nc3Nvbg== 31031\nKHhtbA== 31032\nIFN1c2Fu 31033\nLnRpbGU= 31034\nZWRlZA== 31035\nICAgIAkJCQ== 31036\ndWVsbGU= 31037\nIE1pdGNoZWxs 31038\nYmFzZWQ= 31039\nT3BlcmFuZA== 31040\nveaVsA== 31041\nIEZG 31042\nCXN0cmNweQ== 31043\nb3VuY2Vz 31044\naWxkbw== 31045\nLmV4ZWN1dGVRdWVyeQ== 31046\nIGFwcHJvYWNoaW5n 31047\nIFNldmVu 31048\nIG51dHM= 31049\nIHJpYw== 31050\nYXNzaWdubWVudA== 31051\nIGNhbGN1bGF0b3I= 31052\nIE11cnBoeQ== 31053\nIEJvdQ== 31054\n7YQ= 31055\nIGJ1dHQ= 31056\nIHRpY2tz 31057\nUHJvamVjdHM= 31058\naWxpYg== 31059\nLnRleHRDb2xvcg== 31060\nbW92 31061\nX2xvZ28= 31062\nKHRlbXBsYXRl 31063\nIElOSVQ= 31064\nIGltYWdlVmlldw== 31065\nc2NyaXB0aW9ucw== 31066\nT1JJVFk= 31067\nQ29uc3VtZXI= 31068\nIHVucHJlY2VkZW50ZWQ= 31069\nIHRvdXJpc3Q= 31070\nIGJyb24= 31071\nIGNvbnRyYWN0b3I= 31072\nIGxpY2VuY2U= 31073\nIE5hbQ== 31074\n5q8= 31075\nKHRyYW5zZm9ybQ== 31076\nX0FUVA== 31077\nUHJlZg== 31078\nIEdhbQ== 31079\nIHZlc3NlbHM= 31080\nIGhhdg== 31081\nTGF0ZXI= 31082\nLlRvTG93ZXI= 31083\nIHVybHM= 31084\nIGJyZWFrZG93bg== 31085\nIHBlbmFsdGllcw== 31086\nIGZvc3Rlcg== 31087\nIFVF 31088\nIGNsdWU= 31089\nY29tZWQ= 31090\n5ZCN56ew 31091\nLW1haW4= 31092\nIHB0cw== 31093\nIGNvdW50ZWQ= 31094\naWN0cw== 31095\nL3Bvc3Q= 31096\nIGdldGF0dHI= 31097\nIHBpbmc= 31098\nQU5DRUw= 31099\nIHBlYw== 31100\n0YXQvtC0 31101\nYW50b20= 31102\nIEJsdWVwcmludA== 31103\nIEV2ZW50RW1pdHRlcg== 31104\nIGzDpA== 31105\n5rI= 31106\nIHN0cmF3 31107\nKGNvbXA= 31108\nJ3VuZQ== 31109\nPk4= 31110\nLWNsaWVudA== 31111\nZXNNb2R1bGU= 31112\nLWJhc2U= 31113\nIHJldHJlYXQ= 31114\nX3NpbXBsZQ== 31115\nCQkJCQkJIA== 31116\nZmVl 31117\nJykNCg0K 31118\nQ29udHJvbEl0ZW0= 31119\nIHN1YnNjcmliZXJz 31120\ncGxlYXNl 31121\nIEVmZg== 31122\nIHBvdW5k 31123\nIEJ5dGVz 31124\nIFRlYQ== 31125\nX2FjdGl2aXR5 31126\nIG1heGlt 31127\nIG9wY29kZQ== 31128\nQlNE 31129\nLmNvbnN0YW50 31130\nO30= 31131\nb21icmVz 31132\nIGNhcmVlcnM= 31133\nKS4KCgoK 31134\nIHNwcmVhZGluZw== 31135\nLWV4cGFuZGVk 31136\nIE9yZA== 31137\nYW1hcmlu 31138\nIG1vYmlsaXR5 31139\nVW5mb3J0dW5hdGVseQ== 31140\nYWtr 31141\nTkw= 31142\nX3JlZGlyZWN0 31143\nIFBH 31144\nIFNlbnNvcg== 31145\nYm9s 31146\ndGFw 31147\nX01FTU9SWQ== 31148\nIFVJQWxlcnQ= 31149\ncGxpdHVkZQ== 31150\nV2Vic2l0ZQ== 31151\nIExvZ28= 31152\nbG92ZQ== 31153\nW2luZA== 31154\nIGFsdG9nZXRoZXI= 31155\nIHdvbmRlcmVk 31156\nIGVzcGVy 31157\nIExpYmVyYWw= 31158\nIG9zcw== 31159\nIGVsaXQ= 31160\nIHN0aWZm 31161\nb2RveA== 31162\nX21lbnRpb25z 31163\nIERvdWdsYXM= 31164\nX3BpZA== 31165\nIENL 31166\nIGluaXRXaXRoRnJhbWU= 31167\nLmJsb2c= 31168\ncGtn 31169\nYW5naGFp 31170\nUVVJUkVE 31171\ndXU= 31172\nIG1rZGly 31173\nQVRBTA== 31174\nIHVuaA== 31175\naW5jZXM= 31176\nc3Ro 31177\nIGh5cG90aGVzaXM= 31178\nIGNhdGE= 31179\nIFRC 31180\nIENsYXI= 31181\nIHByZWRlY2Vzcw== 31182\nIHNpdHVhdGVk 31183\nLXdvcmxk 31184\nKSkv 31185\nIGhlYWRsaW5lcw== 31186\nLnN0YXQ= 31187\nIG91dGJyZWFr 31188\nc3BhdGg= 31189\nX0ZMQUdT 31190\nIFNlcnZsZXRFeGNlcHRpb24= 31191\nU3Vu 31192\nRlJPTQ== 31193\nIERpcg== 31194\n44O744O744O7 31195\nX2Nvb3Jk 31196\nIE9wdGlt 31197\nTW9uaXRvcg== 31198\nLmJpdA== 31199\nWFhY 31200\nIHRvZGFz 31201\nZmVsZA== 31202\n0YDQuA== 31203\naW1pcg== 31204\nIHBvbGl0aWNhbGx5 31205\nIG1vbGVjdWxhcg== 31206\nIHRyYWRlZA== 31207\nIHt7JA== 31208\nIFN3ZWRpc2g= 31209\nICdALw== 31210\nX1JFQUw= 31211\nIHdhcmVob3VzZQ== 31212\ndG9kYXk= 31213\nLEw= 31214\nb3Jw 31215\nPHNlY3Rpb24= 31216\nLWJy 31217\neW1l 31218\nIFVzZXJTZXJ2aWNl 31219\nIGxpYmVydHk= 31220\nIG1vbWVudG8= 31221\nKEltYWdl 31222\nPHNpemU= 31223\nU2No 31224\nIGpvZw== 31225\naW9sb2d5 31226\nYXJlbnRseQ== 31227\nIHF1YW50dW0= 31228\nIEFidQ== 31229\nIHJpbQ== 31230\nIG1hbmE= 31231\nRm9udFNpemU= 31232\nQnVpbGRpbmc= 31233\nc3RhaXJz 31234\nQUlMQUJMRQ== 31235\nICYn 31236\nIHNlY3Q= 31237\nIHNpZ2g= 31238\nKGJhdGNo 31239\nLklDb250YWluZXI= 31240\ncG9sbA== 31241\nIENvcnBz 31242\nzrU= 31243\nYXJ1 31244\nIEtheQ== 31245\nLnJhbmdl 31246\nX2NsaWNrZWQ= 31247\nIFJvYmVydHM= 31248\nLk5ldHdvcms= 31249\nZmluaXNo 31250\nLU1hbg== 31251\nIGNvbGxlZ2Vz 31252\nIEZpbmU= 31253\nIikpLAo= 31254\nZmlsbQ== 31255\nIHJlbWluZGVk 31256\nIGdlc3R1cmU= 31257\nb3V0aWw= 31258\nIHRocmVhZGluZw== 31259\nIG9iamV0 31260\nIHRvdXJz 31261\nYWN0aXZhdGVk 31262\nLm1rZGly 31263\nPXVzZXI= 31264\nIHJlZGU= 31265\nZsO8 31266\nX1NZU1RFTQ== 31267\ncHY= 31268\nIGNvbmdy 31269\nIG1hc3Nhc2pl 31270\nIHByYWN0aXRpb24= 31271\nVW5pdmVyc2l0eQ== 31272\nIHRhYmluZGV4 31273\n0Jg= 31274\nU2V0cw== 31275\nIGNvdW50aWVz 31276\nZ3Vlc3Q= 31277\nZmFu 31278\nIHdvcmRlbg== 31279\nLmRp 31280\n0L3QsNGH 31281\nwr8= 31282\naWdEZWNpbWFs 31283\nIHNob3Jl 31284\nIGfDtg== 31285\nIHJlcGFpcnM= 31286\nIGhlbHBlcnM= 31287\nIGNlbnRlcmVk 31288\nT0xMT1c= 31289\nIG1hcFN0YXRlVG9Qcm9wcw== 31290\nIGNlbnRz 31291\nPEE= 31292\nIGV4cGVjdGF0aW9u 31293\nT2N0b2Jlcg== 31294\nIGJnY29sb3I= 31295\nY2FsZXM= 31296\nLkNPTg== 31297\nIFZlbA== 31298\nIGNyeWluZw== 31299\nLXNlYXNvbg== 31300\nIGZ1bmN0aW9uaW5n 31301\nX0xPQ0FUSU9O 31302\nw7xzcw== 31303\nYmVyeQ== 31304\nUGFyYQ== 31305\nb21pbmF0b3I= 31306\nLWxl 31307\nIGV0aGljYWw= 31308\naGFzaHRhZ3M= 31309\nZW1wbG8= 31310\nIG7Dum1lcm8= 31311\nKGFjdGl2aXR5 31312\nLlN0b3A= 31313\nLnN0cmZ0aW1l 31314\nSUxE 31315\nIHRvZQ== 31316\nCU5vZGU= 31317\nIikNCg0K 31318\nIFB1ZXJ0bw== 31319\nIGV4ZWN1dGluZw== 31320\nIEdVSUQ= 31321\nIG9wcG9zaW5n 31322\nYWxwaA== 31323\nIGV4aGliaXQ= 31324\nX2ZsYXNo 31325\nIG1laWxsZQ== 31326\nIGpzb25PYmplY3Q= 31327\nSGVybw== 31328\nYWludGVk 31329\nX0RPTQ== 31330\nIHdpbA== 31331\nIHNsb3Bl 31332\nIG3DpQ== 31333\nIElyYXFp 31334\nIG9yZ2FuaXpl 31335\nCWpRdWVyeQ== 31336\nSFVE 31337\nc2hpbmU= 31338\nLndl 31339\nIFNraWxscw== 31340\ncG9uc29y 31341\nIGNvbmNsdXNpb25z 31342\nIHJlZm9ybXM= 31343\nIHJlbHVjdA== 31344\nbmFtZWQ= 31345\nIE9saXZlcg== 31346\nIC8vfQo= 31347\nLWxvb2tpbmc= 31348\nIGZvZw== 31349\nIEhP 31350\nIEZyaWVk 31351\nIGluZXZpdGFibGU= 31352\nIERhdGFHcmlkVmlldw== 31353\nSG91cg== 31354\naWxsZXM= 31355\nbG9naWNhbA== 31356\nIGNvbm5lY3Rpdml0eQ== 31357\nLnR3aWc= 31358\nIEt5bGU= 31359\nKGRzdA== 31360\nLVNo 31361\nIFN0dWRpb3M= 31362\nKExldmVs 31363\nLmpldA== 31364\nX1BST1RP 31365\nLWRlY29yYXRpb24= 31366\nT1RIRVI= 31367\nIHJlYWRpbHk= 31368\nLlBhcmFtZXRlcg== 31369\nIG11bHRpcGx5 31370\nIExJQg== 31371\nYXJtZWQ= 31372\nIHNvb25lcg== 31373\n5oQ= 31374\nX0VT 31375\nIGZvc3NpbA== 31376\nIEFuYw== 31377\n4oCcVGhpcw== 31378\nbG9kYXNo 31379\nUHl0aG9u 31380\nIGhpc3RvZ3JhbQ== 31381\nd2VzdGVybg== 31382\nIGluZmFudA== 31383\nIGNvb3JkaW5hdG9y 31384\nIG5pYg== 31385\nOm0= 31386\nIHJlc3BlY3RlZA== 31387\nIGRlZmluaXQ= 31388\nJlQ= 31389\nX3BhZA== 31390\nIFRyaWdnZXI= 31391\ndGhhbA== 31392\nIGltYWdlTmFtZWQ= 31393\nIGJlYXRlbg== 31394\nCXJj 31395\nIFBhbGFjZQ== 31396\nIGhhemFyZA== 31397\nIGlzb2xhdGlvbg== 31398\nX3Jj 31399\nY29udHJl 31400\nT1VUUFVU 31401\nIHJlaWdu 31402\nIFBsYXRl 31403\nQVRFUw== 31404\nIGZsdXg= 31405\nIHBhY2tz 31406\nLmdldFNlbGVjdGVk 31407\nIHBhcnRpY2lwYXRlZA== 31408\nIG5lZWRsZQ== 31409\nLWRlcHRo 31410\nOjo6Ojo6 31411\nLWxhdw== 31412\naW5zcGFjZQ== 31413\nb25pdG9y 31414\nPW5v 31415\nIEF0b21pYw== 31416\nIEJyYWlu 31417\nRWRpdGFibGU= 31418\nLXNj 31419\ncmVkZW50aWFs 31420\nIFBlcnJ5 31421\na2ll 31422\nIC0tLS0tLS0tLS0K 31423\nLnN0cm9rZQ== 31424\nKEludGVudA== 31425\nIHVuaXR5 31426\ndW1sYWg= 31427\nRnVydGhlcg== 31428\nIHByemU= 31429\nIHPDuA== 31430\n44KK 31431\nIFBST0NVUkVNRU5U 31432\nIEhvdXNpbmc= 31433\nIGF0dG9ybmV5cw== 31434\nIGNvbXBvc2U= 31435\nYXR0ZXJpbmc= 31436\nIldoYXQ= 31437\nZHJhdWw= 31438\nIHN0cmFpZ2h0Zm9yd2FyZA== 31439\nSW5zdGFudA== 31440\nLkpUZXh0RmllbGQ= 31441\nIHRyYWRlcw== 31442\n0LvQsA== 31443\nIHsh 31444\nIGxhdGVseQ== 31445\nSU1H 31446\nIEFsZA== 31447\nIElOTkVS 31448\nIGNhcnRvb24= 31449\nLlNvdXJjZQ== 31450\nRkFMU0U= 31451\nIGRvdWdo 31452\nZmVu 31453\nKHJlY3Q= 31454\nRGF0YVRhYmxl 31455\nTmljaw== 31456\nIEJ1dHRlcg== 31457\ncmVhZHM= 31458\nX2NvbW1lbnRz 31459\nRU5W 31460\nIENvbm5lY3RpY3V0 31461\nLUZJUlNU 31462\nCQkJICAgICA= 31463\nYWNoaQ== 31464\nLk1zZw== 31465\ncmVjdGlvbg== 31466\nIHJlbGF4ZWQ= 31467\nIHNoYWZ0 31468\nIGVm 31469\nIEFkZGluZw== 31470\nIGJyZWFjaA== 31471\nIO+8mg== 31472\ncmFtYQ== 31473\nIGNvbmR1Y3Rpbmc= 31474\nICg7 31475\nKGds 31476\nIENBVVNFRA== 31477\nYXNoaQ== 31478\nIEZMQUc= 31479\nIENvbW1lcmNl 31480\nIElOVEVHRVI= 31481\naG91cnM= 31482\nIFNjaG9vbHM= 31483\nIG51Y2xl 31484\nQWdhaW4= 31485\ncHJvag== 31486\nIHNldmVudGg= 31487\nRU1QTEFSWQ== 31488\nKG1vY2s= 31489\nJ10sDQo= 31490\nX1NQRUVE 31491\nPmZhbHNl 31492\nIHNwYQ== 31493\nIE5lYXI= 31494\n7JU= 31495\nIGludHJpZw== 31496\nX21lbWJlcnM= 31497\nd2F2ZQ== 31498\nIGFuYWx5c3Rz 31499\nX09T 31500\nZWRpbg== 31501\nIEZyaQ== 31502\nIHJldHJpZXZlZA== 31503\nUmVndWxhcg== 31504\nX29icw== 31505\nRVhQT1JU 31506\nJyl9fSI= 31507\nImNsYXNz 31508\nX18oKA== 31509\nYnVja2V0 31510\nIHN0cm8= 31511\nIFBhdGNo 31512\neXN0aWNr 31513\nZnVsbmVzcw== 31514\nYXBvcw== 31515\nRGE= 31516\nCQkJCQkgICA= 31517\nIGVucmljaA== 31518\ndW5vcmRlcmVk 31519\naG9sZQ== 31520\nQ29uZw== 31521\nPFByb2R1Y3Q= 31522\nIEN1cnQ= 31523\nKHRoZQ== 31524\nX2xvd2Vy 31525\nIGF2b2lkaW5n 31526\nIGJ1eno= 31527\nIHZpYWJsZQ== 31528\ndWJh 31529\nLWlz 31530\nYXJlbA== 31531\nIGFjdGVk 31532\nLWRldGFpbHM= 31533\n4LiH 31534\nIFRoZW9yeQ== 31535\nIFB1bg== 31536\nIEFub255bW91cw== 31537\nLi4uIgo= 31538\nw6hyZXM= 31539\n5Y+v 31540\nIFZpc2lvbg== 31541\nX3NlbQ== 31542\nYXNoYQ== 31543\nIGNlbGVicml0eQ== 31544\nIGVuZERhdGU= 31545\nIHBvcHVsYXRl 31546\nIGN1aXM= 31547\ncXVhbnQ= 31548\nZmxvb3I= 31549\nIGdsb2JhbGx5 31550\nIGNydWlzZQ== 31551\nIFN0YW5sZXk= 31552\nIGJpa2Vz 31553\nLmdldENvbm5lY3Rpb24= 31554\nIHBvb3JseQ== 31555\nX290aGVy 31556\nYW1waW5n 31557\nLiIpOwoK 31558\nb2Rp 31559\nX0FETUlO 31560\nLmNvbG9ycw== 31561\nIEdhbWluZw== 31562\nPic7Cgo= 31563\nU1RSVUNU 31564\nUVI= 31565\nSURz 31566\nKGFyZ3VtZW50cw== 31567\nX2F1eA== 31568\nKEV2ZW50 31569\nX1BSSVZBVEU= 31570\nIFRyZWs= 31571\nIGRvd25sb2Fkcw== 31572\nbXV0YWJsZQ== 31573\nX1NUUlVDVA== 31574\nKHd4 31575\nIGRvbWFpbnM= 31576\nanNweA== 31577\nIFZpYWdyYQ== 31578\nQ29tbWFuZHM= 31579\nSnM= 31580\nLmNmZw== 31581\nQ29udGVudFBhbmU= 31582\nIEVkaXRUZXh0 31583\n4KWN4KQ= 31584\nQXR0YWNo 31585\nIEFSTQ== 31586\ncG9zaXRpdmU= 31587\nIEdlbmVyYXRlZA== 31588\nIHNlaXplZA== 31589\nPTo= 31590\nIGVsZWN0cm9uaWNz 31591\nIEFwcENvbXBvbmVudA== 31592\nLycsCg== 31593\nLmVxdWFsc0lnbm9yZUNhc2U= 31594\nRG9jdHJpbmU= 31595\nZGlzaw== 31596\nIFBvbGl0aWNhbA== 31597\nQ0hP 31598\nPEY= 31599\nCWhlaWdodA== 31600\nIEJ1Zw== 31601\nLmxl 31602\naWto 31603\nIG1pbGxpc2Vjb25kcw== 31604\nIGNvbnN0aXR1 31605\nbWFn 31606\nLm5s 31607\nLXJhbmdl 31608\nYW5nZ2Fs 31609\nJyxb 31610\ncm9wb2xpdGFu 31611\nIMOc 31612\nIFVD 31613\nLmRlc2M= 31614\nLUxBU1Q= 31615\nZnN0cmVhbQ== 31616\naWJpbA== 31617\nIGZpZXI= 31618\nVkVSWQ== 31619\nIOuz 31620\nSVJU 31621\nX1VJ 31622\nKGFicw== 31623\nIGtuZWVz 31624\nIHJvb2tpZQ== 31625\nIFZhYw== 31626\nYXJlbmE= 31627\nY29tbWVuZA== 31628\nLVw= 31629\nIFNVQlNUSVRVVEU= 31630\nU29mdA== 31631\nIHBhcnRpcg== 31632\nd2VhbHRo 31633\n6KaB 31634\nKGRhdGFzZXQ= 31635\nIENsaW1hdGU= 31636\nLXNob3c= 31637\nIHJlbGlhYmlsaXR5 31638\nX2NodW5r 31639\n5Luj 31640\nX3N0b2Nr 31641\nIEVYRU1QTEFSWQ== 31642\n77iP 31643\nIHbDrQ== 31644\nIHNtaWxlZA== 31645\nIGRyaWxs 31646\nLkZ1bmN0aW9u 31647\nIFNJ 31648\nIHJlZ3Jlc3Npb24= 31649\nLVg= 31650\nIEphcg== 31651\ncHJlZg== 31652\nCXN1Y2Nlc3M= 31653\nIEhpdGxlcg== 31654\nIGluc3RpbmN0 31655\nIGZlbW1lcw== 31656\nIGxvdmVy 31657\nPAo= 31658\nIG11bHRpcGxpZXI= 31659\ncmls 31660\nUmVzaXpl 31661\nIEF1dGhvcml6YXRpb24= 31662\nIEthbg== 31663\nRGlzcGF0Y2hUb1Byb3Bz 31664\nIGNyb3Bz 31665\ndG9rZW5z 31666\nZWNu 31667\nZW50aWFsbHk= 31668\nIElOVEVSUlVQVElPTg== 31669\nZmFrZQ== 31670\nVW5kZWZpbmVk 31671\nIEFL 31672\nIFRlc3RDYXNl 31673\nIHJhYg== 31674\nIHRvcnJlbnQ= 31675\nIE90 31676\nQmFycw== 31677\nIGxlY3R1cmU= 31678\nIGVuam8= 31679\nIHJlc3BvbmRz 31680\nIGluZGV4ZWQ= 31681\nT2ZXb3Jr 31682\nX2NoYWlu 31683\nKSktPg== 31684\nIEJlYXV0eQ== 31685\nIGA8 31686\nIHRvdWNoaW5n 31687\nIHwtLQ== 31688\nCWZsYWc= 31689\nbm9ybWFsaXpl 31690\nIHRyYXBwZWQ= 31691\nIGVzdGFibGlzaGluZw== 31692\nL2J1aWxk 31693\nQUo= 31694\nZnk= 31695\nLXJlYWN0 31696\nYXZu 31697\nUklQVElPTg== 31698\nIGt1dA== 31699\nIEZhc2hpb24= 31700\nIEluZm9ybQ== 31701\nY3VyaXRpZXM= 31702\nPGJ5dGU= 31703\nIFVrcmFpbg== 31704\nIHN1Zw== 31705\nIGNvbnNpc3Rpbmc= 31706\nb29kbGU= 31707\nLmN0eA== 31708\nLlRvTGlzdA== 31709\nIGNvbW1lbnRhcnk= 31710\nIHRyYW5zZmVycw== 31711\nIG5vc3Q= 31712\naWhhZA== 31713\nIFVwcGVy 31714\nIGNvbmZ1c2luZw== 31715\nbWlzc2luZw== 31716\nLWNs 31717\nIGJvdW5kaW5n 31718\nIGNvbmdyZXNzaW9uYWw= 31719\nIHJldmVhbGluZw== 31720\nZGg= 31721\ncnVw 31722\nIHRyZXM= 31723\ncmVwZWF0 31724\nLAoKCgo= 31725\nX3RhYw== 31726\nIGV4cGVk 31727\nR2lybA== 31728\naG9yaXpvbnRhbA== 31729\nICIuLi8uLi8uLi8= 31730\nKG9wdGlvbg== 31731\nIHdlaXRlcg== 31732\nCXNxbA== 31733\nID0+ewo= 31734\nIGdhcmxpYw== 31735\nIHJlcHI= 31736\nIHJlcGxpZXM= 31737\nKHByb3A= 31738\nIHNwaXJpdHM= 31739\nIGluc3BpcmU= 31740\nIGJhc2VtZW50 31741\nLnJlamVjdA== 31742\nIGhpbnRz 31743\nIHBvbGxpbmc= 31744\nCSAK 31745\nX3JhdGluZw== 31746\nIGNhdGg= 31747\nYXZpZXI= 31748\nIGNvbXByZXNzZWQ= 31749\nIFZT 31750\nXSc= 31751\nIGp1ZGljaWFs 31752\nIFRyZW5k 31753\ndHJhaW5pbmc= 31754\nRVNUQU1Q 31755\nb2duaXRpb24= 31756\nxIE= 31757\nU0VOVA== 31758\ndmVudGlvbnM= 31759\nIGNvbnN1bHRhbnQ= 31760\ndW1waA== 31761\nIHVzZXJTZXJ2aWNl 31762\nLE5VTEw= 31763\na2g= 31764\nRGVhcg== 31765\nX0JBRA== 31766\naXRhdGlvbnM= 31767\nIG1ldGFwaA== 31768\nJ8Op 31769\nYW5kaXNl 31770\nLWZvbnQ= 31771\nLmNoYXJ0 31772\nIHNn 31773\nX0NvbnRyb2xsZXI= 31774\nLmpwZWc= 31775\nIFVMT05H 31776\nCWdhbWU= 31777\nKHNz 31778\nIE1hag== 31779\nCWdv 31780\nIFNhZA== 31781\nIEJlcmc= 31782\nIE1pbmU= 31783\nUGFjaw== 31784\nIHJlc2lzdGFudA== 31785\nIFJPTQ== 31786\nIHBlZw== 31787\nIFN0YW5mb3Jk 31788\nIFlhaG9v 31789\nIHNjYWxlZA== 31790\nIGxhbg== 31791\nPVtd 31792\nIi8+PC8= 31793\nIHBsb3Rz 31794\nLioK 31795\nIHRyYXZlbGVk 31796\nIE9zY2Fy 31797\nVkw= 31798\nIGxpbmtpbmc= 31799\nIHRpcmVz 31800\nICcqJw== 31801\nIEJ1ZmZlcmVk 31802\nZXJp 31803\nICoqKio= 31804\nIG92ZXJsb29r 31805\nLk5vbg== 31806\nIHLDqXM= 31807\nIGVneQ== 31808\n5bCP 31809\nIGF0dGFja2Vy 31810\nCQkJCQkJCQkJCQkJCQkJ 31811\nLnN5bmM= 31812\nQVNDQURF 31813\nR3JvdW5k 31814\nIGRlY2F5 31815\nIFRvbg== 31816\nIGpld2Vscnk= 31817\nIGJ5cGFzcw== 31818\nIG1lbWJy 31819\nUk5B 31820\nPFN5c3RlbQ== 31821\nIE1lZGljYXJl 31822\nKG5ldA== 31823\nb3Np 31824\nSEI= 31825\nREVD 31826\ne0VJRg== 31827\nX2ZpbGw= 31828\nIHRyYXZlbGxpbmc= 31829\nb2JzZXJ2ZXI= 31830\nIGNvbnN1bHRpbmc= 31831\nUkVBVA== 31832\nUGhhc2U= 31833\nKGlp 31834\nIFNVTQ== 31835\nPg0NCg== 31836\nIHN1ZA== 31837\nCWJhY2tncm91bmQ= 31838\nIHNjaG9sYXJz 31839\nLW11dGVk 31840\nYXLDoQ== 31841\nID09PT09 31842\nIF9fX18= 31843\nQ3JlYXQ= 31844\nZW5ldmVy 31845\nL3dw 31846\nIFZQTg== 31847\nRXJyb3JDb2Rl 31848\nKV0sCg== 31849\nKGJ1aWxkZXI= 31850\nIEVuZW15 31851\nU2Vuc29y 31852\ndXNh 31853\nIHRyaWdnZXJz 31854\nIHBsYXlvZmZz 31855\nX1JFUQ== 31856\nICh+ 31857\nIEJhcnJ5 31858\nIHBlcm1hbmVudGx5 31859\nIFJVTg== 31860\nIGJ1cmU= 31861\nLkZhdGFsZg== 31862\nIGNoaWNr 31863\nCXBhbmlj 31864\ncHNp 31865\nb2th 31866\n6YCJ 31867\nPls= 31868\nIHVuZGVyc3RhbmRz 31869\nIEp1bmlvcg== 31870\nIElORk8= 31871\nPW15c3FsaQ== 31872\ndXN0YWlu 31873\nLXNvdXJjZQ== 31874\nc2Vydg== 31875\nIENSRUFURQ== 31876\nLmF1 31877\nIHNlbGxz 31878\nICAKICAK 31879\nRXVyb3Bl 31880\nenc= 31881\ncHJlaA== 31882\nIE5TQQ== 31883\nIHh5 31884\n4Li0 31885\nIEJleW9uZA== 31886\nSW5zdGVhZA== 31887\nTm9uUXVlcnk= 31888\nIGFyaXNl 31889\nIGF2b2lkZWQ= 31890\nLmVtcGxhY2U= 31891\nX21vZGVscw== 31892\nfSksCg== 31893\nIGhpZA== 31894\nICZf 31895\nLnBvaW50cw== 31896\nLmdldFdpZHRo 31897\nLkV4ZWM= 31898\nIC8vLy8= 31899\nIFNlc3Npb25z 31900\nLi4uXA== 31901\nIENvbG9tYg== 31902\nIGFjY2VsZXJhdGlvbg== 31903\ncmVzdG9yZQ== 31904\nIGlsZQ== 31905\nb2JpYw== 31906\nPE5vZGU= 31907\nIERY 31908\nIEJlc2lkZXM= 31909\nLmFnZQ== 31910\nIENvbnRhaW5z 31911\nTmF0aW9uYWw= 31912\nIEltcGxlbWVudGF0aW9u 31913\nIGVmZmlj 31914\nIFJN 31915\nSHk= 31916\nIFdlZGRpbmc= 31917\nb2tpZXM= 31918\nIHJlY3Vyc2l2ZQ== 31919\nIHByb3NlY3V0b3Jz 31920\nLlNlbGVjdGlvbg== 31921\nIEZvcm11bGE= 31922\nQmVlbkNhbGxlZA== 31923\nW2lp 31924\nIEZyYW4= 31925\nIHRyYWdlZHk= 31926\nX0ZFQVRVUkU= 31927\nmag= 31928\nY29tcGFzcw== 31929\nIEJo 31930\nPwoKCg== 31931\nLndyaXRlcg== 31932\nIEhvdXI= 31933\nRGJDb250ZXh0 31934\naW92 31935\nYW1vbg== 31936\ncmVwcg== 31937\n6YM= 31938\nCWZp 31939\nJ11d 31940\nIERyeQ== 31941\nLnJv 31942\nIE9ic2Vydg== 31943\n5qCH 31944\nRm9ybWVy 31945\nIEJhbGFuY2U= 31946\nCWpzb24= 31947\nIHByenk= 31948\nSVNT 31949\nKHNvY2s= 31950\nIExJTkU= 31951\nIGRlY2U= 31952\nIGFsbHk= 31953\nIHRlbmRlbmN5 31954\nRnVu 31955\nIHNjaGVtZXM= 31956\nIGludGVydmVu 31957\n5piO 31958\nIGFkdmVyc2U= 31959\ncXVvdGVsZXY= 31960\nIHNhY3JpZmlj 31961\nX3NpZGU= 31962\nIG11dGV4 31963\nQUdJQw== 31964\nIG9jY3VycmluZw== 31965\nIENvbW11bmljYXRpb24= 31966\ndW1hcg== 31967\n57yW 31968\nIFRyZWF0bWVudA== 31969\nLnBlcnNvbg== 31970\nIExD 31971\nIGVjaA== 31972\nKCgi 31973\nIERpc2Vhc2U= 31974\nw6Rk 31975\nIEFa 31976\nLkFjY291bnQ= 31977\nIGNvbnRpbnVvdXNseQ== 31978\nRU5ESU5H 31979\nIFJFVFVSTg== 31980\nLXN0cmluZw== 31981\nLmZpbGVuYW1l 31982\nc3ludGhlc2l6ZQ== 31983\nUmVzcG9uZGVy 31984\nKG9wdHM= 31985\ncmVncw== 31986\nIG51ZXN0 31987\nUGVlcg== 31988\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 31989\nIGdhdWdl 31990\nIEtpbg== 31991\nLnNjaGVtYQ== 31992\nIGFycmFuZ2U= 31993\nIEJsYWtl 31994\nX1R5cGVJbmZv 31995\nQ292ZXI= 31996\nIEhhbXBzaGlyZQ== 31997\nUGFwZXI= 31998\nLWlubmVy 31999\ndXRpbGl0eQ== 32000\nIGNyb3Nzb3JpZ2lu 32001\nRk9S 32002\nIGlnbm9yaW5n 32003\nIERE 32004\nYXZhbg== 32005\nIHRyYWRpdGlvbnM= 32006\nIGdldFN0cmluZw== 32007\nIGV0aGljcw== 32008\nIE1hdGVyaWFscw== 32009\nREVTQw== 32010\nIGVuenlt 32011\naW9sZXQ= 32012\nIENoaXA= 32013\nIE1jRG9uYWxk 32014\nIG5lcnZl 32015\n54Q= 32016\nIild 32017\n5rGC 32018\nIFN1Z2Fy 32019\nX1NJTQ== 32020\nanBlZw== 32021\nIGRpc2NyZXRpb24= 32022\nIFRO 32023\nYm92ZQ== 32024\nIE1pbmltdW0= 32025\nIEZvcm1Hcm91cA== 32026\nIHdvcmtmb3JjZQ== 32027\nIEV4ZWN1dGlvbg== 32028\nZXJyZXI= 32029\nCSAgICAJ 32030\nIHByZXNjcmliZWQ= 32031\nLlRleHRBbGlnbg== 32032\nT1BFTg== 32033\nIFBC 32034\naW1pdHk= 32035\nIEV4dGVybmFs 32036\nwrBD 32037\nIEFwcGxpY2F0aW9uQ29udHJvbGxlcg== 32038\nIGJhcnI= 32039\naW1wbGljaXQ= 32040\nX2RvdA== 32041\nIENvbG9u 32042\nQ09MT1I= 32043\nLlByb2plY3Q= 32044\nKjwv 32045\nLXhs 32046\nIG9zYw== 32047\nKHBhdHRlcm4= 32048\nJyl9Cg== 32049\nc3VjY2Vzc2Z1bA== 32050\nYWxvZw== 32051\nU3R1ZGVudHM= 32052\nXXN0cmluZw== 32053\nYW50b24= 32054\nYXR0aQ== 32055\nY2hlbWljYWw= 32056\nLmluZg== 32057\nKGRy 32058\nOlVJQ29udHJvbFN0YXRl 32059\ndG9JbnQ= 32060\nXTwv 32061\n0LDQtdC8 32062\nIMW+ 32063\nLkFjdGlvbkxpc3RlbmVy 32064\nLlNFVkVSRQ== 32065\nIFNhbHY= 32066\nX1RSQU4= 32067\nL2ludGVybmFs 32068\nIHdlbGNvbWVk 32069\nLmNvbW1lbnQ= 32070\nbXV0YXRpb24= 32071\nIEZBUQ== 32072\nLm9uZQ== 32073\nIExBQg== 32074\nIn19 32075\nIFJvbA== 32076\naWV2ZWQ= 32077\nIGFkdmVudHVyZXM= 32078\nIGZ1bmVyYWw= 32079\nIHNwb3VzZQ== 32080\nKG9wZW4= 32081\nIFJlYWR5 32082\nIHRvdXJpc20= 32083\nYWRpbg== 32084\nX2ZhY2U= 32085\n4oKB 32086\nIG1pZ3JhbnRz 32087\nIFB1cmNoYXNl 32088\nY29yZA== 32089\nIE9VVFBVVA== 32090\nKSkNCg0K 32091\nU2VndWU= 32092\ndGFicw== 32093\nIGRvdHM= 32094\nIG5haWw= 32095\nYm9ybmU= 32096\nIGRlc2lyZXM= 32097\nIHByZXZlbnRlZA== 32098\nJ109PQ== 32099\nIHRpbWVseQ== 32100\nSUNB 32101\nU2Nhbm5lcg== 32102\nIEx1Y2Fz 32103\nIGdpdGh1Yg== 32104\nJ11bXQ== 32105\nZGlh 32106\nY29ub21pYw== 32107\nIGRpZXNlcg== 32108\ndW5kZXJz 32109\nLkhhbmRsZXI= 32110\nPyIs 32111\nLmRhdGFi 32112\nIGFkdmlzZQ== 32113\nLmFuaW1hdGlvbg== 32114\nIG92ZXJoZWFk 32115\nIG9ic3RhY2xlcw== 32116\nX2pvaW4= 32117\nIG3DqQ== 32118\nRmxhdA== 32119\nLmRpc3Bvc2U= 32120\nIEV4cGVjdGVk 32121\nIGZsZXc= 32122\nIGVtYm9k 32123\nX3NsdWc= 32124\nIG5hbWVseQ== 32125\nIHdpdG5lc3NlZA== 32126\nc29saWQ= 32127\nLmxlZ2VuZA== 32128\nUXVhbA== 32129\nX3N1cmZhY2U= 32130\n44Op 32131\nQW1lcmljYQ== 32132\nIGFmZmlsaWF0ZXM= 32133\nIFByb3M= 32134\nX2V4dGVuc2lvbg== 32135\nYmluZGluZw== 32136\nU1RBTEw= 32137\nLnJlYWR5 32138\nIGNvcHlpbmc= 32139\nIEhlbmNl 32140\nIGRpc2NvcmQ= 32141\nX3NoaXA= 32142\nUHJvcGVydHlOYW1l 32143\nCQkgICAgICAgICAgIA== 32144\nIGFjaGlldmluZw== 32145\nIEJlYw== 32146\nWmlw 32147\nU29tZXRpbWVz 32148\n44GL 32149\nIGNvbnRyYQ== 32150\nIHB1bmlzaA== 32151\nIGluc3VsaW4= 32152\nIGRpc2FwcGVhcg== 32153\nX2VudW0= 32154\nLmF1dA== 32155\nIGhhc2F0dHI= 32156\nYWZmZWN0ZWQ= 32157\nc2hl 32158\nJHRhYmxl 32159\na3Np 32160\nIGxhY2tpbmc= 32161\nIGRpc2NvdW50cw== 32162\nU3RtdA== 32163\nIEFyZ2VudGluYQ== 32164\nIHVucGFjaw== 32165\nIFJvdXRlZEV2ZW50QXJncw== 32166\nICc/ 32167\naW50ZXJvcA== 32168\nIHNvZmE= 32169\nIGR5bg== 32170\nIEdyYWNl 32171\nIGludGVncmF0ZQ== 32172\n2YM= 32173\nIGRlbGF5cw== 32174\nIEltcGxlbWVudA== 32175\nUHJvb2Y= 32176\nIGFwcGxpY2FudHM= 32177\nIExlYXRoZXI= 32178\n7Ja0 32179\nIGVuam95YWJsZQ== 32180\nU3Bpbm5lcg== 32181\nL3o= 32182\nIGZvYW0= 32183\nIExhYm9yYXRvcnk= 32184\nIHJlc2VhcmNoZXI= 32185\nIENocmlzdGlhbml0eQ== 32186\nIGN1c3RvbWl6ZQ== 32187\nIGNpcGhlcg== 32188\nIGRvZA== 32189\nIHPDsw== 32190\nQEVudGl0eQ== 32191\nT05MWQ== 32192\naW52ZW50b3J5 32193\nIGNvbmNsdWRl 32194\nIGN1ZW50YQ== 32195\nIENvaGVu 32196\nLWluY29tZQ== 32197\nbWJI 32198\nbWVudGF0aW9u 32199\nIHZlcnc= 32200\ndWRw 32201\nQU1M 32202\nLmNvbWJvQm94 32203\nZmg= 32204\nam9icw== 32205\nRmlsZVN5bmM= 32206\nIEJhcmJhcmE= 32207\nIFNjYW4= 32208\nY3JlZW5zaG90 32209\nIE9ydGg= 32210\nLnZpZXdEaWRMb2Fk 32211\nIEFSUkFZ 32212\nLEA= 32213\nL2ludA== 32214\nR2VuZXJhdGU= 32215\nIGRlbW9uc3RyYXRlcw== 32216\nIFplbmQ= 32217\n5YiX 32218\nCXZvbGF0aWxl 32219\nPXI= 32220\nIGZt 32221\nCWJ1ZmZlcg== 32222\nZW5hdGU= 32223\nLkNvbWJpbmU= 32224\nIG1pc2M= 32225\nY2hlbWFz 32226\nIHB1cmVseQ== 32227\nIGdsVmVydGV4 32228\nLlJlc3Q= 32229\nIHJlY2FsbGVk 32230\nIGZyZWVs 32231\nIHNxdWU= 32232\nVHJhY2tlcg== 32233\nIFBocA== 32234\nIERpc3RhbmNl 32235\nIGJlYXN0 32236\nQ29tcGxleA== 32237\nIGNvbnNpZGVycw== 32238\n572R 32239\ndHJpYnV0aW9u 32240\nIGNvbXBsaW1lbnQ= 32241\nX2xpbmVubw== 32242\nIE11dGFibGU= 32243\nIHVuZGVm 32244\nIEdlbQ== 32245\nIGNvbXBvdW5kcw== 32246\nLnV1aWQ= 32247\nIGFub255bQ== 32248\nIHN0YWlycw== 32249\nIERiU2V0 32250\nd29ydA== 32251\nIFNlbnM= 32252\nLkJlZm9yZQ== 32253\nIGVuZGZvcmVhY2g= 32254\nIFRvZ2V0aGVy 32255\nYXRpbGl0eQ== 32256\nIG1vaXN0dXJl 32257\nLSR7 32258\nKFRlc3Q= 32259\nVEI= 32260\nbXVzaWM= 32261\nIGluc2lzdA== 32262\nIGhlYWRsaW5l 32263\nLkFuZA== 32264\nUEFUQ0g= 32265\nIFByZXBhcmU= 32266\nIHN3aXRjaGVz 32267\nKnA= 32268\nIFll 32269\nX2Ficw== 32270\nLmhhbmRsZXI= 32271\nIGFzc2lnbm1lbnRz 32272\nUHJlZmVyZW5jZQ== 32273\nRU5USVRZ 32274\nIHBpcGVz 32275\nIEFsZXJ0RGlhbG9n 32276\nb2dyYXBoaWNhbA== 32277\nIHBhdGlv 32278\nIHdlYnBhY2s= 32279\nYnBz 32280\nTmF2TGluaw== 32281\nLk51bWJlcg== 32282\nIEFybW9y 32283\nIFBldGVycw== 32284\nIERlc2M= 32285\nZHVpbm8= 32286\nIEljb25z 32287\nLmdldEhlaWdodA== 32288\nIHRleHRWaWV3 32289\nCU5VTEw= 32290\nYWxsb2NhdGU= 32291\nfSR7 32292\nIFByaXpl 32293\nLW51bQ== 32294\nLk1vdmU= 32295\n6L6T5YWl 32296\nLmNhbWVyYQ== 32297\nUHJvYmxlbQ== 32298\nCXR5cGVkZWY= 32299\nKHN0b3Jl 32300\nIERJU0NMQUlNRUQ= 32301\nIHN1YnN0YW50aWFsbHk= 32302\nRkZG 32303\nIGVwc2lsb24= 32304\nIGluZXF1YWxpdHk= 32305\nX2NoaWxkcmVu 32306\n5LiH 32307\ncmVsdQ== 32308\nUGllY2U= 32309\nYW50cnk= 32310\nYmFiZWw= 32311\ndmV0aWNh 32312\nIHN1cnZleXM= 32313\nIGRldGVjdG9y 32314\nCWFyZ3M= 32315\nLlNlbGVjdGVkVmFsdWU= 32316\nIGludGVyZmVyZW5jZQ== 32317\nLi4uKQo= 32318\nLlNUUklORw== 32319\nIFR5bGVy 32320\nIENhdGFsb2c= 32321\nVmVydGljZXM= 32322\nIFByb2plY3Rz 32323\nIExlYmFu 32324\nLiIpCgo= 32325\nLmtlcm5lbA== 32326\nIHJpZGVz 32327\nIE11dA== 32328\nYW50aA== 32329\n0L7RgNC8 32330\nZW5uaWFs 32331\nLnRhc2tz 32332\nLnNldFByb3BlcnR5 32333\nYXRlZ29yaQ== 32334\n5pyA 32335\nL2Nvbg== 32336\nYnJhY2U= 32337\nIE5TRXJyb3I= 32338\nJ10pKTsK 32339\nbGlzdGVk 32340\nIFByZXZpZXc= 32341\nQWN0aXZhdGU= 32342\nIGN5Y2w= 32343\nLWFjdGl2ZQ== 32344\naGFk 32345\nVG9v 32346\nIHJlZ2lzdA== 32347\nbGljYWw= 32348\nIHBvZXRyeQ== 32349\nSW1wb3J0cw== 32350\n77yB77yB 32351\nOjw= 32352\nIGNoYXJt 32353\nIENvdW4= 32354\nb2xsaWRlcg== 32355\nIGh3 32356\nfWAK 32357\nPWFyZ3M= 32358\nIE5ldXJv 32359\naXRpY2Fs 32360\naWVuZW4= 32361\nIERvdA== 32362\nX09OTFk= 32363\nRE4= 32364\nIFBsYXlTdGF0aW9u 32365\nIHN0ZWVw 32366\nIHByYWN0aWNhbGx5 32367\nIGFwcGxpY2FudA== 32368\nIGFyb20= 32369\nYW5pYw== 32370\nCWRpc3BsYXk= 32371\nIHRlcm1pbmF0ZWQ= 32372\nIGNsYXJpdHk= 32373\nIE1lbnVJdGVt 32374\nIEt1cg== 32375\naWpl 32376\nX3dlZWs= 32377\nKGRpY3Q= 32378\nX3JlY29yZHM= 32379\nIENvc3Rh 32380\nIGtldA== 32381\nRXh0ZW5zaW9ucw== 32382\nIG5ldWtlbg== 32383\naW5zaQ== 32384\nX2luYw== 32385\nIOaW 32386\nIGVpbmY= 32387\nIFJpc2s= 32388\nIGVsZXZhdGVk 32389\ncGVycw== 32390\nVURB 32391\nIEtO 32392\nIGxpbmVk 32393\nIE1vcm0= 32394\nKTsKCgoK 32395\nPn0K 32396\ncGxhaW50 32397\nZ2V0VGV4dA== 32398\nIGluZGl2aWR1YWxseQ== 32399\nIGNoZWNrYm94 32400\nVVk= 32401\nIExhbWI= 32402\nIGR5c2Z1bmN0aW9u 32403\nIExhcg== 32404\n4LA= 32405\nIENyZWF0aW5n 32406\nJyk7CgoK 32407\nIlRoZXk= 32408\nbG9jYXRpb25z 32409\nX0NPUkU= 32410\nSW50ZXJhY3Rpb24= 32411\ndW1ibmFpbHM= 32412\nIFBhcnRuZXI= 32413\nYnJpdA== 32414\nIGxlc3Nlcg== 32415\nIFNsb3Q= 32416\nc2V0QXR0cmlidXRl 32417\nIFdhdmU= 32418\nLnBv 32419\nL3N0b3Jl 32420\nIGJyb3dzaW5n 32421\nX3Bk 32422\nc3VtZQ== 32423\nc2Vk 32424\nQ3VydmU= 32425\nIHBsYXNtYQ== 32426\nIHN1c3BpY2lvdXM= 32427\n7J24 32428\nIEJhaA== 32429\nIEV4cGxpY2l0 32430\nX0ND 32431\nLkNsaWVudFNpemU= 32432\nXFZpZXc= 32433\nIHN1YnN0aXQ= 32434\nbG9vbg== 32435\nIEdBTUU= 32436\nIEJyaWQ= 32437\nm+W7ug== 32438\nX1VzZXI= 32439\nIHNxdWFyZXM= 32440\nZm9uZQ== 32441\nIHNhY3JlZA== 32442\ndWdocw== 32443\nXWludGVyZmFjZQ== 32444\nIFRocm93 32445\nIEtpcms= 32446\nIGVtcGlyZQ== 32447\nIGFzc2Vzc2Vk 32448\nVGF4 32449\nIEhlYXZlbg== 32450\nLWJ1ZmZlcg== 32451\nX1NUQVRJQw== 32452\nw6luw6k= 32453\nLWJvcmRlcmVk 32454\nIHB1bmN0 32455\nKG1vZGU= 32456\nIGtlaW5l 32457\nU2VudA== 32458\nIENhbGN1bA== 32459\nIEV2ZQ== 32460\nIHN0eWxpc2g= 32461\nIG9pbHM= 32462\nLlRlc3RDYXNl 32463\nIHRyYWRlbWFyaw== 32464\nIGxpdGVyYXJ5 32465\nIGNvbmNlbnRyYXRpb25z 32466\nIFJlbGF0aW9ucw== 32467\nKENsYXNz 32468\nIHN0ZGlu 32469\nIHbDpg== 32470\nYmFja3Vw 32471\nLlZFUlNJT04= 32472\nLkF1dG9TY2FsZURpbWVuc2lvbnM= 32473\nc3RhcnRlcg== 32474\nVHJhbnNhY3Rpb25hbA== 32475\nLXBhbmVs 32476\nU3R1ZGlv 32477\na2M= 32478\nIENoYW1iZXI= 32479\nIFNwaWVs 32480\nIHJobw== 32481\n2KfZhA== 32482\nISc= 32483\nLkF0dHJpYnV0ZXM= 32484\nIG11cmRlcmVk 32485\nYXBldXRpYw== 32486\nIGludGltYXRl 32487\nIHRleHRGaWVsZA== 32488\nIEJ1ZmZhbG8= 32489\nZHVtbXk= 32490\nIiU= 32491\nIExpYmVydHk= 32492\nb2Jhcg== 32493\nIFRhbms= 32494\nIFBvcHVsYXI= 32495\nZXJ2aXNvcg== 32496\nIEluaXRp 32497\nIE1hbGw= 32498\nIFByaW9y 32499\nQ0FQ 32500\nIENsYXk= 32501\nIENlcnRpZmljYXRl 32502\nLkxvY2s= 32503\nLXN0cmlw 32504\nLWRyaXZlbg== 32505\nL2FsbA== 32506\nIE1lc3NhZ2VCb3hCdXR0b25z 32507\nX1NFQ1JFVA== 32508\nX3Bi 32509\nIHJhdHM= 32510\n4KS+4KQ= 32511\nIG50 32512\nLlJvdXRlcg== 32513\nX3RvcGlj 32514\nIHRlbm5pcw== 32515\nIFBVQkxJQw== 32516\nIEFjdGl2YXRlZFJvdXRl 32517\nICcsCg== 32518\nIGNvc3R1bWU= 32519\nIGpva2Vz 32520\nLkhhbmRsZQ== 32521\nCWJ5dGU= 32522\nIGZsYXZvcnM= 32523\nKGNj 32524\nIHBlcnNvbmFz 32525\nCWltYWdl 32526\nIE5hemk= 32527\nIGdyYW1tYXI= 32528\nIMO6bHQ= 32529\nIHZhbHZl 32530\nIHZpYw== 32531\nIFJhY2hlbA== 32532\nX2ludmFsaWQ= 32533\nUHJlZnM= 32534\nc3RkaW50 32535\nKHJvdXRl 32536\nIGh0bWxzcGVjaWFsY2hhcnM= 32537\nIHBlb3BsZXM= 32538\ncGxpbmU= 32539\nIG52 32540\nIFF1YW50 32541\nb3BwZXJz 32542\nIGN1cnJlbnRVc2Vy 32543\nIENhdGFs 32544\nIHJlY29uYw== 32545\nIGNvbmp1bmN0aW9u 32546\nbHg= 32547\nYW1idXJn 32548\nIGluZmx1ZW50aWFs 32549\nZGFuZ2Vy 32550\naW5kZXJz 32551\nICVAIiw= 32552\nLmNvbmZpZ3VyYXRpb24= 32553\nb3NvbWU= 32554\nLmlkZW50aXR5 32555\nIHBpY2tlcg== 32556\nbm9zdA== 32557\nIERJWQ== 32558\nQXVndXN0 32559\nYWJsbw== 32560\nTGVhZg== 32561\nIFJlY28= 32562\nY2tv 32563\nRE9D 32564\nIEhlcm0= 32565\nOmFueQ== 32566\nIEludGVydmlldw== 32567\nIFRleA== 32568\neGZl 32569\nKHdvcms= 32570\nIGxlYXA= 32571\nSGVhZGluZw== 32572\nIHF1YXJ0ZXJz 32573\nXEJ1bmRsZQ== 32574\ncmVi 32575\nUGVyaGFwcw== 32576\nIEdtYkg= 32577\nQmlydGg= 32578\nCXN1bQ== 32579\nIFdhdHNvbg== 32580\nLm5pbA== 32581\n56E= 32582\ne30KCg== 32583\naWNhaWQ= 32584\nR2V0dGVy 32585\nIm5hbWU= 32586\nICINCg== 32587\nX25vbmU= 32588\nem0= 32589\nYWN1dGU= 32590\ndWVzdG8= 32591\nIHNvdXM= 32592\nIHJlYnVpbGQ= 32593\nIG5ld3NwYXBlcnM= 32594\nIEhheg== 32595\nIGtpdHM= 32596\naWZv 32597\nQmx1cg== 32598\nIHN1aXRlZA== 32599\nLUlu 32600\n4K8= 32601\nIEtlaXRo 32602\nIE5vcndheQ== 32603\nSU5JVA== 32604\naXJlY2Npb24= 32605\naWV0aWVz 32606\nX3VzYWdl 32607\nIERvdWc= 32608\ncmlzZQ== 32609\nIHRyaWxsaW9u 32610\naW1pdGVk 32611\nIFJFTA== 32612\nYWxpYw== 32613\nIGNyaXRpY2l6ZWQ= 32614\ndGhlb3JlbQ== 32615\nIGNlYXNl 32616\nIHNpZGV3 32617\nIFRlcnJ5 32618\nIHN1YnNpZGk= 32619\nIGZpcm1seQ== 32620\nIGF3cw== 32621\nIGhvdHQ= 32622\nIGRyZXNzaW5n 32623\nYmFkZ2U= 32624\nIEFwcGxpY2F0aW9ucw== 32625\n6L+U5Zue 32626\nIGxhdWdoZWQ= 32627\nIGhvYmJ5 32628\nIG11c2ljaWFucw== 32629\nICou 32630\nLnBsYWNlaG9sZGVy 32631\nIGNvdW50ZXJz 32632\nIENhcGl0b2w= 32633\nU0RL 32634\nIGhlbG1ldA== 32635\nYW5kYm94 32636\ncXVpdA== 32637\nIGNyaW1pbmFscw== 32638\nIHRlZW5hZ2Vy 32639\nKHVwZGF0ZQ== 32640\nR2w= 32641\nLnNlbGVjdGlvbg== 32642\nIGRpc2NoYXJnZQ== 32643\nIHByZXNlbnRpbmc= 32644\ndWZhY3R1cmVy 32645\nX1VOS05PV04= 32646\nIHN0cmVzc2Vk 32647\n5Zmo 32648\nUHJvdG8= 32649\nX2NvcnJlY3Q= 32650\naGF1cw== 32651\nIHJlbm92 32652\nIGZpcmVhcm1z 32653\nIHRlY2huaWNhbGx5 32654\nLWJyb3dzZXI= 32655\nIGNhbmR5 32656\nU3Ryb2tl 32657\nIGV4ZWN1dG9y 32658\nIG9jY3VycmVuY2U= 32659\nIElQdg== 32660\nX0lOVEVSRkFDRQ== 32661\nIFJldHJpZXZl 32662\nLmJhZA== 32663\nRXhjaGFuZ2U= 32664\nTmF2YmFy 32665\nIEtpZA== 32666\nKGdldEFwcGxpY2F0aW9uQ29udGV4dA== 32667\nX1NUT1A= 32668\nIEJvc3M= 32669\nTGlzdGVuZXJz 32670\nIHNob290ZXI= 32671\nIEFsYg== 32672\nw6RjaA== 32673\nIHBpeA== 32674\nLmtleUNvZGU= 32675\nYWxvbmU= 32676\nIGFic3VyZA== 32677\nIEN1bQ== 32678\nIE5ld3RvbnNvZnQ= 32679\naWt0 32680\nIGxhdWdoaW5n 32681\nIGNhcGl0YWxpc20= 32682\ncmVlTm9kZQ== 32683\nVHg= 32684\nX1FVRVJZ 32685\nLlNsZWVw 32686\nKGxvZ2lu 32687\nV2ViRWxlbWVudA== 32688\nIGNlbGVicmF0aW5n 32689\nIGRlcHJlY2F0ZWQ= 32690\nIG1hYXI= 32691\nIGFydGlzdGlj 32692\nX0FTU09D 32693\nIEJvcmRlclJhZGl1cw== 32694\nCXdw 32695\nIHN1cnZpdm9ycw== 32696\nSW5uZXI= 32697\nLXJlZA== 32698\nIHByb3NlY3V0aW9u 32699\nX3Bw 32700\nKCI8Lw== 32701\nIF49 32702\nIGxhbQ== 32703\nIFRyYWRpbmc= 32704\nZmxhcmU= 32705\nRGV0ZWN0b3I= 32706\nTUY= 32707\nIEVtZXJnZW5jeQ== 32708\nIEVhZ2xlcw== 32709\ncXVhZA== 32710\nIEluY3Jl 32711\ncGxpYW5jZQ== 32712\nXE1pZ3JhdGlvbg== 32713\nIHVwZ3JhZGVz 32714\nQ1BV 32715\nYWdnaQ== 32716\nZnByaW50Zg== 32717\naWdpb24= 32718\nIGJlYXV0aWZ1bGx5 32719\nIGRyaWVk 32720\nX0hJR0g= 32721\nIGdwaW8= 32722\nTVND 32723\nIERlcHV0eQ== 32724\nIERlY2w= 32725\nIHRyZWFzdXJl 32726\nc2dpdmluZw== 32727\nX3NpZGViYXI= 32728\nIGFwYXJ0bWVudHM= 32729\nIFdy 32730\nIGJvYXRz 32731\nIGJvcg== 32732\nLmxhbmd1YWdl 32733\nIFVp 32734\nbGl0 32735\nZnJt 32736\nYW5jaWVz 32737\nIG1hc3Nlcw== 32738\nIEFzc2lnbg== 32739\nIFBPTA== 32740\nIG1hcERpc3BhdGNoVG9Qcm9wcw== 32741\nIGJyYWNrZXQ= 32742\nIFBhcA== 32743\nIENp 32744\nIEludG8= 32745\nIHRlYW1tYXRlcw== 32746\nIGZvcmFsbA== 32747\ndWx1aQ== 32748\nIENhcm4= 32749\nX0lOUw== 32750\nYXppb25p 32751\nY2Vw 32752\nIHRvdXJpc3Rz 32753\nLWJsdWU= 32754\nIExlZA== 32755\nIHBlbmV0 32756\nIEZv 32757\nIGltYWdpbmc= 32758\ncHJh 32759\nIHNsYXZlcw== 32760\nb2xlcmFuY2U= 32761\nIGluY29ycG9yYXRlZA== 32762\nJiw= 32763\ndWFibHk= 32764\nIEthcA== 32765\nWG1sRWxlbWVudA== 32766\nIE11ZWxsZXI= 32767\nQ2hhbmdlTGlzdGVuZXI= 32768\nIEhvbGlkYXk= 32769\nCSAgICAgICAgIA== 32770\nRmxleA== 32771\nCVVzZXI= 32772\nIl0pKQ== 32773\nX3N1Ym1pdA== 32774\nLmJvbGQ= 32775\nIGxvY2tz 32776\nIEN1YmE= 32777\ndWRzb24= 32778\nSG9vaw== 32779\nIFdhcm5lcg== 32780\nX3N0YXI= 32781\nIj0+JA== 32782\nIGNvbW1h 32783\ndW5jaGVja2Vk 32784\nZ3JhcGhpY3M= 32785\ncm9ycw== 32786\nR1JPVU5E 32787\nKHB1YmxpYw== 32788\nIGN1c3RvbWl6ZWQ= 32789\nIEFya2Fuc2Fz 32790\nIFJldw== 32791\nIGV4cGlyYXRpb24= 32792\n15U= 32793\nIEN1bA== 32794\nIG5vbnM= 32795\nLkZpbHRlcg== 32796\nIHNlbmF0b3I= 32797\nX2RlZmluaXRpb24= 32798\nYXNoaW5ndG9u 32799\neW1waA== 32800\nL0o= 32801\nIGZ1c2U= 32802\ncmFtaWQ= 32803\nIFN1cHBsaWVy 32804\nIGF1dG9jb21wbGV0ZQ== 32805\nIH0pLA== 32806\nLiIKCgo= 32807\nX2Z1bmN0aW9ucw== 32808\nCXRv 32809\nLmV2YWw= 32810\nIFRPYmplY3Q= 32811\nUmVmZXJlbmNlcw== 32812\nIGhlYXRlZA== 32813\nSEFM 32814\nICkpfQo= 32815\nfSQ= 32816\nIEJhcnI= 32817\nX1VOSVQ= 32818\nKyQ= 32819\nIGdldFZhbHVl 32820\naXBlZA== 32821\nY2hpZWQ= 32822\nKHZt 32823\nY3Vl 32824\nX2ludGVnZXI= 32825\nX2NvdXJzZQ== 32826\ndGhpcmQ= 32827\nIHJldmlzZWQ= 32828\nKiovCg== 32829\nX0RJUkVDVA== 32830\nT3V0T2Y= 32831\nKCIo 32832\nIEZlZWw= 32833\nIHJlYXNz 32834\nIHN1YnRpdGxl 32835\ncGVyaQ== 32836\nbmY= 32837\nIGVuam95cw== 32838\nIHRyZWF0cw== 32839\nKXRoaXM= 32840\nLXRhYnM= 32841\nYW5jZXJz 32842\nIGNvbnRpbmVudA== 32843\nIGNhcmRpbw== 32844\nU2Vy 32845\nLnF1ZXN0aW9u 32846\nIHBocmFzZXM= 32847\nVmFsaWRhdG9ycw== 32848\nIHBvcHVs 32849\nIGzDrQ== 32850\nc29uZw== 32851\nX0lOVEVSTkFM 32852\nIGFkdmlzZXI= 32853\nIHB1eno= 32854\nIGFtYml0aW91cw== 32855\nIFRvYg== 32856\nIERQ 32857\nIHByZXNpZGVuY3k= 32858\nIHN1cnJlbmRlcg== 32859\nIHdhdGNoZXM= 32860\nX2JpbmFyeQ== 32861\nIFNvb24= 32862\nIGNhbmFkYQ== 32863\nKCIiKQo= 32864\nXT0n 32865\nIEJyYW5kb24= 32866\nZXBzaWxvbg== 32867\ncnc= 32868\nLmFkZENoaWxk 32869\nLkNvcHk= 32870\nUHJpbmNpcGFs 32871\nUGhvdG9z 32872\nIG1hcmdpbmFs 32873\nIGJhc2ljcw== 32874\nZWluZw== 32875\nTXVzdA== 32876\nX1N0cmluZw== 32877\nIG9sZQ== 32878\nTWFnZW50bw== 32879\nLmN1c3RvbWVy 32880\nKHByZXY= 32881\n4Lil 32882\nIGxveWFsdHk= 32883\nQ29n 32884\nIHByb3RvY29scw== 32885\nIENvbXBhbmllcw== 32886\nIHRoZW9yZXRpY2Fs 32887\nIGFjY2Vzc2luZw== 32888\nIFplbg== 32889\nLm9uZXM= 32890\nYXR0aWNl 32891\nX3dvcmxk 32892\nemVz 32893\nIHRhdHRvbw== 32894\nIG1lbm9z 32895\nIGludGVyc2VjdA== 32896\nIl07Cgo= 32897\nYmVsaWU= 32898\nIGluYWN0aXZl 32899\nLnJlYWRsaW5l 32900\nLWxhYmVsbGVk 32901\nLmRvbmU= 32902\nbGlja3I= 32903\nIFdPUks= 32904\nIGRlcml2YXRpdmU= 32905\nIGRhdGFiYXNlcw== 32906\n4oKC 32907\nIHN4 32908\nLmlzQXJyYXk= 32909\nIHlz 32910\nIHBhZGE= 32911\nIEJ1bGxldA== 32912\nKGAv 32913\naXNBY3RpdmU= 32914\nIENHU2l6ZQ== 32915\nKGVxdWFsVG8= 32916\nIENvbHVtYnVz 32917\nIG1hcnJ5 32918\nREVW 32919\nX2xpbWl0cw== 32920\ncm9uZXM= 32921\nSUFT 32922\nIHRhdQ== 32923\nbWlubw== 32924\nX1dyaXRl 32925\nIFdpbmU= 32926\nIFtbJw== 32927\nIFB1bGw= 32928\ncml0ZXJz 32929\ncmllbnRz 32930\nIHNoaWZ0aW5n 32931\ndXBw 32932\nX1RJTUVS 32933\nIENvbmRpdGlvbnM= 32934\n4bql 32935\nIE9yZGVycw== 32936\nIFN0cmVuZ3Ro 32937\n5omA 32938\nIHZhbGlkaXR5 32939\nIGZvdA== 32940\nZXR1cg== 32941\nIGJvbHQ= 32942\n5YaF 32943\nIEFsb25n 32944\nb3NoaQ== 32945\nIGFzc3VtcHRpb25z 32946\nIG1hZ2F6aW5lcw== 32947\nX1NQSQ== 32948\nIHB1bnQ= 32949\nX1BST0RVQ1Q= 32950\nIHJlbGF5 32951\nIEphdmFzY3JpcHQ= 32952\nLnRl 32953\nLWVz 32954\nIHdpZGdldHM= 32955\nKGZz 32956\nPEl0ZW0= 32957\nX2V4dHJh 32958\nIHJlY3J1aXRpbmc= 32959\nRXQ= 32960\nIG5lY2Vzc2l0eQ== 32961\ncHc= 32962\nIG5vdmVscw== 32963\ndXNzZWxz 32964\nQ3JlYXRvcg== 32965\nIE1WUA== 32966\nIE9D 32967\ndGhvb2Q= 32968\nY2xpZW50cw== 32969\nKSkq 32970\nIGNoYXJhY3Rlcml6ZWQ= 32971\nX1NFTkQ= 32972\ndXRp 32973\nVHk= 32974\nLmZyb21Kc29u 32975\nQFNlcnZpY2U= 32976\n44KC 32977\nQ2hyaXM= 32978\nX0lz 32979\nIEpvaG5ueQ== 32980\nIGNsZWFuZXI= 32981\nIEluaXRpYWxpemVz 32982\nVU5L 32983\nKGF4aXM= 32984\n0LXQtw== 32985\naWV2YWw= 32986\nIFdhcnJpb3Jz 32987\nfSko 32988\nRE1J 32989\n4pmA 32990\nIFRyZWFzdXJ5 32991\nIGZlYXM= 32992\nIHNsYQ== 32993\nX0VOVU0= 32994\nbGhz 32995\nIEluc3RpdA== 32996\naXBwZXJz 32997\nTGluZWFy 32998\nUmVhZGluZw== 32999\ncXVpcmllcw== 33000\nLWNlbGw= 33001\nY2hyb21l 33002\nLlNlYXJjaA== 33003\nSU5B 33004\n57G75Z6L 33005\nIAogCg== 33006\nIFNhbXVlbA== 33007\nIG1pbGxz 33008\nIGRvbmF0ZQ== 33009\nIEdlbw== 33010\nKHJvd3M= 33011\nIHNoZWVw 33012\nIMOpbA== 33013\n5L2T 33014\nIGJlbQ== 33015\nX1VOVVNFRA== 33016\nIFJDQw== 33017\nIGludHJvZHVjaW5n 33018\nYXR0YQ== 33019\nIFByaW9yaXR5 33020\nIEZC 33021\nIFNlcmdl 33022\nPiI7 33023\nYXRjaGluZw== 33024\nIEtub3dsZWRnZQ== 33025\nCVRoZQ== 33026\nO21hcmdpbg== 33027\nbGVzc25lc3M= 33028\nb3BhcmQ= 33029\ndW1hdGlj 33030\nKCkpKTsNCg== 33031\nIGZhbHM= 33032\nKGNhY2hl 33033\nVHlwZUlk 33034\n6YCa 33035\nX2Nob2ljZQ== 33036\nIEdvdGg= 33037\nIFNpdGVz 33038\nTUc= 33039\nX2JvcmRlcg== 33040\nSW5kaWNlcw== 33041\nQ29tcGFyZXI= 33042\nIFJlZGlzdHJpYnV0aW9u 33043\nIGNsb3NldA== 33044\nIHZlcnNhdGlsZQ== 33045\nSW5wdXRz 33046\nKioqKioqKioqKioqKioqKioqKio= 33047\nIG9iZXNpdHk= 33048\ncXVpeg== 33049\nZ3Jh 33050\nKGdsb2JhbA== 33051\n5Yqh 33052\nIGNvbGxlY3Rvcg== 33053\nIGtvcg== 33054\nb3ZhYmxl 33055\nQURD 33056\nIEV2ZW50SGFuZGxlcg== 33057\nLm5j 33058\nIHBsYXliYWNr 33059\naWVudG9z 33060\nX3Blcm0= 33061\nX1dBUk5JTkc= 33062\nIE9seW1waWNz 33063\nLm5vcm0= 33064\nIEJyb2FkY2FzdA== 33065\nX3NtYWxs 33066\nZHJpdmU= 33067\nLmlsb2M= 33068\nIHR5cGVk 33069\nTUVN 33070\nX2NvbnM= 33071\nRE1FVEhPRA== 33072\nIGx1bg== 33073\nLmRpc3RhbmNl 33074\nKHBhcg== 33075\ncG9vbg== 33076\nIGJhc3Q= 33077\nYWN0aXZpdGllcw== 33078\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33079\nOg0KDQo= 33080\nU0VS 33081\nKSYm 33082\nX2xzdA== 33083\nIFBvbGlzaA== 33084\nIGtub2NrZWQ= 33085\nIGZydXN0cmF0aW9u 33086\nYXVrZWU= 33087\nIHBob3NwaA== 33088\naXF1aWQ= 33089\nX2NvZWZm 33090\n5q2k 33091\nTGF0ZXN0 33092\nIER1c3Q= 33093\nVGlwbw== 33094\nIG1haW50YWlucw== 33095\nIG1hcnNo 33096\naW5jaW5u 33097\nbGJs 33098\nQ2FyZQ== 33099\nIG5laWdoYm9yaG9vZHM= 33100\nX2dwaW8= 33101\nIEFyc2VuYWw= 33102\nRGVt 33103\nIFdoZQ== 33104\nX2hvb2s= 33105\nIGxkYw== 33106\nIEhhcnBlcg== 33107\nIEJlcmtlbGV5 33108\nIGdyYWR1YXRlZA== 33109\nUGVyY2VudA== 33110\nIGFycml2aW5n 33111\nIEFkdmVudHVyZQ== 33112\nKHNjb3Bl 33113\nKCcq 33114\ncXVhcnRlcg== 33115\nIE1hcmll 33116\nU3BlYWtpbmc= 33117\nX2NvZGVnZW4= 33118\nIGltbXVu 33119\nY2FzdGVy 33120\n44KM 33121\n5ZWG 33122\nIERpbWVuc2lvbnM= 33123\nLnJlY29yZA== 33124\nIHRleHRv 33125\nIE1pY2hlbGxl 33126\nUGVuZGluZw== 33127\nKGJ5 33128\nX1BBUg== 33129\ndWNodA== 33130\nYmVl 33131\nLlRocmVhZA== 33132\nYW1waXJl 33133\na25vdw== 33134\nIENsaW5pY2Fs 33135\nIG1hcmdpbkJvdHRvbQ== 33136\nIGRpc3Rpbmd1aXNo 33137\nLkZ1bGw= 33138\nLnVuZGVmaW5lZA== 33139\nIFNlcXVlbGl6ZQ== 33140\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 33141\nIGVkdWNhdGVk 33142\nX09WRVI= 33143\n5bqP 33144\nIMKgIMKg 33145\nX2VhY2g= 33146\nIHVyZ2U= 33147\nZGVwYXJ0 33148\nIGRvbm9ycw== 33149\nIEF1 33150\nIGJpbGxpb25z 33151\nIGJlbG9uZ2luZw== 33152\nX2FnZQ== 33153\nX0ludA== 33154\nIHN1YnN0YW5jZXM= 33155\nbWFjaGluZQ== 33156\nISEhCgo= 33157\nIGpzb25pZnk= 33158\naWJiZWFu 33159\nIENhZA== 33160\nIGVuZFRpbWU= 33161\nIGN5Y2xpbmc= 33162\nIFVJVGV4dEZpZWxk 33163\nIGxldmVyYWdl 33164\nIHZhbmlsbGE= 33165\nZWF0 33166\nTGF1bmNo 33167\nKHB0 33168\nc3RhdGVz 33169\nIENvbnRyb2xz 33170\nIFJlc3BvbnM= 33171\nIEpha2U= 33172\nIGFzbGVlcA== 33173\nZm9ydHVuYXRl 33174\nLm5leHRMaW5l 33175\nU2l6ZU1vZGU= 33176\n7J28 33177\nVGVzdGluZ01vZHVsZQ== 33178\nR2VybWFu 33179\nIEludmVzdGln 33180\nLnJldmVyc2U= 33181\nIEJBQ0s= 33182\nKERhdGVUaW1l 33183\nIG5vbnByb2ZpdA== 33184\nIEV4cGVjdA== 33185\nIHRhbnRv 33186\nJ10pLA== 33187\nCXRoZQ== 33188\nTXVsdGlwbGU= 33189\nKGdldEFjdGl2aXR5 33190\nX1dBSVQ= 33191\nIGrDoQ== 33192\nZGVjb3I= 33193\nbGV2YW5jZQ== 33194\nIEdpdEh1Yg== 33195\nbWluYXRpb24= 33196\nX3F1YW50aXR5 33197\nLlNjYW5uZXI= 33198\nIExpb24= 33199\n6ZSZ6K+v 33200\nIGRyZQ== 33201\nIHRhbnRyYQ== 33202\nIGNvbnRlbnRUeXBl 33203\nIGZpZA== 33204\nX2FsdA== 33205\nTlNJbmRleFBhdGg= 33206\nLXBs 33207\n5YyW 33208\nIGFudGliaW90 33209\ndGFibGVz 33210\nYWNpYWw= 33211\nIFJlZ2lzdHJ5 33212\nIG9saXZl 33213\naWdlcnM= 33214\nIHN1YnNjcmliZXI= 33215\nX3ByZXM= 33216\nIFN5bnRheA== 33217\nIGxvdmVycw== 33218\nLkJ5dGU= 33219\nb2xkZXJz 33220\nX2ZvcndhcmQ= 33221\nYWx3YXlz 33222\nQ2FwdGlvbg== 33223\nUHJpdg== 33224\nIFRhbXBh 33225\naXNhdGV1cg== 33226\nLWxhYmVsbGVkYnk= 33227\nIFRvU3RyaW5n 33228\nIOyCrA== 33229\nIGluaXRpYXRlZA== 33230\nV0Y= 33231\nIGluc3RpdHV0aW9uYWw= 33232\naW5qZWN0 33233\nIFNjcg== 33234\nIGRvY3RyaW5l 33235\nIHNwYWNpb3Vz 33236\naXN1cmU= 33237\nIEFuYQ== 33238\nInRpbWU= 33239\nZXNzYWdpbmc= 33240\nIGNpZA== 33241\nIE5hbg== 33242\nIGluY29tcGxldGU= 33243\nVEFH 33244\nLWJ1aWxk 33245\nRGVjZW1iZXI= 33246\nIHJlc2lkdWFs 33247\nKFBETw== 33248\nIExpc3Rlbg== 33249\nIGdseXBo 33250\nIGdhcHM= 33251\nbmVh 33252\nLlJlY3Q= 33253\nIHNhdQ== 33254\nIFBob3RvZ3JhcGg= 33255\nIGV4ZWN1dGFibGU= 33256\nIEV4cGVydA== 33257\nQ29yb3V0aW5l 33258\nX3NpemVz 33259\nIE5M 33260\nLmlzVmFsaWQ= 33261\nKTt9Cg== 33262\nLXJlZw== 33263\nIGNpdGluZw== 33264\nY3dk 33265\nIE90dGF3YQ== 33266\nIEJhdHQ= 33267\nIHJlbmV3YWJsZQ== 33268\nIHByZWxpbWluYXJ5 33269\nIGFzeWx1bQ== 33270\nIHdyaXN0 33271\nIHV0aWxpeg== 33272\nIGRldGVudGlvbg== 33273\nRmFzdA== 33274\nIGFuZ2U= 33275\naW5jaW5uYXRp 33276\nIHN0ZWVyaW5n 33277\nIE5hTg== 33278\naW9zaXR5 33279\nL3BhZ2U= 33280\nIOi/ 33281\nc3Rlcm9s 33282\nIGRpc2c= 33283\nKERC 33284\nIERFU0NSSVBUSU9O 33285\nIF8k 33286\nIG9ic3RhY2xl 33287\nIGJpemFycmU= 33288\nIGV4dHJhY3Rpb24= 33289\nX2V4cGVjdGVk 33290\nIGxvc2Vz 33291\nIENlbGVicg== 33292\nIGh0bWxGb3I= 33293\nIGV4cGxvaXQ= 33294\n0L7Qu9GM0LfQvtCy 33295\nWFla 33296\nIG1hZ25ldA== 33297\nYW1wZWQ= 33298\nIGF0b21z 33299\nU291cmNlcw== 33300\ncGVjdGl2ZXM= 33301\n0YHQu9C4 33302\nID0NCg== 33303\nIGRhcmU= 33304\nIFdhbHRlcg== 33305\nIGJyaWdodG5lc3M= 33306\nIGFubm90YXRpb25z 33307\n648= 33308\naXNrZQ== 33309\nU2NoZWR1bGU= 33310\nLmltYWdlcw== 33311\ncm9zc28= 33312\nICIuLg== 33313\nZ2FtbWE= 33314\nIGluc3RydWN0b3I= 33315\nIG92ZXJ3cml0ZQ== 33316\nLWFt 33317\nIGRldmFzdGF0aW5n 33318\nIFNhaW50cw== 33319\nIGhz 33320\nIGJvbnVzZXM= 33321\nJG91dHB1dA== 33322\naWpk 33323\nKEFjdGlvbkV2ZW50 33324\nbW9uaXRvcg== 33325\nIG1hdHRyZXNz 33326\nSmFudWFyeQ== 33327\nLmpw 33328\nIGNhcmFjdGVy 33329\nIGltcG9zZQ== 33330\nX3Jlc3Q= 33331\nIFNpZ25hdHVyZQ== 33332\nIGNvcm9uYXZpcnVz 33333\n44GK 33334\nX2NvbXBhcmU= 33335\nTWVhc3VyZQ== 33336\naXRhdGVk 33337\nZWxpams= 33338\naWdvcw== 33339\nZXNhcg== 33340\nIHJ1c2hlZA== 33341\nbWV0cnk= 33342\nX1NFUEFSQVRPUg== 33343\nX1dF 33344\nX0FUVFJJQlVURQ== 33345\nIHlhbWw= 33346\nIHNwZWNz 33347\nIFJhaA== 33348\ncGhlcmlj 33349\nIEludmVzdG1lbnQ= 33350\nw6RsbA== 33351\nIGFwcGVhbGluZw== 33352\nIHZpZXdwb3J0 33353\n56k= 33354\nIG1hcmdpbkxlZnQ= 33355\nIHN1YnRyYWN0 33356\nIEVESVQ= 33357\nCUFycmF5TGlzdA== 33358\nZ3JhZGluZw== 33359\nIEZhaWx1cmU= 33360\nYXNwZXI= 33361\nRUVL 33362\nKG5vdw== 33363\nPG9iamVjdA== 33364\nIEFsaWdubWVudA== 33365\ncGxlYWRv 33366\ncXR0 33367\nKEVSUk9S 33368\nIElOVkFMSUQ= 33369\nIHVzZXJpZA== 33370\ncmFpc2Vz 33371\nSURJ 33372\nIHZhcmlhbmNl 33373\nIE5pbA== 33374\nL2RlbGV0ZQ== 33375\nX01BSU4= 33376\nLlRva2Vu 33377\nLkNhdGVnb3J5 33378\nPikK 33379\nQ29sbGlzaW9u 33380\nIEdyZWF0ZXI= 33381\nIFJhY2luZw== 33382\nYWxhbg== 33383\nIG1vbmV0YXJ5 33384\nLG5ldw== 33385\nIFNvcnJ5 33386\nLkVuYWJsZQ== 33387\nIEluc3RhbnRpYXRl 33388\nb2xsZW4= 33389\n66m0 33390\nIENhbGxpbmc= 33391\nX2hvdXI= 33392\nQURB 33393\nIHNoeQ== 33394\nKSoq 33395\nID09Pg== 33396\nIGVzcGVjaWFs 33397\nIGludGVycHJldGVk 33398\nIT0i 33399\nIHBoYXJtYWN5 33400\nLnNpbmdsZQ== 33401\nIENpYWxpcw== 33402\nIHBhcmFz 33403\nLnRvVXBwZXJDYXNl 33404\nIERlbW9u 33405\nUHJpbWU= 33406\nIHJhbmtpbmdz 33407\nQWRkaW5n 33408\nX0hBU0g= 33409\nIEV4YW0= 33410\n2qk= 33411\nIFZpY3Rvcg== 33412\nT2theQ== 33413\nIl07DQo= 33414\nIGZvcnR1bmU= 33415\nIEZFVENI 33416\nZXhwYW5k 33417\nLkludGVyb3A= 33418\nIGJhcm4= 33419\n5raI 33420\ndWV2bw== 33421\nIHNwZWN1bGF0aW9u 33422\n4pSA4pSA4pSA4pSA 33423\nIE51 33424\nIEJsdWVz 33425\nKGZuYW1l 33426\nIGluaGFiaXQ= 33427\nIFwiJQ== 33428\nQ0VT 33429\ndWxhcmlv 33430\nX2Ny 33431\nIHZhbGlkYXRlZA== 33432\nIG1pZG5pZ2h0 33433\nYW5raW5n 33434\nIGluY29ycG9yYXRl 33435\nIHB1cnN1aXQ= 33436\nRVhQ 33437\ncHJpbWU= 33438\nUGlk 33439\nLVVT 33440\nIE51cnM= 33441\nIFdoZWVs 33442\n6Zg= 33443\nIGlucA== 33444\nIHN1cHBvcnRpdmU= 33445\nLm1lbWJlcg== 33446\nIFNob3Q= 33447\nLkNoZWNrQm94 33448\nIGFmZmlybQ== 33449\nVG9y 33450\nRnVsbFllYXI= 33451\nIGNvbnNpZGVyYWJseQ== 33452\nY3JlZGVudGlhbHM= 33453\nX29wdHM= 33454\nUm9sbA== 33455\nKHJvdW5k 33456\nIGNvbWVudA== 33457\nX1VBUlQ= 33458\nIGV4dGVuZGluZw== 33459\nUkc= 33460\ncmVzdWx0YWRv 33461\naXR1 33462\nLmdldFNlc3Npb24= 33463\nIGF0dHJhY3Rpb24= 33464\nJkQ= 33465\nJGh0bWw= 33466\nIEplc3NpY2E= 33467\nIEFzc29jaWF0ZQ== 33468\nYcOx 33469\nX2Vk 33470\nIExhZw== 33471\nIG9yaWdpbnM= 33472\nKCkpLT4= 33473\nYWRkRXZlbnRMaXN0ZW5lcg== 33474\nSUFMT0c= 33475\n5ZCm 33476\nLkNvbXBhcmU= 33477\nQWxidW0= 33478\nIEt1 33479\nPFE= 33480\nYXJnZXN0 33481\nIHByb2xvbmc= 33482\nIGNvbmZpZ3VyYXRpb25z 33483\nIGFjY2lkZW50YWxseQ== 33484\nX3Bob3Rv 33485\nICcnOw0K 33486\nIHZlcnNl 33487\nQm9i 33488\nIGZhcm1pbmc= 33489\nZGVsaXZlcnk= 33490\nIE1hY2s= 33491\nIHVzZVNlbGVjdG9y 33492\nLmJvb3RzdHJhcGNkbg== 33493\na2VlcGluZw== 33494\nZW55 33495\nLnVwbG9hZA== 33496\nIE1FVEhPRA== 33497\nY3JlYXRvcg== 33498\nPF8= 33499\nIEVhc3Rlcg== 33500\nLi0t 33501\nVUlCdXR0b24= 33502\n44KJ 33503\nb21ldGVycw== 33504\nIHNoaW5l 33505\nIGhvZ3k= 33506\nXHM= 33507\nIGhhcm5lc3M= 33508\nLkNlbGw= 33509\nIGxpZnRpbmc= 33510\nIGNvbWJpbmVz 33511\nIE9jY3Vw 33512\nZXhjbHVkZQ== 33513\ncGF0aWFs 33514\nIHJlc3Bpcg== 33515\nX2ZpdA== 33516\nIGZpZnR5 33517\nIE1vbA== 33518\nIHR1bmVk 33519\nLWRpbWVuc2lvbmFs 33520\nIHFz 33521\nIHRvcHM= 33522\nPiI7Cgo= 33523\ncXVpc2l0ZQ== 33524\nY2hhbm5lbHM= 33525\nL3Jlcw== 33526\nIEFuYWx5dGljcw== 33527\nLmFwcGNvbXBhdA== 33528\nL3Rv 33529\nIG9uRXJyb3I= 33530\nKGF0dHI= 33531\nSVJN 33532\nIHJhZ2F6 33533\nLWFz 33534\nLlNlY29uZA== 33535\nb3JpZW50ZWQ= 33536\nIGRvbm4= 33537\nIGxpZ2h0bmluZw== 33538\nZmlk 33539\nIFBsZQ== 33540\n44G+44GZ 33541\ndHJv 33542\nLlRydWU= 33543\nT2JzZXJ2YWJsZQ== 33544\n15k= 33545\ndW1iaW5n 33546\nIHByb3NwZWN0aXZl 33547\nLWZpbHRlcg== 33548\nIHB1cnN1YW50 33549\nKHBvaW50cw== 33550\nLkJpbmQ= 33551\nIHBhbG0= 33552\nY2xlYXJmaXg= 33553\nw7Zz 33554\nIEdvbno= 33555\nIHdlYWtlbg== 33556\nRHJpdmU= 33557\nZW5pZG8= 33558\nbGxk 33559\nb2JveA== 33560\nYW5lYW4= 33561\nR290 33562\n5L+d 33563\nUmVnZXg= 33564\n5oM= 33565\nIHNhbGFk 33566\nYXNzaXM= 33567\nIm5ldA== 33568\naW5oZXJpdERvYw== 33569\nIFJW 33570\ncXVpZXI= 33571\nIGNsYXp6 33572\nxLHFnw== 33573\nb3N0ZXJvbmU= 33574\nIGFpcmxpbmU= 33575\nLmxpc3RkaXI= 33576\nIGRvd25sb2FkaW5n 33577\nIFBhbG0= 33578\nd2F1a2Vl 33579\nJmx0 33580\nLkJM 33581\nX0lOTElORQ== 33582\nb2Zmcw== 33583\nPDwo 33584\nX25ld3M= 33585\nIGNoYXNl 33586\nLz48 33587\nIGV1cm9z 33588\nIEVneXB0aWFu 33589\nIFN0YWlubGVzcw== 33590\nX0JPT0w= 33591\nIEd1aWxk 33592\nIER5bmFt 33593\nW2luZGV4UGF0aA== 33594\nIO8= 33595\nIG1lbW9yYWJsZQ== 33596\nIENoYW1waW9u 33597\nUmVzb3VyY2VNYW5hZ2Vy 33598\nLkxvZ2lu 33599\nIEZvcm1lcg== 33600\neXBlZA== 33601\nIGxsZWc= 33602\nOyIs 33603\nRFdPUkQ= 33604\nIHRheGk= 33605\nIGJvbWJz 33606\ncmFo 33607\nLnRhZ3M= 33608\nX3Rlc3Rz 33609\nc3RvbmVz 33610\n4oCdKQ== 33611\nW2c= 33612\ncnR5cGU= 33613\nIHZ1 33614\nIGhvc3RpbGU= 33615\nQ2hhcnM= 33616\nIFBhdHJpb3Rz 33617\nL3N0YXR1cw== 33618\nPEI= 33619\nIEluY29tZQ== 33620\nIERhZA== 33621\nIHBhdHJvbA== 33622\nX0NIQU5HRQ== 33623\nIHVwZ3JhZGVk 33624\nIGNoaW5h 33625\nc2V0cQ== 33626\nU3RhcnRlZA== 33627\nLlVuZGVm 33628\nIGNoZWNrc3Vt 33629\nIGZydXN0cmF0ZWQ= 33630\ne28= 33631\nIGVuZg== 33632\nIHdvb2Rz 33633\nIEFueW9uZQ== 33634\nRW5jb2Rl 33635\nIFF0V2lkZ2V0cw== 33636\nYXJlYXM= 33637\nIHNoZWVy 33638\nc2tp 33639\nZW5kcG9pbnQ= 33640\nX1Rlc3Q= 33641\nU291cA== 33642\nfn5+fn5+fn5+fn5+fn5+fg== 33643\nKGZpbGVz 33644\nCQkJCQkNCg== 33645\nLnNwYXJr 33646\nIHZhbHVlZA== 33647\nICUK 33648\nLmNvbnRyb2xz 33649\nIFhDVEFzc2VydEVxdWFs 33650\nIGZhbWU= 33651\nIFJpYw== 33652\nRE9U 33653\nIEFsYmVydGE= 33654\n5L2/ 33655\nb3NhbA== 33656\nLldlYkNvbnRyb2xz 33657\nIC0tLS0tLS0tLS0tLQ== 33658\nIE1pcw== 33659\nIFNZUw== 33660\nTm9ubnVsbA== 33661\nPWl0ZW0= 33662\nIGV4cGlyZQ== 33663\nRGVjb2Rl 33664\nX29wZXJhdGlvbg== 33665\nIFZhbGlkYXRvcg== 33666\nLkNFTlRFUg== 33667\ndWZmcw== 33668\nKm0= 33669\nIGF2YW50 33670\n5qyh 33671\n4oCcWW91 33672\nLnBlcm1pc3Npb24= 33673\nLi4uKQ== 33674\nIExpYw== 33675\nX2Nvb3Jkcw== 33676\nLm5vbWJyZQ== 33677\nY2xv 33678\nLkludGVybmFs 33679\nIENobw== 33680\nX3N3 33681\nCUls 33682\nY2xr 33683\nIGNhc3RsZQ== 33684\nKGxheWVy 33685\ncGl0 33686\nIGd1aWRlZA== 33687\nIOKWiA== 33688\nIHN1cGVyYg== 33689\nIHN1cHBsZW1lbnRz 33690\nX2NlbnQ= 33691\nIHBlZWs= 33692\nSU5BUlk= 33693\nLkNvbnRlbnRBbGlnbm1lbnQ= 33694\nZmFsbHM= 33695\nIikpOw== 33696\nV2FsbA== 33697\nKS4NCg== 33698\nIERhbm55 33699\naXJtaW5naGFt 33700\nSUFMSVo= 33701\nKGNyZWF0ZQ== 33702\nIklu 33703\nU2VydmljZVByb3ZpZGVy 33704\nIHByaWNlZA== 33705\nbWFjcm8= 33706\nYW1hYw== 33707\nLmJveA== 33708\nLS0tLQo= 33709\n44Or 33710\nIFN1aXQ= 33711\ndXJzdA== 33712\nYnJ1 33713\nb3VybmFscw== 33714\nbnVtZXJv 33715\nX18oKQo= 33716\nRGFz 33717\nIE1pdHQ= 33718\ndWRlcg== 33719\nP1w= 33720\nZnU= 33721\nW0I= 33722\nIDopCgo= 33723\nKGludGVy 33724\nYnJhaW5z 33725\nIGF0dGl0dWRlcw== 33726\nVmVyaWZ5 33727\nIHNpZ25hdHVyZXM= 33728\nYWNrQmFy 33729\nIGdk 33730\nSmFjaw== 33731\nLmNhdA== 33732\nIHp6 33733\nd2FyZg== 33734\nRlRFUg== 33735\nIik7CgoK 33736\nQWxpdmU= 33737\nSUNMRQ== 33738\nIFdoYXRldmVy 33739\nIG91dGxpbmVk 33740\nc3ByaXRl 33741\n0LXQsg== 33742\nX0FC 33743\nX0RFUFRI 33744\nIGNydXNoZWQ= 33745\nYWFh 33746\nKGV2 33747\n5py6 33748\nQW50aQ== 33749\nSUNP 33750\naXNFcXVhbFRv 33751\nLnN1bg== 33752\naWN1bG8= 33753\nc2FsZQ== 33754\nX2hleA== 33755\nIFZr 33756\nYXB0b3I= 33757\nVW5pb24= 33758\nIERpc2NvdW50 33759\nbGlzdGE= 33760\nLlVuZGVmT3I= 33761\nIGF1dG9tYXRpb24= 33762\nTm9y 33763\n5a+5 33764\n5Y+C5pWw 33765\nIHJlZmxleA== 33766\nIExhdXJl 33767\nLnNob3dNZXNzYWdlRGlhbG9n 33768\nLnRlbXA= 33769\nIGFrYW4= 33770\nIF9fX19fXw== 33771\nLklzVHJ1ZQ== 33772\nQVJFRA== 33773\nYWdsZQ== 33774\nRW5lcmd5 33775\nIHF1YW50aXRpZXM= 33776\n4oCZw6k= 33777\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33778\nIGNpdGl6ZW5zaGlw 33779\nbW91dGg= 33780\nIGluYXBwcm9wcmlhdGU= 33781\nIE91dGRvb3I= 33782\nV2hpdGVTcGFjZQ== 33783\nQW5vbnltb3Vz 33784\nbG9hZHM= 33785\nd2ViRWxlbWVudFByb3BlcnRpZXM= 33786\nVGVu 33787\nIGFjY2lkZW50cw== 33788\nIGFkdmVydGlzZW1lbnQ= 33789\nIFllbWVu 33790\nKGNhbGw= 33791\nIHNsYXZlcnk= 33792\n0YHQvw== 33793\nIExhbQ== 33794\nX0JJVFM= 33795\nb21lZ2E= 33796\nIE9sZQ== 33797\nIGtpZG4= 33798\nX0Fu 33799\nIFJhaWQ= 33800\nQ3JlYXRpb24= 33801\nc2F2ZWQ= 33802\nIHByb3BvcnQ= 33803\nV0FSTklORw== 33804\nXFA= 33805\nIHB3ZA== 33806\nRGF0YVJlYWRlcg== 33807\naXNjaGVy 33808\nYWRlb24= 33809\nIFByZWRpY3Q= 33810\nIHJlYXNvbmluZw== 33811\nIGRlc3Ryb3lpbmc= 33812\nSGVs 33813\nKmQ= 33814\nIExlZ2lzbA== 33815\nX1By 33816\nCQkJICAgICAgIA== 33817\nIHN5bXBhdGg= 33818\nIGNoZXNz 33819\nIG1hbQ== 33820\nOmhvdmVy 33821\nIGNvbnZlcnRz 33822\nIHBlbGE= 33823\nIHByb2dyZXNzaW9u 33824\nICJfIg== 33825\nIEdpbGw= 33826\nCXNob3c= 33827\nIHN1cHBvc2VkbHk= 33828\nYWNjdXJhY3k= 33829\nZWxpbg== 33830\nIHVuZm9sZGluZw== 33831\nIEh5cGVy 33832\nIHdhbm5h 33833\nIHVwcw== 33834\nKCM= 33835\nIENyaW1pbmFs 33836\nKFBvaW50 33837\nYXRMbmc= 33838\nYWN0bHk= 33839\nIGNvbnRyYWN0b3Jz 33840\nJ119 33841\nZHJhdWxpYw== 33842\nw7NkaWdv 33843\nIFRU 33844\nIFdpZGU= 33845\nIEFSRw== 33846\nX2lj 33847\nRkxBR1M= 33848\nU2Nob29s 33849\nIGNsZWFyaW5n 33850\nLWJlaW5n 33851\nPXtb 33852\nLGNvbnN0 33853\nbWFuZW50 33854\nT3ZlcmxheQ== 33855\nKCci 33856\n6YeP 33857\nIFRpbWVzdGFtcA== 33858\nIG1haWxpbmc= 33859\nIENha2U= 33860\nLlRoYXQ= 33861\nIG1lZGl0YXRpb24= 33862\ncXA= 33863\nIGVtcHJlc2E= 33864\nIExpb25z 33865\nIHdlbGQ= 33866\nIExpbmtlZElu 33867\nIGN1c2g= 33868\nIGdlbm9tZQ== 33869\nLkluZGV4T2Y= 33870\nYWdhaW4= 33871\nIGZhbGxiYWNr 33872\nIGNhbXBpbmc= 33873\ncmVkZA== 33874\nLXN0cmlwZWQ= 33875\nIGR2 33876\nRmVicnVhcnk= 33877\nIFByb3h5 33878\ndXNr 33879\nIGRpZXNlbA== 33880\nV1JJVEU= 33881\nUkVBSw== 33882\nTG9yZW0= 33883\nLkludm9rZQ== 33884\nLWRpdg== 33885\nSW50ZXJjZXB0b3I= 33886\nIERI 33887\naWFsZXM= 33888\nIHZpbGxhZ2Vz 33889\n2LQ= 33890\nIEVOVg== 33891\nU3lz 33892\nLlhS 33893\nIHBvZW0= 33894\nw4I= 33895\nY2FkZQ== 33896\ncGxvdHM= 33897\nIHso 33898\nLmdpdA== 33899\nL3N2Zw== 33900\nbmNtcA== 33901\nIMSN 33902\nYWluZXM= 33903\n5Ye95pWw 33904\nICgpCgo= 33905\nb3BzaXM= 33906\nIFJlbGF0aW9uc2hpcA== 33907\nX2F1dA== 33908\nIEJvbWI= 33909\nCWNvbQ== 33910\nKnNpemVvZg== 33911\nb2ZmaWNpYWw= 33912\nX3BheWxvYWQ= 33913\nCQkJCQkgIA== 33914\nLm1hbmFnZXI= 33915\nIEFyb3VuZA== 33916\nCXNlbmQ= 33917\nIEV4ZXJjaXNl 33918\nIEJpbGx5 33919\naXZp 33920\nIG5lZWRpbmc= 33921\nX3VybHM= 33922\nX3Rhc2tz 33923\nIEhlbQ== 33924\nIHRlYXJEb3du 33925\nZW5jcnlwdA== 33926\nLnRpZQ== 33927\nIGFzbQ== 33928\nSUNI 33929\nIENHUmVjdE1ha2U= 33930\n7ISx 33931\ndWxvbmc= 33932\nIGl0cg== 33933\nIEdTVA== 33934\nIG9mZmVyaW5ncw== 33935\ncm9iZQ== 33936\nRUVF 33937\nb3BlcmF0b3Jz 33938\nX1BST1A= 33939\naW5kZW50 33940\nQURF 33941\nb3Jm 33942\n65A= 33943\nIGJsZXNzZWQ= 33944\ndmFzY3VsYXI= 33945\nIGNvbm9j 33946\nSGFwcHk= 33947\nQnJpZGdl 33948\naWxpdGF0aW9u 33949\nam9pbnQ= 33950\nIEFkbWluaXN0cg== 33951\nLXRyYW5zZm9ybQ== 33952\nIG1lYW50aW1l 33953\nL0s= 33954\nIEJlZHJvb20= 33955\nIHJpZ2lk 33956\nIGJyb3dzZXJz 33957\nRU1QVFk= 33958\nLlNlcmlhbGl6ZQ== 33959\nX0VE 33960\nIHN0aXRjaA== 33961\nIGphbg== 33962\nZWxsdA== 33963\nIGJyYWNl 33964\nIHRyYWlscw== 33965\ncHVibGlzaGVk 33966\n5a+G56CB 33967\nfScpCg== 33968\nIGFjaWRz 33969\nICEhIQ== 33970\nX2RpcmVjdA== 33971\nPigpKTsK 33972\nYWrEhQ== 33973\nX09DQw== 33974\nIHBsYW5ldHM= 33975\n5p+l 33976\nIER1Ymxpbg== 33977\nIHNlcmll 33978\nLnByaW50Zg== 33979\nZGVlcA== 33980\nYCk= 33981\nIFwk 33982\nIM68 33983\nX1ZJREVP 33984\nZW5kb3Jz 33985\nIENyeXB0bw== 33986\nRmFy 33987\nLlRyYW5zcGFyZW50 33988\nLlRS 33989\naWFzbQ== 33990\nX3RyYWluaW5n 33991\nIHRlYWNoZXM= 33992\nIEJlbHQ= 33993\nIGxpbWl0aW5n 33994\nIEthdGg= 33995\nIEluZGV4UGF0aA== 33996\nIGFjaGlldmVtZW50cw== 33997\nIHNlcsOh 33998\naW50ZXJvcFJlcXVpcmU= 33999\nIGRpc3Nl 34000\nLklm 34001\nYXJtaW5n 34002\ndWxzaW9u 34003\nUG8= 34004\nX0RFVEFJTA== 34005\nUHJvdG90eXBl 34006\nIENBTA== 34007\nIGFncmVlcw== 34008\nLnZv 34009\nLkV4ZWN1dGVOb25RdWVyeQ== 34010\nIFRvcGlj 34011\nICd7fQ== 34012\nQXJt 34013\nIGVjYw== 34014\nTWFn 34015\nIHNlcmlhbGl6ZWQ= 34016\nCWNvbm4= 34017\nY2FjaGVk 34018\nPXRm 34019\nIEJ5dGVBcnJheQ== 34020\ncHJvdG9idWY= 34021\ndmFyY2hhcg== 34022\nCUFTU0VSVA== 34023\nIGxpc3Rl 34024\nX3RyaWdnZXI= 34025\nt7g= 34026\nRmVlbA== 34027\nVGFob21h 34028\nIExpaw== 34029\nIHN0cnVjdHVyZWQ= 34030\nZXJndXM= 34031\nLkluaXRpYWw= 34032\nX2dl 34033\nY2xqcw== 34034\nLmNvbnRhY3Q= 34035\nIGFuZGVyZQ== 34036\nJHN0bXQ= 34037\nX0NVUlJFTlQ= 34038\nIERpc2NvdmVy 34039\nJHJlcw== 34040\nZm9ybWF0dGVy 34041\nSGE= 34042\ndmFuZ3N0 34043\nIGVtZXJnZQ== 34044\n44CC4oCd 34045\nIENhYmluZXQ= 34046\nLXNxdWFyZQ== 34047\n6YOo 34048\nIHJhZ2U= 34049\nIEFK 34050\nIFZU 34051\nc2hhZG93 34052\nIEZhaXRo 34053\nZW5hbWVz 34054\ncHJldHR5 34055\naGFzaWw= 34056\ncGFydHk= 34057\nIHZhcmNoYXI= 34058\nIGZvdG9z 34059\nIGFsdW0= 34060\nIEJlbGdpdW0= 34061\nLnlsYWJlbA== 34062\nIGRlag== 34063\nX251bWJlcnM= 34064\nIGh1 34065\nLnNldEFkYXB0ZXI= 34066\nIFVzdWFsbHk= 34067\nKHNhbXBsZQ== 34068\nLlNoYXJlZA== 34069\nIGJvb2tlZA== 34070\nID4+PQ== 34071\nIG1pbmVyYWxz 34072\nIj48Pz0= 34073\nIGFkanVzdG1lbnRz 34074\nIERM 34075\nIHZpYnJhbnQ= 34076\nIERlcGVuZGVuY3k= 34077\nIHphcA== 34078\nL1g= 34079\nIGZvbnRz 34080\ndHJpcA== 34081\n0LjRhw== 34082\nIHR1YmVz 34083\nY2xhbWF0aW9u 34084\nIOun 34085\nIHByb3RhZ29u 34086\nb3Vwb24= 34087\nIEJydXNo 34088\nKHByZWQ= 34089\nb3VybmV5 34090\nJ10pLT4= 34091\ncHJvZw== 34092\nYm9v 34093\nX21k 34094\nX3BhY2s= 34095\nKGV4cHJlc3M= 34096\ndXR6 34097\nXEF1dGg= 34098\nLGlk 34099\nIENoaWxl 34100\nYWN0aWNl 34101\nIHJlY3J1aXRtZW50 34102\nIHBvc2Vz 34103\nIHZ1bG5lcmFiaWxpdHk= 34104\naW5zdGFuYw== 34105\nb3J1bQ== 34106\nZGVzcw== 34107\nIHhs 34108\nJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU= 34109\nKGZpZw== 34110\nIGRlbGV0aW5n 34111\nLmRlbA== 34112\nKScpCg== 34113\nIFdlZWtseQ== 34114\nPz8/ 34115\nKHN0cmNtcA== 34116\nc21pdGg= 34117\nIHB1cnN1aW5n 34118\nLXNv 34119\nIEFwcHM= 34120\nLycK 34121\nIGRlY2lz 34122\nRk9SRQ== 34123\nRXZlcnlvbmU= 34124\nIGxhbmVz 34125\nVmlydHVhbA== 34126\nLmF0dGFjaA== 34127\nKExvZw== 34128\nIE1lZGljYWlk 34129\nKFBhdGg= 34130\nIFR1cm5lcg== 34131\nL2FwcGxpY2F0aW9u 34132\nIHBvcnRyYWl0 34133\nIG9wcG9zZQ== 34134\nY2hlY2tvdXQ= 34135\nIGZpbmlzaGVz 34136\nX01F 34137\nQmFycmllcg== 34138\nU29uZw== 34139\nVkFS 34140\nRWFybGllcg== 34141\ncmVsbGE= 34142\nIGhhc3Q= 34143\nYXphcg== 34144\nIHB1bGxz 34145\nbmd4 34146\nIGluc3BpcmluZw== 34147\n0YPRjg== 34148\nLWRpcmVjdGlvbg== 34149\nIGV4cGxvc2l2ZQ== 34150\nIGNyZWF0ZWRBdA== 34151\nc3Rv 34152\nIHdoZWF0 34153\nIEJ1aWx0 34154\nJ2Fp 34155\nIHRyYWNrZWQ= 34156\naGFtbWFk 34157\nUm93QXRJbmRleFBhdGg= 34158\nX2hlYXA= 34159\nRHVl 34160\nIGNvbm5lY3Rz 34161\nLnB1Ymxpc2g= 34162\nZW11 34163\nIGJ1bGxldHM= 34164\nQkFS 34165\nb2xhdGU= 34166\nIGludGVybmFsbHk= 34167\nIGNhdGNoaW5n 34168\nLXBhc3N3b3Jk 34169\nb3VjaGVk 34170\n5oCn 34171\nZW91cw== 34172\nIHhyYW5nZQ== 34173\nUXVhbGl0eQ== 34174\ndnY= 34175\nTWFuYWdl 34176\nKCgk 34177\nYWNlbWVudHM= 34178\nIEJyb3RoZXJz 34179\nIEhFQUQ= 34180\nIFVuc3VwcG9ydGVk 34181\nc2Fu 34182\nZXNp 34183\nKioqCg== 34184\nIGFkYXB0YXRpb24= 34185\nIFdvcmtlcg== 34186\nJ10v 34187\nLnNhdmVmaWc= 34188\nKHRyYW5z 34189\n2Kw= 34190\nbmVl 34191\nQ29ycmVjdA== 34192\nLi4uIikK 34193\nIHN1Ym1pdHRpbmc= 34194\nLXBhdGg= 34195\nCWxhc3Q= 34196\naXNzYW4= 34197\nLnhsYWJlbA== 34198\nIFNlcGFy 34199\nL25v 34200\nX2Jlc3Q= 34201\nIE1pbGxz 34202\nX3NvY2s= 34203\nKGZsYWc= 34204\nIGRlc3RpbmF0aW9ucw== 34205\nZW1wdGlvbg== 34206\nIEZBSUw= 34207\n5ZKM 34208\nIHJw 34209\nZmFjdA== 34210\nCWxlbg== 34211\nREFZ 34212\nIHNlaXo= 34213\nX2RzdA== 34214\nbGlw 34215\nLkxpbmVhcg== 34216\nIEJhc2tldA== 34217\nJHQ= 34218\nJGk= 34219\nLWJyYW5k 34220\nIE5laWw= 34221\nIEVx 34222\nIHRob3U= 34223\nb2dlbmU= 34224\nIHNjaG9sYXJzaGlw 34225\n5pu0 34226\nIHN3bw== 34227\nYWdpbmF0b3I= 34228\nZW5p 34229\nKGJvb2s= 34230\nIGJsaW5r 34231\ndGh1cw== 34232\nIGNhbmNlbGxhdGlvblRva2Vu 34233\nIFBhbGVzdGluaWFucw== 34234\nIHByb2ZpdGFibGU= 34235\nIGJhY2twYWNr 34236\nZW5zb24= 34237\nPExvbmc= 34238\nIHBvb2xz 34239\nIHN0aWNrcw== 34240\nIHNwb2tlc3dvbWFu 34241\nQmVpbmc= 34242\nIEhlcml0YWdl 34243\nIE5pa2U= 34244\nU0hB 34245\nIE5vdEltcGxlbWVudGVkRXhjZXB0aW9u 34246\nJGNvcmU= 34247\nIFJpY28= 34248\nL2xhdGVzdA== 34249\nIEN6ZWNo 34250\nbmVyUmFkaXVz 34251\nKGxpbmVz 34252\nIHNlbWVzdGVy 34253\nIHdvdW5kcw== 34254\nUHJvY2VkdXJl 34255\nLm1haWw= 34256\nKCkpOgo= 34257\nIGNvcnJpZA== 34258\ndGVyZWQ= 34259\nIE5DQUE= 34260\nIGdhbGF4eQ== 34261\nX2tpbmQ= 34262\naWxr 34263\nIHRyYXM= 34264\nX1BPTA== 34265\nIEhldA== 34266\nIHJlZnVnZWU= 34267\nIHRlZW5hZ2U= 34268\nLmJpbmRpbmc= 34269\ncG9zdGFs 34270\nIGnDp2lu 34271\nIERhdGFUeXBl 34272\n6ZY= 34273\neWNsZXJ2aWV3 34274\nLHZhbHVl 34275\nX2lkZW50aWZpZXI= 34276\nPGI= 34277\nIG91dGZpbGU= 34278\nDQogICAgDQo= 34279\nIGNyw6k= 34280\nIHJlc3BvbmRlbnRz 34281\nIEJlYXN0 34282\nY2VsZWQ= 34283\nIGludGVyZg== 34284\nLXRoZW1l 34285\nZ2lm 34286\nIFJhbmdlcnM= 34287\nSVRBTA== 34288\nIGF1dGhlbnRpY2F0ZQ== 34289\nQ29tcGxldGlvbg== 34290\ndXJzb3Jz 34291\nIGNpbmVtYQ== 34292\nIGRpc2NvdXI= 34293\nIEphdw== 34294\nT0NLRVQ= 34295\nIHByYXllcnM= 34296\nIEx1aXM= 34297\nZnJhZw== 34298\nPVsK 34299\nIGJyYXZl 34300\nX3Bvc2U= 34301\nQ2VydGlmaWNhdGU= 34302\nLWZl 34303\naWZlcmF5 34304\nIEZsYWdz 34305\nQ29udGFpbmVyR2Fw 34306\nIENyaXQ= 34307\nUmVzdWx0U2V0 34308\nCWN1cg== 34309\nIGNvcnJlc3BvbmRz 34310\nU3RhZmY= 34311\nLkh0dHBTZXJ2bGV0UmVxdWVzdA== 34312\nIG5ldXJvbnM= 34313\nIE1haW5BeGlzQWxpZ25tZW50 34314\nZWRhcg== 34315\nIGdhZA== 34316\nX3BhcnRz 34317\nIM6y 34318\nIGZ4 34319\nL2ZpbGVz 34320\nIEJyb3M= 34321\naGlwcw== 34322\nIGdsdWNvc2U= 34323\nIGZhcm1z 34324\nIG1lbnRhbGx5 34325\ncmVzdGF1cmFudA== 34326\nVGFibGVOYW1l 34327\nIE1lcmNlZGVz 34328\nLlZpc3VhbA== 34329\nIGFuY2g= 34330\naW5hbGc= 34331\nX3J1bnRpbWU= 34332\nIHByb3ByaWV0YXJ5 34333\nIGludGVudGlvbnM= 34334\naXpp 34335\nU2xpY2U= 34336\nOyI+PC8= 34337\nX1dPUkQ= 34338\nXE1pZ3JhdGlvbnM= 34339\nIEVOQUJMRQ== 34340\nX1BBUkFNRVRFUg== 34341\nIEJpc2hvcA== 34342\nLnN1YmplY3Q= 34343\naWxsYXM= 34344\nLm1hdHJpeA== 34345\ndXJyZW5jZXM= 34346\nKnk= 34347\nIGNvc3RseQ== 34348\nIENodWNr 34349\nIGNsb3Nlcw== 34350\nIE1pZ2h0 34351\nLXN0b3Jl 34352\nIG1hbGw= 34353\naWV0ZW4= 34354\nLkFicw== 34355\nIGNvdXBsZWQ= 34356\nLmJhc2lj 34357\nIDo6Ojo6Ojo6 34358\nTWFrZXI= 34359\nY2Fubm90 34360\nIGFjaA== 34361\nIEVsaQ== 34362\n4oiS 34363\nb3JuYQ== 34364\nIGNwcw== 34365\nIHRoZXJlb2Y= 34366\nIEB7 34367\nIE5TTXV0YWJsZUFycmF5 34368\nzr0= 34369\ncHJvZHVjdGl2ZQ== 34370\nU3F1YXJl 34371\ndGVtcHRz 34372\nIGVsaW1pbmF0ZWQ= 34373\nPE0= 34374\nIGNvbnNlcnZhdGl2ZXM= 34375\nIFN1cmc= 34376\nLnBhcg== 34377\nIEJ1Y2g= 34378\nKmI= 34379\nRm9ydA== 34380\nQ29sb3Vy 34381\nIENoaQ== 34382\nZWRpYw== 34383\nPnRydWU= 34384\nIE5ZQw== 34385\nIGJvcmVk 34386\nIERldGVjdA== 34387\nIGFwcGFy 34388\nIGplYW5z 34389\nIFRhaw== 34390\nSU9E 34391\nIEhvcnNl 34392\nKEZJTEU= 34393\nKD8= 34394\ncmlxdWU= 34395\nb3B0aW1pemVy 34396\nbmF0 34397\nbG95cw== 34398\nCVRva2Vu 34399\nb3VidGVk 34400\ndWVzcw== 34401\nb2NvYQ== 34402\nRGF0YU1lbWJlcg== 34403\nX1BPV0VS 34404\nY2xhc3NMaXN0 34405\nUHVzaEJ1dHRvbg== 34406\nIFdpRmk= 34407\nLlN0cmVhbQ== 34408\nLmd1aWxk 34409\nIG5vZw== 34410\nIFBvcnR1Z2Fs 34411\nIFVudGVy 34412\nUHJpbWl0aXZl 34413\nYm9zcw== 34414\nIERldXRzY2g= 34415\nIGVyb3RpYw== 34416\nIHN0cmNvbnY= 34417\nLlRyeVBhcnNl 34418\nIGdyYW1z 34419\nLlN1Y2Nlc3M= 34420\nX3Br 34421\nIEhhcnZleQ== 34422\nLW1pbmRlZA== 34423\nLmNvdW50cnk= 34424\nW10i 34425\nIGFuZ2Vs 34426\nIGJlYXRz 34427\nIFZvcg== 34428\naWxpbw== 34429\nLm1hc3Rlcg== 34430\nc29tZXRoaW5n 34431\nIFBBQ0s= 34432\nKGlm 34433\nUmVxdWVzdEJvZHk= 34434\nIGFudGVz 34435\nL3dpZGdldA== 34436\nIG1vZG8= 34437\nIEFX 34438\nZmluZGVy 34439\nIG9wdGltaXplZA== 34440\nIG1pc3NpbGVz 34441\nTkI= 34442\nCWludGVybmFs 34443\ndGV4 34444\nIFNyaQ== 34445\nIGRhbWFnaW5n 34446\nIE1haXM= 34447\nLUFsbG93 34448\nIFpo 34449\nLWFsdA== 34450\nICkpOwoK 34451\n6Ik= 34452\nIGluZmx1ZW5jZXM= 34453\nIGNhdGFs 34454\nX1JFR0lTVEVS 34455\nIEFQSXM= 34456\nLWNlbnR1cnk= 34457\nIGJpb2xvZ3k= 34458\nIEFjdHVhbA== 34459\nIGhlZWxz 34460\nVFJBQ0U= 34461\nX0RJRw== 34462\nRGF0YXNldA== 34463\nIE1hdHRlcg== 34464\nIGNsYXNzaWZpZXI= 34465\nLndpa2lwZWRpYQ== 34466\nIFJvZ2Vycw== 34467\nIGRvbmF0ZWQ= 34468\ncmF3bGVy 34469\nZW5lbg== 34470\nIGNhc2lub3M= 34471\nb3J0YWw= 34472\nIHByaXZl 34473\nc3Bl 34474\nZHVjZXJz 34475\nLmVw 34476\nIGdyYXNw 34477\nYWNqaQ== 34478\nIGRhaXJ5 34479\nIGJ1c2Vz 34480\nLmNvbW0= 34481\nLmlucw== 34482\nIElSUw== 34483\nIEJlZXI= 34484\nYWRj 34485\nb2FyZA== 34486\nX01FVA== 34487\nICcrJw== 34488\ncmFucw== 34489\nIGtpbmRh 34490\nIOKUgg== 34491\nIE1hdXI= 34492\n0LDQsw== 34493\nIGJhbmR3aWR0aA== 34494\naWJ1cw== 34495\nIERpZmZlcmVudA== 34496\nKG1hdA== 34497\nIFJlc3VtZQ== 34498\nX1VOUw== 34499\nZXN0YWJsaXNo 34500\nIGZvbmN0aW9u 34501\nU3Vic2NyaXB0aW9u 34502\nX2NvbXBhbnk= 34503\nIGxpZ2h0bHk= 34504\nLmNvbmZpcm0= 34505\nLnlhbWw= 34506\nIEJvb3N0 34507\nQ29tbWVyY2U= 34508\nLXRlbXBsYXRl 34509\nX0RFTEFZ 34510\nIEhJ 34511\nIG5hdmln 34512\nKFNlbmRlcg== 34513\nIEhT 34514\nXyIr 34515\nIFJFUVVFU1Q= 34516\nIHdpZmk= 34517\nPSIiCg== 34518\nXSktPg== 34519\nIHJvcGU= 34520\nIHZpb2xhdGVk 34521\nIGdsYW5jZQ== 34522\nIEt1cmQ= 34523\nIOiu 34524\nZGVjaw== 34525\nIElTQk4= 34526\nIGluZmVjdA== 34527\nIEZvbw== 34528\nIGdldHRlcg== 34529\nIHRlbmVy 34530\nYXBwZQ== 34531\nLmho 34532\nX2hvdA== 34533\nPEFN 34534\ncG9seQ== 34535\nISIsCg== 34536\nIGNvbnZlcnRpbmc= 34537\nIFdXRQ== 34538\nUk9T 34539\nKCd7 34540\nQ29tbWl0 34541\nKUw= 34542\nIE9yZQ== 34543\nIHNwYXJzZQ== 34544\nIGRpc3Bvc2Fs 34545\nIGNhbmNlbGVk 34546\n5ZCO 34547\nIGFlcg== 34548\nIHZpbnls 34549\n4buD 34550\ncmVjb2du 34551\nYXJraW5n 34552\nIHRyaWNreQ== 34553\nKnM= 34554\nIHByb2NlZWRz 34555\nIGlzbw== 34556\nIGNvY29udXQ= 34557\nIGNyYWZ0ZWQ= 34558\nSUVMRFM= 34559\nIHF1ZXN0bw== 34560\nIGNvbW11bg== 34561\nX0NPTk5FQ1Q= 34562\nIHRyYWZmaWNraW5n 34563\nRGVlcA== 34564\nYcOnw7Vlcw== 34565\nY29kaWdv 34566\ndmVhdQ== 34567\nIGJldHJheQ== 34568\naW50YQ== 34569\nVEVE 34570\nw6Zy 34571\nbWFydA== 34572\nX0JVUw== 34573\nL3Nj 34574\naWFsbHk= 34575\nIGNpZ2FyZXR0ZXM= 34576\n6K+B 34577\nKG5u 34578\nIG1vZGVsaW5n 34579\nL3Byb2R1Y3Rz 34580\nd2Fybg== 34581\nIG1ldHJv 34582\nIEl2 34583\nJik= 34584\nIENhYmxl 34585\nzrs= 34586\nQ29tcGFyaXNvbg== 34587\nZ2FyeQ== 34588\nIEJB 34589\nUEFSVA== 34590\nIHB2 34591\nX3VwZGF0ZWQ= 34592\nQ3JlZGl0 34593\nb3J0aHk= 34594\nb2JzZXJ2YWJsZQ== 34595\nIHRoZWF0cmU= 34596\nQkxF 34597\nO30KCg== 34598\nbGF1bmNo 34599\nX3N0cmluZ3M= 34600\ndWdv 34601\nIFJQRw== 34602\nLWF1dGg= 34603\n0KA= 34604\naG9sbQ== 34605\nIFBhbmQ= 34606\nVWlk 34607\nIGltcGx5 34608\n7Jy8 34609\nJ109Jw== 34610\nL1VzZXI= 34611\nIHN0cmNhdA== 34612\n0L3Ri9C5 34613\nRGF0YUFkYXB0ZXI= 34614\nIGxhbmRzYw== 34615\nIGRpcGxvbWF0aWM= 34616\n77yT 34617\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 34618\nIENoaWNrZW4= 34619\nIGJjcnlwdA== 34620\nLkluZg== 34621\nW2NvbA== 34622\nIFF1YW50aXR5 34623\nLXBvc2l0aW9u 34624\nIGRpZXRhcnk= 34625\nIGZpbG1t 34626\nSXNyYWVs 34627\nUHJldg== 34628\nIE1pbGxpb24= 34629\nIHJlbWVk 34630\nIGJpbGxpbmc= 34631\nIG91dGRvb3Jz 34632\nLnRt 34633\nIG5hZA== 34634\nRm9yZw== 34635\nWlo= 34636\nIHNzbA== 34637\nXSwn 34638\nS1Q= 34639\nZnJlcQ== 34640\nPWRvY3VtZW50 34641\nYmx1cg== 34642\nrLg= 34643\nIEplZmZlcnNvbg== 34644\nQ3M= 34645\nKHNhdmU= 34646\nIHN0cmFw 34647\nSW5kaWE= 34648\nIGlkZW9sb2d5 34649\nQk9TRQ== 34650\nIEZQ 34651\nKGFucw== 34652\nIGZldmVy 34653\nIFlhbQ== 34654\nS2luZw== 34655\n4LI= 34656\nQVRJTkc= 34657\nYm9oeWRy 34658\ncm9sbGJhY2s= 34659\nIG5ld05vZGU= 34660\nIE5WSURJQQ== 34661\nIGhvbm91cg== 34662\nIENvbmZpcm0= 34663\neGJk 34664\nIHN1Y2Nlc3Nvcg== 34665\nL3U= 34666\nbGl2 34667\nb3VybmFtZW50cw== 34668\nQXR0YWNobWVudA== 34669\nIGdydXA= 34670\nIHRyaWJl 34671\nIGNhcmVz 34672\nZWZ0 34673\nX3NhbWU= 34674\nJ2xhYmVs 34675\nIOOAkA== 34676\nTW90b3I= 34677\nIGluZXhw 34678\nICIoIg== 34679\nX1BPU0lUSU9O 34680\nIHZhbGxleQ== 34681\nIFJlc3VsdFNldA== 34682\nIHByZXNlcnZlZA== 34683\nIG11dGF0aW9ucw== 34684\nIHF1ZXN0aW9uaW5n 34685\nbXVuaXRpb24= 34686\ncGFyc2VJbnQ= 34687\nIFNy 34688\nIE1ldGFkYXRh 34689\n4oCd77yM 34690\ndGltZXN0YW1wcw== 34691\nIHRyYW5zaXRpb25z 34692\n7Zk= 34693\n0Yo= 34694\naW9t 34695\nLkRv 34696\nIHBpbmU= 34697\nIGZ1bmc= 34698\nIHRyYW5zbWl0dGVk 34699\nY3RpbWU= 34700\nIEZhbQ== 34701\nUmV2aXNpb24= 34702\nQmFz 34703\nVVBFUg== 34704\nRGVzdGluYXRpb24= 34705\ndG9IYXZlQmVlbkNhbGxlZA== 34706\nIHVuZm9ydHVuYXRl 34707\nSU5FUw== 34708\nX3Byb2Y= 34709\nQW1vbmc= 34710\nIEN5YmVy 34711\nIEJhdHRlcnk= 34712\nZ2VucmU= 34713\nIFZpZXdNb2RlbA== 34714\nLT0= 34715\nIHV0aWxpemVk 34716\ncGFpbnQ= 34717\nLkludGVnZXJGaWVsZA== 34718\nZXJuaXR5 34719\nY29tcGlsZXI= 34720\n4oCLCgo= 34721\nIE1hc3RlcnM= 34722\nLlRvQXJyYXk= 34723\nIHN0cnRvbA== 34724\nIFVrcmFpbmlhbg== 34725\nfSkpOwo= 34726\nIHNoZW1hbGU= 34727\nIlRoYXQ= 34728\nZm9yYWxs 34729\nL2Rvd25sb2Fk 34730\nIHJoZXRvcmlj 34731\nLmxhdGl0dWRl 34732\nIFdIRU4= 34733\nIHNob2NraW5n 34734\nSUZJQw== 34735\nLk5vcm1hbA== 34736\nX0ZPTERFUg== 34737\nIGRyaWZ0 34738\nIG1vdW50aW5n 34739\nLWJvb2s= 34740\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 34741\nIFdpcmVsZXNz 34742\nPiIuJA== 34743\nIHJlbGllcw== 34744\nKENvbnNvbGU= 34745\nSW50ZXJuYXRpb25hbA== 34746\nLT57JA== 34747\nTWlk 34748\nIGRpc3NlcnQ= 34749\nZGRz 34750\nIGRlcG9zaXRz 34751\nCWRyaXZlcg== 34752\nI2dh 34753\ncHJpc2luZw== 34754\ncHJpbnRsbg== 34755\nIHByZXNlbnRlcg== 34756\nIG1pbmVz 34757\nQ1NT 34758\nIER1YWw= 34759\nKCEo 34760\nIGthbQ== 34761\nIGlzTG9hZGluZw== 34762\nIFByb3RlY3Q= 34763\nLnVwcGVy 34764\nYXJpdW0= 34765\nXToKCgo= 34766\nWWlp 34767\nLXNoaXJ0 34768\nIElNQUdF 34769\nX2NvbG9ycw== 34770\nIHVyZ2VudA== 34771\nLkNvbnRhaW5lcg== 34772\nISgK 34773\nU2F0dXJkYXk= 34774\nIHNvY2lldGllcw== 34775\nIFRoYW4= 34776\nIENvZA== 34777\nPUA= 34778\nIGF0dGFjaG1lbnRz 34779\nLm1vYmlsZQ== 34780\nIHNwaXRl 34781\nIGJvdW5jZQ== 34782\ncmF3bA== 34783\naW5zdGFuY2V0eXBl 34784\nIFRydWNr 34785\nIG1hbmlwdWxhdGlvbg== 34786\nKENvbmZpZw== 34787\nLWluc3Q= 34788\nIHN0b3I= 34789\naXR1dGlvbg== 34790\nUHJlZmVycmVkR2Fw 34791\nIG1haW5BeGlzQWxpZ25tZW50 34792\nIGxpc3RlbmVk 34793\nJycnCgo= 34794\nb3R0YWdl 34795\nLXByb2plY3Q= 34796\nLkFQUExJQ0FUSU9O 34797\nCXJvb3Q= 34798\nIHdoaXQ= 34799\nIGJpbGRlcg== 34800\nIGtlcg== 34801\nIGFwcGxpYW5jZXM= 34802\ncm93YXZl 34803\n7J2A 34804\nZW1hdGljcw== 34805\nIE9yZw== 34806\nb3Bpbmc= 34807\nX1NFQVJDSA== 34808\nIGNoYW0= 34809\nYWRkQ29udGFpbmVyR2Fw 34810\nICgpLg== 34811\nIEFycm93 34812\nSWxsZWdhbA== 34813\nQ3VycmVudGx5 34814\nIHVzYQ== 34815\nIHBhc3N3b3Jkcw== 34816\nIHJlbm93bg== 34817\nYXZlcm4= 34818\nIEV2aWw= 34819\nIGNvbmNhdA== 34820\nIGR1bw== 34821\nIHZhbGU= 34822\nIEJlYW4= 34823\nIGluZGljYXRvcnM= 34824\nY21hdGg= 34825\nIFB1bXA= 34826\nTm92ZW1iZXI= 34827\naWZpY2FudA== 34828\nX0RPTUFJTg== 34829\ncmVnYXI= 34830\nIFBvcnRhbA== 34831\nIiQ= 34832\nIGZvcm1lcmx5 34833\nIl06Cg== 34834\nIFZpc2liaWxpdHk= 34835\nLmdldEVsZW1lbnRzQnlDbGFzc05hbWU= 34836\nX1JFRA== 34837\nIGNoYW1waW9ucw== 34838\n4LQ= 34839\nVmFsb3I= 34840\nX2Vz 34841\nKmE= 34842\nLXJlcGVhdA== 34843\nQmFuZA== 34844\nLnN0YWdl 34845\nIGJ1cmVhdWM= 34846\nQ250 34847\nZXRlbg== 34848\nLWZ1bmN0aW9u 34849\nIG11aXRv 34850\nUElE 34851\nX2VkaXRvcg== 34852\nIGNyYXNoZWQ= 34853\nZGVhZA== 34854\na2F0 34855\nYWdo 34856\nIEVYVA== 34857\nYXNzZXI= 34858\nLXNtYWxs 34859\nIHJlYWxpeg== 34860\nKEVudGl0eQ== 34861\nw7pz 34862\nIEFjdHVhbGx5 34863\nIEVsaXRl 34864\nIGhlbG0= 34865\nKG5vbmF0b21pYw== 34866\nYXNoZXI= 34867\nQ29tbXVuaXR5 34868\nYWxsZW5n 34869\naXJ5 34870\nIEdyb3d0aA== 34871\nIHN1ZQ== 34872\nIGZyZXF1ZW5jaWVz 34873\nX2Rlc2NyaXB0b3I= 34874\nLkF0dHJpYnV0ZQ== 34875\nIHJlY2lwaWVudHM= 34876\nX05T 34877\nLyIr 34878\naWJhbg== 34879\nIGF0aGxldGU= 34880\nIElnbg== 34881\nX0RNQQ== 34882\nKGRz 34883\nIFJlcXVpcmVtZW50cw== 34884\nQURJ 34885\nZXJleg== 34886\nXEFkbWlu 34887\nYnJhc2th 34888\nIFJ1c3Q= 34889\nUmVsYXRpb24= 34890\nQ09E 34891\nIFZFUlNJT04= 34892\nZW1tYQ== 34893\nKSl7 34894\nLkR1cmF0aW9u 34895\nIENhbWI= 34896\nLWxvZ28= 34897\nIHJlYWRhYmxl 34898\nIGNyZWF0b3Jz 34899\nKCldOwo= 34900\nVXBEb3du 34901\nLWhhbGY= 34902\nLmdldE1vbnRo 34903\nKHNm 34904\nUGlj 34905\nIGh1bmdlcg== 34906\nLnR4 34907\nIGV4Y2VlZGVk 34908\nX3NlZWQ= 34909\nKF4= 34910\nX3Nr 34911\nLnBlcmZvcm0= 34912\nID46Og== 34913\nIG1vbmdv 34914\nPWZsb2F0 34915\nYmluZFBhcmFt 34916\nU21hcnQ= 34917\naWZh 34918\nIHNlY3VyaXRpZXM= 34919\nIHByZWp1ZA== 34920\nICwi 34921\nIGNvcnBz 34922\nIHZyYQ== 34923\nYW1hY2FyZQ== 34924\naXRlcnI= 34925\nKE1lZGlh 34926\ndWNoZQ== 34927\nIGNvYg== 34928\nIGxpYmVy 34929\nLmdlb21ldHJ5 34930\nTG9jYXRvcg== 34931\nIHNsaWRpbmc= 34932\nIHN1cmdpY2Fs 34933\nX0NVUg== 34934\nIGNvbnNlY3Q= 34935\nWyo= 34936\nIFJlc29ydA== 34937\nU3R1Yg== 34938\nX0RPVUJMRQ== 34939\nIFNvcGg= 34940\nIGVsZWN0b3JhbA== 34941\nX2Rpc2FibGU= 34942\nINGB0L4= 34943\nIExpZ2h0bmluZw== 34944\nIG1lbnRpb25z 34945\nb2N5 34946\nIGxlYWtlZA== 34947\nIHJlbGF4aW5n 34948\nUHJlc2VudGVy 34949\ndnNw 34950\nIGd1aWx0 34951\nPS09LQ== 34952\nLnJlcGx5 34953\nIE1pcnJvcg== 34954\nQ2FtcA== 34955\nICsjKyMrIys= 34956\nICsjKyMrIysjKyMr 34957\nLkF1dGhvcg== 34958\nIGRpcmVjdGl2ZQ== 34959\nLWhvb2s= 34960\n7YSw 34961\nfQoKCgoK 34962\nQHB5dGVzdA== 34963\nX3JhbmQ= 34964\nbWlz 34965\nIGNvbG9yZnVs 34966\ndWpl 34967\nbGFzc2Vz 34968\nIENsYXNzZXM= 34969\nLmhhdmU= 34970\nJSks 34971\n6aKY 34972\nIGRpc3R1cmJpbmc= 34973\nc3Vic3RyaW5n 34974\nIEtvaA== 34975\nSW52ZXN0 34976\ncHVyY2hhc2U= 34977\nIHJlY3ljbGluZw== 34978\nIEFSVA== 34979\naWVyYXJjaHk= 34980\nIGZwcw== 34981\nLmNoZWNrQm94 34982\n7ZW0 34983\nX21hdGVyaWFs 34984\nZHVjYXRpb24= 34985\nIGZ3 34986\ndWRpdA== 34987\nIHJldmlld2luZw== 34988\nIFNpZA== 34989\nU3ludGF4 34990\nIFdyaXR0ZW4= 34991\nYXJnYXI= 34992\nVU1F 34993\nL3E= 34994\nQ2xhc3NpZmllcg== 34995\nT2ZmaWNpYWw= 34996\nIGpheno= 34997\nIG9tZWdh 34998\nUGh5c2ljcw== 34999\nIGx1Z2Fy 35000\nX2FjY2Vzc29y 35001\nLmNvbW1hbmRz 35002\nQWJpbGl0eQ== 35003\nIEJhdGNo 35004\nUkFN 35005\nIGVuY291bnRlcnM= 35006\nLlF1 35007\nQllURQ== 35008\nIERpc3RyaWJ1dGlvbg== 35009\nIHVzbw== 35010\nIFJlY292ZXJ5 35011\nYXBwcm92ZWQ= 35012\nIGRlbmlhbA== 35013\nL3NoYXJl 35014\nTGlua2VkTGlzdA== 35015\nKQ0KDQoNCg== 35016\ndWRkeQ== 35017\nIGZpbmVz 35018\nIHJ5 35019\nVW5pY29kZQ== 35020\nCXJlbmRlcg== 35021\nIHByZW1pc2Vz 35022\nIHBvbg== 35023\nYWxpYXNlcw== 35024\nL0ZvdW5kYXRpb24= 35025\nY3VkYQ== 35026\nIENvY2s= 35027\nLDop 35028\nKGZvbGRlcg== 35029\nIG3DqWQ= 35030\nZHJhZw== 35031\nIHRhbGVudHM= 35032\nICAgCgo= 35033\n0LXRgdGC0LI= 35034\nbW9i 35035\nLnltbA== 35036\nIGFzdGVy 35037\nIGRpc2NyZQ== 35038\nZ29hbA== 35039\nIEdUWA== 35040\nIFNVQ0NFU1M= 35041\nIExPTkc= 35042\nKGZpbmQ= 35043\nIHNpbmd1bGFy 35044\nX3N6 35045\nIEV0aGVyZXVt 35046\nLi4K 35047\nIGlycmVz 35048\nJykpewo= 35049\nIG1pbmlzdGVycw== 35050\nU3RlcHM= 35051\naXZlcnNhbA== 35052\nIE5ldmVydGhlbGVzcw== 35053\nLWxlZA== 35054\nICglKQ== 35055\n56Gu 35056\nIHRpbWV6b25l 35057\nIHN0cmFuZ2Vy 35058\nKHJlbmRlcg== 35059\nIHNodXRpbA== 35060\nIG1waA== 35061\nIHRyaW8= 35062\ncHB5 35063\nIHByZWRvbWlu 35064\nIGVuZG9ycw== 35065\nIFJ1c3NpYW5z 35066\nCXJvdw== 35067\nIHdpemFyZA== 35068\nLnNlcmlhbGl6ZQ== 35069\nIGNvbXBsYWluZWQ= 35070\nIHNpZG8= 35071\nIGRlbGlnaHRlZA== 35072\nLW1l 35073\nIFJhdg== 35074\nSHVtYW4= 35075\nYWRheXM= 35076\ncmVjdg== 35077\nV29ya2luZw== 35078\nSnVtcA== 35079\nIMOlcg== 35080\nIEF1dG9tYXRpYw== 35081\nX0Jhc2U= 35082\n5qC8 35083\nYXVyYW50cw== 35084\nwq8= 35085\n5rg= 35086\nKENUeXBl 35087\nSUZJ 35088\nKGFtb3VudA== 35089\nIGJlbGlldmluZw== 35090\nPW15c3Fs 35091\nIGZpcg== 35092\nIHJlc3RvcmF0aW9u 35093\nZXJlY28= 35094\n0KI= 35095\nXycr 35096\nIGVib29r 35097\nIGRlYnJpcw== 35098\nKGlucHV0cw== 35099\nQVlPVVQ= 35100\nIHNjcmVhbWluZw== 35101\nYXZpYQ== 35102\nbGFuZGVy 35103\nIGRpc3RyZXNz 35104\nIGFzc2VtYmxlZA== 35105\nIEF2b2lk 35106\nKHRocmVhZA== 35107\nIFJQQw== 35108\nX0VYSVQ= 35109\nKHF1ZXVl 35110\n0LjRgdGC 35111\nRGxs 35112\nIHNrdWxs 35113\nX3B1Yg== 35114\nY2hleg== 35115\nbWluYXRl 35116\nZW5zZW4= 35117\nIGluc2FuZQ== 35118\nYm91bmRz 35119\nIFJvc2Vu 35120\nIGNvbmRpdGlvbmluZw== 35121\ncHJvY2Vzc2Vk 35122\ndmlkZW9z 35123\nZm91cg== 35124\nLkNvbnY= 35125\nfDsK 35126\nUGVyc29uYWw= 35127\nY2VycHQ= 35128\nOlVJQ29udHJvbFN0YXRlTm9ybWFs 35129\nIGRvc2Vz 35130\nIEthcmw= 35131\nIEZyZXF1 35132\nLkJBU0U= 35133\nIFZvdGU= 35134\nIGNvbmN1cnJlbnQ= 35135\nIE1lc3NhZ2VCb3hJY29u 35136\nIMOW 35137\nIER1YmFp 35138\nIFJldGFpbA== 35139\nOm51bWJlcg== 35140\nIE9ic2VydmVy 35141\nIEJpZ0ludGVnZXI= 35142\nX29yaWdpbg== 35143\nX1dPUks= 35144\nRnJhbWVz 35145\nIG5vdGFibHk= 35146\nLuKAnA== 35147\nIHRyb3BpY2Fs 35148\nIG5pY2hl 35149\nYW1pbmE= 35150\nLnN5cw== 35151\nKHRva2Vucw== 35152\nbW9kaWZ5 35153\nb3NpdA== 35154\nc3Ryb20= 35155\nIENvbWljcw== 35156\nT1BUSU9O 35157\nVGlja2V0 35158\nIGZhY3Rvcmllcw== 35159\nIGRpc3B1dA== 35160\nX0ZpbGU= 35161\nIEZpbm4= 35162\nZWVl 35163\nIERpc2NvcmQ= 35164\nX21vbmV5 35165\nLnRwbA== 35166\nX3NhZmU= 35167\nTEI= 35168\nIGdsdXQ= 35169\nSks= 35170\nLmZsb3c= 35171\nLWNvbnQ= 35172\nZ29z 35173\nIGhvcml6b24= 35174\nIFJ1c2g= 35175\nOjoq 35176\nUGlwZQ== 35177\ndWxsYQ== 35178\nYm9yb3VnaA== 35179\naGVpbWVy 35180\nKG1vdmU= 35181\nKFRleHQ= 35182\nfSk7DQoNCg== 35183\nd2VsY29tZQ== 35184\nIENvbXBvbmVudHM= 35185\nIGdvdmVybmFuY2U= 35186\nY2xvc2Vk 35187\nCW1hcmdpbg== 35188\nIGxhdW5kcnk= 35189\nIFRlcm1pbmFs 35190\naXphcmRz 35191\nLuKAlA== 35192\nLnJlbW90ZQ== 35193\nLnJhZGl1cw== 35194\nIFF1ZWJlYw== 35195\nIGRo 35196\nVGVjaA== 35197\nIE1pc3Q= 35198\nc2VsbGVy 35199\nX2xpdGVyYWw= 35200\nIGdlbml1cw== 35201\nIGJyYWlucw== 35202\nZ2Vt 35203\nIE1lYXN1cmU= 35204\nIGNhdGFzdA== 35205\ncmFuY2U= 35206\nLlRleHRGaWVsZA== 35207\nIGNvbnN1bWluZw== 35208\nICdcJyc= 35209\nb3VidGVkbHk= 35210\nIENlcnRhaW4= 35211\nRXY= 35212\nZXJ0aQ== 35213\nYmVpbmc= 35214\nRXhwZXJpZW5jZQ== 35215\nIC8vWw== 35216\nIEFyYWJpYw== 35217\nIENyaXN0 35218\nIEF6dXJl 35219\nIGhvcmE= 35220\nbGFkZXNo 35221\nXEJsdWVwcmludA== 35222\nZGFy 35223\nLnJlbA== 35224\nIHN1cHJlbQ== 35225\nIFJlYWdhbg== 35226\nIEF0dHJpYnV0ZXM= 35227\nLXNpZGViYXI= 35228\nIHVzZVN0eWxlcw== 35229\nIEFpcmxpbmVz 35230\nIGhpbGxz 35231\nL3hodG1s 35232\ndmluYw== 35233\nX21vY2s= 35234\nCiAgICAgICAgICAgICAgICAK 35235\nIFBpbGw= 35236\nLkxheW91dFN0eWxl 35237\nIENvbW1hbmRlcg== 35238\nXTw= 35239\nc2lnbmF0dXJl 35240\nIHt9DQo= 35241\nIGhhdHJlZA== 35242\nIOuL 35243\nb2xlc3Rlcm9s 35244\nICoqKioqKioq 35245\nYW5jZWxsb3I= 35246\nY3JvcA== 35247\nVElN 35248\nCQkKCg== 35249\neXNxbGk= 35250\ndWl0aXZl 35251\nCXVuc2V0 35252\nX3NlbA== 35253\nIG1lbnVz 35254\ndGljaw== 35255\nIGNvbnN0aXR1dGU= 35256\nIEVsZW1lbnRz 35257\nIFJlZGlz 35258\nYWdnaW8= 35259\nX2Zw 35260\nX2RlcGVuZA== 35261\nZW1hcw== 35262\nQ0FTVA== 35263\nb3Jhbmdl 35264\nam9u 35265\nIEVtaWx5 35266\nIHBvdGF0b2Vz 35267\nIHJlY2VwdG9y 35268\nIEVsZWN0cm9uaWM= 35269\nIExpZ2h0cw== 35270\nIGNvbWJpbmluZw== 35271\nIFNvbWVvbmU= 35272\nICMjIyMjIyMjLg== 35273\nIFRPRA== 35274\nL3Nob3c= 35275\nWGQ= 35276\nLiIn 35277\nYWZ4 35278\nIHRyYWdpYw== 35279\nU3R5bGVk 35280\nIE1hcmNv 35281\nR2FsbGVyeQ== 35282\nZGFsZQ== 35283\nLuKAnQoKCgo= 35284\nw6lyaWU= 35285\nL3NlcnZpY2U= 35286\n5LqG 35287\nIGFtYmllbnQ= 35288\nX1NFVFRJTkdT 35289\nLkFkYXB0ZXI= 35290\nbGVuZQ== 35291\nIHRyYXZlbHM= 35292\nTm90aWNl 35293\nIGNsZWFucw== 35294\nIEZlbQ== 35295\nY2hhaXI= 35296\n0YPQvQ== 35297\nL215 35298\nX2JhZA== 35299\nIEVjb25vbWljcw== 35300\nSVNB 35301\nX0NOVA== 35302\nKE1lbnU= 35303\n5LqO 35304\nIFJpZGdl 35305\nIGxlbmd0aHk= 35306\nRG90 35307\nIGp1bXBz 35308\nIGhleQ== 35309\nJHBkZg== 35310\nIHdvcm0= 35311\nIHN1dA== 35312\nIHNoZXI= 35313\naWFtbw== 35314\nIENhbGM= 35315\ndHJpZXZl 35316\nIGNvcHM= 35317\nIENocm9t 35318\nIHJlZ3VsYXRlZA== 35319\ncmVhdG1lbnQ= 35320\nIEhpZ2hlcg== 35321\nb2tz 35322\nIGRlemU= 35323\nTE9DQVRJT04= 35324\nb25nc1Rv 35325\nIGZpbml0ZQ== 35326\nIHZhcmllcw== 35327\nIHBvc2l0aW9uZWQ= 35328\nJ2ls 35329\n6YeR 35330\nIGhpa2U= 35331\nKGRvbmU= 35332\ncGxheWxpc3Q= 35333\nIGFkYQ== 35334\nIGNvYXN0YWw= 35335\nIE5hbmN5 35336\nLkRhdGVUaW1lRmllbGQ= 35337\nQ3BwQ29kZUdlbg== 35338\nIFNpbWlsYXJseQ== 35339\ncmV1cg== 35340\nIENvbnRy 35341\nIEhpZGRlbg== 35342\nIEJldGE= 35343\nYXRjaGVk 35344\nX2luc3RhbGw= 35345\nLk91dHB1dA== 35346\nTG9va3Vw 35347\nIFJpY2htb25k 35348\ncXVhcmVk 35349\nIG1hbmdh 35350\nLWNvbnRyb2xz 35351\nIEJlcm5hcmQ= 35352\nTGFyZ2U= 35353\nIHNsaWNlcw== 35354\nIG9mZmVuY2U= 35355\nIE1lZ2E= 35356\nIGVzdGFy 35357\nIGpvaW50cw== 35358\nIHN1bW0= 35359\nX3BsYXRmb3Jt 35360\nQnVmZg== 35361\nLmFkZFN1YnZpZXc= 35362\nIHJldGFpbmVk 35363\nTGV0dGVy 35364\nLmRpbQ== 35365\nIGVzc2VyZQ== 35366\nIFNjYWZmb2xk 35367\nRVhQRUNU 35368\nCVJF 35369\nLmxvbmdpdHVkZQ== 35370\nw7xuZA== 35371\nIHN0YXR1ZQ== 35372\nLmFkZFdpZGdldA== 35373\nIENhcmliYmVhbg== 35374\nYWRkUHJlZmVycmVkR2Fw 35375\naWxkZQ== 35376\nVUlMYWJlbA== 35377\nIE9wcG9ydA== 35378\nIGltcGVyaWFs 35379\ndXJzaW9u 35380\nIG1hbmRhdGU= 35381\nIHByb21vdGlvbmFs 35382\nIHZr 35383\naWHFgg== 35384\nIHB5bA== 35385\nIENyZWF0aW9u 35386\n0L7Qt9C0 35387\nIHNpbXBsZXI= 35388\nLndoYXQ= 35389\nIFJlY2VudA== 35390\nU3Rvcm0= 35391\nLnF1YW50aXR5 35392\nIExvdg== 35393\nIi0= 35394\ndWJibGVz 35395\nX25vdGlmaWNhdGlvbg== 35396\nKHdvcmxk 35397\ndXJnZXI= 35398\nKigt 35399\nOiIK 35400\naG0= 35401\nYW5zaGlw 35402\nIEFsbW9zdA== 35403\nIG1vdG9yY3ljbGU= 35404\nX2ZlZQ== 35405\nIGFic29yYg== 35406\nIFZpbmNlbnQ= 35407\nIHNvdW5kZWQ= 35408\nw61zdA== 35409\nIHBoYXJtYWNldXRpY2Fs 35410\naHRhZw== 35411\nIEtpbmRsZQ== 35412\naXRhbGl6ZQ== 35413\nIEVtcGVyb3I= 35414\nb3VzdGlj 35415\nIHNwZWNpYWxpc3Rz 35416\n5YWs 35417\nQm9yZGVyU3R5bGU= 35418\nL1w= 35419\nUkVMQVRFRA== 35420\nKCcsJyw= 35421\nKGV4cHI= 35422\nIGh0 35423\n5Y2I 35424\nX0NyZWF0ZQ== 35425\nIHNwZWNpYWxseQ== 35426\nIFtdOw0K 35427\nIGhlZWw= 35428\nIHNlcHQ= 35429\nX2FyY2g= 35430\nKGluaXRpYWw= 35431\nJS4KCg== 35432\nXCIsXCI= 35433\nIGRpc2N1c3Nlcw== 35434\nIHVwdA== 35435\nIFsm 35436\nIG1hbnVz 35437\nLmhhbmQ= 35438\nIE1BSU4= 35439\nIERlbm1hcms= 35440\nIF0sDQo= 35441\nIGNyeXN0 35442\nIG5hY2s= 35443\nQ29vcmRz 35444\nX2lubmVy 35445\nIG1pZHN0 35446\nIGF3YWtl 35447\nINCe 35448\nLWJyZWFr 35449\nw612ZWw= 35450\nX1BBU1M= 35451\nIFBhcmFtcw== 35452\nIGRldHI= 35453\nIHNwaWRlcg== 35454\nIENvbmNlcHQ= 35455\nIHByZW5k 35456\nQ0hFRA== 35457\nLkV4aXQ= 35458\nIHBvcHVsYXRlZA== 35459\nIHZpcnR1ZQ== 35460\nX1NFU1NJT04= 35461\nIG5vdXZlbA== 35462\nb2F1dGg= 35463\nINC00LDQvdC90Ys= 35464\ncmluaw== 35465\nLkhlYWRlclRleHQ= 35466\nYXR1cmF0ZWQ= 35467\nIGVyc3Q= 35468\nIOWF 35469\n4KWH 35470\nX3Zpc2libGU= 35471\nZXllcg== 35472\nIGxpYWJsZQ== 35473\nIGRlYmU= 35474\nIGJ3 35475\ney0j 35476\nX1dJTg== 35477\nZGZz 35478\nSG92ZXI= 35479\nIFBVVA== 35480\nLWFuZ2xl 35481\nIG5vYmxl 35482\nIHRyYWNlcw== 35483\nZW5jdg== 35484\nIHVzZXJEYXRh 35485\nX2lucw== 35486\nIFN1eg== 35487\nIG5ld3NsZXR0ZXJz 35488\nIE1vZGk= 35489\nIGVudHJlcHJlbmV1cnM= 35490\nIHRyaWJ1dGU= 35491\nIHJ1bW9ycw== 35492\nIHJy 35493\nIFF1YXJ0ZXI= 35494\n6rOg 35495\nIGZlZWRz 35496\nw7Nn 35497\nIGVudmVsb3Bl 35498\nIGxlYXI= 35499\nIGvDuA== 35500\nZGV2ZWxvcGVy 35501\nU2ltaWxhcg== 35502\nOiIpCg== 35503\nc3Vic2NyaXB0aW9u 35504\nTW9kaWZpZXI= 35505\naXRhbGlj 35506\nIG5hc3R5 35507\nIHRlcm1pbmF0aW9u 35508\nIGNoYXJtaW5n 35509\nIOKf 35510\ndG9ucw== 35511\nLnRyYWNl 35512\naG90cw== 35513\nIFVS 35514\nTW9udA== 35515\nIGp1c3RpZmllZA== 35516\nIEdhbmc= 35517\naW5lYQ== 35518\nIGJvZw== 35519\nKGFw 35520\nXyQ= 35521\nIGNvbnRhbWlu 35522\nLkRvdA== 35523\nCURlYnVn 35524\nKGV4cG9ydHM= 35525\nIHBhaXJlZA== 35526\nIEFzc2lnbm1lbnQ= 35527\nIGF1dG9tb2JpbGU= 35528\nk40= 35529\nIHBoYXNlcw== 35530\ndnc= 35531\nQFN1cHByZXNzV2FybmluZ3M= 35532\nPVw= 35533\ncmFudA== 35534\nLWVk 35535\nCWF3YWl0 35536\nIGNlcnRpZmljYXRlcw== 35537\nJz4i 35538\nIGludGFjdA== 35539\nQ1RSTA== 35540\nTWlrZQ== 35541\nZ3JlZ2F0aW9u 35542\nQVRURVJO 35543\nIHJlcHVibGlj 35544\nX3VwcGVy 35545\naWxpYXJ5 35546\nIGNvbXB1dGF0aW9u 35547\naGlyZQ== 35548\nIFNoaW4= 35549\nX0FOWQ== 35550\nIE1hbnVmYWN0dXJlcg== 35551\nIENhcm0= 35552\nIGJlYXJpbmdz 35553\nX2NvbWI= 35554\nY2Fk 35555\ndXJpc3RpYw== 35556\nIHdob2xlc2FsZQ== 35557\nIGRvbm9y 35558\nLmludGVyZmFjZXM= 35559\ncHJlc3Nv 35560\nIEJydW4= 35561\nLWNsb3Nl 35562\ncHJvdmU= 35563\nX1NL 35564\nCWZyYW1l 35565\nZXRyb3M= 35566\nIFBhaW4= 35567\nX0VYUA== 35568\nIExU 35569\nX2Zz 35570\nLmRhdGFz 35571\nCXNz 35572\ndm9pcg== 35573\nIEF4aXM= 35574\nTWFqb3I= 35575\nPSI8 35576\nW2g= 35577\nIHByb2Zlc3M= 35578\naWdyYXRl 35579\nKHNjb3Jl 35580\nS2V5d29yZA== 35581\nIm9z 35582\nICAgIAkK 35583\nYW5hbHlzaXM= 35584\nIHJlcGxheQ== 35585\nLnBhc3M= 35586\nXGQ= 35587\ndGxz 35588\nIHNhbmN0 35589\nLmxpZ2h0 35590\nX21vYmlsZQ== 35591\n0YHRgtGM 35592\nCXRvdGFs 35593\ndWl0eQ== 35594\nIHBhdXNlZA== 35595\nTkFT 35596\nIGVuY29yZQ== 35597\nbG9l 35598\nIC0qLQoK 35599\nLmhpZ2g= 35600\nYW1wbGVy 35601\nIFNlY3VyZQ== 35602\nIGZyYWdtZW50cw== 35603\nX3ZlbA== 35604\naWxsYXJ5 35605\nIFN0ZWlu 35606\nIERhd24= 35607\nIG1heGltaXpl 35608\n4Lii 35609\nIC9e 35610\nIGNvbnRpbnVhbGx5 35611\nIHNoYWRvd3M= 35612\nCSAgICAgICAgICAgICAgICAgICA= 35613\nIElBY3Rpb25SZXN1bHQ= 35614\nIGluZm9ybWFjacOzbg== 35615\nQ0hFQ0s= 35616\nLlNlbGVjdGVkSXRlbQ== 35617\nYnVuZGxl 35618\nb2xsZXk= 35619\nPEludA== 35620\nQUlORVI= 35621\nIFdpbmc= 35622\ndGl0bGVz 35623\nb3VudGFpbg== 35624\nQ1k= 35625\nIExvY2FsZQ== 35626\nZm9ybWVy 35627\nPGNvbnRleHQ= 35628\nUmFkaW9CdXR0b24= 35629\nX3NjaGVkdWxl 35630\nIGZhYnVsb3Vz 35631\nUm9iZXJ0 35632\nX1BST0ZJTEU= 35633\nIGdhdGVz 35634\nSU1Q 35635\nIFBlbnRhZ29u 35636\nZ29sZA== 35637\nYmFjaA== 35638\nZW1wbG95ZWVz 35639\nUm90YXRl 35640\nIGNoYW1w 35641\nIHNlbGJzdA== 35642\nQWx0ZXJu 35643\nIGNvbnZlcnRWaWV3 35644\nLyw= 35645\nIH4o 35646\nU3RyZWV0 35647\nX3BsYWNl 35648\nIHBlcnNvbmFsaXplZA== 35649\nUHVibGlzaGVy 35650\nIFNPQ0s= 35651\nX05BTUVTUEFDRQ== 35652\nIFN0YW5kYXJkcw== 35653\nc29ldmVy 35654\nX0NFTlRFUg== 35655\nSW50ZXJlc3Q= 35656\nw7R0 35657\ndGVtcGVyYXR1cmU= 35658\nVmlld3BvcnQ= 35659\nZ2V0UmVzb3VyY2U= 35660\nIGVhdGVu 35661\nIHNlbXByZQ== 35662\nIGFibm9ybWFs 35663\nIGN5bGluZGVy 35664\nIHRyb3VibGVz 35665\nbm9k 35666\n0YvQsg== 35667\nZ2FtZXM= 35668\nX2ds 35669\nUGxhbmU= 35670\nZ3JleQ== 35671\nX3RibA== 35672\nLkNvbXBvbmVudFBsYWNlbWVudA== 35673\nIENoYXNl 35674\nTG9nZ2luZw== 35675\nbWFueQ== 35676\n7IY= 35677\nIGZsYW1l 35678\nPSI8Pz0k 35679\nIEdyb3Vwcw== 35680\nLVU= 35681\n0YDQsNC9 35682\nCgoKCgoKCg== 35683\nIHZhdWx0 35684\nb21vbg== 35685\ncHJvYmxlbQ== 35686\nIHRyYWRlcnM= 35687\nIHBlcmlwaGVyYWw= 35688\nIGhvbWVwYWdl 35689\nKGRlcw== 35690\nIFN1Y2Nlc3NmdWxseQ== 35691\nIHJlYm9vdA== 35692\nIGNlbGx1bGFy 35693\naWlp 35694\nIFBsYW5z 35695\nbGlzdGluZw== 35696\nCWRpcw== 35697\nIFJlZmxlY3Q= 35698\nCWV4Y2VwdA== 35699\nIiko 35700\nIHRhbWLDqW0= 35701\nVmVoaWNsZQ== 35702\nYWNjaQ== 35703\nbHVzaA== 35704\nT3JkZXJCeQ== 35705\nIGltYWdpbmVk 35706\nY29kZWM= 35707\nIGRhdGVUaW1l 35708\nTWljcm8= 35709\nIHJlbWluZHM= 35710\nIGZydXN0cmF0aW5n 35711\nIFZpc3Rh 35712\nVHJhaW4= 35713\nINCy0YE= 35714\nIG1vbGVjdWxlcw== 35715\nYXZpbg== 35716\nIGRvdWJsZWQ= 35717\nIGJyYWtl 35718\nIGNhbGNpdW0= 35719\nRnJpZGF5 35720\nIElkZW50aWZpZXI= 35721\n5Z8= 35722\n0YvQuQ== 35723\nIEphaA== 35724\nUmVu 35725\nIHNjYW0= 35726\nIERlbm5pcw== 35727\nLnNldEludA== 35728\n4p8= 35729\nIGFwcGVhbHM= 35730\nIEF1cg== 35731\nIHNwbGFzaA== 35732\nZXF1YWxzSWdub3JlQ2FzZQ== 35733\nd2h5 35734\nIHNhcA== 35735\nU3VwcG9ydGVk 35736\nIHNlcmE= 35737\nIDoi 35738\nIFZlcm1vbnQ= 35739\nIHJldW4= 35740\nIE5vdmE= 35741\nICAgICAgICAgICAgCiAgICAgICAgICAgIAo= 35742\nUmF0ZWQ= 35743\nIGxheWluZw== 35744\nIEthcmVu 35745\nLkRlc2VyaWFsaXpl 35746\nIGNvZGVj 35747\nIHRheHBheWVycw== 35748\nOyIpOwo= 35749\nIGNydWRl 35750\nIG1vbGU= 35751\nIHVzZUNvbnRleHQ= 35752\nCXJlc3A= 35753\nIHBrdA== 35754\nIENhbm5vdA== 35755\nUGlwZWxpbmU= 35756\n5YaG 35757\ndGljYWw= 35758\nQWN0aW9uQmFy 35759\nYWVkYQ== 35760\nIENyaXRpY2Fs 35761\nIE5hZA== 35762\nIGJsZWVkaW5n 35763\nIGxsdm0= 35764\nL2N1c3RvbQ== 35765\nIFNpbXBzb24= 35766\nU3k= 35767\naXRhYmx5 35768\nIFN1bW1pdA== 35769\nKCkpKS4= 35770\nRUxMT1c= 35771\nJCcs 35772\nTWV0 35773\nSW52b2ljZQ== 35774\nb2xpc3Q= 35775\nIHNwaW5l 35776\nYXV0aWZ1bA== 35777\ncGFpZA== 35778\nIGxvY2tlcg== 35779\nX2FybQ== 35780\nXCI+PA== 35781\nIHRyYWplY3Rvcnk= 35782\nX3Jpbmc= 35783\nIGh5ZHJvZ2Vu 35784\ndHJvbg== 35785\nIHN0YXR1dGU= 35786\nIGNvbmRpdGlvbmFs 35787\nIHRyYXk= 35788\nLXNjaG9vbA== 35789\nKHdpZGdldA== 35790\nJGNvbmZpZw== 35791\nIHJlcXVlc3Rpbmc= 35792\nLnVpbnQ= 35793\nZXRvbg== 35794\nYnJpdGllcw== 35795\nT2ZUeXBl 35796\nQURNSU4= 35797\ncHJlZGljdA== 35798\nIGdlZ2Vu 35799\nIEhhcHA= 35800\nT0NVTUVOVA== 35801\nIEFwYXJ0 35802\nIC0tLS0t 35803\ncm9l 35804\ndWlkZQ== 35805\nanVzdGlmeQ== 35806\nIFNxdWFk 35807\nIHByb2Zlcw== 35808\nLmJvdA== 35809\nX2N1cnJlbmN5 35810\naW5uZW4= 35811\nIE11bWJhaQ== 35812\nIE51bWJlcnM= 35813\nYXZhbmF1Z2g= 35814\nYWduaXR1ZGU= 35815\n4oCcVGhlcmU= 35816\nPWh0dHA= 35817\n54mH 35818\nIHZi 35819\nKyc8Lw== 35820\nIG9yZ2FuaXppbmc= 35821\nYW5pdW0= 35822\nSW5TZWN0aW9u 35823\nLmFuZA== 35824\nIGV0ZXJuYWw= 35825\nIHNvdWxz 35826\nX09ORQ== 35827\nX25z 35828\nX2Jhc2lj 35829\nIHJldFZhbA== 35830\nLXNoYXBlZA== 35831\naWZkZWY= 35832\nIE1vemlsbGE= 35833\nIGVpZw== 35834\nY29tcGxldGVk 35835\nTm90aWZpY2F0aW9ucw== 35836\nVEVDVA== 35837\ncmllbg== 35838\nY29vcmRpbmF0ZXM= 35839\nIHByZXRlbmQ= 35840\ncG9uc29yZWQ= 35841\nLnN0ZGVycg== 35842\nIGdhbWVycw== 35843\nIGRlZmVuZGVk 35844\nVG9vbFRpcA== 35845\ndWl0YXI= 35846\nIGZyYW5jYQ== 35847\nIFdvb2Rz 35848\nIGlocmU= 35849\nIHBzZXVkbw== 35850\nIGNyb3dkcw== 35851\nIFNZU1RFTQ== 35852\nbGVj 35853\nLmtlcmFz 35854\nIGNpcmN1bGF0aW9u 35855\nZWVy 35856\nLmNi 35857\ndXp6eQ== 35858\n7Zg= 35859\nLnJlYWRlcg== 35860\nIHNlcXVlbA== 35861\nU2V2ZXJhbA== 35862\nLnBvcnRhbA== 35863\nLS0tLS0K 35864\naXN0cmFy 35865\n77u/Ly8= 35866\nUGk= 35867\nIFwiIg== 35868\nIGN1c3RvbXM= 35869\nIGRpc3BsYXlOYW1l 35870\nIG5vdGljZXM= 35871\nIGNhcmI= 35872\nLl8KCg== 35873\nIHByb2R1Y3Rv 35874\nINGB0Ls= 35875\nIG51bWVyaWNhbA== 35876\nIHVuaW50 35877\nIGNvZGlnbw== 35878\nT3JkaW5hbA== 35879\nU3RyaW5nVXRpbHM= 35880\nIGTDqWM= 35881\nIExhbg== 35882\nIHNob3djYXNl 35883\nIGFyaXRobWV0aWM= 35884\nLXNjcm9sbA== 35885\nX1RFTVBMQVRF 35886\nIFJvdXRlck1vZHVsZQ== 35887\nIFNoYWRlcg== 35888\nINCd 35889\ncG9saWN5 35890\nUGVyZm9ybWFuY2U= 35891\nCWJvcmRlcg== 35892\nKGZpbGVwYXRo 35893\n56m6 35894\nX2VuZXJneQ== 35895\nX0NT 35896\nVGhlaXI= 35897\nLnNwYWNpbmc= 35898\nKGRw 35899\nIExBTkdVQUdF 35900\nIGhpc3RvcmljYWxseQ== 35901\nIj57eyQ= 35902\nIGlub2Rl 35903\nc2ls 35904\nIGhhY2U= 35905\nIHNldmVyZWx5 35906\nIE92ZXJ2aWV3 35907\nIHNwcmF3 35908\nIGJlYWNoZXM= 35909\nOmxlZnQ= 35910\nt7s= 35911\nKCR7 35912\nIEZJUlNU 35913\nIFNwYQ== 35914\nLWFzcw== 35915\nIGJhaXNl 35916\nIE5PREU= 35917\nIFBpenph 35918\nUGV0 35919\nKHNlcQ== 35920\nXCI+Cg== 35921\nQ3BwTWV0aG9kUG9pbnRlcg== 35922\nIHZw 35923\nIGlh 35924\nX3NlY29uZHM= 35925\nZW1ldA== 35926\nL2Jsb2I= 35927\nX1RIUkVTSA== 35928\nLi4uDQo= 35929\nRGVzdA== 35930\nIE5I 35931\nLmRhdGFTb3VyY2U= 35932\naXTDqXM= 35933\nIEphaw== 35934\nc2VsbA== 35935\nIHdvcmtzaG9wcw== 35936\nPHU= 35937\nIHJpdmFscw== 35938\nIEVYSVNUUw== 35939\naG9t 35940\nLXRva2Vu 35941\nY29tcGF0aWJsZQ== 35942\nLkpQYW5lbA== 35943\nIHBoeXNpY2lhbnM= 35944\nYXJ0aW4= 35945\nIGRlc2lyYWJsZQ== 35946\nIGRpc3RpbmN0aXZl 35947\nLkRlcA== 35948\nZ2lk 35949\naWxpYXRl 35950\nLG1heA== 35951\nIHByZW1pZXJl 35952\nIHFEZWJ1Zw== 35953\nIGFkdm9jYWN5 35954\nIHdoaXNwZXI= 35955\nUHQ= 35956\nIHVuY2hhbmdlZA== 35957\nX3F0eQ== 35958\n6K+35rGC 35959\nU2Vhc29u 35960\nYXZlbGVuZ3Ro 35961\nIFB1bA== 35962\nIGTDrWE= 35963\nJ11dXSwK 35964\nYWxpcw== 35965\nKCIm 35966\nYm9ybw== 35967\nIGJt 35968\nIFJhZGk= 35969\nd3Jvbmc= 35970\nIEdvaW5n 35971\naW1lVHlwZQ== 35972\naWpp 35973\nLWZlZWRiYWNr 35974\nIE5hbWVz 35975\nIEJhcHQ= 35976\nIHByb2JhYmxl 35977\nIEV0aGVy 35978\nIFBvbGl0aWNz 35979\nX3Byb3RvY29s 35980\nbGluaW5n 35981\nU2F0 35982\nIGNvcnJlbA== 35983\nLlByaW1hcnk= 35984\nKG51bGxhYmxl 35985\nUklPUklUWQ== 35986\nIGNvbG9yaW5n 35987\nIHV0aWxpemluZw== 35988\nZGFz 35989\nIGV4cG9ydGVk 35990\nIGNhcnJpZXJz 35991\nQ29udg== 35992\nLmVkaXRvcg== 35993\nacOz 35994\nKGhhbmRsZXM= 35995\nIGFwcHJlY2lhdGlvbg== 35996\nLmltcG9ydA== 35997\nIEF1c3RyaWE= 35998\nIFN0cmlw 35999\naWxpZ2h0 36000\nIGFwcHJvcHJpYXRlbHk= 36001\nIFByZXN0 36002\nIFdpcg== 36003\nIFVJQXBwbGljYXRpb24= 36004\nYWxjaGVteQ== 36005\nIE1vYg== 36006\nIERldGVybWlu 36007\nZXJndXNvbg== 36008\ncmVnaXN0ZXJlZA== 36009\nX2NvbnZlcnQ= 36010\nIFZsYWRpbWly 36011\nLlNob3dEaWFsb2c= 36012\ncmVmbGVjdA== 36013\nIHNob29r 36014\nIGFzc3VyZQ== 36015\nIE9mdGVu 36016\nIGNpdmlsaXphdGlvbg== 36017\nIHZvY2FidWxhcnk= 36018\nZm9yZWdyb3VuZA== 36019\nIFNjb3Bl 36020\nIHVud2FudGVk 36021\nYWN0aW5n 36022\nIChbXQ== 36023\nIG1hcmtpbmc= 36024\nLm9yaWdpbmFs 36025\nIE1PVkU= 36026\nIHNwb3J0aW5n 36027\nY2VwdGlvbnM= 36028\nTlNOdW1iZXI= 36029\nU2l6ZXM= 36030\nIHByb3ZpbmNpYWw= 36031\nX1RyYW5z 36032\nIHByb2JsZW1hdGlj 36033\nZGlnaXQ= 36034\nIEVtbWE= 36035\nbG9ja3M= 36036\nIENyZXc= 36037\naWJh 36038\nJyk6 36039\naXNoYQ== 36040\nIG1hbW0= 36041\nIG9jY3VyZWQ= 36042\nd2Nz 36043\nKHJ1bGU= 36044\nIG1lcmNoYW5kaXNl 36045\nZXNwZWNpYWxseQ== 36046\nIFR3aW4= 36047\nIG5hbWluZw== 36048\nIHNsb2c= 36049\nIGltcHJvdmVz 36050\nIGFkaGVy 36051\nOnRleHQ= 36052\nLmhhZG9vcA== 36053\nX0hUVFA= 36054\nLnRvTGlzdA== 36055\nLmRpc2FibGVk 36056\nIGxlbnNlcw== 36057\nLmluaQ== 36058\nIFJhcmU= 36059\nIFVidW50dQ== 36060\nIHNjcmFt 36061\nb2xhdGlvbg== 36062\ndGl0dWxv 36063\nRXZlcnl0aGluZw== 36064\nIG5vZGRlZA== 36065\naWNodGln 36066\nX2NvbnN0YW50 36067\nemM= 36068\nbGlmdA== 36069\nIE5vdGlmeQ== 36070\nb25kbw== 36071\nIElORg== 36072\nKCIr 36073\nIEtheg== 36074\nIGRyZWFk 36075\nLm1hcHBlcg== 36076\nbGV1cg== 36077\nIENvbWV5 36078\nIE5C 36079\naWNlcnM= 36080\nLlB1c2g= 36081\nIEhhY2s= 36082\nIEJyYXppbGlhbg== 36083\nX3Byb2Q= 36084\nIC8vCgo= 36085\nIGJpY3ljbGU= 36086\nIHVuYXZhaWxhYmxl 36087\nIGFkb2xlc2NlbnQ= 36088\nYmxr 36089\nIG1pdGln 36090\nX2JsdWU= 36091\n7Jg= 36092\nZmFkZUlu 36093\nIFV0aWxpdGllcw== 36094\nIE1O 36095\nO2s= 36096\nPHN0eWxl 36097\nLXN0YXR1cw== 36098\naW5kbw== 36099\nIGlubmluZ3M= 36100\nIGdq 36101\nIHx8PQ== 36102\nLmV1 36103\nOk51bWJlcg== 36104\nIGN1aXNpbmU= 36105\nIFVSTHM= 36106\naWVr 36107\nIHdpcmVz 36108\nCXBz 36109\naWVn 36110\nLm1r 36111\nc29hcA== 36112\nIHNvbWV0aW1l 36113\nIHN0YXA= 36114\nX3Nlcmllcw== 36115\nLlRhcmdldA== 36116\n5ro= 36117\nLmRlc3RpbmF0aW9u 36118\nT1VOVEVS 36119\nUmFpc2Vz 36120\nJkE= 36121\nIHNtYXJ0cGhvbmVz 36122\nTklFbnY= 36123\nLnNkaw== 36124\nIGhlbGljb3B0ZXI= 36125\nIGltcGU= 36126\nIEJpcnRo 36127\nQVU= 36128\nYnJlYWRjcnVtYnM= 36129\nY29vcmRz 36130\nIGV4cGxvcmVk 36131\nIGxvZA== 36132\nIElw 36133\nZ2FibGU= 36134\naWFuZQ== 36135\nIGFydGlmYWN0cw== 36136\nQm94TGF5b3V0 36137\n2KfYsQ== 36138\nbGlzdGVuZXI= 36139\nLmNhcnQ= 36140\nIEh1ZmY= 36141\nIEhpbmR1 36142\nIERhdGFUeXBlcw== 36143\nIERydXBhbA== 36144\nSUdOT1JF 36145\nIG9mZnNldHM= 36146\nIFJUQw== 36147\nLWxvZ2lu 36148\n5q4= 36149\nIFFPYmplY3Q= 36150\nIHByb3NlY3V0b3I= 36151\nUm9jaw== 36152\nX2NoYXQ= 36153\nV2F5 36154\n7LI= 36155\nIG5lZ2xpZw== 36156\nIGR1ZGU= 36157\nOzw= 36158\nIGRlbGVnYXRlcw== 36159\nX2ZhaWxlZA== 36160\nL2Rldg== 36161\nL3dvcms= 36162\nKE5ldw== 36163\nZXRhYmxl 36164\nKCki 36165\nKEljb25z 36166\nIHBvcms= 36167\nIE1vZGVsQW5kVmlldw== 36168\nIFZJUA== 36169\nIEtvcg== 36170\nbWl4 36171\nIG94aWQ= 36172\nIFNDUkVFTg== 36173\nIEZvdXJ0aA== 36174\nLyIsCg== 36175\nIHRlZQ== 36176\nIFN0ZXZlbnM= 36177\ndGlja3M= 36178\nIHBsZWRnZQ== 36179\naWJib24= 36180\nIExvYW4= 36181\nIG5lbw== 36182\nbnVtcHk= 36183\nIFNoYXJlZFByZWZlcmVuY2Vz 36184\nLW9yaWVudGVk 36185\nIExvZ2dlckZhY3Rvcnk= 36186\nIEdyYXBoUUw= 36187\nemVuaWE= 36188\nIl8= 36189\nV29tZW4= 36190\nLmNhc3Q= 36191\nIGRlbGliZXJhdGVseQ== 36192\nK2I= 36193\nIEFybg== 36194\nZm9udFNpemU= 36195\nIG1hemU= 36196\nIGJsYW1lZA== 36197\nLm1hcw== 36198\nfSkNCg== 36199\nZWxlcmlr 36200\nIHNjYW5uaW5n 36201\nIFdvcmtzaG9w 36202\nIGZpbmRlbg== 36203\nIGNhdXQ= 36204\nVUlGb250 36205\nKHJldHVybg== 36206\nYWxpbg== 36207\nY2FzdGxl 36208\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 36209\nIGluY2VudGl2ZQ== 36210\nb3BhdGg= 36211\nYmxvYg== 36212\nIGNpZ2FyZXR0ZQ== 36213\nIGZlcnRpbA== 36214\nKi8KCgo= 36215\nIFNoYXI= 36216\nCiAgICAgIAo= 36217\nIHVuY2VydGFpbg== 36218\nIFN0b24= 36219\nT3BlcmF0aW9ucw== 36220\nIFNwZW5jZXI= 36221\nIGRlZmlu 36222\nIFNvbG8= 36223\nb25lc3Q= 36224\nt7vliqA= 36225\nIHVvbW8= 36226\nR2l2ZQ== 36227\nIGRlbnRybw== 36228\nO3BhZGRpbmc= 36229\nZW50YWk= 36230\nIENhcnM= 36231\nIGVudGh1c2lhc20= 36232\nIE9wZXJhdGluZw== 36233\nU2tpcA== 36234\ncGFyYXRpb24= 36235\nIHByb3RlY3Rz 36236\nIHJldmVy 36237\nZGc= 36238\nIENpbmNpbm5hdGk= 36239\nIGNvbnNlY3RldHVy 36240\nIG11c3M= 36241\nZW1wbG95ZWQ= 36242\nYXVzZXM= 36243\naW5rbGU= 36244\nLlZhbHVlcw== 36245\no7w= 36246\nbG92 36247\nX1dBUk4= 36248\nIGJvb2ttYXJr 36249\nIEFwb2xsbw== 36250\nLmF4aXM= 36251\nIG3DqXQ= 36252\nIG9wZW5lcg== 36253\nIHR1bW9y 36254\nZGFu 36255\nIGVsZW1lbnRhcnk= 36256\nIHNraXBwZWQ= 36257\nIEtlcg== 36258\nYXNpYQ== 36259\nX3Jlc3A= 36260\nIGRlbW9s 36261\nIENhbmFkaWFucw== 36262\nIHRhc3Rlcw== 36263\nVUludGVnZXI= 36264\nICckew== 36265\nLmF3cw== 36266\nUk9JRA== 36267\ncmlhbnM= 36268\nTVE= 36269\nb3JkYWJsZQ== 36270\nIGNvdXNpbg== 36271\nUHJvcGFnYXRpb24= 36272\nKFNlc3Npb24= 36273\ncGhhbHQ= 36274\nVUxE 36275\nIFNjYWxhcg== 36276\nIGJsb29keQ== 36277\nIOCm 36278\nLm1hc2s= 36279\nLHE= 36280\nIFVuaXRz 36281\nIGNlbnRyZXM= 36282\nIFByaW0= 36283\nLl0KCg== 36284\nIFNoYXc= 36285\nUHJvbQ== 36286\nIFRob3VnaHQ= 36287\nQ2hlY2tlcg== 36288\nX291dHB1dHM= 36289\nKGNoYW4= 36290\nRUlOVkFM 36291\nIGJvYg== 36292\nX2NtcA== 36293\nUGVk 36294\nIG1hdHJpY2Vz 36295\nIHZyb3V3ZW4= 36296\nIGdlbnVpbmVseQ== 36297\naGlnaGxpZ2h0 36298\nKGRpc3BsYXk= 36299\nKSE9 36300\nIGRlbGljYXRl 36301\nIEx1dGhlcg== 36302\nIE1pbGVz 36303\nIHVzZXJJRA== 36304\nJT0= 36305\nYXRldXJz 36306\nX0JVRg== 36307\nLS0tLS0tLQo= 36308\naW1pdGl2ZXM= 36309\nIHNoZWx2ZXM= 36310\nc2xvdw== 36311\nX2luZm9ybWF0aW9u 36312\nTEVH 36313\nV3I= 36314\nLmZvcm1z 36315\nY2VsYW5k 36316\nL3Vu 36317\nOiY= 36318\nLuKAmQoK 36319\nPSIl 36320\nIHByb3N0 36321\nIGZvbnRzaXpl 36322\ndWNpw7Nu 36323\nZ2V0aWM= 36324\nYW10 36325\nPSIu 36326\nRGVjb3I= 36327\nQnJpdA== 36328\nICIiKS4= 36329\nIGZvdW5kaW5n 36330\nLkZpbGVOYW1l 36331\nIFRpZXI= 36332\nIGRpc2Nsb3Nl 36333\nw6Ft 36334\nLnN5bg== 36335\nLlZpZXdIb2xkZXI= 36336\nbGljYW50 36337\nX3N0YWdl 36338\nTW9uZGF5 36339\nIGRlc2VyaWFsaXpl 36340\ndGFsaw== 36341\nIHRyYWRpdGlvbmFsbHk= 36342\n5oCB 36343\n2K4= 36344\nTEVY 36345\nIGVo 36346\nCVJPTQ== 36347\nIHt9KQo= 36348\nUXVlc3Rpb25z 36349\nbmNweQ== 36350\nIGZpeGluZw== 36351\n0LrRgw== 36352\nX0tleQ== 36353\nOng= 36354\nIFNUUklORw== 36355\nINGE0LDQuQ== 36356\nCWxlZnQ= 36357\nIEJlbmNo 36358\nZWxsaWo= 36359\nVVJSRUQ= 36360\nIERpYWdyYW0= 36361\nfWNhdGNo 36362\nL3RpbWU= 36363\nIE1pc3Npbmc= 36364\nZGJuYW1l 36365\nIHNvcmU= 36366\nIFdhbHQ= 36367\ndWdnaW5n 36368\ncmVwcmVzZW50 36369\nIEdT 36370\nbmV5cw== 36371\nCXBhZ2U= 36372\nIHZvbGNhbg== 36373\nKGJ0bg== 36374\nIGV4Y2VlZHM= 36375\nIGVyZw== 36376\nIHBpbG90cw== 36377\nIFNlZA== 36378\nZXJzaW9ucw== 36379\nIHBhdHJvbg== 36380\nUlY= 36381\nL3RvcA== 36382\nLmFzc2V0 36383\nX2Nyb3Nz 36384\nLkVkaXRvcg== 36385\nLnRi 36386\nIHdlbGNvbWluZw== 36387\nU0NSRUVO 36388\nKWZpbmRWaWV3QnlJZA== 36389\nQ29kZXI= 36390\nPElBY3Rpb25SZXN1bHQ= 36391\nX1FVRVVF 36392\n4YM= 36393\nIGhlaWdodHM= 36394\nUmVxdWVzdHM= 36395\nIHN5bWJvbGlj 36396\nDQ0KDQ0K 36397\nIGNvdXBvbnM= 36398\nLWZpdmU= 36399\nIERlc2t0b3A= 36400\nIG1pc21hdGNo 36401\nICdfJw== 36402\nX0RJVg== 36403\nQVNPTg== 36404\nLnRyYW5zcG9zZQ== 36405\nKG1hc2s= 36406\nIENlbHQ= 36407\nLkhhbmQ= 36408\nYXR1 36409\nasSZ 36410\nIHt9KTsK 36411\nTWlzcw== 36412\nIHByaW1h 36413\nbXVuZA== 36414\nb2x2 36415\nIFByZXR0eQ== 36416\nIHJlYmVs 36417\nIEZE 36418\nYXN0aWNhbGx5 36419\nT0xU 36420\nLWF4aXM= 36421\ndXhl 36422\nIGVpbmZhY2g= 36423\nIENoZW1pY2Fs 36424\nX3NlZw== 36425\nbGVldGNvZGU= 36426\nbG9wZQ== 36427\nX29yaWc= 36428\nICAJCQ== 36429\nKERvdWJsZQ== 36430\nIFBheVBhbA== 36431\nLkJhY2tncm91bmRJbWFnZQ== 36432\nIGhvbWVtYWRl 36433\nLiku 36434\nKHBhcnNlcg== 36435\nYXRybw== 36436\nYWNjb3JkaW9u 36437\nRGVmaW5l 36438\nIOyeiA== 36439\nIEFVVE8= 36440\nLnN1bW1hcnk= 36441\nc2NhbGFy 36442\nIEhvb2Q= 36443\ncXVpbg== 36444\nX2Rlcg== 36445\nIEdlc2No 36446\nLmNvbXB1dGU= 36447\nRmVlZGJhY2s= 36448\nIHBoYXJtYWM= 36449\nIMWfaQ== 36450\nIGdsb3Nz 36451\nIEZJTFRFUg== 36452\nSU5TVEFOQ0U= 36453\nIGthbA== 36454\nLlBM 36455\nX0ZSRUU= 36456\nR3JhZGU= 36457\nIOKZ 36458\nLm1ldHJpY3M= 36459\nIGNhZ2U= 36460\nLlh0cmFHcmlk 36461\nX2Rz 36462\nemln 36463\naW50ZXJvcFJlcXVpcmVEZWZhdWx0 36464\nLnJlbW92ZUNsYXNz 36465\nPT09PT09PT09PT09PQ== 36466\nIG1hc3RlcnM= 36467\nU3RhdGVFeGNlcHRpb24= 36468\naWxsZXJ5 36469\nIEJyYWR5 36470\nIGxpbmluZw== 36471\nX2Nz 36472\naW5zdWxh 36473\nIH06 36474\nW3Bvc2l0aW9u 36475\nIFJ4 36476\nIEJZVEU= 36477\nIFN0cmlrZQ== 36478\nINCa 36479\nIENsdXN0ZXI= 36480\nLmRvd25sb2Fk 36481\nQWxsb3dlZA== 36482\nIGFtZW5pdGllcw== 36483\nIG9uVGFw 36484\nZnVsV2lkZ2V0 36485\nIHN0cmVuZ3Rocw== 36486\ndHdlZXQ= 36487\nIGFzY2VuZGluZw== 36488\nIGRpc2Nsb3NlZA== 36489\nZ3Jhdg== 36490\nZGlzdHJpY3Q= 36491\nKTw8 36492\nKSwi 36493\nKGRlZnVu 36494\nX3w= 36495\nIGdhemU= 36496\n0LDRjw== 36497\nIGZvcnR5 36498\nPT09PT09PT09PT0= 36499\nU2NpZW5jZQ== 36500\nc2VtYmxlcg== 36501\nCWJvZHk= 36502\nX3RyYW5zZmVy 36503\nIGxvbmd0aW1l 36504\nIGNvbXBsaWNhdGlvbnM= 36505\nIGJvb3Ro 36506\nVkVSUg== 36507\nIHlpZWxkcw== 36508\nIG5hdmlnYXRvcg== 36509\nOjpfKCc= 36510\nRUNUT1I= 36511\nX0NvbmZpZw== 36512\nIGxhc3RlZA== 36513\ndXNhbA== 36514\n55m75b2V 36515\nIGdsb3Zlcw== 36516\nIGJlbGx5 36517\nU2FsZXM= 36518\nKE1ldGhvZA== 36519\nKG1lbWJlcg== 36520\nIFJlZWQ= 36521\ncGFzc2Vk 36522\nU2lnbklu 36523\nLG51bQ== 36524\nVUxPTkc= 36525\nIExFRw== 36526\nbmVscw== 36527\nIG1lbnRvcg== 36528\nKHJj 36529\nIE9idmlvdXNseQ== 36530\nLmlm 36531\nIEZyZWRlcg== 36532\nSEVBRA== 36533\nQGF1dGhvcg== 36534\nQ29uZGl0aW9ucw== 36535\nIGdhcmRlbnM= 36536\nIFJpcA== 36537\nKHVzZXJz 36538\nIE9rYXk= 36539\nIHdyZXN0bGluZw== 36540\naW1lc3RvbmU= 36541\nIENlcnRpZmllZA== 36542\nIHZlcmRpY3Q= 36543\nYWlkYQ== 36544\nLmlubmVyVGV4dA== 36545\naWNhc3Q= 36546\nCWF0 36547\nIHByZXN1bWFibHk= 36548\nIEZVTg== 36549\nYWplcw== 36550\n0Jc= 36551\nPiIsCg== 36552\nX1Bpbg== 36553\ndWVzZQ== 36554\nIG92ZXJyaWRlcw== 36555\nX3JlYWR5 36556\nQWR2YW5jZWQ= 36557\nIG9waQ== 36558\nLWNhcnQ= 36559\nKCIvIiw= 36560\nIERlYg== 36561\nQ1JZ 36562\nIFZlcnRpY2Fs 36563\nIE9WRVI= 36564\nIENvcnBvcmF0ZQ== 36565\nICIiOw== 36566\nIHN0ZXBwaW5n 36567\nZWo= 36568\nIGFjY3VzYXRpb25z 36569\nIG9yYXo= 36570\nX3RhaWw= 36571\nIGluZHVjZWQ= 36572\nIGVsYXN0aWM= 36573\nIGJsb3du 36574\nLC8v 36575\nIGJhY2tncm91bmRz 36576\n4oCZdW5l 36577\nLXNkaw== 36578\nIHNldEludGVydmFs 36579\nIGluY2VudGl2ZXM= 36580\nIHZlZ2V0YWJsZQ== 36581\nX09u 36582\nZXhwYW5kZWQ= 36583\ncGl4 36584\nX3NoYWRlcg== 36585\nIFNQRFg= 36586\nQGV4YW1wbGU= 36587\nIFdyYXBwZXI= 36588\nLlplcm8= 36589\nUG9zaXRpdmU= 36590\nIHNwaW5uZXI= 36591\nIGludmVudGVk 36592\nIEdhdGVz 36593\n0L7RgtC+0YA= 36594\nIGNvbXBhcmlzb25z 36595\n6Lc= 36596\nLnByaW1hcnk= 36597\nZGF0YVByb3ZpZGVy 36598\nYWRkaXRpb25hbA== 36599\nCW9wdGlvbnM= 36600\nc25hcHNob3Q= 36601\nLnNldEhvcml6b250YWw= 36602\nICJ7fQ== 36603\nIEZpc2hlcg== 36604\naGFsdGVu 36605\nPFR5cGU= 36606\nIG1heExlbmd0aA== 36607\nIE10 36608\nIOqwgA== 36609\nLmpldGJyYWlucw== 36610\nIGlkZW50aWZpZXM= 36611\nIGZsb3dpbmc= 36612\nIERpc2N1c3Npb24= 36613\nYXRzYnk= 36614\nIHNjaHc= 36615\ndWdodHk= 36616\nIHJpdmVycw== 36617\nLnVuaXF1ZQ== 36618\nX1BIWQ== 36619\nZWRyYWw= 36620\nKGxs 36621\nIGNzcmY= 36622\ncHBlcnM= 36623\nw7xs 36624\nIEVzcGVjaWFsbHk= 36625\ncG9ydGVk 36626\nIEhhcnJpc29u 36627\nKioqKioqKi8K 36628\nVGV4dENvbG9y 36629\n7Iq1 36630\nd2lyZQ== 36631\nIHN0YXR1c0NvZGU= 36632\nIEZpbmlzaA== 36633\nY2VuY2U= 36634\nIE1jQ2Fpbg== 36635\nIFdvcg== 36636\nKGF3YWl0 36637\nICktPg== 36638\nIFJlZ2lzdGVyZWQ= 36639\nSU5FRA== 36640\na2Fs 36641\ncGFyaXNvbg== 36642\nIG9iamV0bw== 36643\nVmk= 36644\nbWFuZGE= 36645\nIHJlbmV3ZWQ= 36646\nIFNvZg== 36647\nZXNzZWw= 36648\nLm5kYXJyYXk= 36649\nIGNyYXA= 36650\n566h 36651\nLmFic3BhdGg= 36652\nKHVw 36653\nIGNsZWFyYW5jZQ== 36654\nIFRX 36655\nX0NPUFk= 36656\nICAgICAgICAgICAgCQ== 36657\nIGZvcmVzdHM= 36658\nIGFyZ3VhYmx5 36659\nIEFTUw== 36660\naGV5 36661\nYW1lbA== 36662\nX2ZvcmU= 36663\nIFNvdXRoZWFzdA== 36664\nIGFidXNlZA== 36665\nIHByYWN0aWNpbmc= 36666\nYWtlZGlycw== 36667\n5Li7 36668\nX3Jlc291cmNlcw== 36669\nIHBvbmQ= 36670\nLkZpeGVk 36671\nTGFzdEVycm9y 36672\nIFBzeWNob2xvZ3k= 36673\nICIvLw== 36674\nITo= 36675\nUmV1c2FibGU= 36676\nIG1lbnNhamU= 36677\nIHJvc3B5 36678\nIGJvdXI= 36679\nIHZhcmlldGllcw== 36680\nIGVtcGF0aA== 36681\nKCh7 36682\nX29yZw== 36683\nIE1lcw== 36684\nIE1hZ2VudG8= 36685\nSVNUT1JZ 36686\nVW5sZXNz 36687\nIGhq 36688\nIER1dHk= 36689\nSnVu 36690\nLHNpemU= 36691\nIHBhaW50aW5ncw== 36692\nIGRpc3BlbnM= 36693\nZGFydA== 36694\nIGJlaGF2aW9yYWw= 36695\nIHJwYw== 36696\nY2FsY3VsYXRl 36697\nZnJ1aXQ= 36698\nX21t 36699\nCXB0aHJlYWQ= 36700\nTWF4TGVuZ3Ro 36701\nIGN1cnJlbmNpZXM= 36702\nX2NhcGFjaXR5 36703\nIE96 36704\nIGZpcmVhcm0= 36705\nIGNvZWZmaWNpZW50 36706\nIGJhbmtydXB0Y3k= 36707\nd2FydA== 36708\nIGZhdGlndWU= 36709\nQVZB 36710\nIGVzcGE= 36711\nX3Bj 36712\nIFF1b3Rlcw== 36713\nX0xJR0hU 36714\nIFRpY2tldHM= 36715\nIHJlbGF0ZXM= 36716\nIHB1Ymxpc2hlcnM= 36717\nIHVubG9ja2Vk 36718\nIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 36719\nIEludGVycnVwdGVkRXhjZXB0aW9u 36720\nIG91dGxvb2s= 36721\ncm4= 36722\nIHJlYmVscw== 36723\nV3JpdHRlbg== 36724\nIGFzaWFu 36725\nb3R0bw== 36726\nIAkJCQk= 36727\nX2dwdQ== 36728\nVHh0 36729\nLkltYWdlVmlldw== 36730\nIHN1aXM= 36731\nX3RhYmxlcw== 36732\nLlJlY3ljbGVyVmlldw== 36733\nIHdoYXRzb2V2ZXI= 36734\n6IE= 36735\nXSsrOwo= 36736\nYXNzZXJ0VHJ1ZQ== 36737\nX3ZlcmlmeQ== 36738\nIFJpdmVycw== 36739\nIF1b 36740\nSmV0 36741\naWRpYW4= 36742\nU2libGluZw== 36743\nIGdlbnJlcw== 36744\nLkFjY2Vzcw== 36745\nT1BT 36746\nIHRyaXZpYWw= 36747\n4Liq 36748\nYWxlbg== 36749\n0LLQtdC0 36750\nIFN3b3Jk 36751\nIHNjcnV0aW55 36752\nKGNi 36753\nIGNvbW1lcmNl 36754\nIGd1YXJhbnRlZXM= 36755\nX2Fkdg== 36756\nIExFVA== 36757\ncmVjaW8= 36758\nIGhpbGFy 36759\nIGJhY2t5YXJk 36760\n44CP 36761\nIGlsbHVzdHJhdGVk 36762\nL3ZlbmRvcg== 36763\nLlV0aWw= 36764\nIHdvdw== 36765\nTE9Z 36766\nIE1hcnNoYWw= 36767\nIj4nLiQ= 36768\nIEJhaw== 36769\nIG1vZGlmaWVycw== 36770\nZGljdGlvbmFyeQ== 36771\nIFN0cmU= 36772\nbXVsdGlwbGU= 36773\nIikpLA== 36774\nIENvcnQ= 36775\nJ10iKS4= 36776\nKGFkbWlu 36777\nIENyZWF0b3I= 36778\nSW50ZXJuZXQ= 36779\nKG1z 36780\nbG9neQ== 36781\nREVDTEFSRQ== 36782\nIE1hcmN1cw== 36783\nPDw8PA== 36784\n44Gg 36785\nX215 36786\nKGluc3Q= 36787\nIHNjaWVuY2Vz 36788\nTkRFUg== 36789\nLmVudGVy 36790\nIGl0dQ== 36791\nIGJlaGF2ZQ== 36792\nUGFu 36793\nb21iaWVz 36794\nPSc8 36795\nJykpOw0K 36796\nIE1FTlU= 36797\nIFdvcmtlcnM= 36798\nLk5vRXJyb3I= 36799\nIGJpbmRpbmdz 36800\nIGRpc2FiaWxpdGllcw== 36801\ne1w= 36802\nIE11bmljaXA= 36803\nIGNvcmVz 36804\ndXJwbGU= 36805\nIE5va2lh 36806\ndXNpb25z 36807\nIEZpdG5lc3M= 36808\nLmhhbmRsZUNoYW5nZQ== 36809\nIGphdmFzY3JpcHQ= 36810\n7JqU 36811\nKGRlYw== 36812\nIHBhY2tpbmc= 36813\nLWRlcGVuZA== 36814\nIHRyYW5zY3JpcHQ= 36815\nemVyb3M= 36816\nX2FsZXJ0 36817\nPyIsCg== 36818\nbGlicw== 36819\nsdC+0YI= 36820\nIHwKCg== 36821\ndHJhaW5lZA== 36822\nIEdlbnQ= 36823\nIFJhYg== 36824\neHA= 36825\nX2NvbmZpZ3VyYXRpb24= 36826\n5aSp 36827\nX2FjY2VwdA== 36828\nLnJlY3ljbGVydmlldw== 36829\nOnVybA== 36830\nIE11aGFtbWFk 36831\nIHByaXZpbGVnZXM= 36832\nX2Jhbms= 36833\ndWt1 36834\nd2FsbGV0 36835\nIFJPT1Q= 36836\nIGVuY3VlbnQ= 36837\nP2ZhbWlseQ== 36838\nCXBvc2l0aW9u 36839\nIGNn 36840\nIHByZWNpcA== 36841\nbWV0aG9kcw== 36842\nX2Zhc3Q= 36843\naW5jcmVtZW50 36844\nIFRpZ2Vy 36845\nX09DQ1VSUkVE 36846\ncXVpcA== 36847\nIEhBUw== 36848\nX2RvbQ== 36849\nIHdyZWNr 36850\nYmo= 36851\nIGRlcm4= 36852\nIG9yZ2Fucw== 36853\nLmVudHJpZXM= 36854\nIF8oJw== 36855\ncmFtZW50bw== 36856\nIEphbWll 36857\nIHB1bms= 36858\nSVBQ 36859\nIHByb2dyYW1h 36860\nIGF0dGFpbg== 36861\nIHByb3Zlcw== 36862\nL3NpZ24= 36863\nIGFuc3dlcmluZw== 36864\nIGxhZGRlcg== 36865\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 36866\nIFdhbG1hcnQ= 36867\nIENPTlRFTlQ= 36868\nZHVjdG9y 36869\nIHZlcmJhbA== 36870\nIFBJRA== 36871\nY3J5cHRv 36872\nX0NBTExCQUNL 36873\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 36874\nIHBvdGVudA== 36875\nIHNob3J0cw== 36876\nLlVyaQ== 36877\nLnVuaWZvcm0= 36878\nO2JvcmRlcg== 36879\nIFdlcg== 36880\nIGhlcmVpbg== 36881\nbGxh 36882\nIElocg== 36883\nUGl4bWFw 36884\nbGl0ZXJhbA== 36885\nISkKCg== 36886\nZ2VuZXJpYw== 36887\ncnVzdA== 36888\nX3NjcmlwdHM= 36889\nb3N0bw== 36890\naXR1cw== 36891\nIENvYWxpdGlvbg== 36892\nIHJlbW90 36893\nZGVwbG95 36894\nIEVhZ2xl 36895\n44CB44CM 36896\nIGltcG9ydGFudGU= 36897\nCW9iamVjdA== 36898\nIHNlYXNvbmFs 36899\nbmVq 36900\nYWlkdQ== 36901\nQmluZFZpZXc= 36902\nIFNpZXJyYQ== 36903\nLWJn 36904\nIG1ha2VTdHlsZXM= 36905\nW29mZnNldA== 36906\nR2FtZXM= 36907\nIGhvcm1vbmU= 36908\nQVJJTw== 36909\naGVhZHM= 36910\nKHNlbGVjdA== 36911\nIFN0YXJ0ZWQ= 36912\nQHBhcmFt 36913\nX2RlY2w= 36914\nX2Jsb2c= 36915\nIGHDsW8= 36916\nXEFwaQ== 36917\nIE1pbHdhdWtlZQ== 36918\nUHJvdmlk 36919\nQW5pbWF0ZWQ= 36920\nIGNvb2xlcg== 36921\nIFNlZWQ= 36922\nLkVkaXQ= 36923\nz4Q= 36924\nIFRha2luZw== 36925\nIGJvcmRlckNvbG9y 36926\nLWZvdW5kZXI= 36927\nLkxvZ2dlckZhY3Rvcnk= 36928\nICIiCgo= 36929\nQUxU 36930\nIExhdGU= 36931\nRURJQVRF 36932\nICk7CgoK 36933\nYWZh 36934\nIGNhbmNlbGxhdGlvbg== 36935\nQXRvbQ== 36936\nIEJpcm1pbmdoYW0= 36937\nZW1wcmVzYQ== 36938\nSEVNQQ== 36939\nYXNjYWw= 36940\nIHVwc2lkZQ== 36941\nLlZlcnNpb24= 36942\nIEZvbGRlcg== 36943\nIEVpZ2h0 36944\nIFZpbnRhZ2U= 36945\nIEFwcERlbGVnYXRl 36946\nIFByZXZlbnRpb24= 36947\nLnNlcGFyYXRvcg== 36948\nU1RN 36949\nKHJvb20= 36950\nZ2VuZXJhdG9y 36951\nIGNhdHRsZQ== 36952\nCVo= 36953\nIFBhcnRpY2xl 36954\nJ307Cg== 36955\nIG5laWdoYm91cnM= 36956\nIFN0YXRlbGVzcw== 36957\nIGFsdGl0dWRl 36958\nIHNhaW50 36959\n0L7QsdCw0LI= 36960\nIGNvbnZpbmM= 36961\nIENvbnRlbnRz 36962\nIGpldW5l 36963\nKHRz 36964\nU2VyaWFsaXphdGlvbg== 36965\nKGNvbGxlY3Rpb24= 36966\nIEpheno= 36967\nIERvZA== 36968\nIFJvY2g= 36969\nYWNpbw== 36970\nY29tbWVuZGVk 36971\nREVGSU5F 36972\nLm9ubG9hZA== 36973\nIHNwZWNpYWx0eQ== 36974\nUExBQ0U= 36975\nX01PVkU= 36976\nIGFjY291bnRhYmxl 36977\nUmV1dGVycw== 36978\nIGZpY2tlbg== 36979\nIGRlcHI= 36980\nV293 36981\nVm9pZA== 36982\nLnNwYWNl 36983\n4LiX 36984\nIHRx 36985\nIFBldHM= 36986\nPCQ= 36987\nKEN1cnJlbnQ= 36988\nYmVycmllcw== 36989\ncGxhbmF0aW9u 36990\nIGxpc3RPZg== 36991\nIFRodQ== 36992\nIFBSSU5U 36993\nIG1pc21v 36994\nIGRvaQ== 36995\nY2hr 36996\nIFVuaWNvZGU= 36997\nKHJvbGU= 36998\nIHZpcmdpbg== 36999\nPFBvaW50 37000\nX1JFU1BPTlNF 37001\nLWhvdXNl 37002\nIFZlbmV6dWVsYQ== 37003\nRU1BSUw= 37004\nIHDDumI= 37005\nX2V4aXN0 37006\nQmFsbA== 37007\nLkNM 37008\ncmVmZXJlbmNlcw== 37009\nIEJlYXV0aWZ1bFNvdXA= 37010\nCUV4cGVjdA== 37011\nVEhJUw== 37012\n0YPQtA== 37013\nYmFuZQ== 37014\nIHRlbXBvcmFs 37015\nRVJJQw== 37016\nZXRhcw== 37017\nIHJlZnJlc2hpbmc= 37018\nIHNlY3VsYXI= 37019\nQHN5bnRoZXNpemU= 37020\nYWNjdXI= 37021\nIG5lbGxh 37022\nIFNPTA== 37023\nLnBpcGU= 37024\nQ2hhbm5lbHM= 37025\n6Ieq 37026\nIGluc2VydGlvbg== 37027\n4buL 37028\nZWxpYQ== 37029\nIGFkanVzdGFibGU= 37030\nQ2FuYWRh 37031\nIElURU0= 37032\nIGN1cnZlcw== 37033\nIENoZWFw 37034\nbGV0aW5n 37035\nIG9wdGltaXN0aWM= 37036\nYWxsbw== 37037\nIHBvbGl0aWNpYW4= 37038\nX2Rvd25sb2Fk 37039\nPWVkZ2U= 37040\nT1JUSA== 37041\nIG1vZGVsbw== 37042\nYXJ0bw== 37043\nLnJvdGF0ZQ== 37044\nIHNlbGVuaXVt 37045\n5oiR 37046\nX2FsaWFz 37047\nIHJlbm93bmVk 37048\nLicu 37049\nIGN6eQ== 37050\nIGFsbGVz 37051\nLkNvbXBpbGVy 37052\nIEJhc3M= 37053\nQ29ubmVjdG9y 37054\nLlJvbGU= 37055\nTElOSw== 37056\nIGNyaXRlcmlvbg== 37057\nbGVtZXRyeQ== 37058\nU3VjY2Vzc2Z1bGx5 37059\nL3BuZw== 37060\nIGV5ZWI= 37061\nYXNwYmVycnk= 37062\nKGdy 37063\nIGRhbmdlcnM= 37064\nIGNvcnJlY3RlZA== 37065\nIGdsb3c= 37066\nIGVsYWJvcmF0ZQ== 37067\nIEJlYXJz 37068\nYXdhaQ== 37069\nPSInKw== 37070\nIHByb21vdGlvbnM= 37071\nIG1hdGhlbWF0aWNhbA== 37072\nICJg 37073\nX0dlbmVyaWNDbGFzcw== 37074\nIENoZWY= 37075\nLlNvcnQ= 37076\ndGFibGVOYW1l 37077\nUklD 37078\nIHZvbHVudGFyeQ== 37079\nIEJsYWRl 37080\nLWVsZWN0 37081\nIENvbWJhdA== 37082\nIEFiaWxpdHk= 37083\nIGFiZG9t 37084\nIGR1Y2s= 37085\nVG1w 37086\n5YWo 37087\nIGVyYXNl 37088\nLlBo 37089\nIERlZmF1bHRz 37090\ncGFydG1lbnQ= 37091\nX1VTQg== 37092\nw6p0ZQ== 37093\nOyc= 37094\nIHBhZHM= 37095\nIE9iYW1hY2FyZQ== 37096\nLlRvdGFs 37097\nIGRpdmVydA== 37098\nIGNyaWNrZXQ= 37099\nIHJlY3JlYXRpb25hbA== 37100\nKHJlZA== 37101\nIENsZQ== 37102\nUlU= 37103\nIG1pc3Rha2Vu 37104\nIE1vbnRhbmE= 37105\nIHN0cml2ZQ== 37106\nX3NsaWRlcg== 37107\nIFBsYXN0aWM= 37108\nIGRlY29yYXRlZA== 37109\nIFZQ 37110\nbGljbw== 37111\nCWZhbHNl 37112\nIHByZWZz 37113\nKFwi 37114\nX2ZhbHNl 37115\naWVuZG8= 37116\nIEAk 37117\nQnVja2V0 37118\nYWN0aWNhbA== 37119\nIFpoYW5n 37120\nLmNvbHM= 37121\nLkJpbmRpbmc= 37122\nIHdheA== 37123\nX1NUT1JBR0U= 37124\nIGxhd24= 37125\nIHJm 37126\nLlNjZW5l 37127\nIENhbGN1bGF0b3I= 37128\nLmRlc2lnbg== 37129\nIHJlc2ls 37130\n0LvQtdC8 37131\nRW1wbG95 37132\nIFByaWNlcw== 37133\nIFBXTQ== 37134\nYWdp 37135\nLmV2YWx1YXRl 37136\nCXBhcmFt 37137\nIGJyYXNz 37138\nYmJlbg== 37139\nIGluZmxhbW1hdGlvbg== 37140\ndWxsaXZhbg== 37141\nIGFubm90 37142\nIHBI 37143\naWFtZXRlcg== 37144\nIEJUQw== 37145\nKGJveA== 37146\nU3Rvcnlib2FyZA== 37147\nIGNsYXk= 37148\nLmFzc2VydFJhaXNlcw== 37149\nfHN0cmluZw== 37150\nLkFwcGx5 37151\nIG1hdGNoZXI= 37152\ndW5kZWQ= 37153\nIHNhdGlzZnlpbmc= 37154\nIOyglQ== 37155\nUmVuZGVyaW5n 37156\nX2FwcHJv 37157\naW5kcm9tZQ== 37158\nQU5FTA== 37159\nX2ZpeA== 37160\nYnJ1c2g= 37161\nLk1hdGNo 37162\nIHNtaWxpbmc= 37163\nb25hdXQ= 37164\nU3VuZGF5 37165\nIGRlbGV0aW9u 37166\nIGVuY291cmFnZXM= 37167\nUHVsbA== 37168\nIHJldmVuZ2U= 37169\nIHF1YXJyeQ== 37170\ndHJhZGU= 37171\nIGNhYmxlcw== 37172\nKGRlbHRh 37173\naXRlc3BhY2U= 37174\nIGZo 37175\nLmJ1bmlmdQ== 37176\nIHZpZWw= 37177\nX0lOQ0xVREVE 37178\nIFRhaWw= 37179\nYWRhcg== 37180\nb2Zz 37181\nIG1ldGFscw== 37182\nZ29t 37183\nX21ldGhvZHM= 37184\nIG5q 37185\nLlN0ZA== 37186\nKHdpbg== 37187\nJCgn 37188\nIHR1cnRsZQ== 37189\ndXJvbg== 37190\nIGVucm9sbGVk 37191\nIEh6 37192\nIEJveERlY29yYXRpb24= 37193\nIHBvbnQ= 37194\ncmVsYXRpb25zaGlw 37195\nQmk= 37196\ns7s= 37197\nIG1hc2N1bA== 37198\nIHNoYWRlcw== 37199\nIHZy 37200\nIExvZ2lj 37201\nIGFpbg== 37202\nIERJU1Q= 37203\nIGNvbGxhcg== 37204\nInByb2ZpbGU= 37205\nR2VuZXJhdGVkVmFsdWU= 37206\nIFBvc3NpYmxl 37207\nIGVpbmVz 37208\ng4E= 37209\nLnRpbWVvdXQ= 37210\nIEVj 37211\nIGplcnNleQ== 37212\nLkRvdWJsZQ== 37213\nIHF1YWxpZnlpbmc= 37214\ndm9y 37215\nQ1JFRU4= 37216\nX0FwcA== 37217\nX3JlY3Y= 37218\nIGFsaWVucw== 37219\nSXRz 37220\nRXNj 37221\naWF0b3I= 37222\nIEVjbGlwc2U= 37223\nIGdo 37224\nVmljdA== 37225\nCWh0bWw= 37226\ndG9v 37227\nLmNvbnN0 37228\nIGFudGVyaW9y 37229\nIFd1 37230\nKGtleXM= 37231\nIHVsdHI= 37232\nX3BvbHk= 37233\nIFRhcA== 37234\nIEJ1ZA== 37235\nQVdT 37236\nIGNyYXNoZXM= 37237\nX3RvdA== 37238\nQ29udGlu 37239\nLWhhbmRlZA== 37240\nYWx0aG91Z2g= 37241\n4Lia 37242\naWZpY2VudA== 37243\nIGRldmU= 37244\ndXRvcnk= 37245\nIFdvcnRo 37246\nX01T 37247\nIGZsb29yaW5n 37248\nIHNlbGxlcnM= 37249\nIFRoYW5rc2dpdmluZw== 37250\nIHBuZw== 37251\nIHZhbG9yZXM= 37252\nIHNsZWV2ZQ== 37253\nIGZpbGxl 37254\n0JA= 37255\nIGFwcG9pbnRtZW50cw== 37256\nIHZpbQ== 37257\nVXNlckluZm8= 37258\nQk9PU1Q= 37259\nIHBvc2Vk 37260\naW5pdGlhbGl6ZWQ= 37261\nLnByb2R1Y3Rz 37262\nIExlYWRlcnNoaXA= 37263\nbWFudWVs 37264\nJyU= 37265\nZW1hcmtz 37266\nUGVyY2VudGFnZQ== 37267\nKGRpc3Q= 37268\nLmF2YXRhcg== 37269\nKGhPYmplY3Q= 37270\n5LuK 37271\nX2lmZg== 37272\naWNvbmU= 37273\nOyk= 37274\nX25pbA== 37275\nIGFib2w= 37276\n0LXRgdGC 37277\nIHZlbnVlcw== 37278\nLkNvbnZlcnQ= 37279\nIScpCg== 37280\nLkJpdG1hcA== 37281\nc2tpbg== 37282\nX0NPTFVNTg== 37283\nUmV2 37284\nR1JFU1M= 37285\nZ293 37286\nIHdpc2hlZA== 37287\ndHJhY3Rz 37288\nLmFzc2VydEZhbHNl 37289\nIHNjcmVlbnNob3Q= 37290\nIGZvaXM= 37291\nQ29tYg== 37292\nTGluZVdpZHRo 37293\nIEdyYWI= 37294\nIGludGVuc2l2ZQ== 37295\nCXNo 37296\nKyk= 37297\nLmZpcnN0TmFtZQ== 37298\nX1BST0NFU1M= 37299\nIHRpbHQ= 37300\naXRvcmVk 37301\nLkxPRw== 37302\nIGJhaw== 37303\nIGludGVudGlvbmFsbHk= 37304\nLnBsYXllcnM= 37305\nKGNhbnZhcw== 37306\nKSkpDQo= 37307\nLlByb3ZpZGVy 37308\nX1BVQkxJQw== 37309\nVGFsaw== 37310\nIExpdg== 37311\nY2hlZHVsZXJz 37312\nIGxj 37313\nYWRpYw== 37314\nZmVhdHVyZWQ= 37315\nLnJlc291cmNlcw== 37316\nRnVsbE5hbWU= 37317\nIG1lYW53aGlsZQ== 37318\nQnVmZmVycw== 37319\nIHJlc29sdmVy 37320\nIFNBUA== 37321\nX1RF 37322\nR05V 37323\nIEZvcm1zTW9kdWxl 37324\nX3do 37325\nIFN3ZQ== 37326\nLndpZGdldHM= 37327\nIGNhYmluZXRz 37328\nIHN1c2NlcHQ= 37329\nIEJvdHQ= 37330\nYWN0aXZleA== 37331\nYXZhcg== 37332\nYW50aWNz 37333\nICI9Ig== 37334\nX2t3YXJncw== 37335\nIGdhbWVPYmplY3Q= 37336\nIEFuZ2xl 37337\nLkl0ZXI= 37338\nbWFyc2g= 37339\nIEJpcnRoZGF5 37340\nIENNUw== 37341\ncmVxdWVzdHM= 37342\nIFBlYXJs 37343\nX0VPTA== 37344\nIGxpbnV4 37345\nKG9yZw== 37346\nX01vdXNl 37347\nLmNvbnN0cnVjdG9y 37348\nIHpk 37349\nIGtpY2tz 37350\nYXJ0aXNhbg== 37351\nIGVheA== 37352\nS24= 37353\ncG9uZ2U= 37354\nIEZpbmxhbmQ= 37355\nIG1ldHJlcw== 37356\nIEFzc2Vzc21lbnQ= 37357\ncGFydG5lcg== 37358\nL3ByZQ== 37359\nIScsCg== 37360\nW0ludA== 37361\nIG9zbG8= 37362\nZGF0ZXBpY2tlcg== 37363\nL1N0cmluZw== 37364\nb3BsYXk= 37365\nIEhlYnJldw== 37366\nLGRvdWJsZQ== 37367\nIHRyYWJhbA== 37368\nKyJc 37369\nCUVJRg== 37370\nL3RleHQ= 37371\nX0ZJUlNU 37372\nIFBldGU= 37373\nIGVnbw== 37374\nIGV4dHJhcw== 37375\nUERP 37376\nIHJlZ3VsYXRl 37377\nIFFXaWRnZXQ= 37378\nc3Rz 37379\nIFNob3dz 37380\nIE5IUw== 37381\nLmNvdXJzZQ== 37382\ncHRocmVhZA== 37383\nIEZ1ZWw= 37384\nLnRpbWVz 37385\nIMKw 37386\nIHN0cmlkZXM= 37387\nKCQoJyM= 37388\nKHdvcmRz 37389\nIHJoeXRobQ== 37390\nIHNwb250 37391\nIHNlbnNhdGlvbg== 37392\nIHNwaWtl 37393\nQ2xvc2luZw== 37394\n6aG16Z2i 37395\nTnVtZXJpYw== 37396\nIGJyZWF0aGU= 37397\nIGZpbmFsZQ== 37398\nX0ZBQ1Q= 37399\naW5pb24= 37400\nIGNoaWxs 37401\nIGZvcm1hbGx5 37402\nQU5HRUQ= 37403\nICc6Jw== 37404\nINC/0YDQuA== 37405\nYXE= 37406\nIEZhYnJpYw== 37407\nKGxhdA== 37408\nIFByaW5jaXBhbA== 37409\nIGVycm8= 37410\nb2NhbGU= 37411\nTm9t 37412\nIGZvc3Q= 37413\nX0NVU1RPTQ== 37414\nLmludGVsbGlq 37415\nZXJ0b29scw== 37416\nIGNsYXNzZQ== 37417\nYWRpZW50cw== 37418\nIGZ1bmRyYWlzaW5n 37419\nRU5F 37420\nX09QVElPTlM= 37421\nX29i 37422\nLy99Cg== 37423\nIHByb3RlY3Rpb25z 37424\nLnNlZWQ= 37425\nTlY= 37426\ndGVybWluYWw= 37427\nOzs7 37428\nUHJlZGljYXRl 37429\nIOy2 37430\nIGJvbWJpbmc= 37431\nR0Y= 37432\nIGNoZXc= 37433\nKSkpLg== 37434\ncXVhbGlmaWVk 37435\nXT17 37436\nbGlzdGVu 37437\nQ0VOVA== 37438\nZGlnZXN0 37439\nRWFzdA== 37440\nIGRpdmVy 37441\nIGVuZHBvaW50cw== 37442\nIGVl 37443\nIGNvbGxlYWd1ZQ== 37444\nIGRpc3NlcnRhdGlvbg== 37445\nX2NvbW1pdA== 37446\nX0RBVA== 37447\nLnJj 37448\nIGJyZWFzdHM= 37449\nIFJ1Zw== 37450\nIFBpbA== 37451\nQ29udHJhY3Rz 37452\nIEJyeWFu 37453\nV2ViVmlldw== 37454\nIGNvbmNlbnRyYXRl 37455\nIElubmVy 37456\nICd8 37457\nc3Rkb3V0 37458\nX1N1Yg== 37459\nPi0tPgo= 37460\nVm9s 37461\nIFNTRA== 37462\nKSkpLA== 37463\nLk9wdGlvbmFs 37464\nIG51cnNlcw== 37465\nIG9yYg== 37466\nX3Bl 37467\nKTsNCg0KDQo= 37468\ncGxhY2Vk 37469\nZXNzZXI= 37470\nIHRoZXJhcGV1dGlj 37471\nIHdoaXRlc3BhY2U= 37472\nIGFzdG9u 37473\nU3VjY2Vzc2Z1bA== 37474\nIHByYWlzZWQ= 37475\nIFdlcw== 37476\nIGVpZ2h0aA== 37477\naXJhbA== 37478\nIHZyb3V3 37479\nIGZhY3Rpb24= 37480\nX2JpYXM= 37481\nIHdpdGNo 37482\nIG5wYw== 37483\nKHNi 37484\nIFJvZHJpZw== 37485\nX2JpZw== 37486\nRGVwZW5kZW5jeQ== 37487\nIEFicmFoYW0= 37488\nYXJkaQ== 37489\nQ0FS 37490\nbm9z 37491\nIGFidW5kYW5jZQ== 37492\nIG51dHJpZW50cw== 37493\naW5zdGVpbg== 37494\nLlZlcnQ= 37495\nIElTUw== 37496\nPFU= 37497\nIHN1bXM= 37498\nX2hpc3Q= 37499\nIGZhcm1lcg== 37500\nIEFicg== 37501\nU2hvdA== 37502\nIEJhZFJlcXVlc3Q= 37503\nIGhhc3M= 37504\nIFJhaWxz 37505\nIGFmZmlsaWF0ZWQ= 37506\n5p2l 37507\nIGVyZg== 37508\nSU5G 37509\nIFZpZXdIb2xkZXI= 37510\nbWluaQ== 37511\nIFJvdGg= 37512\nIGZhaXRoZnVs 37513\nIFBoaWxsaXBz 37514\nQU5ET00= 37515\nXS5b 37516\nX1BBWQ== 37517\nIEFyY3RpYw== 37518\nZmFrZXI= 37519\nRGlnaXQ= 37520\nTWFsZQ== 37521\nc3RkZXJy 37522\nc2V5cw== 37523\nIMWh 37524\nX3JlbW90ZQ== 37525\nbGlxdWU= 37526\nIGluZGVm 37527\nIEluZHVzdHJpZXM= 37528\naXRyYQ== 37529\nX3BhaXJz 37530\nPGlvc3RyZWFt 37531\nIHNhbGFyaWVz 37532\naWtlbg== 37533\nLkZyYW1l 37534\nUExJQw== 37535\nX1NQRUM= 37536\nIE1lZGl0ZXJy 37537\nIHN5c3RlbWF0aWM= 37538\nIGludGVycm9n 37539\nSWNvbkJ1dHRvbg== 37540\nc2Vh 37541\naW50cm8= 37542\nIElzc3Vlcw== 37543\nZW5jcnlwdGVk 37544\nIGludGVybmF0aW9uYWxseQ== 37545\nIHNucHJpbnRm 37546\nIHBhc3Rh 37547\nIEJyYWRsZXk= 37548\nX1N0YXR1cw== 37549\nQUxL 37550\nX1BBRA== 37551\nLmxhdW5jaA== 37552\nPHNlbGVjdA== 37553\nIGhhcmRlc3Q= 37554\nIHBoeQ== 37555\nICgoKg== 37556\nLXNsaWRl 37557\nIE5vYm9keQ== 37558\nU3U= 37559\nIGFzw60= 37560\nY2xvc2VzdA== 37561\nX2luaXRpYWxpemVy 37562\nIHN1cHBvcnRlcg== 37563\nLWdlbg== 37564\nIHRhbGVz 37565\nIGNvcnA= 37566\nX2Z1 37567\nc2F0 37568\nbmVpZ2hib3I= 37569\nLk1pZ3JhdGlvbnM= 37570\nIGFsZ3Vu 37571\nIHNpbm9u 37572\nLlNwZWM= 37573\nPywK 37574\nLkdM 37575\nbWFsZQ== 37576\nIG1vbml0b3Jz 37577\neWxhbg== 37578\nLUxpY2Vuc2U= 37579\nLm1hdGNoZXM= 37580\nIEFCUw== 37581\nIE1hc3Q= 37582\nIFdhbGxldA== 37583\nKCQoIiM= 37584\nRGlydHk= 37585\nIGNvcGU= 37586\nIGludGVycG9sYXRpb24= 37587\nb3VzZWQ= 37588\nIEpldHM= 37589\nLkZMQUc= 37590\nLkNhbmNlbA== 37591\nLkV2ZW50cw== 37592\nbmV2ZXI= 37593\nIE1Ieg== 37594\nPkQ= 37595\nIHNlcnZsZXQ= 37596\nYmFzdGlhbg== 37597\nID4m 37598\nU0lE 37599\nX2Nsaw== 37600\nIGRpdmlzaW9ucw== 37601\nfScsCg== 37602\nIGRpbGRv 37603\nIHBhcmFkZQ== 37604\nbWFqb3I= 37605\nIGFib2FyZA== 37606\nOysr 37607\nIGZ1c2lvbg== 37608\nIn0seyI= 37609\nIERpYWxvZ1Jlc3VsdA== 37610\nCWFycg== 37611\nLWVt 37612\nX25y 37613\nKGhhbmRsZXI= 37614\nLk5FVA== 37615\nLlh0cmFSZXBvcnRz 37616\nIFNoYWg= 37617\nIEJyaWVm 37618\nLSw= 37619\nIHByZWNpbw== 37620\nCQkJICAgICAg 37621\nIHRhbnQ= 37622\nIEdyYW5kZQ== 37623\nL3htbA== 37624\nX0lDT04= 37625\nIFJldHJv 37626\ndW5xdWU= 37627\nIG5hZw== 37628\ndG9GaXhlZA== 37629\nWEw= 37630\nIGRlY2xhcmluZw== 37631\nIENvbmNyZXRl 37632\nIEFtYXppbmc= 37633\nCXByaW50aw== 37634\nIGRlYmF0ZXM= 37635\nREFURUQ= 37636\nIGFlc3RoZXRpYw== 37637\nZW1ldGVyeQ== 37638\nUm91dGluZ01vZHVsZQ== 37639\nIE5hc2h2aWxsZQ== 37640\nV0FZUw== 37641\nIHdvbGY= 37642\nIG9ic2VydmVycw== 37643\nT1RB 37644\nYW5zb24= 37645\nIGVh 37646\nIGdyZWVuaG91c2U= 37647\nk43kvZw= 37648\nIHN0YWly 37649\nIGltbWlncmFudA== 37650\nX2FwcGx5 37651\ncGVhcmU= 37652\nIEJsb29tYmVyZw== 37653\nX1BMQVlFUg== 37654\nUmVzcA== 37655\n5q2j 37656\nQ2hvb3Nlcg== 37657\nIElDb2xsZWN0aW9u 37658\nUGV0ZXI= 37659\nRXJybw== 37660\nLmRldGVjdENoYW5nZXM= 37661\nTWFwcw== 37662\nIHNxdWVlemU= 37663\nIEhvbWVz 37664\nd2VnaWFu 37665\nIGZvcm1hdHRpbmc= 37666\nIG5lZ290aWF0ZQ== 37667\ndWxk 37668\nIE5lcA== 37669\nIFFC 37670\nIGVjb25vbWllcw== 37671\nICovLA== 37672\nIHJlZHVuZA== 37673\nIEFiZXI= 37674\nLklzTnVsbE9yV2hpdGVTcGFjZQ== 37675\neWNsZWQ= 37676\nICAgICAgICAgICAgICAgICAgCg== 37677\nX1No 37678\nIHNrZXB0 37679\nIHJlY3JlYXRlZA== 37680\nIGdldFR5cGU= 37681\nIG1hcmdpbnM= 37682\nIGNvbG9uaWFs 37683\nY2hhcnRz 37684\nLy9A 37685\nIHByb2Nlc3NvcnM= 37686\n6K+0 37687\nYmF0aXM= 37688\n5oSP 37689\nYXRvcmlv 37690\nbWVudGlvbmVk 37691\nUGF0aWVudA== 37692\nIHByZXk= 37693\nQ2hlY2tib3g= 37694\nX3hwYXRo 37695\nLnNraXA= 37696\nIE1vcm1vbg== 37697\nIE1lbW9yeVN0cmVhbQ== 37698\nQ1JFTUVOVA== 37699\nIGt1 37700\nbWVsZA== 37701\nXERhdGE= 37702\nIEtlcm5lbA== 37703\naWx0cg== 37704\n6YCB 37705\nKHByb2ZpbGU= 37706\nQ2FyYm9u 37707\nUk9MRQ== 37708\nKHBs 37709\nXSoo 37710\nLm1lbW9yeQ== 37711\nIG1lZGFs 37712\nIGFkdmlzb3I= 37713\naXTDpHQ= 37714\nIGhkcg== 37715\naWVydW5n 37716\nIFByb3ZpZGVz 37717\nKGFscGhh 37718\nIHRlZW5hZ2Vycw== 37719\nLXBhcnNlcg== 37720\nLkxhdExuZw== 37721\nXSgpCg== 37722\nIGZlbG9ueQ== 37723\nCQkJCgkJCQo= 37724\nQk9PSw== 37725\nIHNsYXNo 37726\nIGNsZWFyZml4 37727\nIFByb3BoZXQ= 37728\n5a65 37729\ncmlnaHRuZXNz 37730\nLWZp 37731\nLmtpbmQ= 37732\nZXJ0b24= 37733\nSmlt 37734\nIG1hbmlwdWxhdGU= 37735\nIHdvcmtzaGVldA== 37736\nb2xpbg== 37737\nc3RhcnM= 37738\nIGFydGlmYWN0 37739\nX0VNUFRZ 37740\nCW1haW4= 37741\nLS0tLS0tLS0tLS0tLTwv 37742\nL3N0YXRpYw== 37743\nSVRJRVM= 37744\nIENvdW5zZWw= 37745\nIFdD 37746\nIEJMQUNL 37747\nLXN5c3RlbQ== 37748\nIFRyaXBsZQ== 37749\nLmJ0 37750\nc29mdHdhcmU= 37751\nXScpLg== 37752\nSW5qZWN0aW9u 37753\nX25vdGlmeQ== 37754\nIGZpZnRlZW4= 37755\nIGFtYmFzc2Fkb3I= 37756\nYnJlYWtpbmc= 37757\nVVJJQ29tcG9uZW50 37758\nIFByb3Rlc3Q= 37759\nLlJlc2V0 37760\nIE1Qcw== 37761\ndnJv 37762\nLmdldFN0YXR1cw== 37763\nX21vcmU= 37764\nY3Vw 37765\nIEtlbnlh 37766\n5bey 37767\nIGFtbXVuaXRpb24= 37768\n15XX 37769\nIERhc2g= 37770\nIHVuZGVyZ28= 37771\nIGJ1ZGR5 37772\n0YLQvtGA 37773\nZXRpY2FsbHk= 37774\nX091dA== 37775\nIEJyb2Fkd2F5 37776\nqow= 37777\nIEZpdHo= 37778\nIHN0cmlwcGVk 37779\nLWNhY2hl 37780\nIHVtYg== 37781\nIGFub20= 37782\nIHNpYmxpbmdz 37783\nb2N1bWVudGVk 37784\nSW50ZXJydXB0ZWRFeGNlcHRpb24= 37785\nIHBlbmc= 37786\nbHN0 37787\nX0FMSUdO 37788\nLWNhcA== 37789\nUkQ= 37790\nY2VsbHM= 37791\nIE1vdG9ycw== 37792\nIHRyYW5zbGF0aW9ucw== 37793\ndXN0ZXJpbmc= 37794\n6Zo= 37795\nIGxlYWtz 37796\nZmlsZVBhdGg= 37797\nIG91dGdvaW5n 37798\nX2VuZHBvaW50 37799\nX0dM 37800\nLmxpZmVyYXk= 37801\ncmljaHQ= 37802\nIE9wZW5HTA== 37803\nLmpwYQ== 37804\nIGFmZmVjdGlvbg== 37805\nZmx1eA== 37806\nIGdseQ== 37807\nIGJ1ZA== 37808\nPic7 37809\nIGV4cHJlc3Npbmc= 37810\nIElR 37811\nIEZhY3Q= 37812\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 37813\nX21hc3M= 37814\nKSk6 37815\nIGNvbmRvbQ== 37816\nIGNyZWF0ZVN0YXRl 37817\nb21ldG93bg== 37818\nIGlycg== 37819\nID4o 37820\nPkI= 37821\naXRlcmF0aW9u 37822\n44Oq 37823\nIHNoaXJ0cw== 37824\nb3VudHk= 37825\nLT4k 37826\nX1NJR04= 37827\nIERhbGU= 37828\nIGpq 37829\nRWFzeQ== 37830\nRnJl 37831\nIE55 37832\nIGNobG9y 37833\nbWF0Y2hlZA== 37834\nIEdlcm0= 37835\nLVVB 37836\nIE5hdGhhbg== 37837\nZWR1Y2F0aW9u 37838\nLXlhcmQ= 37839\nLWNoZQ== 37840\naG91c2Vz 37841\ncml0aW9uYWw= 37842\nIHByb3hpbWl0eQ== 37843\nIGRpZXNlbQ== 37844\n4bqtcA== 37845\nIGRyb3VnaHQ= 37846\nLmF1ZGlv 37847\nIExlbw== 37848\nIGZhdm9yYWJsZQ== 37849\naW5jaA== 37850\nIERhdw== 37851\ncmlibHk= 37852\nX3N0dWRlbnQ= 37853\naWRhYmxl 37854\nT1ZF 37855\nIGxhY2tz 37856\nb3VuY2luZw== 37857\nLmJ1c2luZXNz 37858\nIHJlb3Blbg== 37859\nbWF5YmU= 37860\nX0dMT0JBTA== 37861\nIGRyZXNzZXM= 37862\nIEVkd2FyZHM= 37863\nZW5zaWJsZQ== 37864\nIEhhcmR3YXJl 37865\nIEV4Y2VsbGVudA== 37866\nIFRpbWVVbml0 37867\nQ1RJT05T 37868\nIHNjaGVkdWxlcw== 37869\nIHNlZ3Vl 37870\nT3BlbnM= 37871\nYW1tZW4= 37872\nLUlkZW50aWZpZXI= 37873\nIHN0YXJpbmc= 37874\nIGhhcHBpbHk= 37875\nIEhvYg== 37876\nJ18= 37877\nICIpOw== 37878\nYW1lbnRvcw== 37879\nZXRjaGVk 37880\nIC8+fQo= 37881\nLlVzZXJz 37882\nIGludGVycnVwdGVk 37883\nQ29udGFjdHM= 37884\nIHJlZ2lzdHJv 37885\naW5idXJnaA== 37886\nQ0hB 37887\nX2ltcA== 37888\ncGhpcw== 37889\nc2F5 37890\nIHJldGFpbGVy 37891\nLk5PREU= 37892\nL21hcHM= 37893\nX0xBU1Q= 37894\nIENoYXJnZQ== 37895\nX2d1YXJk 37896\nQ29sbGlkZXI= 37897\nIFN0YXRlbGVzc1dpZGdldA== 37898\nIjpbIg== 37899\nKCIuLi8uLi8= 37900\naW94aWRl 37901\nIFN1bmQ= 37902\nICcnOw== 37903\ndW5zZXQ= 37904\nYWRkV2lkZ2V0 37905\n0LvRjg== 37906\nZWxsZXM= 37907\nYWxrZXI= 37908\nQXJj 37909\nIGRlZHVjdA== 37910\nR1VJTGF5b3V0 37911\nIFZpbGxh 37912\nIGZvcmJpZGRlbg== 37913\nX3doZXJl 37914\nIFwv 37915\nIFRpYg== 37916\nX0FY 37917\nXQ0KDQo= 37918\nIEJpcg== 37919\nIGJlbmQ= 37920\nIE1BS0U= 37921\nIE1FVA== 37922\nIGZ1dHVyZXM= 37923\nIHdlaWdodGVk 37924\nIiIiDQo= 37925\nIGF1dGhvcml6ZQ== 37926\nKHByb2dyYW0= 37927\nfSx7Ig== 37928\nIGNvZWZmaWNpZW50cw== 37929\nw6pz 37930\nUGVyUGFnZQ== 37931\nIEJhdGhyb29t 37932\nIFB1Ymxpc2hpbmc= 37933\nR1BM 37934\nIHN1Ym1pc3Npb25z 37935\nIE5VTUJFUg== 37936\nasSF 37937\nIGFkZGl0aW9uYWxseQ== 37938\nZW1wcmU= 37939\nIFNoZWw= 37940\nb3R5cA== 37941\nU29sdXRpb24= 37942\nIHRodW5kZXI= 37943\nX2Vj 37944\nIAogICAgCg== 37945\nIEZlbGxvdw== 37946\nIGtheQ== 37947\nIG5ld1N0YXRl 37948\nT05UQUw= 37949\nSW1wbGVtZW50YXRpb24= 37950\nLkxvb2s= 37951\nIGVudHM= 37952\nIGxvcnM= 37953\nIEJJRw== 37954\nZmFi 37955\nIGF2ZXJhZ2Vk 37956\nIEZlZWRiYWNr 37957\nIFdlbGxz 37958\nIG1hcnRpYWw= 37959\nIGluZHVs 37960\nIENvbW11bmlzdA== 37961\nIEZvcmV4 37962\nIEFncmljdWx0dXJl 37963\nIls= 37964\nIHF1YXI= 37965\nIEtvbnQ= 37966\nCXZpZXc= 37967\nLkJ5dGVz 37968\nZGVza3RvcA== 37969\nIE1ha2Vz 37970\nYWtlc3BlYXJl 37971\nLk51bGxhYmxl 37972\nIHNwb3RsaWdodA== 37973\nVkI= 37974\nb3d5 37975\nKHRvcmNo 37976\ndHJpZGdl 37977\nX2JvdW5kcw== 37978\nIGFwb2xvZ2l6ZQ== 37979\nLmFkZEl0ZW0= 37980\nYW50ZA== 37981\nKik7Cg== 37982\nLHU= 37983\nKGdlbg== 37984\n57uT 37985\ncmVhdG9y 37986\nIENvcmQ= 37987\nb3VwcGVy 37988\nLm1ldHJv 37989\nIGV3 37990\nIFdPUkQ= 37991\nLkFmdGVy 37992\nIGRldGFpbmVk 37993\nIEhhbW1lcg== 37994\nZXhpc3Rpbmc= 37995\nIG9zdA== 37996\nIG1vbnVtZW50 37997\nLWN1c3RvbQ== 37998\nVXNlcklE 37999\nIE5vbQ== 38000\nIHJlamVjdGlvbg== 38001\nKGRpbQ== 38002\nIHNpbmdsZXRvbg== 38003\nCWRpZQ== 38004\nYXJpYW5jZQ== 38005\ncmVwb3J0cw== 38006\nXSE9 38007\nZWxkYQ== 38008\nIHByZXZhbGVuY2U= 38009\nX3JlZ3M= 38010\nLiIu 38011\nIGZlbWluaXN0 38012\nQ29kZWM= 38013\nICoqCg== 38014\nKGxhYmVscw== 38015\nX01BUks= 38016\nRkFJTEVE 38017\nIGFkbWluaXN0ZXJlZA== 38018\nV04= 38019\nICAgICAgICAJCQ== 38020\nIG5vdW4= 38021\nd2ln 38022\nIGdvdHRh 38023\nIHJpZg== 38024\nLWlt 38025\nIFBhdWxv 38026\nIENvbW1hbmRUeXBl 38027\nXSkpCgo= 38028\nLXplcm8= 38029\nVHJhaW5pbmc= 38030\nIGxvcmQ= 38031\nX2FydA== 38032\ncmVkZGl0 38033\nQ2VydA== 38034\nIHBlc28= 38035\nUm90 38036\nIGVuZGFuZ2Vy 38037\nLmRy 38038\ndXNlckluZm8= 38039\ndW50cw== 38040\nbnY= 38041\nIFRyYWlsZXI= 38042\nLWZpcnN0 38043\nKG1ha2U= 38044\nIGJlbmVmaWNp 38045\nLWJsYWNr 38046\nacOf 38047\nIHVuZG91YnRlZGx5 38048\nIG1leA== 38049\nIEFuY2llbnQ= 38050\nKGFz 38051\nIGRlc2NlbnQ= 38052\nUGljaw== 38053\nIHJlcGxpY2E= 38054\nJG9iag== 38055\nw6Rocg== 38056\nIGFycm93cw== 38057\nZnR5 38058\nIExpYnlh 38059\ndWdh 38060\nY2hhcmdlZA== 38061\nVHVy 38062\nIGhvbWlj 38063\naXNzZW4= 38064\nIEZha2U= 38065\nIGJlZXJz 38066\nIHNjYXR0ZXJlZA== 38067\nKFRpbWU= 38068\nVVRJTA== 38069\nIGJ1cmVhdWNy 38070\nL3BsYWlu 38071\nIHN0aWNraW5n 38072\nRkFJTA== 38073\nIENvdmlk 38074\nVGhpcmQ= 38075\nX3ByZXNlbnQ= 38076\nIFBpZXJyZQ== 38077\nIOuq 38078\nIFsuLi5dCgo= 38079\nUHJvYg== 38080\nIFRyYWZmaWM= 38081\naWNhbw== 38082\nZG9jdG9y 38083\nICksCgo= 38084\nVGFicw== 38085\nYWx1 38086\n77ya4oCc 38087\nIGluaGVyZW50 38088\nX05v 38089\ncml0aXM= 38090\nIFByb29m 38091\nLmJhc2VuYW1l 38092\n5Lya 38093\nIGNoaW0= 38094\nIFByb3RlY3RlZA== 38095\nY3JpdA== 38096\nIHByb25l 38097\nINC60L7QvQ== 38098\nIEhlcm9lcw== 38099\nIGFueGlvdXM= 38100\nIGFub3M= 38101\nIHdlZWtlbmRz 38102\nIHNleHQ= 38103\nIHJlZHVjZXI= 38104\nPVVURg== 38105\naGFsZg== 38106\nIFNhdw== 38107\nLm1t 38108\nIG51ZXZh 38109\nLmN1cnJlbnRUYXJnZXQ= 38110\nLmx1YQ== 38111\nX0VYVEVOU0lPTg== 38112\nCXJlZw== 38113\nIEN0cmw= 38114\nX2FsaWdu 38115\nYWNjZXB0YWJsZQ== 38116\nIHJ1c2hpbmc= 38117\nZnJhYw== 38118\nIGJvYXN0cw== 38119\nRml2ZQ== 38120\nwrE= 38121\nIFRlbXBlcmF0dXJl 38122\nPik6 38123\nIGNoYXJ0ZXI= 38124\nUkVBVEVE 38125\nIHN1YmplY3RlZA== 38126\nIG9wYw== 38127\naGVhbHRoeQ== 38128\n5L2/55So 38129\nIFNjaWVudGlmaWM= 38130\nIGZyYXU= 38131\ncmlhZ2Vz 38132\n4LiU 38133\nLmludmVudG9yeQ== 38134\nYXRpb25hbGU= 38135\nTWFk 38136\nbWludXRlcw== 38137\nPj4oKTsK 38138\nIEVudg== 38139\nIHJlY29yZGluZ3M= 38140\nIHN1c3BpY2lvbg== 38141\nc3FsaXRl 38142\nCXJlYWQ= 38143\n44Gm 38144\nIHdvcnJpZXM= 38145\nLnB1dFN0cmluZw== 38146\nIFNoYW5naGFp 38147\nKHVpZA== 38148\ncmVy 38149\nIHbDrWRl 38150\nIik6 38151\nIG1ldGhvZG9sb2d5 38152\nINC60L7RgtC+0YA= 38153\nY2Nj 38154\nYXZhZA== 38155\nIGluZHVjdGlvbg== 38156\nCVRocmVhZA== 38157\nLHN0cmluZw== 38158\n4bqhaQ== 38159\nbmVobWVu 38160\ndWl0aW9u 38161\nICpfXw== 38162\nLmVtZg== 38163\nIOyc 38164\nL3RoZW1lcw== 38165\nIE5pbmU= 38166\nLk9uZQ== 38167\nIEVtYmVk 38168\nIGZheg== 38169\ndWF0aW9ucw== 38170\nIHByaXZhdGVseQ== 38171\nIGxpbmc= 38172\nW0Y= 38173\ndXNoaQ== 38174\nIGxhdW5jaGVz 38175\nKEtFWQ== 38176\nR01U 38177\nIGFpbWluZw== 38178\ncGF0aWJsZQ== 38179\nIEJpZGVu 38180\naXc= 38181\nIERlZ3JlZQ== 38182\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 38183\nICQoJzw= 38184\nw6FyaW9z 38185\ndG9VcHBlckNhc2U= 38186\n7KCc 38187\nIEVVUg== 38188\nIG92ZXJzaWdodA== 38189\nIHRhYmxlc3A= 38190\nVXBkYXRlcw== 38191\nLm1ha2VkaXJz 38192\nIGh1bWlkaXR5 38193\nL3RlbXBsYXRl 38194\nQWx3YXlz 38195\nKElT 38196\nX2NlcnQ= 38197\nRGln 38198\nIHVuZGVyd2F5 38199\nb3J0b24= 38200\nIEh1cnJpY2FuZQ== 38201\nIHNwZW5kcw== 38202\nIFNlZ21lbnQ= 38203\nIGZsaWVz 38204\nIFRvZ2dsZQ== 38205\nIEx5bmNo 38206\nIHNlbnNlcw== 38207\nIEtvcw== 38208\nc2V0RW5hYmxlZA== 38209\naXN0aWNhbGx5 38210\nIHRlc3Rlcg== 38211\nIGFkbWluaXN0cmF0b3Jz 38212\nIHRhZ2dlZA== 38213\n0JM= 38214\nIHNob3J0Y3V0 38215\nIFJlc29sdXRpb24= 38216\nIHN1cGVydmlzaW9u 38217\nIEFzaGxleQ== 38218\nVHJhY2tpbmc= 38219\ndWxhdG9yeQ== 38220\nYW5kZWw= 38221\naXN0ZW4= 38222\nIHVucmU= 38223\nKGRpZmY= 38224\nQU5UUw== 38225\nIHJpZGVy 38226\nIHPEhQ== 38227\nLlNlcmllcw== 38228\nX29yZGVycw== 38229\nT1JJWk9OVEFM 38230\nIHJldGVudGlvbg== 38231\n44CCPC8= 38232\nLlRlc3Rz 38233\nU3lu 38234\nLnBhcnNlRG91Ymxl 38235\na29kZQ== 38236\nemVudA== 38237\nR2VuZXJhdGlvbg== 38238\nIGFkbWl0cw== 38239\nIExlYWs= 38240\nIGFrYQ== 38241\nUk9XUw== 38242\nIEFuZ2VsYQ== 38243\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 38244\nIG5vb24= 38245\nIHN0YXJr 38246\nIGRyYWdnZWQ= 38247\n44O844I= 38248\nIHJlY3ljbGVyVmlldw== 38249\nIFNpbGljb24= 38250\nX3N1ZmZpeA== 38251\nSm9u 38252\nY29jaw== 38253\nIFByb2JhYmx5 38254\nSW50cm9kdWN0aW9u 38255\nIFRlcnJvcg== 38256\nKFRoaXM= 38257\nIEJhc2ViYWxs 38258\nIGplbnRlcg== 38259\nY2hlc3RyYQ== 38260\nLm5hbg== 38261\nPWc= 38262\nIGNsYXJpZnk= 38263\neWlp 38264\ncm9vdHM= 38265\nIG5vdGVib29r 38266\nIEV4Y2VwdA== 38267\nIHJpc2Vz 38268\nIEJydXNzZWxz 38269\nYXRvcmllcw== 38270\nLlVTRVI= 38271\ncm9zc292ZXI= 38272\nL3VwbG9hZA== 38273\nIEV2ZW50dWFsbHk= 38274\nQ29uc2lkZXI= 38275\nIEJvdW5k 38276\nLmlkZW50aWZpZXI= 38277\nKHVuaXR0ZXN0 38278\nIGluZmVyaW9y 38279\nIGNyYw== 38280\nIGF1dGlzbQ== 38281\nVUlBbGVydA== 38282\nIEthdmFuYXVnaA== 38283\naW5lbWVudA== 38284\ncXVldWVSZXVzYWJsZQ== 38285\nU2tpbg== 38286\nLmJhY2tlbmQ= 38287\nLmdldFN0YXRl 38288\ndW5kaW5n 38289\nIHN1YmNsYXNz 38290\nIHJlZmluZWQ= 38291\nIGFubm95 38292\nIHJuZA== 38293\nRGlyZWN0b3I= 38294\nIOuC 38295\nYmVjY2E= 38296\nbW9uZ29kYg== 38297\nIENvbW1vbndlYWx0aA== 38298\nQXo= 38299\nIFRoaW5n 38300\nIHJlY29t 38301\ndW5pbmc= 38302\nCWNvbg== 38303\nCSAgICAK 38304\nZW1pY3M= 38305\nZWNk 38306\nIGhvcm55 38307\nQVRSSVg= 38308\nIG1pc2xlYWRpbmc= 38309\nIEJldw== 38310\nL25vZGU= 38311\nY3N0ZGlv 38312\n4Lin 38313\nIGFkZGl0aW9ucw== 38314\ncmly 38315\nX3JlcXVlc3Rz 38316\nIHJlY2hlcmNoZQ== 38317\nc3R1ZGVudHM= 38318\nX3Bvc2l0aW9ucw== 38319\nZXJ0ZXh0 38320\nIEV2b2x1dGlvbg== 38321\nYW5kZXo= 38322\nIGRpc3R1cmI= 38323\na2V5dXA= 38324\nIEJ1dGxlcg== 38325\nLnJlYWRsaW5lcw== 38326\nX3N0ZGlv 38327\nIGJlZQ== 38328\nIEFyY2hpdmVz 38329\nIG5ldmVydGhlbGVzcw== 38330\nVVJJVFk= 38331\nIGRyb25lcw== 38332\ndXJpdGllcw== 38333\nIOKYhQ== 38334\nIj4NCg0K 38335\nIGRpYWdvbmFs 38336\nIENhbmNlbGxhdGlvblRva2Vu 38337\nX0ludGVybmFs 38338\nIHJ1aW4= 38339\nLlF0 38340\nb2NyYXRpYw== 38341\nVGVs 38342\nIEFuc3dlcnM= 38343\nbWF0aWM= 38344\nIHhw 38345\nYXRlbQ== 38346\nX2pvYnM= 38347\nX2FueQ== 38348\nIHNlbmlvcnM= 38349\nIGxhbmRtYXJr 38350\nIFFMaXN0 38351\nIG1hbmV1 38352\nb3RpZnk= 38353\nLyI7Cg== 38354\nL3NlcnZlcg== 38355\nIFBoaWxvc29waA== 38356\ndXRlbmFudA== 38357\nKGlv 38358\naHo= 38359\nIGF1dGhlbnRpY2F0ZWQ= 38360\nZHY= 38361\nLUNvbXBhdGlibGU= 38362\nT3JpZ2luYWxseQ== 38363\nLGZ1bmN0aW9u 38364\n44CCDQo= 38365\nIFJlcHJlc2VudGF0aXZl 38366\nYXNpbHk= 38367\naXJjdWl0 38368\nLmR0 38369\nKG1hdGg= 38370\nLk1hcnNoYWw= 38371\nWyw= 38372\nIENpdGllcw== 38373\nX3R1cm4= 38374\nfCkK 38375\nIGNhbnRpZGFk 38376\nYWx0ZXI= 38377\nCXVp 38378\nIE5lYnJhc2th 38379\nIHNraXJ0 38380\nLmJn 38381\nU2hhcmVkUHJlZmVyZW5jZXM= 38382\nKHN0eWxl 38383\nIGdyaWVm 38384\nZ2V3 38385\nIHNhZmVn 38386\nb2xhbmc= 38387\nX2xpc3Rz 38388\n7Js= 38389\nIGdyYW5pdGU= 38390\nIGhvdHRlc3Q= 38391\nLmpkYmM= 38392\nLkN1c3RvbWVy 38393\nIOKJpA== 38394\nIHdhYXI= 38395\nX3NjZW5l 38396\nKycv 38397\nIEpUZXh0RmllbGQ= 38398\nIHNlYXRpbmc= 38399\nIHdlYXJz 38400\nIGAv 38401\nQ2FzZXM= 38402\nIFlvdXR1YmU= 38403\nxLFt 38404\nIGJhbGNvbg== 38405\nLEc= 38406\nTWV0YURhdGE= 38407\nLXByaWNl 38408\nU0NS 38409\nVW5pdHk= 38410\nIHRydW5r 38411\nPXtgJHs= 38412\nIGVhcnRocXVha2U= 38413\nUGFydGlhbA== 38414\nIHN1YnN0 38415\nIGVsaW1pbg== 38416\nPSInLg== 38417\nLy8qW0A= 38418\nIHN1cGVydmlzb3I= 38419\ndnJvbGV0 38420\nX2FydGljbGU= 38421\nIHBhbmU= 38422\nYmlv 38423\nIG1vdG9ycw== 38424\nTk0= 38425\nRnJhbms= 38426\nIG9uaW9u 38427\nLXdvcmQ= 38428\nSXRlbUNsaWNrTGlzdGVuZXI= 38429\nIGJyaXQ= 38430\nZW5kZW5jaWVz 38431\nQ29tcHV0ZXI= 38432\nX3J1bm5pbmc= 38433\nKGRheQ== 38434\nLWhl 38435\nKG5hbWVk 38436\nIFNhY2g= 38437\n0L7Rhw== 38438\nY2FtcGFpZ24= 38439\nLkFic3RyYWN0 38440\nKHdyYXBwZXI= 38441\nLnBheQ== 38442\nIHV3 38443\nR2Vv 38444\ncmFpbHM= 38445\nL3NlbGVjdA== 38446\naWNodGU= 38447\nc29ucw== 38448\nRVZFTlQ= 38449\nIGFsaW1lbnQ= 38450\nUHJvdmlkZXJz 38451\nQXdhaXQ= 38452\nX0lOVEVSVkFM 38453\nLm9mZg== 38454\nIGdsdXRlbg== 38455\nX2Nsb3Vk 38456\nIHdlbg== 38457\nLmV4dHJhY3Q= 38458\nCWJ1dHRvbg== 38459\nL01N 38460\nUGFydHk= 38461\nIGRlbW9ncmFwaGlj 38462\nX2Vycm5v 38463\nIGhpa2luZw== 38464\nKCcnKQo= 38465\nIixAIg== 38466\nIHdpdA== 38467\ncsOh 38468\nb2xvZ2ll 38469\nIFN0eWxlcw== 38470\nIEJyb3dzZXJNb2R1bGU= 38471\nLlJlcXVlc3RNYXBwaW5n 38472\naWNhbnM= 38473\nUEFHRQ== 38474\nY3JlYXRpb24= 38475\nIEZlcmd1c29u 38476\ndWRlZA== 38477\nbnVtYmVycw== 38478\nIEdUSw== 38479\nIHByZXNlbnRhdGlvbnM= 38480\nIEJvYmJ5 38481\nX3NwYW4= 38482\nZXN0eWxl 38483\nIGlsbGVnYWxseQ== 38484\nYWJlbGE= 38485\nIGJhdHRsZWZpZWxk 38486\nY2FwYWNpdHk= 38487\ndGVycm9y 38488\nXSIpOwo= 38489\nIHdhcnJpb3I= 38490\nbGVhZGVy 38491\nIERCRw== 38492\nIFJldmVudWU= 38493\nIHZpZ2ls 38494\nIGNvdW50ZXJwYXJ0cw== 38495\nKEVycm9y 38496\nQUNURVI= 38497\nIGhlZWZ0 38498\nIHNlbGVjdGlvbnM= 38499\nemV1Zw== 38500\ndG9t 38501\nLXR3bw== 38502\nLjsK 38503\nX3N0YXRlbWVudA== 38504\nIEFpZA== 38505\nIFZ1bA== 38506\nX3JnYg== 38507\nIHByaXplcw== 38508\nIGVkaXRhYmxl 38509\nCWZvcm0= 38510\nxLFuxLE= 38511\nLmRlY29y 38512\nRGVtbw== 38513\nbGljZXM= 38514\nIGVuY3R5cGU= 38515\ncmF0dWxhdGlvbnM= 38516\nIFJPUw== 38517\nX2NoYXJz 38518\nIEphaHI= 38519\ncGFydGlhbA== 38520\n0YPRgg== 38521\nIFJlY2VpdmU= 38522\nIExhbmRz 38523\nQVBURVI= 38524\nIGNob3BwZWQ= 38525\nLi4i 38526\nIEFuYWx5 38527\nIFVJRA== 38528\nIFJhZGVvbg== 38529\nIEJlZQ== 38530\nIHVubQ== 38531\nPk0= 38532\nLmZpbmRhbGw= 38533\nVG9rZW5pemVy 38534\nIFdIQVQ= 38535\nIHNq 38536\nRHJhd2luZw== 38537\nRXNz 38538\nT05E 38539\nirY= 38540\nKHBhY2tldA== 38541\n4oCUYnV0 38542\nSW52b2NhdGlvbg== 38543\nIE51Y2xlYXI= 38544\nPzsK 38545\nIGdyYW5kZXM= 38546\nIENyeXB0 38547\ncmVtYXJr 38548\nICcuLi8uLi8uLi8uLi8= 38549\nIGluYWJpbGl0eQ== 38550\nbWFnaWM= 38551\nY2F0cw== 38552\nIHNpbXVsYXRl 38553\nOiR7 38554\naW5mbGF0ZQ== 38555\nIGVuZXI= 38556\nOk5P 38557\naXBsZXM= 38558\nIG1lcml0 38559\nIFJhdGVk 38560\nIGdsdWU= 38561\nL2Jsb2c= 38562\nIGdyZW4= 38563\nIHRocmlsbGVk 38564\nLkNI 38565\ndW5jYW4= 38566\nIFBSSU1BUlk= 38567\nIHBlcnNlYw== 38568\nIGZlYXJlZA== 38569\nLk1JTg== 38570\nIFRoZWF0ZXI= 38571\n6ZI= 38572\nYXRlZ29yaWU= 38573\n5q61 38574\nIGFwcGV0aXRl 38575\nc3F1YXJl 38576\nIEFsZXhhbmQ= 38577\nLlVzZXJJZA== 38578\nX2d0 38579\nX2VudGVy 38580\nIGdyYWR1YXRlcw== 38581\nRnJhZ21lbnRNYW5hZ2Vy 38582\nQXV0aG9yaXpl 38583\nLU5MUw== 38584\nKE15 38585\nIHRyaXVtcGg= 38586\ndXN0aW5n 38587\nX1BBUkFNUw== 38588\nQ2hhcmFjdGVycw== 38589\nKDosOiw= 38590\nX0JVSUxE 38591\nTUh6 38592\nIHdhc2hlZA== 38593\nIHVuY2xl 38594\nU3RldmU= 38595\nYXJkb3du 38596\nPHN0ZGlv 38597\nX3Rlcm1z 38598\nIE1BUg== 38599\nIGhvc2U= 38600\ndWN1cw== 38601\nIENsYWlt 38602\nIFJhbXM= 38603\nIG1vZGVsQnVpbGRlcg== 38604\nIG7DqQ== 38605\ndXNlcklE 38606\nPWpzb24= 38607\nLlJlc3BvbnNlV3JpdGVy 38608\nmOiupA== 38609\nIGdydXBv 38610\nLWl0 38611\nIEtP 38612\nLU1haWw= 38613\nIGNvbmZlcmVuY2Vz 38614\nSUZB 38615\nIEFzc2Fk 38616\nIHByb25vdW5jZWQ= 38617\nIGFuY2VzdG9ycw== 38618\nIFRSQUNF 38619\nIEdlRm9yY2U= 38620\nIHByaXZhdA== 38621\ncGVsbA== 38622\nZW1vamk= 38623\nINmI 38624\nR2VucmU= 38625\nIGNvbmNlbnRyYXRlZA== 38626\namFuZw== 38627\nTU9URQ== 38628\nIFpvb20= 38629\ndG9vbGJhcg== 38630\nIHV0dGVybHk= 38631\nIGVuY29tcGFzcw== 38632\nIFNvY2Nlcg== 38633\nIGV1cm9wZQ== 38634\nLWFpcg== 38635\nLmFuaW0= 38636\nX0NUTA== 38637\naGVyZW50 38638\ncmV4 38639\naW50ZXJhY3RpdmU= 38640\n44Gn44GZ 38641\nIEthcw== 38642\nIGRlc3BlcmF0ZWx5 38643\nKGFy 38644\nIGJpaw== 38645\nIHRyYXZlcnNl 38646\nZXVycw== 38647\nUmVjeWNsZXJWaWV3 38648\nIE1hcmdhcmV0 38649\nIGhvcGVmdWw= 38650\nIE1pZw== 38651\nX01FTUJFUg== 38652\ncmVjZWl2ZXI= 38653\nTWF0Y2hlcg== 38654\nZGVwZW5kZW50 38655\nIGV4Y2VsbGVuY2U= 38656\n0LDQtg== 38657\nTE9T 38658\nQXNwZWN0 38659\nIGFkYWxhaA== 38660\nIEVjb25vbXk= 38661\ndWxvdXNseQ== 38662\nIGV2YWx1YXRpbmc= 38663\nIGRldmlhdGlvbg== 38664\nZXh0ZXI= 38665\nL2RhdA== 38666\nQ29scw== 38667\nIFBva2Vy 38668\nYm9hcmRpbmc= 38669\nLkNoaWxkcmVu 38670\nQU5HTEU= 38671\nw68= 38672\nIFlvZ2E= 38673\nIGhhdGVk 38674\nQWRhbQ== 38675\nIEZDQw== 38676\nSU1BTA== 38677\nIGZhaW50 38678\nX0RJU1BMQVk= 38679\nIGV2b2x2ZQ== 38680\nIGZyaWRnZQ== 38681\nIHLDqWc= 38682\nIGVtb3Rpb25hbGx5 38683\n4oCcSWY= 38684\nYXdlaQ== 38685\nZXJlc2E= 38686\nJywi 38687\nQkVHSU4= 38688\nIFZBUkNIQVI= 38689\nIHhp 38690\nZmFjdG9y 38691\ndHo= 38692\nX3BoYXNl 38693\nU0VR 38694\nKHJhbmQ= 38695\nIG1hdGhlbWF0aWNz 38696\nIGNvbnRleHRz 38697\nLWFj 38698\nIEZJRw== 38699\nIENhcHRpb24= 38700\nIFdhaXRGb3I= 38701\nLXdlc3Q= 38702\nIGZpcmVmaWdodA== 38703\nX0xFRA== 38704\nZWN0aW9ucw== 38705\nCXRocm93cw== 38706\nIFRha2Vz 38707\nb2JyZQ== 38708\nIEF2YXRhcg== 38709\nIElubm92YXRpb24= 38710\nIGNhbGlicmF0aW9u 38711\nOnRoaXM= 38712\nX2VuY29kaW5n 38713\nIGNhbGN1bGF0aW5n 38714\nICMjIyMjIyMjIyMjIyMjIyM= 38715\nIFByb2dyYW1z 38716\nIEhJR0g= 38717\nLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGU= 38718\nUG9seWdvbg== 38719\nX0RCRw== 38720\nIl0sDQo= 38721\n0LDQsQ== 38722\nIHNpbWlsYXJpdHk= 38723\nIHByemV6 38724\nIEZpcm0= 38725\nIG1pc3VuZGVy 38726\nIE1vdmluZw== 38727\nIE1PVg== 38728\nIHJlYWN0b3I= 38729\nUmVxdWVzdGVk 38730\nZXhwZWN0cw== 38731\nIGVyZWN0 38732\nbGljaHQ= 38733\nb3VsZGVy 38734\nSURHRVQ= 38735\nIGRldmls 38736\nIHByb2dyYW1tZXM= 38737\nIENvbW1vbk1vZHVsZQ== 38738\nICInIg== 38739\nKEF1dGg= 38740\n44CC77yM 38741\nIFN0YXRlZnVsV2lkZ2V0 38742\n6K6h 38743\nL29wZW4= 38744\naW5hbGx5 38745\nLlJvdW5k 38746\nIFdpc2g= 38747\nIGh1bWFuaXRhcmlhbg== 38748\nQWNjZXNzVG9rZW4= 38749\nIFNPQw== 38750\nIHBva2Vtb24= 38751\nIHZhcG9y 38752\nX2FkZGVk 38753\nCUdldA== 38754\nc3BlbGw= 38755\nIEluaXRpYXRpdmU= 38756\nIEhFTA== 38757\nYWlycm8= 38758\nYmxlZA== 38759\nINCx0Ys= 38760\nIHNlbnNpYmxl 38761\nIEx1YQ== 38762\nfCgK 38763\nIGZpeHR1cmVz 38764\nIG9yZ2FzbQ== 38765\nQ3V0 38766\ndWt0 38767\nZ3Vl 38768\nIGNyZWRpYmlsaXR5 38769\nOmltYWdl 38770\nIENQUA== 38771\nLnNu 38772\nKGRlc2M= 38773\nIFJlaWQ= 38774\nLWRlZ3JlZQ== 38775\nX3NvdW5k 38776\nQ2xvbmU= 38777\n4buZ 38778\nYWtzaQ== 38779\nPiR7 38780\nX2NvbmZpcm1hdGlvbg== 38781\nIHRyb3BoeQ== 38782\nV29ya3M= 38783\nIEVsZWN0cm9uaWNz 38784\nIE1lZGl0ZXJyYW5lYW4= 38785\nX21ldHJpY3M= 38786\nIGFubm91bmNpbmc= 38787\nIERBWQ== 38788\nX3Byb3Rv 38789\nIHBlYXI= 38790\nYmFzZVVybA== 38791\nCQkJCQkJCQkK 38792\nIGNvb3JkaW5hdGlvbg== 38793\nOk4= 38794\nLmFuaW1hdGU= 38795\nIENvdHRvbg== 38796\nX2hpdA== 38797\n4pw= 38798\nIGpldHp0 38799\naWZ0ZXI= 38800\nKGZpZWxkcw== 38801\nb3dubG9hZA== 38802\naWZpY2FjaW9u 38803\nLmN1ZGE= 38804\nIExpdQ== 38805\nPmVxdWFscw== 38806\nIEFjZQ== 38807\n0YDQsNC8 38808\nIFN1cGVybWFu 38809\nIEdhcmNpYQ== 38810\nIGFycmVzdHM= 38811\nYWdhcg== 38812\nIHt9KQ== 38813\nIG1hY3Jvcw== 38814\ncm91cGU= 38815\nw6p0cmU= 38816\nIHR3aXN0ZWQ= 38817\nc3RydW1lbnRz 38818\nXygi 38819\nX3ZlcnRpY2Vz 38820\nIFRyYW5zaXRpb24= 38821\n0LjQug== 38822\nW21heA== 38823\nbWluZA== 38824\nIGFjY2Vzc1Rva2Vu 38825\nIHVubGU= 38826\nbXVz 38827\nY29w 38828\nIEZhY3Rvcg== 38829\nIGNvbmNlZA== 38830\nIHJldHI= 38831\nLmxpbmFsZw== 38832\nLXNsaWRlcg== 38833\nb2Js 38834\nX1N0YXRpY0ZpZWxkcw== 38835\nIHpvbWJpZQ== 38836\nc2VsbGluZw== 38837\nIGNoYXA= 38838\nIHNoYWtpbmc= 38839\nIFRyYW5zbGF0ZQ== 38840\nIEFtc3RlcmRhbQ== 38841\nIEVUSA== 38842\nX0VYVEVSTg== 38843\na2Q= 38844\nX2Rpc2M= 38845\nIHByZWNlZGluZw== 38846\nIHByaXg= 38847\nT2JqZWN0TmFtZQ== 38848\nX21vZGlmaWVk 38849\nYXJkd2FyZQ== 38850\nID8+Ij4= 38851\nIERX 38852\nYCR7 38853\nID8+Ij48Pw== 38854\ndXllbg== 38855\nIGRvbm5h 38856\nIHhzaQ== 38857\nICQiew== 38858\nIERyYXdpbmc= 38859\nLG5pbA== 38860\nIG9uZGVy 38861\nQkc= 38862\nT2JzZXJ2 38863\nIGNvbnNpZGVyYXRpb25z 38864\nYm9hdA== 38865\nIEJhbmtz 38866\nIGluZGljdA== 38867\nLEk= 38868\nIEJsdQ== 38869\nKHZlcnNpb24= 38870\nY2xpZW50ZQ== 38871\nb2xhbg== 38872\nTEVTUw== 38873\nYXNzZXJ0U2FtZQ== 38874\nX3ZvaWQ= 38875\nIFdBUw== 38876\nCWVudW0= 38877\nIG1peGVy 38878\nRVc= 38879\nYWZmZQ== 38880\nIGJsb3dqb2I= 38881\ndGV4dEZpZWxk 38882\nIGltbWVuc2U= 38883\nX3JlcG8= 38884\nIGdsb2JhbHM= 38885\nYW50YWdlcw== 38886\nLnRvZGF5 38887\nVGh1cnNkYXk= 38888\nIEJyaWc= 38889\ne30pCg== 38890\nIEltYWdpbmU= 38891\nKEdQSU8= 38892\nIGVzdG8= 38893\nIFByb3ZpbmNl 38894\nIE1lbnRhbA== 38895\nX2NlbGxz 38896\nIEp1bGlhbg== 38897\nLlNjcmVlbg== 38898\nIGNhbmRsZQ== 38899\nIG1vbmRl 38900\nIHZlcmc= 38901\naXRlcmFscw== 38902\nLWxheW91dA== 38903\nR3Vlc3Q= 38904\nIHZpbmQ= 38905\nIEVjaG8= 38906\nJyl9 38907\nIG1hbm4= 38908\nX0JPT0xFQU4= 38909\naGFw 38910\nIG5pZ2h0bWFyZQ== 38911\nVUdI 38912\nIG5vbmV0aGVsZXNz 38913\nIGF0aGU= 38914\nIEhvbGxhbmQ= 38915\nIEJvcm4= 38916\nXE9STQ== 38917\nYW51dA== 38918\nX2xldmVscw== 38919\nIHBldGl0ZQ== 38920\nLWFydA== 38921\nX1NIT1c= 38922\nbnVtYmVyT2Y= 38923\nX3RodW1ibmFpbA== 38924\nYW1pbnM= 38925\nIERlZmluZXM= 38926\nICI9 38927\nLlN0YXR1c0NvZGU= 38928\nIGRpZ25pdHk= 38929\nIEJpa2U= 38930\nLk5ld0xpbmU= 38931\nIEdsYXM= 38932\nKGxvZ2dlcg== 38933\nIGNhdGNoZXM= 38934\ndm90ZXM= 38935\nIGV4YW1pbmluZw== 38936\nL3JlZ2lzdGVy 38937\nIHNwZWNpZnlpbmc= 38938\nX2ZpeGVk 38939\nIGRyYXdpbmdz 38940\nVGhyZXNob2xk 38941\nQXg= 38942\nIEFyY2hpdGVjdHVyZQ== 38943\nKHBpZA== 38944\nV2lyZQ== 38945\nKGNvbnQ= 38946\nbGFuZQ== 38947\nTGlzdHM= 38948\nIHNwcmludA== 38949\nIGdyYW5kZmF0aGVy 38950\nX0FH 38951\nIHNjaGVkdWxpbmc= 38952\nQ0xVUw== 38953\nYXR1cml0eQ== 38954\nIGxvY2tpbmc= 38955\nW3NpemU= 38956\nX3N0eWxlcw== 38957\nIHdi 38958\nLS0+Cgo= 38959\nIHNwaW5uaW5n 38960\nX3BlbmRpbmc= 38961\nTWF0Y2hlcnM= 38962\nLktleXM= 38963\nIFBW 38964\nZW51cw== 38965\nYW50aXM= 38966\nIGRpc2NhcmQ= 38967\nIGhhdWw= 38968\nIGVtcGly 38969\nIHBhdGh3YXk= 38970\nIG9haw== 38971\n0LzQtdC9 38972\nLWluZHVjZWQ= 38973\nIGltcGFpcg== 38974\nIENhbGdhcnk= 38975\nLmlzSGlkZGVu 38976\nZHo= 38977\nX2luY2x1ZGU= 38978\nIGdt 38979\nICcoJw== 38980\nUFk= 38981\ndWdnZXN0aW9ucw== 38982\nIGNvbW1vZGl0eQ== 38983\nY3Jv 38984\nL3N1Yg== 38985\nIGdldEluc3RhbmNl 38986\nIExlZ2FjeQ== 38987\nIEtpbA== 38988\nQmFs 38989\nKHNob3J0 38990\nSW5mb3Jt 38991\nK3g= 38992\nKnI= 38993\nIEhvcGVmdWxseQ== 38994\nb3JhdGU= 38995\nIG1hY2hlbg== 38996\nIHRyZWF0eQ== 38997\nIE9yaQ== 38998\nLnB1YmxpYw== 38999\nLWhvcml6b250YWw= 39000\nIHRhY3RpYw== 39001\nIGJvcmQ= 39002\nd2FyZXM= 39003\nIGFtbW8= 39004\nIExpc3Rz 39005\nIGVxdWF0aW9ucw== 39006\nL2hlcg== 39007\nIE5TVw== 39008\nQm91bmRpbmc= 39009\nX0NvbGxlY3Rpb25z 39010\nIGF2YWls 39011\nLkRyb3BEb3du 39012\n6LA= 39013\nIGho 39014\nIGzDoA== 39015\nLnBi 39016\nIG1lbW9yaWFs 39017\nIEFUVFI= 39018\nIGV4aGF1c3RlZA== 39019\nIHRzcA== 39020\nCXJlZGlyZWN0 39021\nIGxpa2V3aXNl 39022\nU1RFUg== 39023\nTGphdmE= 39024\nIGNvbmRlbW5lZA== 39025\nb2NhdXN0 39026\nKHN0cmljdA== 39027\nIGV4ZW1wdA== 39028\nIHNtcw== 39029\nIGV4YWdnZXI= 39030\nU1lT 39031\nIGxvdW5nZQ== 39032\nOl4= 39033\nIHRvZGQ= 39034\nZGVi 39035\nYXRvcmlhbA== 39036\nIFBvcnRlcg== 39037\nIHR1aXRpb24= 39038\nIGV4ZW1wbA== 39039\nIHBhcmVu 39040\nLmxpbmVUbw== 39041\nIGtpZG5leQ== 39042\nIMOnYQ== 39043\nIGN1aQ== 39044\n77yM6K+3 39045\nWEM= 39046\nIG1vxbw= 39047\nIG5vbWluYXRlZA== 39048\nbHVuZw== 39049\nSW1HdWk= 39050\nIEJ1eno= 39051\nIHN0ZXJlbw== 39052\ncG9ydGFs 39053\ncmVzYXM= 39054\nIGtsYXNz 39055\nIGRyYWZ0ZWQ= 39056\nIHByb2plY3RpbGU= 39057\nL2dwbA== 39058\nKHBhcmFtZXRlcnM= 39059\nKikK 39060\nIGFzc2lzdGVk 39061\nIE5TSW50ZWdlcg== 39062\nc2l0ZW1hcA== 39063\nOm50aA== 39064\nLlZpZXdz 39065\nLkFyZ3VtZW50UGFyc2Vy 39066\nIG1lZXI= 39067\nemllcg== 39068\nIERpZw== 39069\nPD89JA== 39070\nX3Blcm1pc3Npb24= 39071\nCUFkZA== 39072\nb2xvZ2lh 39073\nIHNjaQ== 39074\nIGZpbmFuY2lhbGx5 39075\nIHNjcm9sbGluZw== 39076\nLmRpc3Q= 39077\nX0hBUw== 39078\ndWJ1bnR1 39079\nLnBhZ2Vz 39080\nSW5jcmU= 39081\nYnVyc2U= 39082\nIEFtYXRldXI= 39083\n5rqQ 39084\nQmxvYg== 39085\nIGNob2xlc3Rlcm9s 39086\nREVT 39087\nbWluaW11bQ== 39088\nIHJlZnVzaW5n 39089\ndW5uZWQ= 39090\n0Jw= 39091\nIFJE 39092\nLlNlcnZsZXQ= 39093\nICovOwo= 39094\ndWRkZW4= 39095\nIHZpZXdCb3g= 39096\nIG1ldGFib2xpc20= 39097\nIHN0ZWFsaW5n 39098\nIEJldmVy 39099\nYWduZXRpYw== 39100\nVkVSUklERQ== 39101\nX0FVRElP 39102\n0YDRiw== 39103\nIGFyY2hpdmVz 39104\nLmxpbmVhcg== 39105\nPXs8 39106\ndW5jYXRlZA== 39107\nQWNjZXNzRXhjZXB0aW9u 39108\nIHBpY3R1cmVCb3g= 39109\nCXNlbGVjdA== 39110\nTGF0aXR1ZGU= 39111\ndmlzb3I= 39112\ncmVpYg== 39113\nIHBhaw== 39114\nSG9wZQ== 39115\nIEl0ZXJhYmxl 39116\nLnJlc3BvbnNlVGV4dA== 39117\nIFF1YWQ= 39118\nIEJyb29rcw== 39119\nIFRvdA== 39120\nT1BU 39121\nZWxvbmc= 39122\nIGNvY2FpbmU= 39123\nIGFubw== 39124\nRGFu 39125\nIHBzaQ== 39126\n0LDQu9GM 39127\nLmdldENoaWxk 39128\nIFJFRg== 39129\nLWFi 39130\nIFRyaWFuZ2xl 39131\nPFRleHQ= 39132\nIENvbG9tYmlh 39133\naW5reQ== 39134\n6Imy 39135\nKX0+Cg== 39136\nIHBsYWc= 39137\ncGluZQ== 39138\nIGJsYW5rZXQ= 39139\nIDo8Lw== 39140\nIFRyYW5zbGF0aW9u 39141\nbm92 39142\nIHBlcmZlY3Rpb24= 39143\nIENvbmZlZGVy 39144\nLnN0dWI= 39145\nLkludGVyb3BTZXJ2aWNlcw== 39146\nLlN0b3Jl 39147\nIGVucm9sbG1lbnQ= 39148\nIGRlZXI= 39149\nTW92ZW1lbnQ= 39150\nLWZyb20= 39151\naGM= 39152\nIGV2YW5nZWw= 39153\nIElsbHVzdHI= 39154\nIHRydW1w 39155\nX1N0YXJ0 39156\ncGxhbmVz 39157\nIEJpbA== 39158\nSW5mb3M= 39159\nLXRyYW5z 39160\nIHJhbmNo 39161\nIExpbmRh 39162\nX21hcg== 39163\nUkVU 39164\nL25ldA== 39165\nTGF3 39166\nTkY= 39167\nIFByZXZlbnQ= 39168\nIGNyaWVk 39169\nIGVkdWNhdGU= 39170\nYXN0aWNz 39171\neWk= 39172\nLkxpbmVhckxheW91dA== 39173\nTUVUSE9E 39174\nIEVn 39175\nbWFwcGVy 39176\n5pmC 39177\nLmFzYXJyYXk= 39178\nz4E= 39179\nacOnw6Nv 39180\nUmV1c2U= 39181\nX3Jldg== 39182\nIFBST0RVQ1Q= 39183\nX0NvZGU= 39184\nICAgICANCg== 39185\nIFNFUlZJQ0U= 39186\nX2NvdmVy 39187\nLiwK 39188\nLkV4ZWN1dGVSZWFkZXI= 39189\nIERpbmluZw== 39190\nLmFyY2g= 39191\nIG90cm8= 39192\nIERpc2NvdmVyeQ== 39193\nIEtleUVycm9y 39194\nIEJlbmVmaXRz 39195\nX1NIQQ== 39196\nLlVubWFyc2hhbA== 39197\nSEVBREVS 39198\nTXV0ZXg= 39199\nQU1B 39200\nIGluaXRpYXRl 39201\nU3RheQ== 39202\nTGl0dGxl 39203\nICgpLA== 39204\nIGRlY2VudHJhbA== 39205\nUmVzb2x1dGlvbg== 39206\nLmhlYWx0aA== 39207\nCWZjbG9zZQ== 39208\n5Lqk 39209\nIHN0YWtlaG9sZGVycw== 39210\nIGFyY2hhZQ== 39211\nRGlnaXRhbA== 39212\nbGVzY29wZQ== 39213\nX3Blbg== 39214\nIEl0ZW1TdGFjaw== 39215\nIENhbm9u 39216\nIEtlbmQ= 39217\nIMO4 39218\nX2FqYXg= 39219\naW5ncmVkaWVudHM= 39220\nRGVsaXZlcnk= 39221\nU2VjdGlvbnM= 39222\nIGRpc2FwcG9pbnRpbmc= 39223\nIEdyZW4= 39224\nLHJl 39225\nIGRlY3J5cHQ= 39226\nb2xvZ2lj 39227\nX2ZtdA== 39228\nIFNsaWRlcg== 39229\nbmFo 39230\nV2FzaGluZ3Rvbg== 39231\nenVuZw== 39232\nINGG 39233\neWN6 39234\naWV2ZXM= 39235\nLkRFQlVH 39236\nIFRJ 39237\nIGhhY2tpbmc= 39238\nIGNlbnRy 39239\nZmxvd3M= 39240\nIGRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 39241\nIGFjY291bnRhYmlsaXR5 39242\nQ09VTlQ= 39243\n0LvQtdC80LXQvdGC 39244\nYmxv 39245\nL2lk 39246\nIFNsb3c= 39247\naXp6YXJk 39248\nLnJlbW92ZUV2ZW50TGlzdGVuZXI= 39249\nIOyehQ== 39250\nL0k= 39251\naXNtYQ== 39252\nIEh1ZHNvbg== 39253\nfX0s 39254\ndW1lZA== 39255\nIHJlYWxpc2U= 39256\ndW5zYWZl 39257\nIHp1cw== 39258\nIHNob3J0YWdl 39259\nb2xpYQ== 39260\nX3ByaW9yaXR5 39261\nIGZsb29kaW5n 39262\nb3BlcmF0aW9ucw== 39263\nUG9seQ== 39264\nYWJhbg== 39265\nW2N1cg== 39266\nIGVza29ydGU= 39267\nX0RFU0NSSVBUSU9O 39268\nX25hdA== 39269\nIG1hbGljaW91cw== 39270\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 39271\nIFBhcmtz 39272\nIHRheHBheWVy 39273\nIEZvc3Rlcg== 39274\nIHNleHVhbGl0eQ== 39275\n57O7 39276\n67A= 39277\nXA0K 39278\nLnNlZWs= 39279\n0LDQvdC40Y8= 39280\nL2FydGljbGU= 39281\n6L+H 39282\nIFVocg== 39283\nIGdyYW5kbW90aGVy 39284\nIEJsZQ== 39285\nZnVydA== 39286\nYW1iYWg= 39287\nbm90aWZpY2F0aW9ucw== 39288\nZGVwcmVjYXRlZA== 39289\nIHVpbnRwdHI= 39290\nb2tp 39291\nKEFycmF5 39292\nIGF1dG9ub21vdXM= 39293\nIG9icg== 39294\nwq/Crw== 39295\nIGJhc2VuYW1l 39296\nIHVudmVpbGVk 39297\nc29s 39298\nIE5vdEltcGxlbWVudGVkRXJyb3I= 39299\nIGRlcHJlc3M= 39300\nXycuJA== 39301\nIFVOSVQ= 39302\nJScs 39303\nLXRhZw== 39304\nZ3JlcA== 39305\nIE1haW50ZW5hbmNl 39306\nIHdhcmZhcmU= 39307\nX1JFU09VUkNF 39308\nKHNwZWM= 39309\nKGN2 39310\nIG5hZGE= 39311\n55S1 39312\nIGNyb3dkZWQ= 39313\nQmVsb3c= 39314\nIFphY2g= 39315\nRXN0YWRv 39316\nX3ByaW1l 39317\nIHRyYWJham8= 39318\nIGluZm9ybWF0aXZl 39319\nU2NvdHQ= 39320\nIHNlcmlhbGl6ZXJz 39321\nIE5hcw== 39322\nVGh1bms= 39323\nIG1lcmN5 39324\nLC4uLgoK 39325\nIGFkZGljdA== 39326\nLmNvbnN0YW50cw== 39327\nIGRhdGFmcmFtZQ== 39328\nX3JlYXNvbg== 39329\nZ29tZXJ5 39330\n7Iq164uI64uk 39331\nIG5lZ2xlY3Q= 39332\nIExpbmVz 39333\nIG1lbWI= 39334\nX0VYRUM= 39335\nYXNzYWdl 39336\nIFlhcmQ= 39337\ne30nLg== 39338\nIGxvdHRlcnk= 39339\ndGVpbg== 39340\nX2NhbGM= 39341\naWt1 39342\nX1JFQ09SRA== 39343\nV2Fybg== 39344\nIGhlYWx0aGllcg== 39345\ndXJlbWVudA== 39346\nIHlhcm4= 39347\nIENvcm5lcg== 39348\nKHppcA== 39349\nKGluaXQ= 39350\nIExpdA== 39351\nSFc= 39352\nc3Vic2V0 39353\nIE1G 39354\nRVRFUlM= 39355\nX3JvdA== 39356\nIGVyZQ== 39357\nIE92ZXJyaWRl 39358\nV2FsbGV0 39359\nX3Jld2FyZA== 39360\nIHNhZ2U= 39361\nc2V0VmlzaWJsZQ== 39362\nIEpzb25SZXNwb25zZQ== 39363\nSUNZ 39364\n6K+i 39365\nVmFyQ2hhcg== 39366\nYWF0 39367\nLWdyZWVu 39368\nIGlycQ== 39369\nYW5pdHk= 39370\nIHdob2V2ZXI= 39371\nX3NoYXJl 39372\nIGZvdXQ= 39373\ncm9sbHM= 39374\nIHdpbGxpbmduZXNz 39375\nLmNvbXBvbmVudEluc3RhbmNl 39376\nIGhvbm9yZWQ= 39377\ndXJ2ZXk= 39378\nQmVy 39379\nIHJ1bm5lcnM= 39380\nIGxpZXU= 39381\nb3Jwb3I= 39382\nX3N0cnVjdHVyZQ== 39383\nQmFyQnV0dG9uSXRlbQ== 39384\nYWR4 39385\nIEJlbm5ldHQ= 39386\nIGRpbGln 39387\nIGZsdWN0 39388\nSURERU4= 39389\nX1NlbGVjdGVk 39390\nKGRpdg== 39391\nIHF1aWNrZXI= 39392\nYWxvbmc= 39393\nZ3JhcGhxbA== 39394\naW5leg== 39395\nIGNpdGU= 39396\nIEluc3RydWN0aW9ucw== 39397\nIGluc2VydGluZw== 39398\nLmNsb3VkZmxhcmU= 39399\nY291cG9u 39400\nZWRMaXN0 39401\nIFN0b3Jlcw== 39402\nX21hbGxvYw== 39403\n56ym 39404\nIEF3ZXNvbWU= 39405\nIGxhbWI= 39406\nUkVTVA== 39407\nIGludGVzdA== 39408\nIE5hdmJhcg== 39409\nLmZlYXR1cmVz 39410\nSW5jcmVtZW50 39411\nIFBvbQ== 39412\nIGluc3VmZmljaWVudA== 39413\nX0xPR0lO 39414\nUExFTUVOVA== 39415\nIE9BdXRo 39416\nLklORk8= 39417\nIGV4b3RpYw== 39418\nIENBU0U= 39419\nCSAgCg== 39420\nIEdhbmQ= 39421\ndGhlc2Vz 39422\nIG5vdm8= 39423\nIERlbGw= 39424\n4oCm4oCm4oCm4oCm 39425\nX3NvZnQ= 39426\nIGFncmVlaW5n 39427\nY2VudHM= 39428\nbG9hbg== 39429\nJyIsCg== 39430\nIFJhbg== 39431\nREVM 39432\nIG9yZ2FuaXNlZA== 39433\nK24= 39434\nIEhlYWx0aGNhcmU= 39435\nIGRldGVyaW9y 39436\nIGltcGxlbWVudGF0aW9ucw== 39437\nIGNhcm4= 39438\nICwn 39439\nIExPQUQ= 39440\nIHBsYW50ZWQ= 39441\n5pyq 39442\nRm9ybUNvbnRyb2w= 39443\nX21hdGNoZXM= 39444\nIHBlcmlvZGlj 39445\nX1Rv 39446\nIEpvZWw= 39447\nIGFua2xl 39448\nIG1pbGl0YW50cw== 39449\nIFdpdGNo 39450\ndW5pZm9ybQ== 39451\ndWVudGE= 39452\nT2ZXZWVr 39453\nIHBlcnBldHI= 39454\nIGludGVydmVudGlvbnM= 39455\nKHdyaXRlcg== 39456\nYW50aW5l 39457\nUHJvZ3Jlc3NCYXI= 39458\nIGxlYWd1ZXM= 39459\nY29tcHJlc3M= 39460\naXppb25l 39461\nIEVB 39462\nIl09Ig== 39463\nIFN0ZXBoYW4= 39464\nbWludXM= 39465\nc3N0cmVhbQ== 39466\nX2xlZA== 39467\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 39468\nIldoZW4= 39469\nQWxyZWFkeQ== 39470\nIGNvbnRlbXBs 39471\nIGF0YXU= 39472\nIENvbmdyZXNzaW9uYWw= 39473\nIHJhcHBvcnQ= 39474\nIEJvdXI= 39475\naXNoaQ== 39476\nIHR5bQ== 39477\nIEFybWVu 39478\nINGA0LDQtw== 39479\nLWZvcm1hdA== 39480\nX1JlYWQ= 39481\nKGNvbHVtbnM= 39482\nIG5ldWU= 39483\nX2JveGVz 39484\nIFNhbmR5 39485\nXywK 39486\nIFdpemFyZA== 39487\nIG9yZGVu 39488\nIGZpbGVzeXN0ZW0= 39489\nZmxpZ2h0 39490\nIHdzeg== 39491\nYW5jZWxlZA== 39492\nIGRhd24= 39493\nIEdzb24= 39494\nX3dhcm5pbmc= 39495\nIEljZWxhbmQ= 39496\nIHNsdXQ= 39497\nIHNldElz 39498\nX2lkZW50 39499\nIG9mZnNob3Jl 39500\nIFNrZXRjaA== 39501\nOyU= 39502\nIHRyaWJlcw== 39503\nX1NQQUNF 39504\nIG90cm9z 39505\nQ29tcGlsZXI= 39506\nCUVuZA== 39507\nIF0pLAo= 39508\nR3Jhdml0eQ== 39509\nIHRlbnNpb25z 39510\nIHNtb290aGx5 39511\nS25vdw== 39512\nb290aGluZw== 39513\nIFN0YXJ0dXA= 39514\nIEh5cA== 39515\nIGFtYXpvbg== 39516\nIFJlY2VpdmVk 39517\nemVuaWU= 39518\n654= 39519\nIENob2NvbGF0ZQ== 39520\nIMSw 39521\nIk5v 39522\nIEFMUw== 39523\nIFByb2dyYW1taW5n 39524\nIERvZ3M= 39525\nIGdvb2RuZXNz 39526\nKGVycm5v 39527\nL2Vz 39528\nIHJlbW90ZWx5 39529\nIEhvb2tz 39530\nVXVpZA== 39531\nIG92ZXJseQ== 39532\nIOWQ 39533\nIGdwdQ== 39534\nIHN0aW11bHVz 39535\nKHN0ZXA= 39536\nLllvdQ== 39537\nIGJpb20= 39538\nSU5D 39539\nLmJpdHM= 39540\nKG1Db250ZXh0 39541\nIGFtZXJpY2Fu 39542\nIHRlcnJpdG9yaWVz 39543\nIE5E 39544\nXSIK 39545\nIE1hcHBpbmc= 39546\nIHByb2NlZWRpbmc= 39547\nLmF4 39548\nIHN1YnN0cmluZw== 39549\nQlVUVE9O 39550\nIEln 39551\nLXBhbmU= 39552\nIEFucw== 39553\nIGdyYWR1YXRpb24= 39554\nIHBlcnNwZWN0aXZlcw== 39555\nTWl4aW4= 39556\nX21pbnVz 39557\nCQkJCSAgICA= 39558\nIikpKQ== 39559\nbm9ybWFsaXplZA== 39560\nLmxhc3ROYW1l 39561\nIGNsYW4= 39562\nQXNpYQ== 39563\nKE1vdXNl 39564\ncGFnaW5hdGU= 39565\nIGdpZg== 39566\nZWxpZw== 39567\nIHBvc3RlcnM= 39568\nbmluZ3M= 39569\nIM+E 39570\nIGFwb3N0 39571\nIElocmU= 39572\nRGxsSW1wb3J0 39573\nIEVxdWFs 39574\nIGRpc3Rpbmd1aXNoZWQ= 39575\nbmVhcG9saXM= 39576\nIGJhY2tkcm9w 39577\nIEFsdGVybmF0aXZlbHk= 39578\nL21vZA== 39579\nIGxlbmQ= 39580\nIFNIT1c= 39581\nX2NvZGVz 39582\nIGF0w6k= 39583\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 39584\nLWNhc2U= 39585\nY2h0ZQ== 39586\nIGRvbmM= 39587\nOmFkZA== 39588\nTmVnYXRpdmU= 39589\nZmF2b3JpdGU= 39590\nIGF0dHJhY3Rpb25z 39591\naW50Q29sb3I= 39592\nIFBpcg== 39593\nQ29ubmVsbA== 39594\nTWFuaWZlc3Q= 39595\ndGVhbXM= 39596\nIH07CgoK 39597\nIHBsdXJhbA== 39598\nIG92ZXJ0aW1l 39599\nIEV1cm9wYQ== 39600\nIEJhbmdsYWRlc2g= 39601\nKGFu 39602\nIGxpbmd1 39603\naXRpbWU= 39604\naW5zdG9u 39605\nLnNoYWRvdw== 39606\n56iL 39607\nIFVTUw== 39608\nU2VydmVyRXJyb3I= 39609\nSVZFUlM= 39610\nIEppbg== 39611\nIGh1bWJsZQ== 39612\nYXV0b2xvYWQ= 39613\nYXJleg== 39614\n4oCy 39615\nIEFzdHI= 39616\naWNvbG9u 39617\nLlZpZXdNb2RlbHM= 39618\nb2Jv 39619\nIHN3aXBl 39620\nIHJlY2Vzc2lvbg== 39621\n6ZU= 39622\nIOyY 39623\nbmVyZw== 39624\naW5ncmVkaWVudA== 39625\nbWFpbHRv 39626\nIEZhbWU= 39627\nUHJpbnRpbmc= 39628\nUGl4ZWxz 39629\nIEJhc2g= 39630\ncG9zdGE= 39631\nX0pP 39632\nIGluZmFtb3Vz 39633\nIExhbmM= 39634\nKGxvY2FsU3RvcmFnZQ== 39635\nLmJsaXQ= 39636\nIHlvdW5nZXN0 39637\nIGZpZWxkTmFtZQ== 39638\nIGNvbnRpbmc= 39639\nIHdvb2w= 39640\nIEltR3Vp 39641\nIE5TVA== 39642\nLnByZWZpeA== 39643\nVG9JbnQ= 39644\nIFNveA== 39645\nIGhhYml0YXQ= 39646\nKCJ8 39647\nPSciKw== 39648\nSU5HVE9O 39649\nX3dyYXA= 39650\ndWNrZXRz 39651\nIFdSSVRF 39652\nIG1lZGljaW5lcw== 39653\nIG1lbWJyYW5l 39654\nIEpUZXh0 39655\nIHJlcHJvZHVjdGlvbg== 39656\nX3JlY2VpdmU= 39657\nVGFibGVSb3c= 39658\ncXVldWVSZXVzYWJsZUNlbGw= 39659\naG9va3M= 39660\nIHJlbHlpbmc= 39661\nIGRyaWxsaW5n 39662\nX0ls 39663\nKGV4Y2VwdGlvbg== 39664\nIGR1cmFiaWxpdHk= 39665\nIGhlc2l0YXRl 39666\nIGNvbXBhcnQ= 39667\nSUxJTkc= 39668\nIEVsZGVy 39669\nIGNhZmZl 39670\nIGRldmVsb3Bz 39671\naXNoZXI= 39672\nIHBseQ== 39673\nIHRvbA== 39674\nX1BMQVk= 39675\nIGZyaWN0aW9u 39676\nKGFsd2F5cw== 39677\nIGluZGlnZW5vdXM= 39678\nIE9wZXJh 39679\nIENhbXB1cw== 39680\nYW5jZW1lbnRz 39681\nIGxpdHRlcg== 39682\nLmxpbWl0 39683\nKFRva2Vu 39684\nZW5pcw== 39685\nIGhpZ2hsaWdodGluZw== 39686\nIEF1Yg== 39687\nIHZhbGlkYXRvcnM= 39688\nLWhvc3Q= 39689\nd2hlZWw= 39690\nPHs= 39691\nKSkr 39692\nIE5ld3NsZXR0ZXI= 39693\nX2F2ZXJhZ2U= 39694\nIHNvZGl1bQ== 39695\nIEhpbA== 39696\nIE1pbGU= 39697\nIEF1dGhTZXJ2aWNl 39698\nU3RhdGlzdGljcw== 39699\nIE51dHJpdGlvbg== 39700\nIHNwb25zb3Jz 39701\nb3ZlbmFudA== 39702\nPT09PT09PT09PT09PT0= 39703\nLkFic29sdXRl 39704\nIGbDpQ== 39705\nSGFuZGxpbmc= 39706\nIC0tLS0tLS0K 39707\nKGRpcmVjdG9yeQ== 39708\nIikuCg== 39709\nYW5vbA== 39710\nLmJyb3dzZXI= 39711\nIEdyaW5kaW5n 39712\nIGNr 39713\nRnJlcXVlbmN5 39714\nKClbJw== 39715\nQWRqdXN0 39716\nY3Jldw== 39717\nYWZldHk= 39718\nIGdu 39719\nIHdpdmVz 39720\nb29v 39721\nIHByb3N0aXR1 39722\nIG/DuQ== 39723\naWZ0eQ== 39724\nIGxpdGlnYXRpb24= 39725\nIEV6 39726\nSmVmZg== 39727\nLnBr 39728\nIFNob2Vz 39729\nY29ybg== 39730\neXl2c3A= 39731\nIGFkYXA= 39732\nPXU= 39733\nQ09ORg== 39734\nQU5EQVJE 39735\nIGVsZXZhdG9y 39736\nYmlsbGluZw== 39737\nIGNhbmQ= 39738\nIGNhcnA= 39739\nW2ZpZWxk 39740\nLWxpYg== 39741\nc2VxdWVudGx5 39742\nPi0= 39743\nIGxjZA== 39744\nLS0tLS0tLS0tLS0tLS0t 39745\nKCIi 39746\nIHRhY3RpY2Fs 39747\nIFJvbmFsZA== 39748\nZXh0cg== 39749\nIEZlc3Q= 39750\nIGZ1ZXI= 39751\nLW5hdmlnYXRpb24= 39752\nIGti 39753\nZ2hvc3Q= 39754\nIGhhbmRsZUNoYW5nZQ== 39755\nX2Nscw== 39756\nKCkhPQ== 39757\nQ29tcGFyYXRvcg== 39758\nLnZt 39759\nIENveA== 39760\nX3Jldmlldw== 39761\nL0A= 39762\nX2Nvb2tpZQ== 39763\nIHJlY29nbmlzZWQ= 39764\nbGRhcA== 39765\nVGhyZWFkcw== 39766\nIFNleHVhbA== 39767\nIEJlYXJpbmc= 39768\nKFNRTA== 39769\nIHhy 39770\nIHRoaWdo 39771\nVVJMQ29ubmVjdGlvbg== 39772\nIFNVVg== 39773\nIG1Db250ZXh0 39774\nIGluY2lkZW5jZQ== 39775\nIEVzdGU= 39776\nLnN1cA== 39777\nX3Rl 39778\nKEVYSVQ= 39779\nQ01E 39780\nLyI+ 39781\nQWxtb3N0 39782\nIFVuZQ== 39783\nIGFuZGVyZW4= 39784\nIFNpbmdsZXRvbg== 39785\nIGJvcmU= 39786\nVGhpbms= 39787\nIG5hcmM= 39788\nXWluaXRXaXRo 39789\nX3Nob3A= 39790\nKHN0cmF0ZWd5 39791\nIScs 39792\naGVyaXRz 39793\nIERlc2s= 39794\nX21hY2hpbmU= 39795\nLm5ldHR5 39796\nxLFuZGE= 39797\nPTw= 39798\nIFFS 39799\nIFNpZGViYXI= 39800\nLnNwbGl0Q29udGFpbmVy 39801\nIG9uU3VjY2Vzcw== 39802\nIG1vbmtleQ== 39803\nRW5qb3k= 39804\nKG5vZGVz 39805\ncGVjdHJ1bQ== 39806\nICgqKA== 39807\nCVVJTlQ= 39808\nLGhlaWdodA== 39809\nIE5ldHdvcmtz 39810\nLnRhaWw= 39811\nLmxpbnNwYWNl 39812\nICIuLi4= 39813\nTGlzdGVu 39814\nxqE= 39815\nLkNoYW5uZWw= 39816\nLWRlZmluZWQ= 39817\nUmVwZWF0 39818\nYWRqdXN0 39819\nRVJN 39820\nX2FwcGxpY2F0aW9u 39821\nLmFzc2VydE5vdE51bGw= 39822\nLXN0cmVhbQ== 39823\nIHJhYmJpdA== 39824\nIHBvc2l0aW9uaW5n 39825\nIHdva2U= 39826\nIGZpbmc= 39827\nIG11bHRpcGxheWVy 39828\nIHJlZ2lzdGVyaW5n 39829\ndW50aWw= 39830\nw6Vu 39831\nKDo6 39832\ndXNzaW9ucw== 39833\nIHBvdGF0bw== 39834\nIEVxdWFscw== 39835\nLlN1cA== 39836\nL2FwYWNoZQ== 39837\nICg9 39838\nLiIp 39839\nLnB0cg== 39840\nIFNwZWVjaA== 39841\nLmNsaXA= 39842\nIEdhYnJpZWw= 39843\nIG11c2ljaWFu 39844\nL2lzc3Vlcw== 39845\nLnNob3A= 39846\nIEhpZXI= 39847\nX1JFVA== 39848\nX2J1Y2tldA== 39849\n44Oh 39850\nYXZz 39851\nIHJveg== 39852\nZmxvd2Vy 39853\nV3JpdGVCYXJyaWVy 39854\nIE1pbGFu 39855\nIGxlZ2lzbGF0dXJl 39856\nIERvbGw= 39857\nIHByb3Zpbmc= 39858\nLmNvbmNhdGVuYXRl 39859\n4pWQ 39860\nIGdjaGFy 39861\nY2RuanM= 39862\nYmxlcw== 39863\nIExpc3Rpbmc= 39864\n0LvQvg== 39865\nLnhyTGFiZWw= 39866\nIFNhaw== 39867\nanVzdGljZQ== 39868\nIFZhbGVudGluZQ== 39869\ndW5sZXNz 39870\nIHBpZ2Vy 39871\nKHJ1bg== 39872\nIHRlc3RpZmllZA== 39873\nQU5B 39874\nIFJlbW92ZXM= 39875\nKSkpKTsK 39876\ncmVjYXRlZA== 39877\nIFJ1bnRpbWVNZXRob2Q= 39878\nIGNvbnF1 39879\n44Ki 39880\nIHRpc3N1ZXM= 39881\nYWlsZXI= 39882\nw6l0w6k= 39883\nLVN0YXI= 39884\nIGZsYW1lcw== 39885\nLnNldEljb24= 39886\nIHN1cGVybg== 39887\nIHZhZ2luYQ== 39888\nLXZhcmlhYmxl 39889\nIHdlbGxuZXNz 39890\nQ1VS 39891\nIGJlbGxl 39892\nLmdldFJlcXVlc3Q= 39893\nIHBvY28= 39894\nYmVuaA== 39895\nYWdlbnM= 39896\nIHNwaWxs 39897\nIEp1cg== 39898\nIGRpc3BhdGNoZXI= 39899\n0L3QvtCz0L4= 39900\nZW1vbmlj 39901\nKGRpcm5hbWU= 39902\nINCU 39903\nIHBhc3Nl 39904\nIGdhbno= 39905\ncmljaW5n 39906\nRVU= 39907\nIG11amVyZXM= 39908\nZXNzZW4= 39909\nLmF0dHJpYnV0ZQ== 39910\namo= 39911\nCQkgCg== 39912\nW14= 39913\nIHN0cnRvbG93ZXI= 39914\nbGV4ZXI= 39915\nZWN0YXI= 39916\naG90ZWw= 39917\nLnNxdWFyZQ== 39918\nIHJhbGw= 39919\nIGxvd2VyZWQ= 39920\naGFuZGxlZA== 39921\nTWFya2V0 39922\nIFVzZXM= 39923\naXZhcw== 39924\nLkJ1c2luZXNz 39925\n44GX44Gm 39926\nRElW 39927\nIHdhc3RlZA== 39928\nIGF2b2ly 39929\nw6pt 39930\nX0FDQ09VTlQ= 39931\nLmV0 39932\nCVNETA== 39933\na2Fw 39934\nIGZveA== 39935\ndXBwZXQ= 39936\ne30sCg== 39937\nIiwn 39938\nRmF2b3JpdGU= 39939\nUEVORA== 39940\nIEFFUw== 39941\nfSks 39942\nIGRlZHVjdGlvbg== 39943\nIHBvbMOtdA== 39944\nIGNvbXBvbmVudFdpbGw= 39945\nIFRlbGVyaWs= 39946\nX1NFTEY= 39947\nIG11c2U= 39948\nQ3JhZnQ= 39949\nIGRlbnM= 39950\n4KS/ 39951\nKHRw 39952\nIHRhc3R5 39953\nIGJhbGFuY2Vz 39954\nIGRlZGljYXRpb24= 39955\nIFdhbGxhY2U= 39956\nIHVubGF3 39957\nXCI+XA== 39958\nIG11bQ== 39959\nLXVwZGF0ZQ== 39960\nZW1lbnRl 39961\nIHNvZGE= 39962\nUmVwdWJsaWM= 39963\nYXNtaW5l 39964\nw6lyaWM= 39965\nKFN0YXR1cw== 39966\nIEpzb25Db252ZXJ0 39967\nIERpc2s= 39968\nLlJlZGlyZWN0 39969\nIGZpbG1pbmc= 39970\nL21vbA== 39971\nUm8= 39972\nIHZpbGxl 39973\nIHRyYWJhag== 39974\nIHN5bnRoZXNpcw== 39975\ncmVnYQ== 39976\nIHJs 39977\nU2NoZWR1bGVy 39978\nSVNIRUQ= 39979\nY3VycmVudFVzZXI= 39980\nKGVycm9ycw== 39981\nJ2g= 39982\nX2JvdA== 39983\neGltbw== 39984\nIFVTQVJU 39985\nX3N1cGVy 39986\nX0RFQ1JFRg== 39987\n0L3QvtC5 39988\nX1JPVw== 39989\nIHByb21vdGVz 39990\nIFRB 39991\nIGhvcmFz 39992\nIFJlcHJlc2VudHM= 39993\nIG5hbWVvZg== 39994\nIEV4Yw== 39995\nIEdhcmFnZQ== 39996\nIHNlaW5l 39997\nLCM= 39998\nIGhlcmI= 39999\nL3Jlc291cmNlcw== 40000\nIHBsZWFkZWQ= 40001\nLnJhZGlvQnV0dG9u 40002\nIOaY 40003\nT3Bz 40004\nIE5lc3Q= 40005\nY3N0cmluZw== 40006\nIERlZmVuY2U= 40007\nIHJlZmVyZQ== 40008\nX2xlYWY= 40009\nIHJldmVsYXRpb24= 40010\n66c= 40011\nLmV4ZWN1dGVVcGRhdGU= 40012\nX1dPUkxE 40013\nIGV4cGFucw== 40014\nKCJcIg== 40015\namFi 40016\nIGRvdWJ0cw== 40017\nIEdlb21ldHJ5 40018\nIGludHJvZHVjZXM= 40019\nIHNlbmF0b3Jz 40020\nIGNhbmFs 40021\nLmhlbHBlcg== 40022\nIEJpb2xvZ3k= 40023\nX1NFTlM= 40024\nLnByZXZpb3Vz 40025\nLXRvdWNo 40026\nYWJpdA== 40027\nIGltcGFjdGVk 40028\nIGJyYWNrZXRz 40029\nLmRpcmVjdA== 40030\nYWNjdW0= 40031\nIHRlc3Rvc3Rlcm9uZQ== 40032\nCWFjdGlvbg== 40033\nIENoYW5jZQ== 40034\nIHBlYWtz 40035\nQ3BwQ29kZUdlbldyaXRlQmFycmllcg== 40036\nIHVuYmVsaWU= 40037\nX3ByZXNz 40038\nLlJlbA== 40039\nYW5nbGVk 40040\nL3RlbXBsYXRlcw== 40041\nLS0+DQo= 40042\nbGltZQ== 40043\nIHN1ZmZpY2llbnRseQ== 40044\nX250 40045\nRXhwYW5k 40046\nLmlzZmlsZQ== 40047\nIGlzRW1wdHk= 40048\nIHF0 40049\nIG11bGhlcg== 40050\nYWNvYg== 40051\nR2Vvcmdl 40052\n5bi4 40053\nIGFzc2lt 40054\nYXNv 40055\nIGNvbXByaXNlZA== 40056\nT1Y= 40057\nKENPTkZJRw== 40058\nCXdyaXRlcg== 40059\nIGRlc3A= 40060\nIHRlbnVyZQ== 40061\nKGNy 40062\nLnBvb2w= 40063\nIEJyZW5k 40064\nIGNlbnNvcg== 40065\nKHRpbWVvdXQ= 40066\nIHBsZWE= 40067\nLldyYXA= 40068\nIHRpZ2h0bHk= 40069\nIFdlcmU= 40070\nIElnbm9yZQ== 40071\nYWJlaQ== 40072\nIGJyaWRnZXM= 40073\nIGNvbmRlbW4= 40074\nIHNpbXBsaWNpdHk= 40075\nIHJvdXRpbmVseQ== 40076\nIGJsYWNrcw== 40077\namI= 40078\nIFBpdA== 40079\nVXRm 40080\nIC8K 40081\ncmVsb2Fk 40082\nIHNldE9iamVjdA== 40083\nL2dsb2JhbA== 40084\nIGZhdHR5 40085\nIHNvY2tz 40086\nQ291bGRu 40087\nIGVyb3Rpc2s= 40088\n5p2h 40089\nIFByZXNzdXJl 40090\nIE1heg== 40091\nbnBvcw== 40092\ndG9sb3dlcg== 40093\nIEVR 40094\ndXRldXI= 40095\nIE1vbWVudA== 40096\nIGV0YQ== 40097\ne3stLQ== 40098\nIGdyYXBocw== 40099\nIEd1YXI= 40100\ncmluZQ== 40101\nKC0t 40102\nIEh0dHBTdGF0dXM= 40103\nKHN0dWRlbnQ= 40104\nKm5w 40105\nIHJhaWx3YXk= 40106\nIGFzeW5jaHJvbm91cw== 40107\nX3Zt 40108\nJ10sJw== 40109\nLHRleHQ= 40110\nbWVyY2hhbnQ= 40111\nKEd1aWQ= 40112\nIEdyYQ== 40113\naXhlcg== 40114\nZmV0Y2hBbGw= 40115\nLmFkZExpc3RlbmVy 40116\nZmxpcA== 40117\nKiQ= 40118\nPigpLA== 40119\nIHN1bmxpZ2h0 40120\nYXNzaWduZWQ= 40121\nIGFiYw== 40122\nIENPTFVNTg== 40123\nIPCfmYIKCg== 40124\nKS4uLg== 40125\nIGVuc2VtYmxl 40126\nIG5ld2xpbmU= 40127\nX1NJTkdMRQ== 40128\naWVkYWQ= 40129\nIGRhcmtlcg== 40130\nb3JtYXA= 40131\nIGxpb24= 40132\ncGxpdHM= 40133\nIGlsbHVzdHJhdGlvbg== 40134\nIElFRUU= 40135\nIHZpc3Rh 40136\nb3VzYW5kcw== 40137\nKioqKioqKg== 40138\nIFRvbW15 40139\nIGh1ZQ== 40140\nU2Vs 40141\nIGF1cmE= 40142\nIFRoZXJhcHk= 40143\nIGFuaW1hdG9y 40144\nLmNvbnN0cmFpbnRz 40145\nIHZhZ3Vl 40146\nKCIiKQ== 40147\nIHZpbGxhaW4= 40148\nIGJsZXNzaW5n 40149\nIHN0cmluZ0J1aWxkZXI= 40150\nIE1pc2M= 40151\nIERJUg== 40152\nZmF4 40153\nLW5vZGU= 40154\nIFdhbGtpbmc= 40155\nIEFV 40156\nc2Vzcw== 40157\nIGdyaWxs 40158\nVkVSVElTRQ== 40159\nIEZvb2Rz 40160\nIHRvdXJuYW1lbnRz 40161\nw5M= 40162\nIE1hcnNo 40163\nIHdvbmRlcnM= 40164\nTG9uZ2l0dWRl 40165\nLkNvbW1hbmRUZXh0 40166\nPWlucHV0 40167\nX2VuY29kZXI= 40168\ncGFnZVNpemU= 40169\nIGdldFN0YXRl 40170\nPj4K 40171\nLmdyZXk= 40172\ncG9k 40173\nIHJlYWRpbmdz 40174\nIHJlY29uc2lkZXI= 40175\nU3RhcnR1cA== 40176\nIGV4Y2Vy 40177\nLmJhbGFuY2U= 40178\nX2N5Y2xl 40179\nX1RpbWU= 40180\nTE9DQUw= 40181\nIEVGSQ== 40182\nIFJleW4= 40183\nLnNldEZvcmVncm91bmQ= 40184\nYnlu 40185\nIGRpc2Nvbm5lY3RlZA== 40186\nQUNUSVZF 40187\nIGVtYmVkZGluZw== 40188\naWNrZXJz 40189\nIHN1cnJvdW5kaW5ncw== 40190\nKmM= 40191\nIGdhcmFudA== 40192\nIGJm 40193\nIHdpcGU= 40194\nIOS4iw== 40195\nX1RSQQ== 40196\nYWRveA== 40197\n55U= 40198\nIHN1Y2tz 40199\nIFNvbmdz 40200\nIEFzc29jaWF0ZXM= 40201\nIEJhbGQ= 40202\nIEJyZXR0 40203\ndmVuaWxl 40204\nIHZ0 40205\nIGluYWRl 40206\nIHJlc2lnbmVk 40207\nIEdsZW5u 40208\nLnBhdHRlcm4= 40209\nLkRhdGFCaW5k 40210\n0YPQvA== 40211\nTGF5b3V0SW5mbGF0ZXI= 40212\nY2hldA== 40213\nIFRlc3RhbWVudA== 40214\nLm1z 40215\nIHBhdg== 40216\nIFJlYWN0RE9N 40217\ndXJkeQ== 40218\nQURBVEE= 40219\nTXU= 40220\nL2FjdGlvbnM= 40221\nIEpz 40222\nX2V4dHJhY3Q= 40223\nIEJyaW5n 40224\nOmlk 40225\nc3RydA== 40226\naXZhdGlvbg== 40227\nIG91dHJpZ2h0 40228\nYXp1 40229\nbG95bWVudA== 40230\n0LjRjw== 40231\nYWxkbw== 40232\nIFB1Ymxpc2hlcg== 40233\nRWR1Y2F0aW9u 40234\nUGFsZXR0ZQ== 40235\nX2Rydg== 40236\nICgkKA== 40237\nIEFuZGE= 40238\nIHJlbWVkeQ== 40239\nIGluY29uc2lzdGVudA== 40240\ndGVjdGlvbg== 40241\nIHJlZ3VsYXRvcnM= 40242\nIHNob3J0ZXN0 40243\nKHBhaXI= 40244\nIEluc3RhbGxhdGlvbg== 40245\nIGRlZmVuZGFudHM= 40246\nICgpOw== 40247\nLWxhcmdl 40248\nTWVs 40249\nIHRocmVhdGVu 40250\n0L3Rjw== 40251\nIGZldGlzaA== 40252\nb3RpbmU= 40253\nX2RpYw== 40254\nIDwk 40255\nIHN0YWdnZXI= 40256\nc3Bp 40257\nJHJlc3BvbnNl 40258\nU2Vydg== 40259\nLWJvcm4= 40260\nam9z 40261\nCWltZw== 40262\nCVdIRVJF 40263\nX2x0 40264\n5b2T 40265\nLmNvc3Q= 40266\nIFR1ZQ== 40267\nLmxhYmVscw== 40268\nIExW 40269\nd2Nzc3RvcmU= 40270\nIEplc3Nl 40271\n4Lir 40272\nVHJhZGU= 40273\nIHByZWRlY2Vzc29y 40274\n64I= 40275\nZmluYWxseQ== 40276\nX2dlbmVyYWw= 40277\nb2dnbGVy 40278\nX1JFR0lPTg== 40279\nbmVtZW50 40280\nIGJsb2dnZXI= 40281\nIEhhcmJvcg== 40282\nIERhdGFzZXQ= 40283\nW3c= 40284\nIGF0dGVuZGVlcw== 40285\nLmljbw== 40286\nbWF4aW11bQ== 40287\nLlVubG9jaw== 40288\nX1NZTkM= 40289\nw6FnaW5h 40290\nIGRvd25z 40291\nIFdpaQ== 40292\nXSkv 40293\nIGtpY2tpbmc= 40294\ndW5pY2F0aW9u 40295\nIERBQw== 40296\nIElEUw== 40297\nIFJlbnRhbA== 40298\nIGN1cnJlbnRUaW1l 40299\nIHZhY2NpbmVz 40300\nIERldmls 40301\nIG5vcnM= 40302\nX21vdXNl 40303\ndXJyZWN0aW9u 40304\nKG5v 40305\nID4NCg== 40306\nIGFnZ3Jlc3Npb24= 40307\nIGJyZWVkaW5n 40308\nLnN5bWJvbA== 40309\naW1hbg== 40310\nQWJzb2x1dGVQYXRo 40311\nIFdITw== 40312\nX2ZsdXNo 40313\nLXJvb3Q= 40314\nYXJuYQ== 40315\nJk0= 40316\nIGZhdGhlcnM= 40317\nIFJvY2tldA== 40318\naXZlYXU= 40319\nIHdhbmRlcg== 40320\nIGNvbXBvcw== 40321\nIFdhcnJpb3I= 40322\nIFNlYXQ= 40323\nIENsaW5pYw== 40324\nX2ludm9pY2U= 40325\nKGRpc3BhdGNo 40326\nUHJvZHVjdG8= 40327\nYXR1cmluZw== 40328\nb3NzaWVy 40329\nIE1BWQ== 40330\nIGRhZ2dlcg== 40331\nIHNhbml0aXplZA== 40332\nIFJGQw== 40333\nIHByb3Bo 40334\nIHVyaW5l 40335\nIGdyaW5k 40336\nIEV4cGFuZGVk 40337\nZGVzY3JpcGNpb24= 40338\nLWZ3 40339\nIEtlcnJ5 40340\nPW5hbWU= 40341\nIGNoaw== 40342\nIG5hdGlvbmFsbHk= 40343\nIHRoZWU= 40344\nSW5j 40345\nID8+Pg== 40346\nLlJhZGlvQnV0dG9u 40347\nLkh0dHBTZXJ2bGV0UmVzcG9uc2U= 40348\nL1k= 40349\nCWZpZWxk 40350\nIGhvbW1l 40351\neXBlcg== 40352\nUGh5c2ljYWw= 40353\nPXY= 40354\nIGRyaXY= 40355\nIEVycm9ycw== 40356\nIGPEgw== 40357\nRGVhdGg= 40358\nIFdJTkRPVw== 40359\nIHBvZXQ= 40360\nIFNoYXJw 40361\nIEltbXV0YWJsZQ== 40362\nCWNyZWF0ZQ== 40363\nIGdlaHQ= 40364\nIFJlZm9ybQ== 40365\nYWlzZXI= 40366\nIEluaXRpYWxpemF0aW9u 40367\nIGltbXVuaXR5 40368\nLmNvbXBvc2U= 40369\nIGxhdGVuY3k= 40370\nIExlYmFub24= 40371\nIFBhcmFk 40372\nIGZ1ZWxz 40373\nIEV4aGli 40374\nY29o 40375\nJSI+Cg== 40376\nIENMSQ== 40377\nKWluaXRXaXRo 40378\nLVph 40379\nX0NMRUFS 40380\ncmVnbg== 40381\nIGZpbmFuY2Vz 40382\nLnN0YW5kYXJk 40383\nX0NBVEVHT1JZ 40384\nLmxpYnJhcnk= 40385\nIHRyYXZlbGVycw== 40386\nX3dw 40387\nIEV2YWx1YXRpb24= 40388\nc3RhcnRpbmc= 40389\nICkpLAo= 40390\nZXBpc29kZQ== 40391\nIFZhcmlhbnQ= 40392\nIGRhZW1vbg== 40393\nIEp1bGlh 40394\nIE5S 40395\nIGRvdWJsZXM= 40396\nPHY= 40397\nL3J1bnRpbWU= 40398\nIGludGVycHJldGVy 40399\nIElOREVY 40400\nIEhvbG1lcw== 40401\nX0RJTQ== 40402\nIHBhZGRsZQ== 40403\nX2V4YW1wbGU= 40404\nIGZvcmVncm91bmQ= 40405\nLnJvdXRlcw== 40406\nIHNvd2ll 40407\nU1VDQ0VTUw== 40408\nIENEQw== 40409\nIEJE 40410\nXy0= 40411\nYXN1cmVk 40412\nV3JpdGluZw== 40413\nIGN1cnJlbnRQYWdl 40414\nKGFuc3dlcg== 40415\nIEFTQ0lJ 40416\n4Kg= 40417\nIHNvY2lhbGx5 40418\neXl5 40419\nIFNwZWNpYWxpc3Q= 40420\nKGN1c3RvbWVy 40421\naXN0YW5p 40422\na2VzdA== 40423\nIE1haw== 40424\nIHRobw== 40425\nLnB0 40426\nKGNvbW1lbnQ= 40427\nIENvbnZlcnRlcg== 40428\nZ2Ft 40429\nYmlucw== 40430\nLnRlbGU= 40431\nIFZldGVyYW5z 40432\nX0FMTE9D 40433\n0L7Qu9GM0LfQvtCy0LDRgg== 40434\naW5uYW1vbg== 40435\nO3dpZHRo 40436\nb2hs 40437\nIGZhbnRhcw== 40438\nIHN1bmc= 40439\nCUs= 40440\nKEpzb24= 40441\nIG5laWdoYm91cmhvb2Q= 40442\nIHZvdw== 40443\nIHNpbnM= 40444\nb25hY2Np 40445\nIGVwb2Nocw== 40446\naW1hZ2Vu 40447\nLkNoYW5nZQ== 40448\nLm15YmF0aXM= 40449\nU2Vlaw== 40450\nV0VS 40451\n566h55CG 40452\nIGludGVyZXNz 40453\nX0V2ZW50 40454\nZWRlcmxhbmQ= 40455\nIHRlcnJpdG9y 40456\nIGNpdWRhZA== 40457\ndWNrZWQ= 40458\nIHNuYWNr 40459\nIHRyYW5zcG9ydGVk 40460\nIE1hbmlmZXN0 40461\nIERBVA== 40462\nX3RoZXRh 40463\nIHdvbnQ= 40464\nLgoKCgoKCgoKCgo= 40465\nirbmgIE= 40466\nIEVwaWM= 40467\nRGVjaw== 40468\nbHRyYQ== 40469\nX1pFUk8= 40470\nIFtdOw== 40471\nL3NjcmlwdHM= 40472\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 40473\n5oOF 40474\nIHdlZWQ= 40475\nTkJD 40476\nIHJhcGVk 40477\nIEdhdGV3YXk= 40478\nW00= 40479\nIFRpbWVvdXQ= 40480\nZW5jaG1hcms= 40481\nLlZpZXdNb2RlbA== 40482\nIHBvcm5vcw== 40483\nIFlh 40484\ndGhyaXRpcw== 40485\nIEZseW5u 40486\nIG1lZ2E= 40487\nYWNpbg== 40488\nIHRyaWJhbA== 40489\nLmFwcGxl 40490\nIEJsbw== 40491\nw6Ju 40492\naWJp 40493\ncm92 40494\nIExpdmVz 40495\nXi4= 40496\nZ2V0UmVxdWVzdA== 40497\nIEVzdGFibGlzaA== 40498\nY29udGFpbmVycw== 40499\nIHN0YXJyaW5n 40500\nIGNlbGVicml0aWVz 40501\nIFJlbGF0aXZl 40502\nIEhlaWdodHM= 40503\nIHRxZG0= 40504\nIE5vcnRod2VzdA== 40505\naXZpYw== 40506\nCWNs 40507\nIGF1dG9tb3RpdmU= 40508\nZW50cmlj 40509\nIGZvcnR1bmF0ZQ== 40510\nIGZpcmVwbGFjZQ== 40511\nc2V1ZA== 40512\nbmlja25hbWU= 40513\nO3M= 40514\nX0NBTA== 40515\naGFsdA== 40516\nKG5z 40517\nX2RlbGV0ZWQ= 40518\nRGV2ZWxvcG1lbnQ= 40519\nbW92aWVz 40520\nIGlkZW50aXRpZXM= 40521\nIHByb21wdGx5 40522\n2KfZhg== 40523\nIGFudGU= 40524\nICInLCc= 40525\n5Y+j 40526\naW1wc2U= 40527\nIHlhcA== 40528\nVHlwZU5hbWU= 40529\nIGJpdGNo 40530\nIGFzc29jaWF0ZXM= 40531\nSEVNRQ== 40532\nLWVtcHR5 40533\nINiq 40534\nb2x2ZXJz 40535\nIHBpc3RvbA== 40536\nU2NvcGVk 40537\nYWduZXI= 40538\nJ109PSc= 40539\nIElNUA== 40540\nZXhj 40541\nIG9taXR0ZWQ= 40542\nIG1pbmRzZXQ= 40543\nIFtdKA== 40544\nIG9ybg== 40545\nX0NBTQ== 40546\nQXZn 40547\nTG9jYWxpemVkU3RyaW5n 40548\nIE5hdHVy 40549\nIGNvbXBvc2Vy 40550\nIFBsYXlpbmc= 40551\nIG92ZXJk 40552\nX3V0Zg== 40553\nLnNr 40554\nIEZvbA== 40555\nJHBhZ2U= 40556\nLE9iamVjdA== 40557\nIGJlZXM= 40558\nYWxhcnk= 40559\nYnVsbGV0 40560\nX2xpYnJhcnk= 40561\nT2ZmZXI= 40562\nbG9jYXRlZA== 40563\nIChfLA== 40564\n4oCcSGU= 40565\nIE93bmVycw== 40566\nKSkuCg== 40567\nIGJyaQ== 40568\nLkFkbWlu 40569\na3Rpb24= 40570\n0LvRjtGH 40571\nIGVyb3RpY2k= 40572\nQ2FuY2VsbGVk 40573\nIGFncg== 40574\ncmV2aWV3cw== 40575\nX2RtYQ== 40576\nUklDVA== 40577\nIGdmeA== 40578\nbXBp 40579\ncHBv 40580\nIC8vQA== 40581\nIHVwcGVyY2FzZQ== 40582\nIGNvbW1pdHRpbmc= 40583\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 40584\nVXNlckRhdGE= 40585\nIHZhaQ== 40586\nCXNvcnQ= 40587\nIGNvbmdyYXQ= 40588\nIGRpb3hpZGU= 40589\n0LTQsA== 40590\nLmFyZWE= 40591\nIEpvc2h1YQ== 40592\nIEtvY2g= 40593\nX2JyZWFr 40594\nYXp1cmU= 40595\naXN0aWNhbA== 40596\nX0FMUEhB 40597\nX3ZpZXdz 40598\nIGVsaW1pbmF0aW5n 40599\nT01C 40600\nZW51bWVy 40601\nIEh5ZHJv 40602\nKCoo 40603\nRVJUSUNBTA== 40604\nIGluZXZpdGFibHk= 40605\nIHN0b2xl 40606\nLWVhc3Q= 40607\naWVyb24= 40608\nIGxpbmdlcg== 40609\nL2RvYw== 40610\nxbo= 40611\nIEFscmVhZHk= 40612\nYXNpbw== 40613\nIC0tCg== 40614\nIGFiYnJldg== 40615\nIEF0b20= 40616\naGlt 40617\nIElOU0VSVA== 40618\nc3Vu 40619\n4pmq 40620\nQ09OTkVDVA== 40621\nZXJhdG9y 40622\nIE1hbm5pbmc= 40623\nIDoo 40624\nZ2Fz 40625\nPT4n 40626\nIHF1ZXJ5c2V0 40627\nO30NCg== 40628\nIFBvcHVsYXRpb24= 40629\ndXRlZFN0cmluZw== 40630\ncmVzaWRlbnQ= 40631\nX0ZPTlQ= 40632\nIFJlc3BvbmQ= 40633\nIG9ic2N1cmU= 40634\nIG9ic2VydmFibGU= 40635\nIENvbnRyaWJ1dG9ycw== 40636\na29u 40637\nIE11c2s= 40638\nZXhhbw== 40639\nIFR1Yg== 40640\nQm9vdEFwcGxpY2F0aW9u 40641\nU09S 40642\nLkhvcml6b250YWw= 40643\nLmZpbmRCeQ== 40644\nLnBvd2Vy 40645\nIHBvc2l0aXZlbHk= 40646\ndmVuaWVuY2U= 40647\nIEpvbmc= 40648\nIHdoaXN0bGU= 40649\nINC30L3QsNGH 40650\nIGxlbmRpbmc= 40651\nIGRlc3RydWN0aXZl 40652\nIG9uRGVsZXRl 40653\nYXV0aG9yaXphdGlvbg== 40654\nKCk7Pz4= 40655\nX29yaWdpbmFs 40656\nc2NpZW5jZQ== 40657\nYXRyYQ== 40658\nPyw/LA== 40659\nIEFzYw== 40660\nIGNvbnZpbmNpbmc= 40661\nJGE= 40662\nb3JnZW4= 40663\nX0RhdGU= 40664\nIFByb3ZpZGU= 40665\nIGxvbmVseQ== 40666\nKScK 40667\nZXhjaGFuZ2U= 40668\nOz8+Cg== 40669\nLmZhc3Q= 40670\nU2FtcGxlcw== 40671\nTG9uZG9u 40672\nJ10pDQo= 40673\nIElvbmlj 40674\nIHBlc3Nv 40675\nIEtuaWdodHM= 40676\nIFJhZg== 40677\nX2F0dHJz 40678\nIHJlcGVhbA== 40679\nPk1haW4= 40680\nIE9yZGVyZWQ= 40681\nX05ldw== 40682\nPSIiPjwv 40683\ndXJscGF0dGVybnM= 40684\nQVRJT05BTA== 40685\ncGVlY2g= 40686\nIElkYWhv 40687\nIHByaW5jZXNz 40688\nIEN1c3RvbWVycw== 40689\nYXdheXM= 40690\nYWRi 40691\nIEJyeWFudA== 40692\nbm9uY2U= 40693\nIGFkdWw= 40694\nIGBgKA== 40695\nIGFmdGVybWF0aA== 40696\nPWRpY3Q= 40697\ndGV4dEJveA== 40698\nIHNwZXJt 40699\nIGNvdWdo 40700\nSG9y 40701\n4oCZUw== 40702\nLkNvbXBvbmVudFJlc291cmNlTWFuYWdlcg== 40703\nIHJlZ3VsYXRvcg== 40704\nIHBhcnRuZXJzaGlwcw== 40705\nL3Byb2plY3Rz 40706\ndHJ5cw== 40707\nIExhc2Vy 40708\n4p+p 40709\nIEZ1bms= 40710\nIHVuY29uc2Npb3Vz 40711\nIGNydXN0 40712\nIFRlYW1z 40713\nIEJhbm5lcg== 40714\nIEhvbmV5 40715\nbGVtcw== 40716\nIG1heFdpZHRo 40717\nUG9pbnRlckV4Y2VwdGlvbg== 40718\nZmFkZU91dA== 40719\nLVN0 40720\nIHN0cmFuZ2Vycw== 40721\nX0dP 40722\nV3JpdGFibGU= 40723\nX0luZm8= 40724\nLk5vbk51bGw= 40725\nYW5ub3RhdGlvbnM= 40726\nIEdE 40727\nIGVuZG9yc2Vk 40728\nCVRva2VuTmFtZQ== 40729\nIERlcGVuZGluZw== 40730\nWU5BTQ== 40731\nIE1ldGVvcg== 40732\nIEluY3JlYXNl 40733\nLk1hbnk= 40734\nPT0o 40735\nLlVVSUQ= 40736\nX0tFUk5FTA== 40737\nIHZpZMOp 40738\nIHBx 40739\nIFF0R3Vp 40740\nIFZhcmlvdXM= 40741\nIGpvaG4= 40742\nX3BhdGNo 40743\nIHRvdXRlcw== 40744\nIEZhaWw= 40745\nIHN1cnZpdmluZw== 40746\nKCIkew== 40747\nICAgICAgIA0K 40748\nIGltYWdlVXJs 40749\nLndvcmRwcmVzcw== 40750\nc291cmNlcw== 40751\nCWdsVmVydGV4 40752\n4oCZYQ== 40753\nIGVzY29s 40754\nUkFSWQ== 40755\nIFNuYWtl 40756\nIHF1aW50 40757\nIGxhc3Rz 40758\nIEhhcm1vbg== 40759\nIGNvaWw= 40760\nIGV4cGxvaXRhdGlvbg== 40761\nbGVlbg== 40762\nJz4iOwo= 40763\nIFNFUlZFUg== 40764\nIEhFQURFUg== 40765\nX3ZlbG9jaXR5 40766\nIEludm9rZQ== 40767\nLnRpbWVzdGFtcHM= 40768\nIHN1bGY= 40769\nSVFVRQ== 40770\nIGluaGFiaXRhbnRz 40771\ncGhpbnM= 40772\nYXp6bw== 40773\nIG1vbm8= 40774\nTGVnZW5k 40775\nIG5vbmNl 40776\nSUZF 40777\nOyI7Cg== 40778\nLWNyZWF0ZQ== 40779\nIiIsCg== 40780\ncGVybWl0 40781\nIEltbWlncmF0aW9u 40782\nIHBhdGhuYW1l 40783\nZmZlY3RpdmU= 40784\n4pmA4pmA 40785\nIGV4YW1z 40786\nLWV2ZW50 40787\nIFRpbGw= 40788\nW21pZA== 40789\nRklY 40790\nO2NvbG9y 40791\nKE9yZGVy 40792\nX3RyYWl0cw== 40793\nIG9yZGVyQnk= 40794\nIHN1bnQ= 40795\nIE5pY2hvbGFz 40796\n2LI= 40797\nIHN1bm55 40798\naW5lcnM= 40799\nIGFjY2Vzc2liaWxpdHk= 40800\nIEhC 40801\nLmNvbXA= 40802\nCW9w 40803\nIG1pbm9yaXRpZXM= 40804\nZXRoZXVz 40805\nIGNvbGxhYm9yYXRpdmU= 40806\ncHJpdA== 40807\nSElS 40808\nIHdyYXBz 40809\nCWRyYXc= 40810\nZ29k 40811\nIElY 40812\nLmFwcHM= 40813\nIE5N 40814\nIGlycmVsZXZhbnQ= 40815\nIFRpZ2Vycw== 40816\nIGRpYWc= 40817\nR1Y= 40818\nIEFjY2Vzc29yaWVz 40819\na29udA== 40820\nIHNpbXBsaWZ5 40821\nIEZhdm9yaXRl 40822\nX3Rvb2xz 40823\nKFtdKTsK 40824\nIHRvd2Vycw== 40825\nQmVz 40826\nIGh1bnRlcg== 40827\nIHNhbG9u 40828\nKGJ1ZmY= 40829\nCWRlYnVn 40830\nIG1hbHdhcmU= 40831\nTW92aW5n 40832\nLW9wdGlvbnM= 40833\nKSsn 40834\nIExPVkU= 40835\nX1NPQ0tFVA== 40836\nX2Zpbg== 40837\nIERlbGF3YXJl 40838\nIHNoZXJpZmY= 40839\nLWludmFsaWQ= 40840\nIEZVTEw= 40841\nINC/0L7QtA== 40842\nZWxhcw== 40843\nInN0cmluZ3M= 40844\nIFJlcHJlc2VudGF0aXZlcw== 40845\nc3VyZmFjZQ== 40846\ncmVzb2x2ZWQ= 40847\naHRkb2Nz 40848\nKSk6DQo= 40849\nIHByZXNzdXJlcw== 40850\nIG5vcm1z 40851\nIHBsYQ== 40852\nIHN1cm5hbWU= 40853\nIHBvc3RhbA== 40854\nIERlcGFydA== 40855\nIHNsYXVnaHRlcg== 40856\nb3JpZGE= 40857\nIGhlYmJlbg== 40858\nIGRlc2Fy 40859\nY29tcGFjdA== 40860\nX0xBTkc= 40861\n5ZCI 40862\nb3BvbHk= 40863\nX3JhZA== 40864\nIFNURE1FVEhPRA== 40865\nTGF6eQ== 40866\nICAgCQ== 40867\nLi4uLA== 40868\nKHdlYg== 40869\nIFBvbnQ= 40870\nIGV0d2Fz 40871\nIHVwd2FyZA== 40872\nX2hhdA== 40873\nIF0sCgo= 40874\nIGJhc2VVcmw= 40875\nIHdvcnJ5aW5n 40876\nLWFkZG9u 40877\nKGdldENsYXNz 40878\nU1BJ 40879\nIGNhcHR1cmluZw== 40880\nKX0sCg== 40881\nRWZmZWN0cw== 40882\nIGNvbXBldGVudA== 40883\nIGZvdWw= 40884\nIHN1YnNjcmliaW5n 40885\nIE9CSkVDVA== 40886\nSVhFTA== 40887\nYnVja3M= 40888\nKGVkZ2U= 40889\nKHBhc3M= 40890\nIFBldGVyc29u 40891\nIGJvb2Jz 40892\nIERlbGF5 40893\nX3NxdWFyZQ== 40894\nZWxpbQ== 40895\nb3RlcnM= 40896\nX1BD 40897\nJUU= 40898\nb25jbGljaw== 40899\nIFNWRw== 40900\nIHRvcHBlZA== 40901\nIGZpc3Q= 40902\nc21hcnQ= 40903\nIFJhbHBo 40904\nKG93bmVy 40905\nam91cnM= 40906\nIGJyb256ZQ== 40907\nIEFyZ3VtZW50RXhjZXB0aW9u 40908\nKG9yaWdpbmFs 40909\nX1NDQUxF 40910\nX2Nw 40911\nIHJlY29tbWVuZHM= 40912\nLnNldFN0eWxl 40913\nU3VyZQ== 40914\nTEFORA== 40915\nIHJlcGVhdGluZw== 40916\nTWF0dA== 40917\nLlZpc2liaWxpdHk= 40918\nIGVudGVycHJpc2Vz 40919\nLlNldHVw 40920\nKHNjZW5l 40921\nIFJlYWN0aXZl 40922\ndXJnZQ== 40923\nYnc= 40924\nLlB1dA== 40925\ncGVyc2lzdA== 40926\nLmNvb2tpZQ== 40927\nIEF1ZGk= 40928\nYHM= 40929\nc3VwcGxpZXI= 40930\nKEZvcm0= 40931\nwqE= 40932\nX3Nv 40933\njIA= 40934\nIExlZ2lvbg== 40935\ndHRl 40936\nTmQ= 40937\nTG9zcw== 40938\nKGF0dHJz 40939\nLnNjYXR0ZXI= 40940\nIGdyb29t 40941\nIGdsaW1wc2U= 40942\nIG5haWxz 40943\nIGN1bXVsYXRpdmU= 40944\nIGZhemVy 40945\nX3NlcnZpY2Vz 40946\nLk51bQ== 40947\naWJpbGl0 40948\nX3Jlc29sdXRpb24= 40949\nIFR4 40950\ndW1pbml1bQ== 40951\nb3Bh 40952\nLnNjaGVkdWxl 40953\nc210cA== 40954\n4LiV 40955\ndXJyeQ== 40956\nw7xr 40957\nZ29vZw== 40958\nX3NpZ25hdHVyZQ== 40959\nLmludG8= 40960\nIFN0ZXBz 40961\nIGhvbWVvd25lcnM= 40962\nIE5TVVJM 40963\nIFBBQw== 40964\nICAgICAgICAgICAgCgo= 40965\nPicpCg== 40966\nZW5o 40967\nIGluY2Fw 40968\nJE1FU1M= 40969\nIG1vaW5z 40970\nIEZp 40971\nIG9mZnNlYXNvbg== 40972\ncHJlc3Npb25z 40973\nPi48Lw== 40974\nIE1hcmtlcg== 40975\nIG9uQ2xvc2U= 40976\nTEVWRUw= 40977\nIGludGVyZmVyZQ== 40978\nIENvbGlu 40979\nIFJlc2lzdGFuY2U= 40980\nRGlzY291bnQ= 40981\nIFdlYkVsZW1lbnQ= 40982\nIGJhdGhyb29tcw== 40983\nbGVnYWN5 40984\nIENhcHR1cmU= 40985\nIGFyaXNpbmc= 40986\nICIpOwoK 40987\n0YjQuNCx 40988\nIEluZmluaXR5 40989\nQWR2ZXJ0aXNlbWVudHM= 40990\nIENvbWluZw== 40991\nIFBST0pFQ1Q= 40992\nX1BST1RPQ09M 40993\nIHVzZURpc3BhdGNo 40994\nLmNoYW5uZWxz 40995\nIENpdGl6ZW5z 40996\nZW50cmU= 40997\nX21w 40998\nLkNvbnN0YW50cw== 40999\nIFNlcmlhbGl6ZQ== 41000\nX0lOQw== 41001\nKGx1YQ== 41002\nIGNsYXNo 41003\nX3dpdGhvdXQ= 41004\nLmtleVNldA== 41005\nIHJlY2VpdmVycw== 41006\n5pa55rOV 41007\nKG1lbQ== 41008\nIEhvcml6b250YWw= 41009\nIGNvY2t0YWls 41010\nIGNob29zZXM= 41011\nLklubmVy 41012\nIHJlbGllZA== 41013\nb3VudGVy 41014\nICJe 41015\nIHRlbmFudHM= 41016\nImA= 41017\nX1BN 41018\nZXJzZWQ= 41019\nIH19Ij48Lw== 41020\nIHByb3ZpbmNlcw== 41021\nX1JBVw== 41022\nXEFwcA== 41023\nIHByb3N0aXR1ZXI= 41024\nX2dhaW4= 41025\nLnRlbmNlbnQ= 41026\nZmZlY3Rz 41027\nKHBr 41028\nc2t1 41029\nIHVzYWJsZQ== 41030\nRVJWRUQ= 41031\nIGFudGVubmE= 41032\naGVh 41033\ncGxpc3Q= 41034\nX1BMVUdJTg== 41035\n0YHQuw== 41036\nLmxvb2t1cA== 41037\n4buB 41038\nIGVubGFyZw== 41039\nIHBpc3M= 41040\nSGFt 41041\naW1hcA== 41042\nIGludmFsaWRhdGU= 41043\nIHNpbGs= 41044\nPSIjIj4K 41045\nIEdyYXNz 41046\nIEdvYWw= 41047\nX3BkZg== 41048\nSGFuZGxlcnM= 41049\nIHN0YWNrcw== 41050\nLmdldEZ1bGxZZWFy 41051\nPVtdOwo= 41052\n6L2m 41053\nLFY= 41054\nKHNwbGl0 41055\n0YPQvdC6 41056\nIGJha2VjYQ== 41057\nIH4vLg== 41058\ncGV6 41059\ndGFpbHM= 41060\nIEdsZW4= 41061\nIHNldEltYWdl 41062\nIENvbWlj 41063\nQkxPQ0s= 41064\nCVRoaXM= 41065\nb2FkZXI= 41066\nIGNhcGl0YWxpc3Q= 41067\nX1NURVA= 41068\nKEJvb2xlYW4= 41069\nIENvcnJlY3Q= 41070\ncmluYQ== 41071\nIGNvbmNhdGVu 41072\n5a6e 41073\nKCk6Cgo= 41074\nIHVuYW5pbQ== 41075\nbGxp 41076\nYWxhcnM= 41077\nLW5l 41078\nIGRpdm9y 41079\nIEtpY2tzdGFydGVy 41080\nXS5f 41081\nPG51bWJlcg== 41082\nL21lbnU= 41083\nR1JBUEg= 41084\ndmlzaXRvcg== 41085\nIGltcHJvcGVy 41086\nX05FWFQ= 41087\nIGJpc2E= 41088\nYmFja2dyb3VuZENvbG9y 41089\nL2lucHV0 41090\nIG1vaQ== 41091\nR29hbA== 41092\nbGlxdQ== 41093\nIG1pc2NvbmR1Y3Q= 41094\nIGNvbXByaXNlcw== 41095\nYXducw== 41096\nIFBpZQ== 41097\ncmFpcw== 41098\ncm9sZXVt 41099\nIGN1cnNl 41100\neXU= 41101\nX3BvbGw= 41102\nLmN1cnJlbnRVc2Vy 41103\nRVNI 41104\nXSlb 41105\nIHN0b3J5dA== 41106\nKT87Cg== 41107\nKj0= 41108\nIEJ1cmc= 41109\nL2xheW91dA== 41110\nX2JhY2tlbmQ= 41111\nOz8+PC8= 41112\nIFdoYXRzQXBw 41113\nIE1vdW50YWlucw== 41114\ndmlzaW9ucw== 41115\nZmx1ZW5jZQ== 41116\nLmNyZWF0ZUNvbXBvbmVudA== 41117\nIFBzeQ== 41118\nZm9yZ2V0 41119\nc3J2 41120\nX0NPTVBPTkVOVA== 41121\nIE5leHVz 41122\nICl7 41123\nZW5kaQ== 41124\nSU1VTQ== 41125\nIEdG 41126\n57uE 41127\n4oCUdGhhdA== 41128\nYms= 41129\nTW96aWxsYQ== 41130\nIGRlZmVuZGVycw== 41131\nLXNldHRpbmdz 41132\naW1taW5n 41133\nIE9QVA== 41134\nIENX 41135\nIHRoYXRz 41136\nIE9wZW5pbmc= 41137\nUmVsZWFzZWQ= 41138\nbnBt 41139\nIGhycw== 41140\nIGdyb3VwZWQ= 41141\nLyIuJA== 41142\nIEhpc3RvcmljYWw= 41143\nKCQiew== 41144\nb3ZpYw== 41145\nKHNpZ24= 41146\nIFBob3RvZ3JhcGh5 41147\nIHNpZ251cA== 41148\nX0FSQ0g= 41149\nLnRlc3RuZw== 41150\nL2FuZ3VsYXI= 41151\nUmVzdENvbnRyb2xsZXI= 41152\nc2hpdA== 41153\ndWxsZQ== 41154\nLnBhdXNl 41155\nKFtdLA== 41156\nKHF1ZXN0aW9u 41157\naWxvZ3k= 41158\nIEV1Zw== 41159\nLWxvY2Fs 41160\nIGt2aW4= 41161\nIHJlc2VydmF0aW9ucw== 41162\nb2JpYQ== 41163\nIHN1YnNpZGlhcnk= 41164\nIGFjY3VtdWxhdGVk 41165\nIFFWYXJpYW50 41166\nIEJKUA== 41167\nIE5vcm1hbg== 41168\nIEludGVncmF0aW9u 41169\nLlZhcmlhYmxl 41170\nKFJlc291cmNl 41171\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 41172\nRXhwb3Nl 41173\nICd9 41174\nLkNPTE9S 41175\nINGH0LjRgQ== 41176\nQWpheA== 41177\nIHRocnU= 41178\nTW92aWVz 41179\nIHByb3Bvc2l0aW9u 41180\nL3RoZW1l 41181\nTW9kZWxQcm9wZXJ0eQ== 41182\nIEF3cw== 41183\nIEFuZHJlYQ== 41184\nIE1lcmdl 41185\nLmZpbmlzaA== 41186\nKHJlcXVpcmVk 41187\nIFByZWw= 41188\nZWxlZA== 41189\n5pON5L2c 41190\nLlRSQQ== 41191\nTUFT 41192\nIHJlYWxpc2Vk 41193\ncm9pZHM= 41194\nCWZu 41195\ncmg= 41196\nLiI8Lw== 41197\ndmlkaWE= 41198\nIGRlcHVpcw== 41199\nIEJW 41200\nTG4= 41201\nIGx1c3Q= 41202\nQXNj 41203\nCQkJCQkJCSA= 41204\naXNsZQ== 41205\nLWNhcmU= 41206\nX0lOVg== 41207\nIERyZXc= 41208\nIHdoYXRz 41209\nIENhcGFjaXR5 41210\nUGFybQ== 41211\nX21vbml0b3I= 41212\nLnN0dWRlbnQ= 41213\nIFJOQQ== 41214\nLmVuZHN3aXRo 41215\nYmlo 41216\nIE1MQg== 41217\nL3Byb2plY3Q= 41218\nIHJlc3Rpbmc= 41219\nc2VwYXJhdG9y 41220\neWQ= 41221\nZXJ0aWE= 41222\nIG1vbml0b3JlZA== 41223\nIj4qPC8= 41224\nLkZD 41225\nIE5FV1M= 41226\nIENhbGxz 41227\nIGFkZXF1 41228\nQ2hlY2tpbmc= 41229\nZXN0aW1hdGU= 41230\nIHJlY2FsbHM= 41231\nX2ZyZXF1ZW5jeQ== 41232\nIHVzZVJlZg== 41233\nIEdyb3Zl 41234\nIFhpYQ== 41235\nIMOt 41236\nZXNzZW5nZXI= 41237\nLWNvc3Q= 41238\nLmZj 41239\nIEt1bWFy 41240\nLkZvY3Vz 41241\nZWxsYW5lb3Vz 41242\nLkFsZXJ0 41243\nZWF4 41244\nIG9yY2g= 41245\nLnBt 41246\nIGxhbmRsb3Jk 41247\nKHBvcA== 41248\nX2FjdHVhbA== 41249\nIExC 41250\nR3JhbmQ= 41251\nLnJlbmRlcmVy 41252\nIGxvYg== 41253\nY3VzdG9tZXJz 41254\nIGNhcHR1cmVz 41255\nV0lORE9X 41256\nIGRvY2g= 41257\nIGFwb2xvZ3k= 41258\nIEphbWE= 41259\nQFs= 41260\nLnRha2U= 41261\nbm9vcA== 41262\nIGx1bQ== 41263\nIGRpZmZlcmVudGlhbA== 41264\nIGVmZmljYWN5 41265\nCUlO 41266\nX0JPWA== 41267\nX3Nk 41268\nX3J0 41269\nY29kZXI= 41270\nb3VuY2VtZW50 41271\naGFzQ2xhc3M= 41272\nIHJpc2t5 41273\nIEVzdGFkbw== 41274\nLURE 41275\nIENhcnNvbg== 41276\nU3VmZml4 41277\nIHRvZGE= 41278\nIFRyYWNrZXI= 41279\nIERlbGVnYXRl 41280\nYCxg 41281\nIFBhcmtpbmc= 41282\nIG5lcg== 41283\nYXpv 41284\nIEZpbGVJbnB1dFN0cmVhbQ== 41285\nIHJlY291bnQ= 41286\ncWk= 41287\nY2tlbg== 41288\nIHNvY2lhbGlzdA== 41289\nIEludm9pY2U= 41290\nINC/0YDQvg== 41291\nJSIs 41292\nZW5uZW4= 41293\nIHZpdm8= 41294\nIG9yZ2FuaXphdGlvbmFs 41295\nIHVuY29tbW9u 41296\ndXRhcg== 41297\nIGh1bGw= 41298\nVHVlc2RheQ== 41299\nIGFzc2Vzc21lbnRz 41300\nKGFwcGxpY2F0aW9u 41301\nIHByZW1pc2U= 41302\nU3RhcnRUaW1l 41303\nIGRr 41304\nIGludGVyZmVy 41305\nIFF1ZWVuc2xhbmQ= 41306\nIGNyZWRlbnRpYWw= 41307\nIGxlaXN1cmU= 41308\nWVo= 41309\nIENtZA== 41310\nQlVT 41311\ndXNhbg== 41312\nCXZlYw== 41313\naW9sb2dpY2Fs 41314\nIExvdHM= 41315\nIGVubGlnaHQ= 41316\nIGZyZXNobWFu 41317\nIENPTU1BTkQ= 41318\nIEFjdGlvbkxpc3RlbmVy 41319\ndXRt 41320\nYXJpdXM= 41321\nVHdpZw== 41322\nIHN3ZXB0 41323\nLXRvb2w= 41324\nxJA= 41325\nY2hhcHRlcg== 41326\nLWdyYWRl 41327\nIGN1cmlvc2l0eQ== 41328\nIHN1c3RhaW5hYmlsaXR5 41329\nIE1pbmVjcmFmdA== 41330\nd2VuZA== 41331\nSWZFeGlzdHM= 41332\nIEN1bHR1cmFs 41333\nIFNhY3JhbWVudG8= 41334\nTGF5ZXJz 41335\nU3Vic2NyaWJlcg== 41336\nLkdyYXBo 41337\nIGxt 41338\nZXN0eQ== 41339\nYWR2ZXJ0 41340\nJHA= 41341\nIEhvY2tleQ== 41342\nIERFVA== 41343\nc2V0VGl0bGU= 41344\neWFuZw== 41345\nIGJhYmU= 41346\nZWxzaXVz 41347\nVHJhdmVs 41348\nIG1lc21v 41349\nKG1hcFN0YXRlVG9Qcm9wcw== 41350\nX1NFTA== 41351\nLXBvcA== 41352\nIGVtaXNzaW9u 41353\n4oCZLgoK 41354\nLnN3aXRjaA== 41355\nb3Rpb25z 41356\nLnBob3Rv 41357\nTFY= 41358\nYW1vZGVs 41359\nIHdvcmR0 41360\nSUdHRVI= 41361\nIFRPREFZ 41362\nT0xT 41363\nX0lERU5U 41364\nIGNvbW1lbnRpbmc= 41365\nRGF0b3M= 41366\nIGhpbGFyaW91cw== 41367\nKGFueQ== 41368\nIGRhbXA= 41369\nLWNvbnRyb2xsZWQ= 41370\nICI8Pw== 41371\nX2JsYWNr 41372\nTmV0QmFy 41373\nLnNldFNlbGVjdGVk 41374\nQ3Nz 41375\nIHF1YXJ0 41376\nIG93bmluZw== 41377\nIEZJRUxE 41378\nLnJlbHU= 41379\nIGxpcw== 41380\n7Jqw 41381\nLlJFTEFURUQ= 41382\nIGxvaw== 41383\nIEZsaXA= 41384\nIHByZXN0aWdpb3Vz 41385\nIGRn 41386\nIElucHV0U3RyZWFtUmVhZGVy 41387\nIHVzdQ== 41388\nIGdpcg== 41389\nIGFuYQ== 41390\nX3B5 41391\ndW5uZWw= 41392\nCXN5c3RlbQ== 41393\nIGNvYXRpbmc= 41394\nIEdlbnJl 41395\nZXJybw== 41396\nIENMSUVOVA== 41397\nIHN0cmV0Y2hlZA== 41398\nLkhhc1ZhbHVl 41399\nOzs7Ozs7Ozs= 41400\n54mI 41401\nIGZpbmFscw== 41402\nLmdldENoaWxkcmVu 41403\nIC0tfX0K 41404\nIENvd2JveXM= 41405\nIEVkaW5idXJnaA== 41406\nIFBsYXph 41407\nYWJlbg== 41408\nQXJ0aXN0 41409\nVVJB 41410\nIEh1Z2hlcw== 41411\nb2JiaWVz 41412\nX25vaXNl 41413\nLk9iamVjdHM= 41414\nRXhwcmVzc2lvbnM= 41415\nIGFudGhyb3A= 41416\nJykpDQo= 41417\nKS4i 41418\nY3JpcHRpdmU= 41419\nIHNhbG1vbg== 41420\nIHdhc3Q= 41421\ncmhv 41422\nLnRpY2s= 41423\nIGV4cGxvcmVz 41424\nIEFsZ29yaXRobQ== 41425\nQ2hhckFycmF5 41426\n4LiE 41427\nX1BBQ0tFVA== 41428\nSkU= 41429\nIl1dOwo= 41430\nLm5vdGU= 41431\nQmFja2luZw== 41432\nIEhvbGRlcg== 41433\ncmVpY2g= 41434\nIFppb24= 41435\nL2dy 41436\nICAgICAgICAgICAgICAgICAgIAo= 41437\nTW90aW9u 41438\nIFRyaWJ1bmU= 41439\nIGNyaXRpY2FsbHk= 41440\nIENSTQ== 41441\nIGJsb3dpbmc= 41442\nIGNvbW1pc3Npb25lcg== 41443\nSm9l 41444\nIFRlbGV2aXNpb24= 41445\nCXByZQ== 41446\nIFRSQU4= 41447\nIFZpa2luZ3M= 41448\nIEJFVA== 41449\nd291bGQ= 41450\nLkNhcHRpb24= 41451\nIGJhY29u 41452\naG1h 41453\nbWVyZ2Vk 41454\nIHN1YnNjcmlwdGlvbnM= 41455\nb2NjdXBpZWQ= 41456\nTGl2ZURhdGE= 41457\nIGFsbG93YW5jZQ== 41458\ncmlnZXNpbWFs 41459\nZGRk 41460\nLmxvZ291dA== 41461\nIFRhbmc= 41462\nIHdhcm10aA== 41463\nTW9kZWxJbmRleA== 41464\nIFByYQ== 41465\nIHNjZW50 41466\nIGhhY2tlcnM= 41467\nIGlsbHVzdHJhdGU= 41468\nSWNo 41469\nIGRpYXM= 41470\nQ0FTRQ== 41471\nIFNjaQ== 41472\nJHVybA== 41473\nIE1PRFVMRQ== 41474\ndXNob3J0 41475\nbGllcnM= 41476\nIERldmljZXM= 41477\nbWluc3Rlcg== 41478\ndW5hbWU= 41479\nIHVucg== 41480\nRXhhbXBsZXM= 41481\nIHJpc2Vu 41482\nLmFp 41483\nY2hyb20= 41484\nX3dvcmtlcg== 41485\nIGFsaWFzZXM= 41486\nTW91c2VFdmVudA== 41487\nIHNldHRlcg== 41488\nIFB1cnBsZQ== 41489\nSm9pbkNvbHVtbg== 41490\nPWU= 41491\nVEhPT0s= 41492\nIFRvdw== 41493\nIENydXNoaW5n 41494\nIEplZGk= 41495\nIEdyaWZmaW4= 41496\nIGtvcw== 41497\nX0ZT 41498\naW5nZXM= 41499\nc29sZXM= 41500\nKG5hbWVz 41501\nIEJpZA== 41502\nLXBvd2VyZWQ= 41503\nTXVsdA== 41504\nYW1pbGlhcg== 41505\nLmNsZWFuZWQ= 41506\nIFppbW1lcg== 41507\nCWNsZWFy 41508\nIHVuc3VwcG9ydGVk 41509\nQ2FsbGFibGU= 41510\nIHJlcHM= 41511\nYWx0ZXJu 41512\nX1JFUE9SVA== 41513\nLmdldENvbHVtbkluZGV4 41514\nX1NUT1JF 41515\nIHN1Y2h0 41516\nc3VidGl0bGU= 41517\nIHBlcmQ= 41518\nq5g= 41519\nLk5PVA== 41520\nfT48Lw== 41521\nOmQ= 41522\nbWRp 41523\nYmluZFZhbHVl 41524\nIERlY2lzaW9u 41525\nUmV0dXJuVmFsdWU= 41526\nLGluZGV4 41527\neGZj 41528\nIHNlcnVt 41529\nZ2V0RmllbGQ= 41530\nQ29ubmVjdGlvblN0cmluZw== 41531\nLW9iamVjdA== 41532\nLnJlY3Y= 41533\nIHVuZGVyZ3JhZHVhdGU= 41534\nLkluZnJhc3RydWN0dXJl 41535\nIEthYg== 41536\nIGFkdmlzb3J5 41537\nLXRyZWU= 41538\nIG11ZQ== 41539\naW5mb3Jt 41540\nLmVtYmVk 41541\nIGVycm9yQ29kZQ== 41542\nbWljcm8= 41543\nIHNwYXJrZWQ= 41544\nIGltYWdlcnk= 41545\nY29uYw== 41546\nX21pc3Npbmc= 41547\nIHN1cnBsdXM= 41548\nS1M= 41549\nCVJUSE9PSw== 41550\nVGVsbA== 41551\ncml1bQ== 41552\nIFJhZGl1cw== 41553\ncmlrYQ== 41554\nbG9zaW9u 41555\nIEhlcm4= 41556\nR2FtbWE= 41557\nIEZlZQ== 41558\nIE5hbWVk 41559\nIENhbnlvbg== 41560\nIEpTT05BcnJheQ== 41561\nIHp3ZWk= 41562\nIFNTSA== 41563\nIHNlcnZhbnQ= 41564\nY29hbA== 41565\nIGRlbnlpbmc= 41566\nIHNwbGl0cw== 41567\nSW5jb3JyZWN0 41568\nIHRveA== 41569\nIEFuYWx5c3Q= 41570\nIGFjY3JlZA== 41571\ndWJsZQ== 41572\nIHd0 41573\nIFRyaWFs 41574\nLmV4dGVuc2lvbg== 41575\nIENhcmVlcg== 41576\nIHNlY3VyaW5n 41577\nIExpbA== 41578\nIHByb2plY3Rpb25z 41579\nIHllYXN0 41580\nTWFkZQ== 41581\nIGZvdW5kYXRpb25z 41582\nYWNpZmlj 41583\nLnZvbHVtZQ== 41584\nIG1pcnJvcnM= 41585\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 41586\nIHZpb2xhdGU= 41587\nYXJzZXJz 41588\nIHNvY2lv 41589\nIHRraW50ZXI= 41590\nIExJTks= 41591\nLmdldFNpemU= 41592\nIFdob2xl 41593\nKXZpZXdEaWRMb2Fk 41594\nCWRvbmU= 41595\ndWRlYXU= 41596\nXCI+PC8= 41597\nQW5kcmV3 41598\nZXJi 41599\nIGbDtg== 41600\nLmNsdXN0ZXI= 41601\nIGRpc2NvdXJzZQ== 41602\nX0RFRklO 41603\nIHB1ZWRlbg== 41604\nIExPVw== 41605\nLmF2 41606\nIHByZWNh 41607\nIHF1bw== 41608\nIHZlbG9j 41609\nLCcn 41610\nIHh5eg== 41611\nCXBhZGRpbmc= 41612\nIHRvbWF0b2Vz 41613\nIEJlbnQ= 41614\nX2N1cnI= 41615\nTlNEYXRl 41616\nIGdldEN1cnJlbnQ= 41617\nIFtg 41618\nV2VkbmVzZGF5 41619\nLkJhcg== 41620\nIFZvdXM= 41621\naW56 41622\nIFF1aW5u 41623\nZXhjZWw= 41624\nZG9z 41625\nIG91dGRhdGVk 41626\nT1VUSA== 41627\nIE1ha2Vy 41628\nZXBlbmRlbmN5 41629\nIGR1bGw= 41630\nIFdpbm4= 41631\nb2dl 41632\nY2xhdmU= 41633\nIG5vdmE= 41634\nIGF2YWw= 41635\nQ2FwdA== 41636\nIFNwb3RpZnk= 41637\nIGp1bA== 41638\nKXRhYmxlVmlldw== 41639\nIGZpbGVuYW1lcw== 41640\nIGVza29ydA== 41641\n5ZGo 41642\nIHNrZXc= 41643\ndGVyaW9y 41644\nIGZpbmFuYw== 41645\nIHRhYmxh 41646\nIFVJQg== 41647\nICgpOg== 41648\nIERvY2tlcg== 41649\ncGVyY2VudGFnZQ== 41650\nTWVldA== 41651\naWNoaQ== 41652\nIGludGVyaW0= 41653\nICc9Jw== 41654\nLkpTT05PYmplY3Q= 41655\nKGZpZA== 41656\nIGRvd250 41657\nIHRyYW5zaWVudA== 41658\nIFN0ZXBo 41659\nIGlnbm9yYW5jZQ== 41660\nIENvZGVz 41661\nPScnLA== 41662\nIElDRQ== 41663\nIHRyYW5xdQ== 41664\nIEV4dGVuZGVk 41665\nIG11bmQ= 41666\nIEhPTUU= 41667\nIGtpbG9tZXRlcnM= 41668\nIGltYWdlbg== 41669\nb3V4 41670\nKHN6 41671\nWW91bmc= 41672\ndWZmZWQ= 41673\nIFdha2U= 41674\nIGFpZGU= 41675\nUFJPQw== 41676\nIFJhdA== 41677\nIExpdGg= 41678\nYmFydA== 41679\nIEFycmFuZ2U= 41680\ncHJvbXB0 41681\n0KM= 41682\nKGN0 41683\nIEludGVydmFs 41684\nZGVwdA== 41685\nRGFuaWVs 41686\nIGZpbGxz 41687\nLnRlbnNvcg== 41688\nKHRyaW0= 41689\nIGplYWxvdXM= 41690\nRmVi 41691\nXENvbW1vbg== 41692\nIGFtZW5kbWVudHM= 41693\nX29wZXJhdG9y 41694\nX2N1c3RvbWl6ZQ== 41695\nIF1d 41696\nIGJu 41697\nIGRpc2FwcG9pbnRtZW50 41698\nIG1pbGxlbm4= 41699\nLndoZW4= 41700\nIG9iZXk= 41701\nIG9mZmVuZGVycw== 41702\nV2lsZA== 41703\nIGNlbGxGb3I= 41704\nIGFwcGFyYXR1cw== 41705\nLmFmdGVy 41706\nIEVQUw== 41707\nIGFkb3JhYmxl 41708\nb3BlcmFuZA== 41709\nKGxpc3RlbmVy 41710\ndmVhbA== 41711\nICko 41712\nIGNhcmRpb3Zhc2N1bGFy 41713\ndXBsaWNhdGVz 41714\ncmlzdG9s 41715\nIHJlZnVzZXM= 41716\nKFFXaWRnZXQ= 41717\nIGVsZW1lbnRv 41718\nTnVtYmVyT2Y= 41719\nLmRlbGF5 41720\nLmdyb3Vwcw== 41721\nIj4nKw== 41722\n5Z2A 41723\nYWNlbmN5 41724\nKFVSTA== 41725\nX2hhbGY= 41726\nPWw= 41727\nIGxpc3RWaWV3 41728\nKHNlY3Rpb24= 41729\nLnRvQXJyYXk= 41730\nKy8= 41731\nIFJvZHJpZ3Vleg== 41732\naXN0cmVhbQ== 41733\nIGVsaWdpYmlsaXR5 41734\nOjot 41735\nLm5ld0luc3RhbmNl 41736\nUEI= 41737\nIEFzc2V0cw== 41738\nIENvbXBvc2l0ZQ== 41739\nIExhYnM= 41740\nIEhhbWFz 41741\nKyspOwo= 41742\nIGJsaw== 41743\nIE5lbw== 41744\nTHVj 41745\nQGxvZ2lu 41746\nIHVuYXdhcmU= 41747\nLm1ldA== 41748\nX1JFTEVBU0U= 41749\nKFNU 41750\nQU1JTA== 41751\ncmlrZQ== 41752\nICgpewo= 41753\nKHNwcmludGY= 41754\nIEFjY291bnRz 41755\nIFZJRVc= 41756\nIEFq 41757\n44Kw 41758\nIHdoaXNr 41759\nIGlkaQ== 41760\nIHJvZGU= 41761\nIGlobg== 41762\nIEVsZW1lbnRhcnk= 41763\nUXR5 41764\nIGludHJpZ3Vpbmc= 41765\nIOWk 41766\nSm9icw== 41767\nCW9mZnNldA== 41768\nIEFobWVk 41769\nIFRhbGliYW4= 41770\nIOiOt+WPlg== 41771\nIGluamVjdGVk 41772\nLkF1dGhlbnRpY2F0aW9u 41773\nX2xpbmVhcg== 41774\nLkRlY2ltYWw= 41775\nIGFwcGxlcw== 41776\nIHNoYXJlaG9sZGVycw== 41777\nIGJha2Vk 41778\nLmRpZmY= 41779\nIEVkZGll 41780\nb2tlcnM= 41781\nIGNvbmZyb250ZWQ= 41782\ndm9pY2Vz 41783\nIHR1cw== 41784\nIFNwaW4= 41785\nTk9ERQ== 41786\nX1Vu 41787\nQ1RY 41788\nL2dvb2dsZQ== 41789\nVGVtcGVyYXR1cmU= 41790\nICcnKS4= 41791\nIG1hZ25pZmljZW50 41792\nIHN0YXJ0SW5kZXg= 41793\nc2VtYmxlcw== 41794\nQW55b25l 41795\nems= 41796\nZWhlbg== 41797\nIERhbWU= 41798\nLnN0cmljdA== 41799\nIHJlcGxhY2Vz 41800\nIGxpbmViYWNr 41801\nIHB1c2hlcw== 41802\nIGNoZWVr 41803\nIFNoaQ== 41804\nX0JZVEVT 41805\nUkVB 41806\n4bqjbg== 41807\nX0NPTk5FQ1RJT04= 41808\nR2F0ZXdheQ== 41809\nIFRyYXZpcw== 41810\nIEFY 41811\nIEJhc2ljYWxseQ== 41812\nIFVwZ3JhZGU= 41813\n4Ko= 41814\ndGhlbWVz 41815\nZXJtbw== 41816\na29y 41817\nRmVtYWxl 41818\nX2F0dGFjaA== 41819\nIOyCrOyaqQ== 41820\nIHBveg== 41821\nPT09PT09PT09PT09PT0K 41822\nKHN5bWJvbA== 41823\nIFNlY3Rvcg== 41824\nX18pCgo= 41825\nX3BhZGRpbmc= 41826\n77yaIg== 41827\nIGZhYnM= 41828\nIHJhbmdlZA== 41829\nc2V0TmFtZQ== 41830\nIHBlcnJvcg== 41831\n4pc= 41832\nIEZpbGVSZWFkZXI= 41833\nIGZ1bGZpbGxlZA== 41834\nX0N1cnJlbnQ= 41835\nIGRvbWluYXRl 41836\nIHNtdWdn 41837\nUG9zdE1hcHBpbmc= 41838\nX2ZvcmNl 41839\nIGJsb2M= 41840\nIEdpYW50 41841\nKHZpZGVv 41842\nIENV 41843\nU3lzdGVtU2VydmljZQ== 41844\nIGVsZg== 41845\nIGtvbnRha3Q= 41846\n66o= 41847\na2Vlcw== 41848\nZ3Rr 41849\nIHBhcmFtSW50 41850\nIG1hcmt1cA== 41851\ndWFsZXM= 41852\nIGFjY291bnRlZA== 41853\nIGdhbmdiYW5n 41854\nUllQVA== 41855\nIFdyb25n 41856\nIGNyZWRpdGVk 41857\nIE1FU1NBR0U= 41858\nIGZsYXdz 41859\nIGJidw== 41860\nIG1ldGFib2xpYw== 41861\nIE9FTQ== 41862\nL2V2ZW50 41863\nKENvbGxlY3RvcnM= 41864\nbW9udG9u 41865\nYXBwZWFy 41866\nIG9wdGVk 41867\nIGNoZWF0 41868\nIGRhdg== 41869\nIFByb2NlZWQ= 41870\nIOq4 41871\nYW5rZWQ= 41872\n0LjQtw== 41873\nYW5zaw== 41874\nIEhhbmc= 41875\nIENsZXI= 41876\nIGRpc2d1 41877\nIGNtYXA= 41878\nLmNsanM= 41879\nIGF1bWVudA== 41880\nbGV6 41881\nIEpvaW5lZA== 41882\nX3JlY2VpdmVk 41883\nIGFlcmlhbA== 41884\nb3RlbA== 41885\nIGdyZWV0 41886\nInM= 41887\nIEdlbmVzaXM= 41888\nIENhbGlm 41889\ncGFuaW9u 41890\nIHRhaWxvcmVk 41891\nbWFwcGluZw== 41892\nYW5kRXhwZWN0 41893\nLnRyYWNr 41894\nYXRvbXk= 41895\nIE93 41896\ndWxsYWg= 41897\nLlllcw== 41898\nIFNpbXBsZU5hbWU= 41899\nZGJo 41900\nJ2Vu 41901\nIG5vbnNlbnNl 41902\nIHBoaWxvc29waGljYWw= 41903\nKGdldENvbnRleHQ= 41904\nIGlzc28= 41905\nIEFDRQ== 41906\nc3RhcnREYXRl 41907\nIGLEmWQ= 41908\nIEFVVEhPUg== 41909\nIEdsb2Jl 41910\nIGluc2VjdHM= 41911\nX0Fs 41912\ndXNoaW5n 41913\n6K6w 41914\nL0hvbWU= 41915\nIExvY2FsRGF0ZQ== 41916\nbmVlZGVk 41917\naGVzaXZl 41918\nIGlsbHVzaW9u 41919\n5LqM 41920\nIHRyYXQ= 41921\neG8= 41922\nL2RldGFpbA== 41923\nX01BVENI 41924\nIGJyb2FkYmFuZA== 41925\nIHdhbA== 41926\nIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbg== 41927\nSVJFQ1RJT04= 41928\nIG5vcnRoZWFzdA== 41929\nZXNpdW0= 41930\nIENsaWVudGU= 41931\ndWxhbmNl 41932\nbnR5 41933\nIHRlY24= 41934\nRGV2aWNlcw== 41935\nIGdyYWlucw== 41936\nIE9n 41937\nIFNFTA== 41938\ndWRpYW50 41939\nICsrOwo= 41940\nIGV4cGxhbmF0aW9ucw== 41941\nb2Njbw== 41942\nIGRpZXRz 41943\nIGNvaG9ydA== 41944\nKGNvbnRyb2xsZXI= 41945\nLkl0ZXJhdG9y 41946\nLXJpY2g= 41947\ncm9jZXNz 41948\nR0Q= 41949\nIGNhcmJvaHlkcg== 41950\nIGZyaWVk 41951\nIEVtcGxveW1lbnQ= 41952\n7J6l 41953\nIExlb25hcmQ= 41954\nXyR7 41955\ncXVhcmVz 41956\nIGNvbXBhbmlvbnM= 41957\nIHBhcmlz 41958\nIHN0aW11bGF0aW9u 41959\nIFpvbw== 41960\nIHJlbGV2YW5jZQ== 41961\nIENvbG91cg== 41962\nIHNwZWFy 41963\nb3Rpb25hbA== 41964\nIExpdGU= 41965\nIEtvc3Rlbg== 41966\nIMOz 41967\nX2F0dGFjaG1lbnQ= 41968\nb3JwaGlj 41969\nIGRhbWl0 41970\nIGRsZw== 41971\nIHRocml2ZQ== 41972\nQ0hBTkdF 41973\nIEFwcGFyZW50bHk= 41974\nIGF0dWFs 41975\nIHJvb3RlZA== 41976\nKGltYWdlcw== 41977\nYXdp 41978\nYXJpYXQ= 41979\nIGNoZXJyeQ== 41980\nU1RBVElD 41981\nbW50 41982\nIFVzZXJJZA== 41983\naWxsZXQ= 41984\nIEhpc3Bhbmlj 41985\nIG5haw== 41986\nIGNlbnRybw== 41987\nIGRpbXM= 41988\nX2luaXRpYWxpemU= 41989\nxLFr 41990\nIENlbnRlcnM= 41991\nUkVO 41992\nIGV2b2x1dGlvbmFyeQ== 41993\nIFRvcGljcw== 41994\nX2RhbWFnZQ== 41995\nZW1lcg== 41996\nIHJ1bmQ= 41997\nIHB1bmlzaGVk 41998\nIGN1Ymlj 41999\nZmFpcg== 42000\nW107Cgo= 42001\nIGluc3RhbnRpYXRl 42002\nIG92ZXJzZWU= 42003\nLWRlbGV0ZQ== 42004\ndW50ZWVy 42005\nc3RhcnRUaW1l 42006\nIFBpcGVsaW5l 42007\nX0dBTUU= 42008\nIENpcg== 42009\nCU51bGw= 42010\nLkZvcm1hdHRpbmc= 42011\ndWN1bWJlcg== 42012\nIFJpZGU= 42013\nIHpvbw== 42014\nIGNoZWNrZXI= 42015\n5ZCM 42016\nPUM= 42017\nIGdyaXQ= 42018\nIik7Ly8= 42019\nX3h5 42020\nIERlY2xhcmF0aW9u 42021\nIGNhbGxhYmxl 42022\nRm9v 42023\nIExpc3RJdGVt 42024\nIGluYWNjdXI= 42025\nbWxpbg== 42026\nCURhdGE= 42027\nIGV2b2x2aW5n 42028\nYXdhbg== 42029\nIGNhZmU= 42030\nZm9saw== 42031\nX0lEWA== 42032\nIEFueXRoaW5n 42033\nIFBhbGVzdGluZQ== 42034\nIEdyaWRWaWV3 42035\nIGNvbG9ueQ== 42036\nIEdlcm1hbnM= 42037\nKCs= 42038\nLnBpZA== 42039\nLmpzeA== 42040\nIFN1cGVyaW9y 42041\nQ2hyaXN0aWFu 42042\nIExlY3Q= 42043\nCUdhbWU= 42044\nIGluc3RydW1lbnRhbA== 42045\nQW5pbWF0aW9ucw== 42046\n0LTQsNC7 42047\nIE1vc2Vz 42048\nCQkNCgkJDQo= 42049\nenM= 42050\na3Rl 42051\n5Lia 42052\nX0RJU1Q= 42053\nYml0bWFw 42054\nZEI= 42055\nIHBlcnNpc3RlbmNl 42056\n0YDQvtGB 42057\nJGw= 42058\nQnJvbg== 42059\nIHt8 42060\nX2NoYXJ0 42061\nIENvbnN1bQ== 42062\nIGhlbXA= 42063\nICIpKQo= 42064\nIGF0dGFja2Vycw== 42065\nIGtub3dsZWRnZWFibGU= 42066\nIGNldA== 42067\nIHZpcnVzZXM= 42068\nJ0k= 42069\nIHBpdGNoZXI= 42070\nIHN3ZWVwaW5n 42071\nPWxpc3Q= 42072\nYXB0b3Bz 42073\nLmRlcHRo 42074\nIGluc3RydWN0ZWQ= 42075\nIFJ1cw== 42076\nYmVuaGF2bg== 42077\nINC40L0= 42078\nU3BvcnRz 42079\nIG9uc2V0 42080\n5p2D 42081\nLlJFRA== 42082\nX3Np 42083\nIFBTVA== 42084\nLm9uQ2hhbmdl 42085\nPnRhZw== 42086\nIFJvaA== 42087\nX2NoYXJhY3Rlcg== 42088\nIExhd3M= 42089\nIEJhY2hlbG9y 42090\nX3N3YXA= 42091\nLnJlYWN0aXZleA== 42092\nIHJld2FyZGluZw== 42093\nTWVkaXVt 42094\nLVs= 42095\nIFJlY2VudGx5 42096\nSm9pbnQ= 42097\ncGFydGl0aW9u 42098\nIE1pbnV0ZXM= 42099\nIGluZG8= 42100\nIGFic29yYmVk 42101\nIEdO 42102\nX0lORA== 42103\nIHNhYmVy 42104\nU3Bhd24= 42105\nb3V0cHV0cw== 42106\nIEplZmZyZXk= 42107\nIG1lZGlldmFs 42108\naGVk 42109\nR3VpZGU= 42110\nIHBzeWNobw== 42111\nIGdsYW0= 42112\nRWxpbQ== 42113\nw6RkY2hlbg== 42114\nX3BsYWlu 42115\nIFNhdQ== 42116\nLWZvdXI= 42117\nIGFuYWx5emluZw== 42118\nUVVFUlk= 42119\nIHRvbWF0bw== 42120\nX2J1dHRvbnM= 42121\nVkVO 42122\nLnNldFN0YXR1cw== 42123\nLlVybA== 42124\nKwoK 42125\nIGNvbXBsYWluaW5n 42126\nZGVncmVl 42127\nY29uZmlybWVk 42128\nIHN1YnQ= 42129\ncGFyc2Vk 42130\nIHRvcnF1ZQ== 42131\nIHRyb3VibGVk 42132\nIFRBUkdFVA== 42133\nIHRyYWRlbWFya3M= 42134\nIENvb3JkaW5hdGU= 42135\nIFZpdg== 42136\nIC8vfQoK 42137\nIGFwcsOocw== 42138\nLmdldFBvc2l0aW9u 42139\nKEtleUNvZGU= 42140\nIFNpbHZh 42141\nIG1ldGVvcg== 42142\nIGVuZG9yc2VtZW50 42143\nT3ZlcnZpZXc= 42144\nIFBvc3M= 42145\nLkluamVjdA== 42146\nIGV2ZW5seQ== 42147\nIHZpc3VhbGl6YXRpb24= 42148\nIHdjaGFy 42149\nIEhETUk= 42150\nIGZ1bmN0 42151\naWNrbmFtZQ== 42152\nJywnJywn 42153\nIGZvcndhcmRz 42154\nTWFuYWdlZE9iamVjdA== 42155\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 42156\nCXNlcnZlcg== 42157\nIE91dGxvb2s= 42158\nIENocm9uaWNsZQ== 42159\nIGR1YmJlZA== 42160\nIGRvaw== 42161\nIFdlYXI= 42162\nLkFM 42163\ncGFyZW4= 42164\nLkludGVyZmFjZQ== 42165\nSW50ZXJmYWNlcw== 42166\nLmNvZA== 42167\nIGRpYg== 42168\nLkdsb2JhbGl6YXRpb24= 42169\nIEFjYWRlbWlj 42170\nIGFzc21z 42171\nQXV0b20= 42172\nIGx3 42173\nIE5X 42174\nICYmDQo= 42175\nIHByb2JsZW1h 42176\nIE1hbnVmYWN0dXJpbmc= 42177\nbGltaXRz 42178\nLW1vYmlsZQ== 42179\nIGZpbG1l 42180\nL21hcA== 42181\nIGRvaXQ= 42182\nIEluaw== 42183\nIHN1ZWQ= 42184\nLmFycg== 42185\nIHVuZGVybWlu 42186\nIFByb2M= 42187\nY3JvbGxWaWV3 42188\nX18k 42189\nIHNpZGV3YWxr 42190\nKHRoYXQ= 42191\n4Li3 42192\nW3E= 42193\nZ3JhbW1hcg== 42194\nIHTDqw== 42195\ncXVpdG8= 42196\nIHNwaXJhbA== 42197\nZXh0ZW5kZWQ= 42198\nIGZvY2Fs 42199\nIGRpZ2dpbmc= 42200\ncGFz 42201\nIFRhbGw= 42202\nLnByb3h5 42203\naXR1cmVz 42204\nVFJBQ1Q= 42205\nIFJlYWxt 42206\nIGZlZGVy 42207\nIG9yaWVudGVk 42208\nIEFsdGVybmF0aXZl 42209\nIG93ZQ== 42210\nIHNvdXJjZWQ= 42211\naW5rZXI= 42212\nLmRldA== 42213\nU2Vw 42214\nIFF1aQ== 42215\nIFBhbG1lcg== 42216\nKF8s 42217\nc2FtcGxlcw== 42218\nb3llcg== 42219\ndWxsYW4= 42220\ncXVleg== 42221\nRWRnZXM= 42222\nIHNob3V0 42223\nIEFjaGll 42224\nIGhhYXI= 42225\nX0NvbnN0cnVjdA== 42226\nIHByZW1hdHVyZQ== 42227\nIHJldmVydA== 42228\nJykuCg== 42229\nIHNjaG4= 42230\nZmlsdGVyZWQ= 42231\nbnVsbHB0cg== 42232\nU2F2ZWQ= 42233\naXRlY3R1cmU= 42234\nQ0xB 42235\nIHZs 42236\nc3RlbGw= 42237\nCU1l 42238\nIExpcA== 42239\nbmF0aW9uYWw= 42240\nIHdob2xseQ== 42241\nIHNwcmluZ3M= 42242\nLlRpbWVy 42243\nCXNyYw== 42244\nZWxzZW4= 42245\n5YW2 42246\nIGNvbW11bmljYXRpbmc= 42247\nIFF1aXo= 42248\nIHRlbmc= 42249\nIGdleg== 42250\nIE91dHNpZGU= 42251\nLlNpZ24= 42252\nKGNz 42253\nIGRpc3B1dGVz 42254\nIFdlaXNz 42255\nYW5uZXM= 42256\nPk5v 42257\nIEJhY2g= 42258\nLnJlbW92ZUFsbA== 42259\ncmVmZXI= 42260\nL2Rhc2hib2FyZA== 42261\nIEFqYXg= 42262\nSW5kZXhDaGFuZ2Vk 42263\nIFdlYWs= 42264\nJyIK 42265\nIHNpZ2h0cw== 42266\nYWNjZXNzVG9rZW4= 42267\nIEpvaQ== 42268\nKGRvbWFpbg== 42269\nCWN2 42270\nIGNvbnRpbnVhdGlvbg== 42271\nIHBsdW0= 42272\nYWRpcg== 42273\nLnNldE1lc3NhZ2U= 42274\nIO+8jA== 42275\nIHN3YWxsb3c= 42276\nIExhbXA= 42277\nIHF3 42278\nIHV1 42279\nQ29pbg== 42280\ndWJpYw== 42281\nIERlYWxz 42282\ncmFjZQ== 42283\nIGRpY3RhdG9y 42284\nIG1lbWU= 42285\ndHVybmVk 42286\nIEp1bGll 42287\nLmdyaWRDb2x1bW4= 42288\nIHB1cHB5 42289\nIHBhbQ== 42290\nICl7DQo= 42291\nIGludml0aW5n 42292\nIGZyZW5jaA== 42293\ndmlt 42294\nIHdyYXBwaW5n 42295\nICMtfQo= 42296\nKFst 42297\nRWFybHk= 42298\nIHNoaW55 42299\nLmZhY2Vz 42300\nIHJlYmVsbA== 42301\nYWJjZGVm 42302\nw6RsdA== 42303\nIGVzdGltYXRpb24= 42304\ncGh5cw== 42305\nbG9zdXJlcw== 42306\nX1JFTA== 42307\nIGV4Y2x1c2lvbg== 42308\nIFNreXBl 42309\nd2Vpc2U= 42310\nLXN0b3A= 42311\nbm90aGluZw== 42312\nIEVnZw== 42313\naXNvcnM= 42314\nUmljaGFyZA== 42315\nIGNvdW5zZWxpbmc= 42316\nIGNvbW1lbQ== 42317\nIFFNZXNzYWdlQm94 42318\nIFN5bmQ= 42319\nIEZyb3N0 42320\nIENvbXBldGl0aW9u 42321\nIEF3YWtl 42322\nIHRlZA== 42323\naWNpb25lcw== 42324\nIERldkNvbXBvbmVudHM= 42325\nVkVSVElTRU1FTlQ= 42326\nb3R0aQ== 42327\nLnJ1bm5lcg== 42328\nIHVuaXF1ZWx5 42329\nLmZsYWc= 42330\nCXJz 42331\nX2dlbmVyaWM= 42332\nIGBgYAo= 42333\nQUNISU5F 42334\nIG1laW4= 42335\nKEFwcGxpY2F0aW9u 42336\nKGJy 42337\nIHJhdGlvcw== 42338\nOiw= 42339\nIFhDVGVzdA== 42340\ndXN0YWluYWJsZQ== 42341\nLXd3dw== 42342\naXRsZXM= 42343\nX1RFTVA= 42344\nIHN5c3Q= 42345\ndW1lcmljVXBEb3du 42346\nCWFzc2VydFRydWU= 42347\nIHdm 42348\nLnBlZWs= 42349\nIEJ1bGc= 42350\nIHRlcnJpZnlpbmc= 42351\nLk1PREU= 42352\nIEdX 42353\nw6Fy 42354\nIGZpYw== 42355\nIGNvbW1pdG1lbnRz 42356\nLXRlY2g= 42357\nIExpcXVpZA== 42358\nb3Bleg== 42359\nemhlaW1lcg== 42360\nYcOxYQ== 42361\nLW1lZGlh 42362\nKGFuaW1hdGVk 42363\nX2dvYWw= 42364\nIGd1bQ== 42365\neXN0b25l 42366\nLlNFVA== 42367\nIFdlbmQ= 42368\nc2V0Q2VsbFZhbHVl 42369\nIG1zZ3M= 42370\nY2FzaA== 42371\nQUxMT0M= 42372\nL2F3cw== 42373\nIG1pY3Jvd2F2ZQ== 42374\nLlBvaW50ZXI= 42375\nCUNvbnNvbGU= 42376\nX3NvcnRlZA== 42377\nIEZpbGlw 42378\nUHJvZA== 42379\nIC8vITw= 42380\naW5ncm91cA== 42381\nIGtz 42382\nX1RSSQ== 42383\nIHRlYXNwb29u 42384\nIEFUVA== 42385\nIHJlY292ZXJpbmc= 42386\nIEdMT0JBTA== 42387\nLlBhcg== 42388\nIC8+Owo= 42389\nIG1hcmJsZQ== 42390\ndWxhdG9ycw== 42391\nIEN5Y2xl 42392\nIGhlcmJz 42393\nX21ldHJpYw== 42394\nKSE= 42395\nX0NMT0NL 42396\nX0J1dHRvbg== 42397\nSGFycnk= 42398\n6L+b 42399\nIHN0cmFpbnM= 42400\nIEFwcEJhcg== 42401\nIENoYW4= 42402\nL3ZpZGVv 42403\nIGJhbQ== 42404\nLlByb2dyZXNz 42405\nJGY= 42406\nbGVtZW4= 42407\nIGlycmVndWxhcg== 42408\nIER1bmNhbg== 42409\nIE1pbnQ= 42410\nLXZpZGVv 42411\n4Ka+ 42412\nw7N3bg== 42413\nIEVNUFRZ 42414\nIHN0YWNrZWQ= 42415\nIEhB 42416\nX2N1dA== 42417\nIHdoZXJlaW4= 42418\nIFdheXM= 42419\nKGNvdW50ZXI= 42420\n6K+V 42421\nRm9ybUdyb3Vw 42422\nIGJsZXc= 42423\nY291cnNlcw== 42424\nIHByb2R1Y3Rvcw== 42425\ncnlz 42426\nIFJlc3Ry 42427\nIHN0eWxpbmc= 42428\nPnM= 42429\nIHBpdg== 42430\nIGl0ZXJ0b29scw== 42431\nZ2V0UmVwb3NpdG9yeQ== 42432\nIElr 42433\nX2RldmljZXM= 42434\nbGF5dWk= 42435\nIGhhbGZ3YXk= 42436\nIGZyYW7Dpw== 42437\nIHR1bmluZw== 42438\nT0E= 42439\nX05vZGU= 42440\nYXJkZQ== 42441\nIGZpZXJjZQ== 42442\nbGljdGVk 42443\nIw0K 42444\nIGJyZWFrdGhyb3VnaA== 42445\nIEVyaWs= 42446\nIGJyaWRl 42447\nIC4i 42448\nY3VsdXM= 42449\naW5zaWRl 42450\nIEluZGlhbmFwb2xpcw== 42451\nIEVF 42452\nIHlvZw== 42453\ndXJyZXQ= 42454\nLmZz 42455\nLmdyYWQ= 42456\nX2NhcmRz 42457\nX2FjY3VyYWN5 42458\nX2VwaQ== 42459\ncXVlZGE= 42460\nL29yZw== 42461\n6aqM 42462\nIGNvbXB0ZQ== 42463\nKSlb 42464\nT3V0c2lkZQ== 42465\nR3JlYXRlcg== 42466\nIFJlbmRlcmVy 42467\nLmFjdG9y 42468\nQWNjb3VudHM= 42469\nSWRsZQ== 42470\nX2hvdXJz 42471\nZXJuZXI= 42472\nSm9pbmVk 42473\nIG1lbmo= 42474\ncmVxdWlyZXM= 42475\nIE9QRVI= 42476\nLnJlbW92ZUNoaWxk 42477\nCXNw 42478\nIGVzc2U= 42479\ncmlmdA== 42480\neEZF 42481\nIFNoYWtlc3BlYXJl 42482\nX19fX19fX19fX19f 42483\nIGJ1ZGdldHM= 42484\nTW9kZWxTdGF0ZQ== 42485\nZmlsbGFibGU= 42486\nLWNvbXBvbmVudA== 42487\nb2Nvcw== 42488\nIEJVVFRPTg== 42489\nL2lv 42490\nLG91dA== 42491\nc21z 42492\nVGhvbWFz 42493\nIEFybWVk 42494\ncmVzdW1l 42495\nIHJvdGF0aW5n 42496\nIFZhdWx0 42497\nIHNldXM= 42498\nLigq 42499\nIGFtaW5v 42500\nIFtdKTsKCg== 42501\nIHByb3ZvYw== 42502\nbm94 42503\nLkdldEVudW1lcmF0b3I= 42504\nPT09PT09PQo= 42505\n5paZ 42506\nX3Njcm9sbA== 42507\nIGZpbG1lZA== 42508\nIFNvY2k= 42509\nZ2Fw 42510\nZ3Jv 42511\nVm90ZQ== 42512\nIkJ1dA== 42513\nX1JD 42514\nQW5pbWFs 42515\nwoA= 42516\naWJpbGU= 42517\nIGF3YWtlbg== 42518\nb3Jlc3Q= 42519\naW5qYQ== 42520\nIEl2YW4= 42521\nKENvbW1hbmQ= 42522\nICoqKioq 42523\nzrc= 42524\nIGt2aW5kZXI= 42525\nL2hlbHBlcnM= 42526\nX2Nhc2Vz 42527\ndGc= 42528\n7IS4 42529\nUmVnaXN0ZXJlZA== 42530\nCXBhc3M= 42531\nX2RpZ2l0cw== 42532\nIGNvbnRvdXI= 42533\nIGluZmFudHM= 42534\nIGp1c3RpZmljYXRpb24= 42535\nIEZvcnR1bmF0ZWx5 42536\nQ29udHI= 42537\nIG9uQ3JlYXRlVmlldw== 42538\nX1NBTVBMRQ== 42539\nIGFsbG93TnVsbA== 42540\nIG51ZA== 42541\nIGZldGNoZWQ= 42542\nX2VxdQ== 42543\nIFVuYWJsZQ== 42544\nPVwiIg== 42545\nPnsK 42546\nIGNvbW1pdHRlZXM= 42547\naXN0ZW1h 42548\nKyIu 42549\nw61hbg== 42550\nbWFudA== 42551\nIHNvdXRoZWFzdA== 42552\n77yMCg== 42553\nZGlhbG9ncw== 42554\nUFJPSkVDVA== 42555\nY2hhcmdlcg== 42556\nLXBvcnQ= 42557\nKHV1aWQ= 42558\nLmV4cG9ydA== 42559\nU2l4 42560\nIFJQ 42561\nUHJlbQ== 42562\nIGNvbnNjaWVuY2U= 42563\nIG1hcmdpblJpZ2h0 42564\nX2Rpc3RyaWJ1dGlvbg== 42565\neWFtbA== 42566\ncmVzaXppbmc= 42567\nRG9jaw== 42568\nIExvY2F0aW9ucw== 42569\nR1k= 42570\nU2VlZA== 42571\nQlVGRkVS 42572\nb3NzaXA= 42573\ndWxsZW4= 42574\nVGhpbmdz 42575\nLXNlbGY= 42576\nLnBvbGw= 42577\nUExBWUVS 42578\nIOWu 42579\nR1JPVVA= 42580\nIEF3YXk= 42581\nIGdvc3BlbA== 42582\neGZk 42583\nTWFyeQ== 42584\nIFBvcnRhYmxl 42585\nVFVSRQ== 42586\nIHV0aWxpcw== 42587\nIHNlaXQ= 42588\nIHN0cmFuZA== 42589\nIHRyYW5zYw== 42590\nIChe 42591\nIEFsZnJlZA== 42592\nLm1lbQ== 42593\nLmNpcmNsZQ== 42594\nIH4v 42595\nZm9yY2luZw== 42596\nIHJpb3Q= 42597\ncHJveA== 42598\nVEhPTg== 42599\naXphY2nDs24= 42600\nIE5J 42601\ncm9zdA== 42602\nIGRpc3Bybw== 42603\nX2luc3RhbmNlcw== 42604\n77yM4oCc 42605\nb2dyYXBoZXI= 42606\nZW5kYXM= 42607\nIElzYWFj 42608\nIFBpbmU= 42609\nL2Rpcw== 42610\nIGNvbG9yV2l0aA== 42611\naXRlcmF0ZQ== 42612\nX3N0cmlkZQ== 42613\nIHB1bnRv 42614\nLkV2ZW50QXJncw== 42615\nKGNlbnRlcg== 42616\nIG5laWdoYm9yaW5n 42617\nIFByaXNvbg== 42618\nIE1lc3Nlbmdlcg== 42619\nIGVwaWRlbWlj 42620\nZGFv 42621\nX2NvbXBsZXg= 42622\nIGdyYXZlbA== 42623\nX0RJUA== 42624\nw6ltZW50 42625\nIEFyaQ== 42626\nX2JpdG1hcA== 42627\nLnF1aXQ= 42628\nKHZhbGlk 42629\nIHBlbmQ= 42630\nIHJlc3BpcmF0b3J5 42631\nIHJlYm91bmQ= 42632\nRGVmYXVsdFZhbHVl 42633\n44Ot 42634\nIGNvbW1pdHM= 42635\nLnRlc3Rz 42636\nX2Zy 42637\naXRldA== 42638\nLnNm 42639\nIHNwYWNlY3JhZnQ= 42640\nY3JpdGljYWw= 42641\nIGRlcHJlc3NlZA== 42642\nIEFueU9iamVjdA== 42643\nIHVuYg== 42644\nIGRpc2Nlcm4= 42645\nKG15c3Fs 42646\nTGF0aW4= 42647\nIEJvZw== 42648\nIFdpbGRsaWZl 42649\nVG9GaWxl 42650\naW94aWQ= 42651\nQFJlc3RDb250cm9sbGVy 42652\nICIkKA== 42653\nIDw8Ig== 42654\nIGRlZmVjdHM= 42655\nIGRhdHVt 42656\naGlu 42657\nIHJlYWxpemFy 42658\nYW55YWh1 42659\nIFNpZw== 42660\nQERhdGE= 42661\nYWRhcHRpdmU= 42662\nIENhdGhlcmluZQ== 42663\nLmNy 42664\nIENPT0tJRQ== 42665\nIHBpY3R1cmVk 42666\nIEZpZ2h0ZXI= 42667\nUXVlcnlhYmxl 42668\nIEFueXdheQ== 42669\nIEdMRlc= 42670\nX25hbWVzcGFjZQ== 42671\nX2Z0 42672\nIF0p 42673\nT3JnYW5pemF0aW9u 42674\nIGNvbnN0aXR1dGVz 42675\nIHF1YW5k 42676\nKGNodW5r 42677\nIi8+DQo= 42678\nIExha2Vz 42679\nbWFpbndpbmRvdw== 42680\nQ2FydGh5 42681\nc3Bpbg== 42682\nKGNzdg== 42683\nOnJlZA== 42684\nLWNvbW1lcmNl 42685\n4Li5 42686\nIGRpc2NvdmVyaW5n 42687\nIGVjbw== 42688\nX2ZhYw== 42689\naW5jZXRvbg== 42690\nIEdyZWVucw== 42691\nand0 42692\n2LU= 42693\nIEJyb25jb3M= 42694\nIEdvb2Rz 42695\nKEdUSw== 42696\nIHJldHVyblZhbHVl 42697\nIHNpZW1wcmU= 42698\nIG5ldXRy 42699\nd2VudA== 42700\nIE5hdGFs 42701\nIGVudGh1c2lhc3RpYw== 42702\n4buN 42703\nRk4= 42704\nL2RhdGFiYXNl 42705\nQ2F0YWxvZw== 42706\nIGJydW4= 42707\nIEthc2g= 42708\nX1Bs 42709\naXNjcmlt 42710\nLHdpZHRo 42711\nIGlubWF0ZXM= 42712\nQXNzaWdubWVudA== 42713\nIEhhdmVu 42714\nIHBsYXlncm91bmQ= 42715\nZXhhbQ== 42716\nQENvbnRyb2xsZXI= 42717\ndWxpYXI= 42718\nLmdldFBhcmVudA== 42719\nICI7Cgo= 42720\nOnNpemU= 42721\naXNzb3Jz 42722\nIGZpcw== 42723\nIGFsYw== 42724\nZW5zYXRpb24= 42725\nIE5peG9u 42726\nIG1pZ2h0eQ== 42727\nLXN0cg== 42728\nX3NwZWNpYWw= 42729\nX0FEQw== 42730\nIFR3aWc= 42731\ndW1ibGluZw== 42732\nLWFkZHJlc3M= 42733\nIGhlcm9pbg== 42734\nWVRF 42735\nICAgICAgICAgICAgICAgICAK 42736\nRnJpZW5k 42737\nIGF2ZQ== 42738\nIFBORw== 42739\nIEt1cmRpc2g= 42740\nRGF0YVNldENoYW5nZWQ= 42741\nIGJsYWRlcw== 42742\nYnJhbA== 42743\nU3RlYW0= 42744\nIHNpZ3U= 42745\nSVJUVUFM 42746\nYWNvcw== 42747\nVURQ 42748\nKGRhdGFiYXNl 42749\naGVj 42750\nIFN0cmluZ3M= 42751\nX3NjYWxhcg== 42752\nCWRlc2M= 42753\nIFRMUw== 42754\nOyIK 42755\nIENvcmJ5bg== 42756\nU2ltcGxlTmFtZQ== 42757\ndWVsbA== 42758\nIEVudHJl 42759\nZWxsaXRlcw== 42760\nLXBsYWNl 42761\nIGZyYW5rbHk= 42762\nIEVyZg== 42763\nQ0VM 42764\nIHBhw61z 42765\nIGhlZGdl 42766\nIGxhdGVudA== 42767\nIElSUQ== 42768\nIEhlcmFsZA== 42769\nIFByZWM= 42770\n67O0 42771\nLlRFWFQ= 42772\nU2FsYXJ5 42773\nIGF1dHVtbg== 42774\nIHRyYXZhaWw= 42775\nLlN1bQ== 42776\nIGNhcmVk 42777\nTW9y 42778\nIGludHVpdGl2ZQ== 42779\nIGpvdXJuYWxz 42780\nX0lU 42781\nIFRyb3U= 42782\n5Lyg 42783\nSGFzQ29sdW1uTmFtZQ== 42784\nQ29tcG9zaXRl 42785\nIHNwaWNl 42786\nX2Rpc2s= 42787\nX0NPREVT 42788\nIEludHJvZHVjZWQ= 42789\naW9uYQ== 42790\nIG51ZXN0cmE= 42791\nb2N0 42792\nICAgIAogICAgCiAgICAK 42793\nKHBhcmFtZXRlcg== 42794\nIHN0dWRpb3M= 42795\nIHByb2plY3RJZA== 42796\nIGJkc20= 42797\nLlNxbENsaWVudA== 42798\naW1pemVy 42799\nIENBUkQ= 42800\nK3Q= 42801\nYWFu 42802\nLnNvbA== 42803\nX0FkanVzdA== 42804\nIHJpZ2h0ZW91cw== 42805\nIExvZ2dpbmc= 42806\nLmZpbHRlcnM= 42807\nX1RBQg== 42808\nCXN5cw== 42809\ncm9waGlj 42810\nb3RoZXJhcHk= 42811\nIEJyb3dzZQ== 42812\na2V5Ym9hcmQ= 42813\nUk9O 42814\nK1w= 42815\ncm9wcGVk 42816\nIGV4dGVuc2l2ZWx5 42817\nZms= 42818\nIGxpbWU= 42819\neWVhcnM= 42820\nRXhj 42821\nIHNwaA== 42822\nIGNoZWF0aW5n 42823\nYW5kcm8= 42824\nw61v 42825\nIHByaW5jZQ== 42826\nb2lyZQ== 42827\nIERlc3RpbmF0aW9u 42828\nIENvbnZlcnRz 42829\nIHVwc3RyZWFt 42830\nb2xlZA== 42831\nIHNlcnZhbnRz 42832\nIHNlbWFudGlj 42833\nIGNydW5jaA== 42834\nIGV2ZW50dWFs 42835\ncnVubmVy 42836\nL2Vycm9y 42837\nU3Bpbg== 42838\nIHNlY3JldGx5 42839\nIGFzc2VtYmxl 42840\nLlBlcnNvbg== 42841\nZW5kZXJyb3I= 42842\nXzw= 42843\nIHBlbmRhbnQ= 42844\nU2xlZXA= 42845\nIENoZW1pc3RyeQ== 42846\nIGJvc3Nlcw== 42847\nbGs= 42848\nKSkpLAo= 42849\nQmxvY2tseQ== 42850\nREVWSUNF 42851\nIHJlZmxlY3Rpbmc= 42852\nIGFtcGxl 42853\nTWlsbGlzZWNvbmRz 42854\nIFByZXNpZGVudGlhbA== 42855\nIHVzdWFyaW9z 42856\nIE5a 42857\nIFNhbGFyeQ== 42858\nIEFtYW5kYQ== 42859\nX25w 42860\nanVyeQ== 42861\nIGvDtm4= 42862\nIHRoZXJhcGlzdA== 42863\nIGhvbW9zZXh1YWw= 42864\nIERyYWtl 42865\nLXdpbmRvdw== 42866\nIExvY2F0ZWQ= 42867\nLkRyaXZlcg== 42868\nIFZJREVP 42869\nIG1lcmNoYW50cw== 42870\nIENoZXN0 42871\nLWxvY2s= 42872\nL3BocA== 42873\nIG1pbGFubw== 42874\nX1NUWUxF 42875\nYXJnZXI= 42876\naWRlYQ== 42877\nR1VJRA== 42878\nYWR2YW5jZWQ= 42879\nbWVhbA== 42880\nT3B0aW9uc0l0ZW1TZWxlY3RlZA== 42881\nPScl 42882\nIENoYW0= 42883\nOmRhdGE= 42884\nKHN0YXQ= 42885\nV2lsbEFwcGVhcg== 42886\nIGluZm9ybWFs 42887\nYWpp 42888\nIHJlcHJvZHVjdGl2ZQ== 42889\nIENBUw== 42890\n44Gj 42891\nRlVOQw== 42892\nIFJ1dGg= 42893\nKSso 42894\nQ09OU1Q= 42895\nIEZhbnM= 42896\nIGdyb3VwSWQ= 42897\neGZmZmZmZmZm 42898\nIHNhbXBsZXI= 42899\nIH19Ij4= 42900\nLnRoZQ== 42901\nIGhvbGxvdw== 42902\nV0FZ 42903\nIEZhY3VsdHk= 42904\nQXR0cmlidXRlZFN0cmluZw== 42905\nIExvb2tz 42906\nIFJleA== 42907\nams= 42908\nIE1JTA== 42909\nIGJhcmQ= 42910\nLkxvbmc= 42911\nIGxpdmVzdA== 42912\nIHNrYWw= 42913\naWNpc20= 42914\nTUFJTg== 42915\nIG11Y2hv 42916\nQk9EWQ== 42917\nIGVzZQ== 42918\nCXVzZQ== 42919\nRm9vdA== 42920\nLlNRTEV4Y2VwdGlvbg== 42921\nIGluaGVyaXRhbmNl 42922\ncmVjZWl2ZWQ= 42923\nIHB1dGFz 42924\nZWRpcw== 42925\nYWxzYQ== 42926\nIEVycm9yTWVzc2FnZQ== 42927\nQm9va2luZw== 42928\nIHRyYWN0 42929\nYWN6 42930\nIENhbnQ= 42931\nX3JlZ2V4 42932\nIGlkZW9sb2dpY2Fs 42933\nIGppaGFk 42934\naG9z 42935\nL3N5cw== 42936\nY29sbQ== 42937\nKHBvb2w= 42938\nIGVzdMOhbg== 42939\nIFBlbmRpbmc= 42940\nZW3DoXM= 42941\nIGt0w7NyeQ== 42942\nKSk7CgoK 42943\ndHJhbnNhY3Rpb25z 42944\nIHdpZWxk 42945\naXRlcmU= 42946\nZXJ0dXJl 42947\nX3Nz 42948\nIHN0cmV0Y2hpbmc= 42949\nIHByaXNvbmVy 42950\nLlJlYWRBbGw= 42951\nIGJlc2No 42952\nLS07DQo= 42953\nIGNyaXNw 42954\nX1NDQU4= 42955\nIGFl 42956\nU3RyaWN0 42957\nIE1pbm5lYXBvbGlz 42958\nIEJvZWluZw== 42959\nYXJpcw== 42960\ncmVr 42961\nX3BpcGU= 42962\nIHByaWVzdHM= 42963\nKEVJRg== 42964\nZWhpY2xlcw== 42965\nIEludGVyYWN0aXZl 42966\nYmV0d2Vlbg== 42967\nCU51bGxDaGVjaw== 42968\nIEJsYWly 42969\nIEx0 42970\nX2lubGluZQ== 42971\nZXRoeWw= 42972\nwrw= 42973\nX3BhY2thZ2Vz 42974\nIGJhcnJlbHM= 42975\nX2hl 42976\nIHJlZ2V4cA== 42977\nX3B0cw== 42978\nX0hhbmRsZXI= 42979\naW5ndWxhcg== 42980\nIE5pc3Nhbg== 42981\nIFJhbmNo 42982\nIHBlcmNo 42983\nVW5zdXBwb3J0ZWQ= 42984\nU21pdGg= 42985\nIExlZ2VuZHM= 42986\nTWk= 42987\nIGdm 42988\nc3RlZGVy 42989\nIGFjcXVpcmluZw== 42990\nIHNpbXVsYXRvcg== 42991\nKCksIg== 42992\ncmVjZWl2ZQ== 42993\nIGlucGxhY2U= 42994\nQUNUSU9O 42995\nIFdlYkRyaXZlcg== 42996\nZmlsZXN5c3RlbQ== 42997\nPE9yZGVy 42998\nbG9wZW4= 42999\nIEhFSUdIVA== 43000\nLnNldEJvcmRlcg== 43001\njbA= 43002\nX19bIg== 43003\nIGNsYW1w 43004\nU2Vnb2U= 43005\nYmFuZHM= 43006\ndG9MaXN0 43007\nYW1iYQ== 43008\nPicrCg== 43009\nIGNyZWRpYmxl 43010\nYW1hdA== 43011\ncGxheWluZw== 43012\nLnNldEltYWdlUmVzb3VyY2U= 43013\ncXVlbA== 43014\nIHBvZHI= 43015\nZ2VvbQ== 43016\nRWs= 43017\nIFFhdGFy 43018\nIGdlbGQ= 43019\nPycsCg== 43020\nIGN5bA== 43021\nKGF4 43022\nIFdJ 43023\ndXJhbGx5 43024\nIEJyYXNpbA== 43025\nIHNlbnph 43026\nYWxleQ== 43027\nb25lbg== 43028\nIGJhaA== 43029\nIG1vbGVjdWxl 43030\nUmFk 43031\n6L+w 43032\nQU5DSA== 43033\nLWJhY2tncm91bmQ= 43034\nLWFnZW50 43035\nIHByb2xpZmVy 43036\nOmJvb2xlYW4= 43037\nIHRpZGU= 43038\nZXJpYWxpemVy 43039\nXzsNCg== 43040\nRmVl 43041\nKiop 43042\nZXJneQ== 43043\nIEhvbm9y 43044\nLkxvZ2dpbmc= 43045\naXJpcw== 43046\nIHVuZGVybWluZQ== 43047\nIER5 43048\nIHR5cg== 43049\nIGRlcXVl 43050\nIGRhbWVy 43051\nKFtdKQo= 43052\nLmxheW91dENvbnRyb2xJdGVt 43053\ncGVhdGVk 43054\nQ0FO 43055\ncmFnbWVudHM= 43056\nTGFuZA== 43057\nKV0pOwo= 43058\nIFNhaA== 43059\nIERFQ0w= 43060\nV2l0aGlu 43061\nIE5hbWVzcGFjZQ== 43062\nYW5vdGhlcg== 43063\nc2VtYmxpbmc= 43064\nLmRlc2NyaWJl 43065\nQ29uc3Vt 43066\nIEZlYXI= 43067\nZ2l2ZW4= 43068\nT3Jhbmdl 43069\nPGJvb2xlYW4= 43070\nIHN0ZWFkaWx5 43071\ncGFSZXBvc2l0b3J5 43072\nIHJlc3VsdFNldA== 43073\nX0VOVEVS 43074\nX3JlcGVhdA== 43075\nIHRvbmVz 43076\nIFBST1A= 43077\nbmFs 43078\ncGFydGljbGU= 43079\nIHNpZ25hbGluZw== 43080\nIGFjY2Vzc29yeQ== 43081\nCQkJCQkJICA= 43082\nIHZpZWxl 43083\nIE5vYWg= 43084\nLWFn 43085\nIG11cmRlcnM= 43086\nIGFpcmVk 43087\nIFBMQVk= 43088\nIFN1bGxpdmFu 43089\nX0NvcmU= 43090\nIHVsb25n 43091\nIGJsb2dnaW5n 43092\nPlRoaXM= 43093\nIGRhdGFJbmRleA== 43094\nIHByaW50YWJsZQ== 43095\nIEV5ZXM= 43096\nX3RhcmdldHM= 43097\nKFB5 43098\nLm92ZXI= 43099\nIGJydQ== 43100\nYW1wdG9u 43101\nIHBsYWludGlmZg== 43102\nPEtleQ== 43103\nYnVsbA== 43104\nIOKfqA== 43105\nSXNzdWU= 43106\nLmNvcm5lclJhZGl1cw== 43107\nQ3JpdGljYWw= 43108\nX3BoaQ== 43109\nLmFuZ2xl 43110\nIGR5bmFtaWNhbGx5 43111\nISIpOw0K 43112\nPik7Cg== 43113\naW52ZXN0 43114\nLioKCg== 43115\nIHTDqWzDqQ== 43116\nIHN1cGVyZg== 43117\nIGNhc2NhZGU= 43118\nRFRE 43119\nIHZpdmlk 43120\nIHN1YnNpZGllcw== 43121\nIEhhc3M= 43122\nIGNvbGxhcHM= 43123\nIGNlcmFtaWM= 43124\ne30iLg== 43125\nIExlYWthZ2U= 43126\nLXRyYXNo 43127\nY29sbGFwc2Vk 43128\nLXNvY2lhbA== 43129\nIENoYWQ= 43130\nIGluY2xpbmVk 43131\nIHN0bw== 43132\nIHN0b3J5Ym9hcmQ= 43133\nLnBheW1lbnQ= 43134\nc3RhY2tvdmVyZmxvdw== 43135\nIFJhaWRlcnM= 43136\nICMn 43137\nb2xpY2llcw== 43138\n7Jy866Gc 43139\nZW1hcA== 43140\nIGtq 43141\nIHF1b3Rh 43142\nIEdhcmRlbnM= 43143\n67KI 43144\nIEFuZ2Vscw== 43145\nIG9mdA== 43146\nIGxvd2VyY2FzZQ== 43147\nIGlQYXJhbQ== 43148\nIGNoZWFwZXN0 43149\ndW50YQ== 43150\nX3BrdA== 43151\naWNhdG9ycw== 43152\nIGxldXJz 43153\nIGRlY3JlYXNlcw== 43154\nCWRlZmluZQ== 43155\nUFJFQw== 43156\nYW1tZXJz 43157\nIFByZXBhcmVkU3RhdGVtZW50 43158\nKGRpcmVjdGlvbg== 43159\nIGNyZXdz 43160\nYXJrZWQ= 43161\nIE1lbXBoaXM= 43162\nIFNlbGw= 43163\nR1RL 43164\nIG1haWQ= 43165\nOmRpc2FibGU= 43166\n6ZuG 43167\nIFBm 43168\nIGFsYmVpdA== 43169\nb3Blbmg= 43170\nPz4iPgo= 43171\nLmdldFNvdXJjZQ== 43172\nKHNjYWxl 43173\nRHU= 43174\nIFBJTA== 43175\nX3JlZnJlc2g= 43176\nIGJldHM= 43177\nKGNhcg== 43178\nIFZvbg== 43179\nfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 43180\nIEdyYXQ= 43181\nTXVjaA== 43182\nKERpYWxvZw== 43183\nLnN0b3BQcm9wYWdhdGlvbg== 43184\nIHRlaw== 43185\nIGV4aXRz 43186\nJ10sJA== 43187\nIHBob25lTnVtYmVy 43188\ndWNz 43189\nZWNpbWFs 43190\nLS0tLS0tLS0tLS0tLS0= 43191\naW5w 43192\nLnBvam8= 43193\nIGNvcnB1cw== 43194\nIHByYWN0aXRpb25lcnM= 43195\nLnBpYw== 43196\nInRlc3Rpbmc= 43197\nIHN0cmluZ0J5 43198\nLk5vdE51bGw= 43199\nIHJhbmc= 43200\nLkR5bmFtaWM= 43201\nX1JlbmRlcg== 43202\n0LDRgtCw 43203\nV2FpdGluZw== 43204\nIFdpaw== 43205\nIG92ZXJ3aGVsbWVk 43206\nJSI+ 43207\nIEFF 43208\nfX0+Cg== 43209\ndXc= 43210\nX3R5cA== 43211\nIGJ1Y2tldHM= 43212\nIGdyZWV0aW5n 43213\nIGxhdWdodGVy 43214\nIGFudGFnb24= 43215\ndWdnZXN0aW9u 43216\nLWVtYWls 43217\nCXRvcA== 43218\nIGVyb3M= 43219\nX3RyaQ== 43220\nIGlzc3Vpbmc= 43221\nIGjDoQ== 43222\nIGlzb2xhdGU= 43223\nT3ZlcmZsb3c= 43224\nLEU= 43225\nIG51dHJpdGlvbmFs 43226\nIEFiYm90dA== 43227\nIG5m 43228\nLnRvdWNo 43229\nLmZldGNoYWxs 43230\nX3ppcA== 43231\nIil9Cg== 43232\nIGFtYXQ= 43233\nIENpc2Nv 43234\nIG7DpQ== 43235\nUExFWA== 43236\nIHNlaQ== 43237\nZm90bw== 43238\nLnRvSnNvbg== 43239\n5aSa 43240\nIEtsZWlu 43241\nIGxpYmM= 43242\nIG1pbmVycw== 43243\n5aI= 43244\nLXByaW50 43245\nIFByaWRl 43246\nVG9kb3M= 43247\nIG1hc2tlZA== 43248\nIHNldERhdGE= 43249\nIHRlbGVmb24= 43250\nIHVuaGFwcHk= 43251\nIFRhYmxlcw== 43252\nZ2Vi 43253\nKGRlYnVn 43254\nX2FsbG93ZWQ= 43255\nLWFjY2Vzcw== 43256\nIGxvZ2lzdGljcw== 43257\nIGdlbXM= 43258\nIE1hdHVyZQ== 43259\nIHJzcA== 43260\nIEFsbGU= 43261\nLmdldEJ5dGVz 43262\nXHdlYg== 43263\neW5jaHJvbml6ZWQ= 43264\nUGFyYWdyYXBo 43265\nIHRocm90dGxl 43266\nLnNxbGl0ZQ== 43267\nY29uc3VsdGE= 43268\nIFNlYWg= 43269\nQ2U= 43270\nIHN1Ym1hcg== 43271\nRVJF 43272\nVm91cw== 43273\nIHJlZGRpdA== 43274\nIHNxbGFsY2hlbXk= 43275\nLW1pbGU= 43276\nb2NpZGU= 43277\nUG91cg== 43278\nfX0iPgo= 43279\nc3RlYWQ= 43280\nIEAo 43281\nIFtdKQ== 43282\nIEFkcw== 43283\nIG92ZXJsb2Fk 43284\ncmlkZGVu 43285\nIERlc2VydA== 43286\nIFdyYXA= 43287\nIFBvcnR1Z3Vlc2U= 43288\nZXR6 43289\nCWZpcnN0 43290\nIG1pbGVzdG9uZQ== 43291\n5peg 43292\n0YPRiQ== 43293\nKHN1Y2Nlc3M= 43294\nPFZlY3Rvcg== 43295\nY29vbA== 43296\nIFtdKTsK 43297\nZXJ2YWxz 43298\nIGludmVydA== 43299\nImlv 43300\nY3Vyc28= 43301\nZnJhZ21lbnQ= 43302\nIGZlYXNpYmxl 43303\nLnNldFBvc2l0aW9u 43304\nIGVsbQ== 43305\nIGltYWdpbg== 43306\nQFNwcmluZw== 43307\nIGJhdHM= 43308\ncHXDqXM= 43309\nZ2FsZW1lbnQ= 43310\nbnNpYw== 43311\nZ2llbmU= 43312\nZWxsYXRpb24= 43313\nIEJhaWxleQ== 43314\nU2hhcg== 43315\nIFR1bA== 43316\nIEhL 43317\nIGZyZWV6aW5n 43318\nZ2xt 43319\nY2VhbnM= 43320\nLWN1dA== 43321\nX2NpcmNsZQ== 43322\n5ZGY 43323\nbmVnYXRpdmU= 43324\nIGluZGlhbg== 43325\nc2FsdA== 43326\nIHRpbmc= 43327\nCW1vZA== 43328\nIHNpbnQ= 43329\nYWtpbg== 43330\ndW1s 43331\nIFRleHRJbnB1dA== 43332\nIHBvcHBlZA== 43333\nVE1Q 43334\nIHBhcmtlZA== 43335\n15nX 43336\nIEZ1c2lvbg== 43337\nIGhlYXRlcg== 43338\nRVRG 43339\ncm96ZW4= 43340\naGFsbA== 43341\nIE1paw== 43342\nbGV2YXJk 43343\nLWhlYXJ0 43344\nCW9yZGVy 43345\nTWFraW5n 43346\nIHBsZWRnZWQ= 43347\nIGRpcnM= 43348\nJHBvc3Q= 43349\nIEhlcnI= 43350\nc3RhbnRpYXRl 43351\nLCIK 43352\nLmdldENvbG9y 43353\nIFNBVA== 43354\nIHRpbWVkZWx0YQ== 43355\nIE1haQ== 43356\nCW1ldGhvZA== 43357\nIGlkaW90 43358\nIFRyYXY= 43359\naWRlbnRpZmllZA== 43360\nIERpdmluZQ== 43361\nLmdldFBhdGg= 43362\nRGFzaA== 43363\nIGluZmlsdHI= 43364\nIGhhbmRsZVN1Ym1pdA== 43365\nYnJvb2s= 43366\nLmdlbmVyaWM= 43367\nLnNob3J0Y3V0cw== 43368\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== 43369\nIGRhdGluZ3M= 43370\nIE1W 43371\n77u/Iw== 43372\nfSIKCg== 43373\nIGltcHJpc29ubWVudA== 43374\nYXNvbmlj 43375\ncm91ZA== 43376\ndWNpb24= 43377\n5oql 43378\nIGRpYWxlY3Q= 43379\nIG9uTW91c2U= 43380\nY29uc3RleHBy 43381\nLmxhYmVsQ29udHJvbA== 43382\nIHdlYWtlcg== 43383\nIG1hbmtpbmQ= 43384\nIFJFQ0U= 43385\nIGRpeg== 43386\nIGFwcEJhcg== 43387\nIHF1w6k= 43388\nZnJh 43389\nX2RlZmF1bHRz 43390\nIGFsaXF1 43391\nX2F0b20= 43392\nOmluZGV4UGF0aA== 43393\nIG1pc3Nlcw== 43394\nIHZpc3VhbGx5 43395\nIEhhbmRz 43396\nU1RSVQ== 43397\naWF0ZXM= 43398\nX2Fzc2V0 43399\nRmluZGVy 43400\nbWlkdA== 43401\nIHNuYWNrcw== 43402\nKF9fKCc= 43403\nLnVyaQ== 43404\nIEluc3RydW1lbnQ= 43405\ndmVuaXI= 43406\nKCRfXw== 43407\nLkRvdE5ldEJhcg== 43408\nIGNvbmZpZ3M= 43409\nIGd1ZXNzZWQ= 43410\n4KS/4KQ= 43411\nIGluaXRpYWxpemVy 43412\nID8iLA== 43413\nIFZlcml6b24= 43414\nbWFuaWZlc3Q= 43415\nZ2ViZW4= 43416\nLmRldGFpbHM= 43417\nR2F0ZQ== 43418\ncG9uc2libGU= 43419\nIEVsaW0= 43420\nLHN0cg== 43421\nIHdyaXRpbmdz 43422\nIERlcmVr 43423\nIENvb3JkaW5hdG9y 43424\nIHBpbGxvdw== 43425\nIG5vdGljZWFibGU= 43426\nUnM= 43427\nIGR1cGxpY2F0ZXM= 43428\nZXJuZWxz 43429\na0o= 43430\nLnp6 43431\nb2xsYW5k 43432\nIFNFQ1RJT04= 43433\nX2ZuYW1l 43434\ndWZmbGVk 43435\nJ10uJzwv 43436\nX0NN 43437\nIHly 43438\ncGxhdA== 43439\nb2JvZHk= 43440\nbmRl 43441\nKEVsZW1lbnQ= 43442\nIEF0bGFz 43443\nIO+8iA== 43444\nIG5pdmVs 43445\nIGluc2lzdHM= 43446\nW1A= 43447\nIGVudGh1c2lhc3Rz 43448\nIOyeheugpQ== 43449\nIGJldmVyYWdl 43450\ne30iLA== 43451\nOnJpZ2h0 43452\nIG5vdXZlYXU= 43453\nIENvbXBsZQ== 43454\nIFBhZw== 43455\nb3ducw== 43456\nIHJlbWVtYmVycw== 43457\nIFByYWRlc2g= 43458\nIGNoYWxr 43459\nIExhdXJlbg== 43460\nXFNlcnZpY2U= 43461\nX0dFTg== 43462\nPiIpCg== 43463\nIERvbGxhcg== 43464\nIGVtb2pp 43465\nQ2Fyb3VzZWw= 43466\nLXBsYXllcg== 43467\nIGFkanVzdGluZw== 43468\nIGp1Z2E= 43469\nYWxsZW5nZXM= 43470\nZ2VuZQ== 43471\nKGJvZHlQYXJzZXI= 43472\nbG9wZWRpYQ== 43473\nIEJlaGluZA== 43474\nIHNsZWV2ZXM= 43475\nIGRyYWdnaW5n 43476\nIENoZXZyb2xldA== 43477\nIGJpeg== 43478\naXZpdGllcw== 43479\nIEZyZXF1ZW5jeQ== 43480\nLGNoYXI= 43481\nLldISVRF 43482\nX3ByZXZpZXc= 43483\nKSc7Cg== 43484\nX2F4 43485\nSU9OUw== 43486\nLmNwdQ== 43487\nLmlucHV0cw== 43488\nVUJF 43489\nX2ZlZWQ= 43490\nIFN1cHBsZW1lbnQ= 43491\nISku 43492\nZXN1cw== 43493\nIFVEUA== 43494\nIG1pY3JvcGhvbmU= 43495\nIGNvbmZpcm1z 43496\nLmlzTm90RW1wdHk= 43497\nIjoiIiwK 43498\nX1NDUkVFTg== 43499\nCWV4cGVjdGVk 43500\nKy0rLSstKy0= 43501\nIEhhaXQ= 43502\nZmFzdGNhbGw= 43503\nIGRlcGljdA== 43504\ndmI= 43505\nX3BpY3R1cmU= 43506\nCWRlc2NyaXB0aW9u 43507\nIFdpZmU= 43508\ndWNp 43509\nIHZpY2lvdXM= 43510\n5LuW 43511\ndWViYQ== 43512\nIHNldFVzZXI= 43513\n44Gh 43514\nIGRpdmluZw== 43515\nIG9wZXJh 43516\ndXNlcmNvbnRlbnQ= 43517\nYXJhaA== 43518\nKX0s 43519\neXVu 43520\ndmVsdA== 43521\nIHVuY292ZXJlZA== 43522\nIGhpcHM= 43523\nIG9zY2lsbA== 43524\nIGFzc2VydGluZw== 43525\nIFhp 43526\nLnJlc3RvcmU= 43527\na2Vh 43528\nIHNwZWxsaW5n 43529\nIGRlcml2ZQ== 43530\nYWJ3ZQ== 43531\nIERvdw== 43532\nLnNldFR5cGU= 43533\nX3Zz 43534\nIGNvenk= 43535\nLmNhdGVnb3JpZXM= 43536\nT3Jn 43537\nX21ncg== 43538\nIGR1bmdlb24= 43539\nY29sbGVjdGlvblZpZXc= 43540\nIEJsYW5r 43541\nYWNpYXM= 43542\nw6TDpA== 43543\nX2NsZWFudXA= 43544\nX0FDVElWSVRZ 43545\nIHRyaWFuZ2xlcw== 43546\nLk1lbnVJdGVt 43547\nIGlwaG9uZQ== 43548\nIFdvbg== 43549\nXV0KCg== 43550\nIENvbXBhcmlzb24= 43551\nLkRvYw== 43552\nIGNhbm9uaWNhbA== 43553\nIFN1ZGFu 43554\nJyl7 43555\nVXBJbnNpZGU= 43556\nYnVpbHRpbg== 43557\nRU5DWQ== 43558\neGJl 43559\nIGNodWNr 43560\nIGNvbnRyYWRpY3Q= 43561\nIG51ZXN0cm8= 43562\nIGFyY2hpdGVjdHVyYWw= 43563\nIEZpYg== 43564\nIGNvbXBhcmVz 43565\nKms= 43566\nQ2Zn 43567\n54Sh 43568\nbnRlbg== 43569\nTWF0Y2hlcw== 43570\nIERPV05MT0FE 43571\nX0hBTkRMRVI= 43572\nbWFuYWdlbWVudA== 43573\nW1M= 43574\nRU5H 43575\nwoDC 43576\nZmFuZw== 43577\nIHNsaXBwZWQ= 43578\nIExhbmth 43579\nZXNjYXBpbmc= 43580\nIHRhY2tsZXM= 43581\nIFBlZHJv 43582\nLlByb3A= 43583\nLicn 43584\nLkdlbmVyYXRlZA== 43585\nLk5ld0d1aWQ= 43586\nYXRyaWdlc2ltYWw= 43587\naWxsb24= 43588\nIHN0YXRpc3RpYw== 43589\nc3BlY2llcw== 43590\naG9sZGluZw== 43591\nRHJ1cGFs 43592\nIGZ1bmRhbWVudGFsbHk= 43593\nIGJvbmRhZ2U= 43594\nIHJlc29sdXRpb25z 43595\nSW5saW5lRGF0YQ== 43596\nXFR5cGU= 43597\nZXN0aW9u 43598\nLndyYXA= 43599\nIHdhcnJpb3Jz 43600\nIExPQ0FM 43601\nQXJjaGl2ZQ== 43602\nIGVtYnJhY2Vk 43603\n4bun 43604\nLlZlcg== 43605\nIEFmZm9yZGFibGU= 43606\nb2xlc2FsZQ== 43607\nIEFwcGxpZWQ= 43608\nIENvbnZlcnNpb24= 43609\nbWVnYQ== 43610\nX2NhbQ== 43611\nIGNlcmVtb24= 43612\nYXVydXM= 43613\nIFZvbGs= 43614\nLm9wZW5z 43615\nL2Fib3V0 43616\nIFN0ZA== 43617\nam91cm5hbA== 43618\nKCkpew0K 43619\nLCJc 43620\nKEFycmF5cw== 43621\nIERlbnNl 43622\nYXNlw7Fh 43623\nw6RubmVy 43624\nL3N0YXQ= 43625\ndXNlckRhdGE= 43626\nIGdlcm1hbg== 43627\nIHR6 43628\nd29ydGh5 43629\nRm9ybWF0RXhjZXB0aW9u 43630\ncGhlcmQ= 43631\nIHNtaWxlcw== 43632\nIFdoZW5ldmVy 43633\nKGFkYXB0ZXI= 43634\nLmJhZGxvZ2lj 43635\nIGJyaWVmaW5n 43636\nLkdyaWRDb2x1bW4= 43637\nLWNoYXI= 43638\nZGltZW5zaW9u 43639\nIENvcHBlcg== 43640\nIG5pbnRo 43641\nICd7ew== 43642\nIHJhdg== 43643\nX1RhYmxl 43644\nIGRlcml2YXRpdmVz 43645\nIFJhaXNl 43646\nIEZ1dA== 43647\nYXJtb3I= 43648\nLXBhZGRpbmc= 43649\nIHJlbWlu 43650\nCXN0eWxl 43651\nIE1lbWJlcnNoaXA= 43652\nIHNwcmVhZHM= 43653\nIGdhbGxlcmllcw== 43654\nIENsYXJrZQ== 43655\nIGNvbmNlcHRpb24= 43656\nbWludXRl 43657\nIGFidXNpdmU= 43658\nX2Fkag== 43659\nIHRlcnJpZmlj 43660\nIG92ZXJ0 43661\nb3VyY2luZw== 43662\nIGVudHJhZGE= 43663\nbGV2ZWxz 43664\nIGNyaXRpcXVl 43665\nIHJlc3BlY3Rz 43666\nIE1NQQ== 43667\naWVuZQ== 43668\nIGVuY2Fwcw== 43669\nIFJheW1vbmQ= 43670\nRGl2aWRlcg== 43671\naXZhYmxl 43672\nYmF6 43673\nIEBfOwo= 43674\nIENsYWlyZQ== 43675\nIHVyZ2luZw== 43676\nQ0VF 43677\nIHRyYW5zZm9ybWVy 43678\nZGlzY29yZA== 43679\nIEpvdXJuZXk= 43680\ndG9z 43681\nIGNvbXBldGl0aW9ucw== 43682\nIE9CSg== 43683\nIEJpcw== 43684\nIHJlbGF4YXRpb24= 43685\naWR5 43686\nX0lOU1RBTkNF 43687\nIFByZWY= 43688\nZGFkb3M= 43689\naWNpZW5jaWVz 43690\nIE1lZGlhUXVlcnk= 43691\nIEN1YmU= 43692\nIFN0cmFuZ2U= 43693\nZ3B1 43694\nKGRheXM= 43695\nX0luaXRTdHJ1Y3Q= 43696\nIGZpbmdlcnByaW50 43697\nZW1hdA== 43698\nIEdlY2tv 43699\nIHJhaWxz 43700\nIEx1bQ== 43701\nc3RyYWN0aW9u 43702\naWd1bmc= 43703\nKG1vdmll 43704\nX2RpY3Rpb25hcnk= 43705\nX2ludGVycnVwdA== 43706\nIFFD 43707\naWtlZA== 43708\nYXBwZW5kQ2hpbGQ= 43709\ncmVjaXBpZW50 43710\ncsOp 43711\nVmU= 43712\nIHRvd2Vs 43713\nLmxhc3RJbmRleE9m 43714\nIHBsYWNlYm8= 43715\nIFdpZQ== 43716\nLmVzcA== 43717\nKERlYnVn 43718\nb3BlcmF0aXZl 43719\nIGRlY2Vhc2Vk 43720\nJmlk 43721\nCW11dGV4 43722\nZWxpYw== 43723\nIGJhcHQ= 43724\nCQ0KDQo= 43725\nIGZhcnRoZXI= 43726\nSGFsZg== 43727\nLmRpc2FibGU= 43728\nLm1lbnVTdHJpcA== 43729\nbGVjY2lvbg== 43730\nIHJlc3VsdENvZGU= 43731\nIGNhbnM= 43732\nLWVsZWN0aW9u 43733\nZmVtYWxl 43734\nX0ZJWA== 43735\nYXVzaWJsZQ== 43736\nIFBPV0VS 43737\nIHJlY29uc3RydWN0aW9u 43738\nIHNjYW5z 43739\nLlh0cmFCYXJz 43740\n4oCYcw== 43741\nUmVtb3ZlZA== 43742\nIHBhcmFncmFwaHM= 43743\nX21hcmdpbg== 43744\nIGx5bXBo 43745\nIGJvcw== 43746\nbGluZ3Rvbg== 43747\nIEJhcHRpc3Q= 43748\nIGFkdmVydGlzZW1lbnRz 43749\nIE1hbmFnZQ== 43750\nL3l5eXk= 43751\nSU9VUw== 43752\nRU5DRVM= 43753\nIEZpY3Rpb24= 43754\nCW1lbnU= 43755\nIEZpbGVPdXRwdXRTdHJlYW0= 43756\nb3Zhbg== 43757\nIEZlbmc= 43758\nIHNraXBwaW5n 43759\nZ2V0Q2xhc3M= 43760\nYW5uaQ== 43761\nIHJlYm91bmRz 43762\nIHB1YmxpY2l0eQ== 43763\nIGluZ3Jlcw== 43764\ndXNlbWVudA== 43765\nIHRob3VnaHRmdWw= 43766\nLkNoYXJ0 43767\nIGhhdHRl 43768\ncGFzc3BvcnQ= 43769\nIGhvb2tlZA== 43770\nIExlbnM= 43771\nIGZsYWdzaGlw 43772\nIHN0aXA= 43773\nIEdFTg== 43774\nIGNsdWVz 43775\naXB2 43776\nIFJpc2U= 43777\nIEdldw== 43778\ndGFibGVuYW1l 43779\nIGZvcmVtb3N0 43780\nX3ZhbGlkYXRl 43781\nX2FuYWx5c2lz 43782\nb2xsYQ== 43783\nIHF1YWxpZmljYXRpb25z 43784\nIGRpc3RyaWJ1dGlvbnM= 43785\nIEZsb3dlcg== 43786\nIHRlbnNl 43787\nIHRoYW5rZnVs 43788\nIGNsdXRjaA== 43789\nIHVuaWZpZWQ= 43790\ncm9hZHM= 43791\nIHNpdGk= 43792\nIHN0YWxs 43793\nX1BSSU9SSVRZ 43794\nY3N0ZGxpYg== 43795\nX1VTRVJOQU1F 43796\nLmJ5dGVz 43797\nP3BhZ2U= 43798\nZXJtYWxpbms= 43799\nIFZlZ2V0 43800\nL3ZuZA== 43801\nLWF1dGhvcg== 43802\nLk5PTkU= 43803\nIENvbmN1cnJlbnQ= 43804\nIENyeQ== 43805\nIHN0YXJ0ZXJz 43806\nIEludGVyYWN0aW9u 43807\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 43808\nIExFVkVM 43809\nRWxs 43810\nIGNvbWJvQm94 43811\nIFRoZXJlc2E= 43812\ndGVr 43813\nX0hhbmRsZQ== 43814\nIGFieQ== 43815\nLmdkeA== 43816\nLGVuZA== 43817\nKExvY2Fs 43818\nT2w= 43819\na25pZmU= 43820\nYXJpYWw= 43821\nIEhvZmY= 43822\nIHByb3N0aXR1ZXJhZGU= 43823\nRG9jdG9y 43824\nSW5zdGFuY2Vz 43825\nLlNldFZhbHVl 43826\nCWZyb20= 43827\nIGx1eHVyaW91cw== 43828\nSW5kZW50 43829\nQWxsb2NhdG9y 43830\nX0RSQVc= 43831\nKCIsIiw= 43832\nIEZyYW5jZXM= 43833\nIGdyb3VwQm94 43834\nKHNjaGVtYQ== 43835\nUHJpbnRm 43836\nT1JJRVM= 43837\nLWdyYWRpZW50 43838\nIHJlcHV0 43839\nYXJpbg== 43840\nX0RPTkU= 43841\naW5jcmU= 43842\naWdudHk= 43843\nIGV4ZXJ0 43844\nIC0u 43845\nL0FwcA== 43846\nLXRocm91Z2g= 43847\nIGRlY2xpbmluZw== 43848\nIGRlc3NlcnQ= 43849\nIGluY3VtYg== 43850\nIGRlc2lnbmF0aW9u 43851\nLlBPUlQ= 43852\nLHN0cm9uZw== 43853\nIHNhbmRib3g= 43854\nIHdpbmVz 43855\nIFBhdg== 43856\nJHN0cg== 43857\nYXNrZWxs 43858\nIGjDtg== 43859\nIFBZ 43860\nR2V0SW5zdGFuY2U= 43861\nVGV4dElucHV0 43862\nZ2FtZU9iamVjdA== 43863\nL2V2ZW50cw== 43864\nY3JlYXRlZEF0 43865\nIGxvY2FsVmFy 43866\nIFdISVRF 43867\ncGVyZWQ= 43868\naWxlZ2U= 43869\nZWZmaWNpZW50 43870\nLGNvbG9y 43871\nY2F0ZQ== 43872\nIENhZmU= 43873\nIHNpbWlsYXJpdGllcw== 43874\nIHB1bXBz 43875\nIEh1bmdhcnk= 43876\nLlVzZXJuYW1l 43877\nIHNrYXRl 43878\nIHRvdWNoZG93bnM= 43879\nIGFjY2VsZXJhdGU= 43880\nIEhlbGVu 43881\nT01FTQ== 43882\nIEt1bg== 43883\nX3ZvbA== 43884\nIGZpbmRBbGw= 43885\nIE1lbnNjaGVu 43886\nYWhlYWQ= 43887\nKTsi 43888\na29tbWVu 43889\nIHBvc3Nlc3NlZA== 43890\nLmFyZ21heA== 43891\nLnRyYW5zaXRpb24= 43892\nQVJQ 43893\nT0xVTUU= 43894\nKHNjcmlwdA== 43895\nINCY 43896\nIEZpbmRpbmc= 43897\nb25jZXM= 43898\nSW8= 43899\nQm9sZA== 43900\nIHJlbmV3YWw= 43901\nX0RJQUxPRw== 43902\nIGRpc3JlZw== 43903\nSU5URVJO 43904\nIHRvdXRl 43905\nIGVsZWN0cg== 43906\nIEdyb3Nz 43907\nCXRydWU= 43908\nLkZpZWxkcw== 43909\nIFdJRFRI 43910\nIERlbnQ= 43911\nIMOB 43912\nTlNOb3RpZmljYXRpb24= 43913\nIGFvcw== 43914\nIG1lbGVl 43915\nLlZhbGlkYXRpb24= 43916\nIERFQw== 43917\nLWRlcGVuZGVudA== 43918\nIHN1aWM= 43919\nVHJhaXRz 43920\nJG1lc3NhZ2U= 43921\nIERlYXI= 43922\nCUZJTEU= 43923\nbGFuZ3VhZ2Vz 43924\nLlByb3Q= 43925\nLmFkZHI= 43926\nLWdlbmVyYXRpb24= 43927\nSUNPTg== 43928\nIHRyYW5zcGxhbnQ= 43929\nLWRlc2NyaXB0aW9u 43930\nIGNoYXNpbmc= 43931\nIGNoZWVz 43932\nIH0qLwo= 43933\nVHJhZA== 43934\ncXVlcmllcw== 43935\nL3dpZGdldHM= 43936\nc3VicGFja2FnZQ== 43937\nIGVzcGVj 43938\nIGNyYWNrZWQ= 43939\nIGNvbXBldGl0b3I= 43940\nUHVyY2hhc2U= 43941\nLXRlYW0= 43942\nb2xlY3VsYXI= 43943\nb3JUaHVuaw== 43944\nJlA= 43945\nIHJlbGVudA== 43946\nLyN7 43947\nIHByb2R1Y3RJZA== 43948\nIOi+ 43949\nIExhdg== 43950\nIEFsdGVy 43951\nLk1vZGU= 43952\nQURJTw== 43953\nZ3Jw 43954\n5re75Yqg 43955\nUXVpdA== 43956\nIGRlcHRocw== 43957\nLWNhdGVnb3J5 43958\nIERBVEFCQVNF 43959\nU1BFTEw= 43960\nIEZhbGNvbg== 43961\nIFFTdHJpbmdMaXN0 43962\nICcnLg== 43963\nIEluc3RpdHV0aW9u 43964\nZGFtYWdl 43965\nYXpvcg== 43966\nYmVsb25nc1Rv 43967\ndmVyYWdlcw== 43968\nIE5PTkU= 43969\naXBwZXRz 43970\nLFwK 43971\nIGZvb3RwcmludA== 43972\nX2FyY2hpdmU= 43973\nbmFr 43974\nLmdldEZpZWxk 43975\nIFJlZmxlY3Rpb24= 43976\nICdd 43977\nIEhCTw== 43978\nX2Rpc2NvdW50 43979\nIGluY2VzdA== 43980\nIERvZGdl 43981\nIFdhZGU= 43982\nLk5P 43983\nImVuY29kaW5n 43984\nIEJsb2NrY2hhaW4= 43985\nIGxhd3N1aXRz 43986\nIE1haW50 43987\nY2h0ZW4= 43988\nIMOpdGFpdA== 43989\nIGt0w7NyZQ== 43990\nX2N0bA== 43991\nKHRpbWVy 43992\nQmF0dGxl 43993\naXpv 43994\nYXllZA== 43995\nSU9S 43996\nIEdsYXNnb3c= 43997\nIHN5bnRo 43998\nX2xvZ3M= 43999\nLnBvc2U= 44000\nX0FkanVzdG9yVGh1bms= 44001\nKCgm 44002\nIHVuc3VyZQ== 44003\neXN0YXRl 44004\n7ZWY64qU 44005\nT1VMRA== 44006\nLm5n 44007\nIGRlZmF1bHRkaWN0 44008\nd29ya3NwYWNl 44009\nIHNlbGVjdGl2ZQ== 44010\nUGlja2VyQ29udHJvbGxlcg== 44011\nWU5BTUlD 44012\nLm1ldGhvZHM= 44013\nIHBhdGh3YXlz 44014\nIEZldw== 44015\nS0c= 44016\nQ1JZUFQ= 44017\nZm9sbG93aW5n 44018\nIERMQw== 44019\nIFNhcmE= 44020\nIHByZXNldA== 44021\nZXN0cnVjdG9y 44022\nIEt1cnQ= 44023\nIGFpcnBsYW5l 44024\nIG9tcA== 44025\nIFBhcmVudHM= 44026\nIE1hcnRpbmV6 44027\nLmNvbXBsZXRl 44028\nIGJyb2FkbHk= 44029\nIHNjYXJl 44030\nIE3DqQ== 44031\nIGVsaW1pbmF0aW9u 44032\nIHBvdXJlZA== 44033\nL3N3 44034\nIGNvbXVu 44035\nIG1hc2M= 44036\nIE9yZ2FuaWM= 44037\nIFN0cmluZ1V0aWxz 44038\naWxhdGVyYWw= 44039\nIHJlbHVjdGFudA== 44040\nLWFnZQ== 44041\nIG56 44042\nLiJc 44043\nIHBhc3Rvcg== 44044\nYWxleg== 44045\nIGVmZWN0 44046\ncHJvdg== 44047\nL2luaXQ= 44048\nIHBlbm4= 44049\ndW5kcw== 44050\nIHNzaXpl 44051\nIFByb2o= 44052\nYmFzZW5hbWU= 44053\nIHNoZWxscw== 44054\nIE5lY2s= 44055\nIEVuZm9yY2VtZW50 44056\ndmlkZWQ= 44057\nc3Rvd24= 44058\nU3BoZXJl 44059\nJHI= 44060\ndXNzZW4= 44061\nYWZpbA== 44062\nIFRlbGVncmFt 44063\nIGFuYWx5dGljYWw= 44064\n0L3Ri9C1 44065\ndXN1YWxseQ== 44066\neG4= 44067\nIGhpc3Rvcmlhbg== 44068\nIEdyZWdvcnk= 44069\nb2xwaA== 44070\nIFVuYQ== 44071\nIGNvbnRyaWJ1dGVz 44072\nJS0= 44073\nYW50aWFnbw== 44074\n0YDQtdC0 44075\nLnJlZ2lvbg== 44076\nIGFicnVwdA== 44077\nIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u 44078\nIFRBU0s= 44079\nX2ZpbmlzaA== 44080\nIG5vdG9yaW91cw== 44081\nIFZz 44082\nIE1R 44083\nIHN1bnNldA== 44084\nIHVuYWNjZXB0YWJsZQ== 44085\nYXJjZXI= 44086\nIGlsbHVtaW4= 44087\nIE9yYg== 44088\nIGJo 44089\nRXN0ZQ== 44090\nX2Rpc3BhdGNo 44091\nIHJpcHBlZA== 44092\nIHRvdWpvdXJz 44093\nIFBhcmNlbA== 44094\nX2xs 44095\nLnVzZXJOYW1l 44096\nLmNsYXNzZXM= 44097\nU09VUkNF 44098\nKE51bWJlcg== 44099\n0LXQu9GP 44100\nIGhlYWRwaG9uZXM= 44101\nKHNpZGU= 44102\nY29uc3RpdHV0aW9u 44103\nYW5uYWg= 44104\nDQogICAgICAgIA0K 44105\nIGNsaWZm 44106\nLXJlZg== 44107\nIG1vc3RyYXI= 44108\nIFBvd2VsbA== 44109\nK3k= 44110\nIEJH 44111\nX2ZyYWdtZW50 44112\nLlBvcnQ= 44113\nIHJlYWxpemluZw== 44114\ncGFyYW1yZWY= 44115\nIGhvbWV0b3du 44116\nQFRhYmxl 44117\nKyI8Lw== 44118\nb21pZA== 44119\nIGR1Zw== 44120\nCWJ0bg== 44121\nIHN1YmplY3RpdmU= 44122\nL2Jyb3dzZXI= 44123\nIHVzaG9ydA== 44124\nIE1vbnRnb21lcnk= 44125\nLXJhdGU= 44126\nCXB1dHM= 44127\nbGV0aWNz 44128\nb3Jucw== 44129\n4oCcV2hhdA== 44130\nZWVwZXI= 44131\nLkludmFyaWFudA== 44132\nIGNvbmNlYWxlZA== 44133\nX251bXB5 44134\nPT09PT09PT09 44135\nKHBz 44136\nTG9jYXRpb25z 44137\nLmFzdHlwZQ== 44138\nIENIQU5HRQ== 44139\nLk9yZGVyQnk= 44140\nO2hlaWdodA== 44141\nIGdlbnRl 44142\nIGdydW50 44143\nIFBsYW5l 44144\nIHNhZGx5 44145\nIExvZ2Fu 44146\nX3VzZWM= 44147\nLmRndg== 44148\nIHNpbmNlcg== 44149\nIHBu 44150\nCWd0aw== 44151\nIGluc3RhbGxlcg== 44152\nIGRpc3BsYWNlbWVudA== 44153\nIGJ1cm5z 44154\n0YPRgQ== 44155\naXZlcmVk 44156\nOl0pCg== 44157\nc2VhdA== 44158\nYW5pbmc= 44159\nfSkKCgo= 44160\nX3JvbGVz 44161\nYXRpY2Fu 44162\nIGdlbmVyYXRvcnM= 44163\nIGh1cnRz 44164\nIHNuaXBwZXQ= 44165\nIGdzb24= 44166\nIHNlZ3JlZw== 44167\nIGRpc3RyaWJ1dG9y 44168\nIGFkdmFuY2luZw== 44169\ncG9zdGdyZXM= 44170\nIHVzcg== 44171\nIExpcw== 44172\nLmFzc2VydElz 44173\nX2Nk 44174\nIGh5ZHJhdWxpYw== 44175\nLmNvdW50ZXI= 44176\nIEluZGVwZW5kZW5jZQ== 44177\nIGRpZmbDqQ== 44178\nVW5saWtl 44179\nIHRvbWI= 44180\ndmlr 44181\ncG9zdGVk 44182\nd2Y= 44183\nIGRlc2NlbmRpbmc= 44184\nZHlu 44185\nYW1lbnRhbA== 44186\nIEZydWl0 44187\nIFlv 44188\nLmRvdWJsZQ== 44189\nIElB 44190\naWV2 44191\naWJyYXRl 44192\nIFJlbGlnaW9u 44193\nTWFueVRvT25l 44194\nLVRh 44195\nIGJhbmFuYQ== 44196\nIEF2ZW5nZXJz 44197\nIEhvbG9jYXVzdA== 44198\nIGdldEM= 44199\nIGNvbmRv 44200\nIEdvdGhpYw== 44201\nIHByb3NwZXJpdHk= 44202\nVFJBTlM= 44203\nIGRvZXNudA== 44204\nIENoYW9z 44205\nSVRU 44206\nIENVUlJFTlQ= 44207\nXGhlbHBlcnM= 44208\nX1NBVkU= 44209\nYXZpdA== 44210\nY29tcHV0ZXI= 44211\nX3NoZWV0 44212\nIEJyZXdpbmc= 44213\nIHJvYmJlcnk= 44214\nIOqyvQ== 44215\nINC60L7QvA== 44216\nIG7DpA== 44217\nLnJlZ2V4 44218\nIGRpc3J1cHRpb24= 44219\nIFNpbXVsYXRpb24= 44220\nYXBpZA== 44221\nIHN1cHJlbWU= 44222\nzrw= 44223\nIGNvbW1pc3Npb25lZA== 44224\nIGFic29ycHRpb24= 44225\nIE5ld2Nhc3RsZQ== 44226\nCWNvbnN0cnVjdG9y 44227\nVGVybXM= 44228\nIHJpdg== 44229\nIHJlbGlnaW9ucw== 44230\nV2l0aFRhZw== 44231\nLkh0bWw= 44232\nbGlua2Vk 44233\nQ29tcG91bmQ= 44234\nIE1hbnM= 44235\nIGxha2Vz 44236\naXp6bGU= 44237\nLnNldFNpemU= 44238\nYWJlcg== 44239\nIE5lZWRz 44240\ncGFja2FnZXM= 44241\nLlRhYlBhZ2U= 44242\nIHJlZnM= 44243\nIGlvdXRpbA== 44244\nIERvaW5n 44245\nICJcKA== 44246\nIHBoZW5vbWVuYQ== 44247\nLkdldEludA== 44248\nQUxUSA== 44249\nIHBhcmxpYW1lbnRhcnk= 44250\nIHJlZnVzYWw= 44251\nIGluZXhwZW5zaXZl 44252\nIH0KCgoKCg== 44253\nIHNvbGlkYXJpdHk= 44254\nCXB1c2g= 44255\naGF1bA== 44256\nIEJlcmU= 44257\nU2l6ZXI= 44258\nSW5kaXZpZHVhbA== 44259\nIGFuY2U= 44260\nIGRpbGU= 44261\nIFBlYWs= 44262\nKGhy 44263\nRWRpdGluZ0NvbnRyb2xsZXI= 44264\nSE4= 44265\nX1BFUklPRA== 44266\nRVRT 44267\nQmFubmVy 44268\nZXJyb3JNZXNzYWdl 44269\nLkNBU0NBREU= 44270\nLWlnbm9yZQ== 44271\nIFNJR04= 44272\nIE9C 44273\nX2Rk 44274\nKERFRkFVTFQ= 44275\nIHNvbw== 44276\nIFZpY3Rvcmlhbg== 44277\nIGN1cnQ= 44278\nIGRpc2NyZXRl 44279\ncnlsaWM= 44280\naW1iYWJ3ZQ== 44281\nLnRvRml4ZWQ= 44282\nbMOk 44283\nLnN0ZGlu 44284\nIHF0eQ== 44285\nUk9MTEVS 44286\nbWVkaWF0ZWx5 44287\nIHBsdW1iaW5n 44288\nIFByb3BlcnR5Q2hhbmdlZA== 44289\nYXJyYW50eQ== 44290\nIEJyZWFrZmFzdA== 44291\nLnNldEhlYWRlcg== 44292\nLnB5dGhvbg== 44293\nY29tbWVyY2U= 44294\nb3BlbmN2 44295\nPi0tfX0K 44296\nRnJlbmNo 44297\nRW50aXR5TWFuYWdlcg== 44298\nIFBsYWlu 44299\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 44300\nwrM= 44301\nKFJF 44302\nY2FwdA== 44303\nIG9yZ2FuaXNtcw== 44304\nIGpldHM= 44305\nb2xvY2F0aW9u 44306\nIEFwcFJvdXRpbmdNb2R1bGU= 44307\nIGdsb3Jpb3Vz 44308\n5pyN 44309\nIGRpc2NhcmRlZA== 44310\nCQkJCSAgICAg 44311\nIEFybm9sZA== 44312\nbHVn 44313\nIHBhcmw= 44314\nIGhvcm1vbmVz 44315\nIG1haA== 44316\nIFNvbmlj 44317\nIG9yZ2FuaXplcnM= 44318\nX1BMQVRGT1JN 44319\nLmludg== 44320\nIGNob3Jk 44321\ndmVudGlvbmFs 44322\nCW9m 44323\nRXBpc29kZQ== 44324\nLkVudW0= 44325\ndW5rdA== 44326\nIERo 44327\nIEphcmVk 44328\nIE5haw== 44329\nIGludGVuZHM= 44330\nRW5kaWFu 44331\nIGF1c3RyYWxpYQ== 44332\nX2N2 44333\nKHJlc29sdmU= 44334\nIGNsaW5pY3M= 44335\nbGlrZWQ= 44336\nQVNISU5HVE9O 44337\naW5oYQ== 44338\nJyo= 44339\nIE5Q 44340\nX2JlaA== 44341\nIGhm 44342\nIHfDvHI= 44343\nY2F0ZWdvcmlh 44344\nJGZvcm0= 44345\nIHN1YndheQ== 44346\nIGlzQWN0aXZl 44347\ncG9wdWxhcg== 44348\nQ291cg== 44349\nIGNvb2xkb3du 44350\nIGFpbnNp 44351\nIEdMdWludA== 44352\nZXJlYWw= 44353\nIGFycmF5T2Y= 44354\nIGhhdGNo 44355\nPT09PT09PT09PQ== 44356\ncmVzc2Vz 44357\nX1BQ 44358\nLl4= 44359\nX2RlY2F5 44360\nIEJsZXNz 44361\nbWV0cmljcw== 44362\nIENPUFlJTkc= 44363\nIER1bXBzdGVy 44364\nIEpvc8Op 44365\nIERlc2lnbnM= 44366\nPFZvaWQ= 44367\n57q/ 44368\nID8+PA== 44369\nICJ9Cg== 44370\ndGltZXpvbmU= 44371\nIGVlcg== 44372\nbWF4Y2Ru 44373\nIEVTQw== 44374\naWdhcmV0 44375\nX2Nvbm5lY3RlZA== 44376\nX3JldmVyc2U= 44377\nIHF1ZXN0aW9uYWJsZQ== 44378\nIFVTQw== 44379\nIHR1dHRp 44380\nIGRyb3BvdXQ= 44381\nIEFjdGl2aXRpZXM= 44382\nIFdpbmRz 44383\nJykpKTsK 44384\nIGNvbmdlc3Q= 44385\nxJ/EsQ== 44386\nIHByb2xvbmdlZA== 44387\n6L+Z 44388\nIENyb3NzQXhpc0FsaWdubWVudA== 44389\nTEVFUA== 44390\nIFZBTElE 44391\nIEdheg== 44392\nIGRlcGVuZGVuY2U= 44393\nIFByaXg= 44394\nLkNvbXBpbGVyU2VydmljZXM= 44395\nanVtcA== 44396\nIHN0cmF0 44397\nY2lyYw== 44398\nIENVU1RPTQ== 44399\neGFh 44400\nIGJtcA== 44401\nIGJ1cmVhdQ== 44402\nIHdhcmVu 44403\nTlg= 44404\nKFdpbmRvdw== 44405\nIENocmlzdGll 44406\nX0ZF 44407\nIHRu 44408\nIE9tZWdh 44409\nY29tbXVuaWNhdGlvbnM= 44410\nSG9tZVBhZ2U= 44411\nY29tcGxldGlvbg== 44412\nIHN1cHBseWluZw== 44413\nWVBFUw== 44414\nw6F2ZWw= 44415\n5Yi2 44416\nKGNsaWNr 44417\nXENvbnRyYWN0cw== 44418\nL3F1ZXN0aW9ucw== 44419\nIGV6 44420\nQU1T 44421\nLm1lc2g= 44422\nICc8Pw== 44423\nasOg 44424\nSW5p 44425\nLiM= 44426\nIENhcmRpbmFscw== 44427\ncGNpw7Nu 44428\nQ3ViZQ== 44429\nIFBhdGllbnRz 44430\nX3ByZWY= 44431\nQWN0aW9uQnV0dG9u 44432\nKGJ1aWxk 44433\nIFZpc2E= 44434\nb3ZlbA== 44435\nKEFycmF5TGlzdA== 44436\nSWdu 44437\nIHJlaGFiaWxpdGF0aW9u 44438\nIHBhbGFjZQ== 44439\nIHNwZWVjaGVz 44440\nfScK 44441\nSHR0cFJlc3BvbnNl 44442\nCWNvZGU= 44443\nRHVtbXk= 44444\nIGFjYWRlbXk= 44445\nLm1vdmll 44446\nIGluY29ycmVjdGx5 44447\nIGN5Yw== 44448\nKFVuaXR5RW5naW5l 44449\nCWNhbGxiYWNr 44450\nIFNhdGFu 44451\nIEZVTkM= 44452\nIGNoYW50 44453\nIEhlYWx0aHk= 44454\nOicsCg== 44455\nU2hpcHBpbmc= 44456\nX21j 44457\nIER5bGFu 44458\nIFByb2R1Y2Vy 44459\nIHJlc3B1ZXN0YQ== 44460\nIHBvbGlzaGVk 44461\nQnJvYWRjYXN0 44462\nIGJhbGFuY2luZw== 44463\nIFNsaWRl 44464\nIENhcHM= 44465\nc3RpbGw= 44466\nIGhhcHBpZXI= 44467\nIEdvc3BlbA== 44468\ndHJhbg== 44469\nLnBhdGhuYW1l 44470\nQWN0aXZlU2hlZXQ= 44471\nIENoYW5n 44472\nPlwK 44473\nUm9ib3Q= 44474\nSnNvbk9iamVjdA== 44475\nIERG 44476\nIFByb2Nlc3Nvcg== 44477\nX3Nob3VsZA== 44478\nLnByb3RvYnVm 44479\nLXVzZXJz 44480\nIGVtYnJ5 44481\nRk9OVA== 44482\nIHN0YXJ0dXBz 44483\nIERhdGFTb3VyY2U= 44484\nKSM= 44485\ndXJvcw== 44486\nX0NvbG9y 44487\nIHN0YW5kYWxvbmU= 44488\nfVs= 44489\namQ= 44490\nIGZvcmdpdmU= 44491\nIG5neA== 44492\nIEdlbmVyYWxseQ== 44493\nIGNvbmZpZ3VyYWJsZQ== 44494\nL29yZGVy 44495\nIHZhcw== 44496\nJykiOwo= 44497\nIFJS 44498\nIFRyb3k= 44499\nIGNvbXByb21pc2Vk 44500\nIFN3YW4= 44501\naW50ZW5kZW50 44502\nQ2VudHJhbA== 44503\nX2tlZXBlcg== 44504\nIGFycXVpdm8= 44505\nIFJlYWRPbmx5 44506\nX2N1cnZl 44507\na3Y= 44508\nZW50aW4= 44509\n6LE= 44510\nIEV5 44511\nLmltcmVhZA== 44512\nIFBhbQ== 44513\naWZmZQ== 44514\nYXRpdml0eQ== 44515\neGJj 44516\nIGdyaW0= 44517\nLWZpbGxlZA== 44518\nbmFtZXNl 44519\nJ106 44520\nIGF1cg== 44521\nIEdpYnNvbg== 44522\nLk1vdXNlRXZlbnQ= 44523\nIGxhZG8= 44524\nYXZhZG9j 44525\nIGZhbWls 44526\nIE1vZGVy 44527\nZnBz 44528\n44CA44CA 44529\nLWV4YW1wbGU= 44530\nIEFsemhlaW1lcg== 44531\nIFV0Zg== 44532\nX2FyZ3VtZW50cw== 44533\nQ29uY2x1c2lvbg== 44534\ndGV4dENvbnRlbnQ= 44535\ncmVtYWluaW5n 44536\nIGludGVycnVwdHM= 44537\nIEJhY2t1cA== 44538\nIE1vbmc= 44539\nIHJlY2VwdG9ycw== 44540\naGlzdG9y 44541\nLmNvcm91dGluZXM= 44542\nIHNob3V0ZWQ= 44543\nQWxhcm0= 44544\nIGNvbWJ1c3Q= 44545\nIGdyb3Rl 44546\ndWx0dXJhbA== 44547\nKGlkcw== 44548\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 44549\naXBsaW5hcnk= 44550\nT3B0cw== 44551\nIFlhbGU= 44552\nbG9jYWxTdG9yYWdl 44553\nIGVxdWl2YWw= 44554\nIEZsZWV0 44555\nXGI= 44556\nKnBp 44557\nIFFMYWJlbA== 44558\n5qE= 44559\nIHZ4 44560\nIEFDTA== 44561\nIHN1Y2Vzc28= 44562\nIHBlcmM= 44563\nIE5vdHJl 44564\nIGFuYXJjaA== 44565\nUmluZw== 44566\nc3Bi 44567\nIHN0cnBvcw== 44568\nc3RvcmVz 44569\nIE1hcGxl 44570\nKE1haW5BY3Rpdml0eQ== 44571\nKCIiKSk= 44572\nIHZpZXdIb2xkZXI= 44573\nUXVhZA== 44574\nIGlndWFs 44575\nb3JzY2hl 44576\nLm1hcmdpbg== 44577\nIGluZGll 44578\nIGZyYW5j 44579\nIEZvcm1CdWlsZGVy 44580\nIFBhcnRpY2lw 44581\nLmZsYXNo 44582\nIHN0b3Jtcw== 44583\nVWx0 44584\nIGZlbg== 44585\nW25ldw== 44586\nRXZlcg== 44587\nPSIK 44588\nIGxvY2FsaXplZA== 44589\nX2ZvbGxvdw== 44590\nIG5hdmU= 44591\nIGRvbWluYW5jZQ== 44592\nKHRpbGU= 44593\nSm91cm5hbA== 44594\nIFZD 44595\nIHBlbmV0cmF0aW9u 44596\n77yV 44597\nIGNvbXBhcnRtZW50 44598\nIGJpZHM= 44599\nRm9ybWF0dGVk 44600\nKioqKioqLwoK 44601\nKGNpdHk= 44602\n4oCUaXQ= 44603\nW0M= 44604\nIHVzZUNhbGxiYWNr 44605\nYXVi 44606\nKT8u 44607\nIFZBUg== 44608\nIFNlYmFzdGlhbg== 44609\nIE1vc3M= 44610\nIGFidW5kYW50 44611\nR3JlZw== 44612\n0YLQsA== 44613\nX2Np 44614\nIGJpYmxp 44615\nQ1JN 44616\nIEF0dGVtcHQ= 44617\naXNtZQ== 44618\nZGFzaA== 44619\n44CO 44620\nX211 44621\nLkZvcm1hdHRpbmdFbmFibGVk 44622\nSW5kZWVk 44623\nLWRpcmVjdA== 44624\nIHN1Y2tpbmc= 44625\nIHBuZQ== 44626\nb2NhYnVsYXJ5 44627\nIFBhY2tlcnM= 44628\nLk5hdmlnYXRpb24= 44629\nIHBpZWQ= 44630\nY3JpYmluZw== 44631\nIFN0dWFydA== 44632\nLlRvRG91Ymxl 44633\nIFNlY29uZGFyeQ== 44634\nU2F2aW5n 44635\nIER1dA== 44636\nIE1hZGQ= 44637\nTWFnaWM= 44638\nLEg= 44639\nLmRvY3VtZW50RWxlbWVudA== 44640\nIEJTVA== 44641\nIGRpZmZlcnM= 44642\nIG1vcmVvdmVy 44643\nX25k 44644\nU0VBUkNI 44645\n0L/RgNCw0LI= 44646\n5rQ= 44647\ndG9NYXRjaA== 44648\nIGRlY3JlYXNpbmc= 44649\nLW1lbWJlcg== 44650\nYW1wdXM= 44651\nKGJvb3N0 44652\nRGFpbHk= 44653\nRGF0YUdyaWRWaWV3 44654\nIEh0dHBDb250ZXh0 44655\nIGhpcHA= 44656\nX3dvcmtlcnM= 44657\nLWxhbmd1YWdl 44658\n6ZM= 44659\nIGNvbnNpc3RlZA== 44660\nYXRoaW5n 44661\nIE1lcmN1cnk= 44662\nJGNvbnRlbnQ= 44663\nIHByYWN0aWNlZA== 44664\nIE1vZHVsZXM= 44665\nX0RBWQ== 44666\nIHdlYWtuZXNzZXM= 44667\nIExvZGdl 44668\nIG5hcg== 44669\nIE1hdGU= 44670\nIGpw 44671\nIEh0dHBIZWFkZXJz 44672\nIHNtbw== 44673\nIFRPS0VO 44674\nXSko 44675\nIGFxdWk= 44676\nc3dhZ2Vu 44677\nIHNydg== 44678\nCWFucw== 44679\nQXJvdW5k 44680\nIE1hbnVlbA== 44681\nIGZpY3Rpb25hbA== 44682\nIElNRw== 44683\nIC4n 44684\nIEJlcnJ5 44685\nIHdhbGxwYXBlcg== 44686\nc2V4dWFs 44687\naWVybw== 44688\nIOeahA== 44689\n7IaM 44690\nQmFja2luZ0ZpZWxk 44691\nIEFkcmlhbg== 44692\nQkFTRVBBVEg= 44693\nIHJlcGVhdHM= 44694\nIGJsdWVz 44695\nIHVucHJlZGljdA== 44696\nX2NvbGw= 44697\nc3RhY2xl 44698\nIFR1bWJscg== 44699\nIEVsZg== 44700\nIGFzc3VyYW5jZQ== 44701\nIGNlbnN1cw== 44702\nIElNUE9SVA== 44703\nRU5ERVI= 44704\nYW5vcw== 44705\nID0o 44706\nIEVsbGlz 44707\nIgoKCgo= 44708\nLndpbg== 44709\nIEFib3Zl 44710\nYWxvbg== 44711\nX3RpY2s= 44712\nIHJlcHJlc2VudGF0aW9ucw== 44713\nIOaV 44714\nd2lk 44715\nIEFybXM= 44716\nTGlzdGE= 44717\nX2ZhaWx1cmU= 44718\nX2Nt 44719\nLkZsYXRBcHBlYXJhbmNl 44720\nIHRocm9uZQ== 44721\nUGF0Y2g= 44722\nIFZveQ== 44723\nZW5nbA== 44724\nIG5lZ290aWF0aW5n 44725\nPmA= 44726\nIHNob290cw== 44727\nIEZQUw== 44728\nLlllYXI= 44729\nIEtpc3M= 44730\nZW5jacOzbg== 44731\ncmVldGluZw== 44732\nRnJvbUZpbGU= 44733\nIHJlc2lnbmF0aW9u 44734\n2Lc= 44735\nIHR3aW5z 44736\nxrDhu6M= 44737\nIGdlYnJ1 44738\nLmdldENvbnRlbnQ= 44739\nLlRyZWU= 44740\nIEVtcGxveWVlcw== 44741\nIEZJRkE= 44742\nIGNlcnRhaW50eQ== 44743\nKENs 44744\nIHRvdGFscw== 44745\nZWRpdGFibGU= 44746\n4KWA 44747\nLlJlcG9ydGluZw== 44748\nTWFz 44749\ncXVpZXQ= 44750\nLnJ1bGVz 44751\nIFZP 44752\nY29uZXhpb24= 44753\nLEs= 44754\nIGFsbG9jYXRvcg== 44755\nIFBvd2Rlcg== 44756\nXFJlcG9zaXRvcnk= 44757\nQmVhdA== 44758\nX3RpcG8= 44759\nIFsnJyw= 44760\nX0lOVFI= 44761\nIDw8PA== 44762\nPGhy 44763\nIik9PQ== 44764\ndWdnYWdl 44765\nIENyYXc= 44766\nIMOpZ2FsZW1lbnQ= 44767\nIGdpbmdlcg== 44768\nIHByaW1lcmE= 44769\nIHByb2R1dG8= 44770\nbHRr 44771\nLlVzZXJOYW1l 44772\nIHN0cmVycm9y 44773\nbWl0aA== 44774\nX25i 44775\nIGRpc2NvbWZvcnQ= 44776\nJ107Pz48Lw== 44777\nUVQ= 44778\nIGVydXB0 44779\nIERhbmlzaA== 44780\nXEFjdGl2ZQ== 44781\nX2FkYXB0ZXI= 44782\nIGJ1YmJsZXM= 44783\ncm9sbG8= 44784\nb3Jnb3Q= 44785\n0L3Ri9GF 44786\nVkVDVE9S 44787\nb2NvZGU= 44788\nIEJ1bGxz 44789\nIGJvaWw= 44790\nPiIpOw0K 44791\nZHJvcElmRXhpc3Rz 44792\nIEJlZw== 44793\nX0hBTA== 44794\nIGNyb3NzQXhpc0FsaWdubWVudA== 44795\nIEV2aWRlbmNl 44796\nIHBlY3VsaWFy 44797\nIGluc3RpdHV0ZQ== 44798\ndmVpcw== 44799\nIGZmdA== 44800\nw4E= 44801\nIHpvZWt0 44802\nYW5hbHk= 44803\nIEhvbWVsYW5k 44804\nIHBlbmV0cg== 44805\ndWRkZW5seQ== 44806\nCWVsZW1lbnQ= 44807\nIEJyZW4= 44808\nIFRydWRlYXU= 44809\nIEN1YmFu 44810\namFt 44811\ndXNsaW0= 44812\nX2V2 44813\nIHN0ZW1z 44814\nfSU= 44815\nneWniw== 44816\nIGJyYW5kaW5n 44817\nIGNvcnJlc3BvbmRlbmNl 44818\nLmpxdWVyeQ== 44819\nouWNlQ== 44820\nIFJlYWRz 44821\nKEh0dHBTdGF0dXNDb2Rl 44822\nYXNzaW4= 44823\nKHNsb3Q= 44824\nIEdyYWR1YXRl 44825\nLy8vPA== 44826\nIGluZm9ybWF0aW9ucw== 44827\nRU5BQkxF 44828\nIHB1aXM= 44829\nIGZpbmRlcg== 44830\nIEJyaXM= 44831\nIG5ldHRzdGVkZXI= 44832\nX21pZA== 44833\nIG9ncw== 44834\nIFN0ZXJsaW5n 44835\nIGFycm9n 44836\nc3RyZnRpbWU= 44837\nfAoK 44838\nIHZveA== 44839\nIFJlZ2FyZGxlc3M= 44840\nIGVzbw== 44841\nIENvbWZvcnQ= 44842\nLkJvb2xlYW5GaWVsZA== 44843\nIHVo 44844\nQUNZ 44845\nIHNxdWVleg== 44846\nIFZpYw== 44847\nY29udHJv 44848\nLmxv 44849\nIGlyZQ== 44850\nIENvbWVkeQ== 44851\n67Y= 44852\nIG9yaWdpbmF0ZWQ= 44853\nIHNoaXBtZW50 44854\nfG1heA== 44855\nX2d1aWQ= 44856\nbGV2YXRpb24= 44857\n0L3QsNGP 44858\nKHVuZGVmaW5lZA== 44859\nIEREUg== 44860\nIHNob290aW5ncw== 44861\nIExhdGlubw== 44862\nRU5ET1I= 44863\nIGF2ZXJhZ2luZw== 44864\nIGdyZWV0ZWQ= 44865\nIHRoZWF0ZXJz 44866\n0L7QtQ== 44867\nIGRC 44868\nIGdzdA== 44869\nIGRlZmluaXRl 44870\nLlN0b3JhZ2U= 44871\nLmhlcg== 44872\nIGFmb3Jl 44873\nIFJlYWxpdHk= 44874\nIEdvZHM= 44875\ndmVyc2Vk 44876\nIGhhbmRzb21l 44877\nIGV4Y2x1ZGluZw== 44878\nKGFk 44879\nUXVvdGVz 44880\nIFNjaGVtZQ== 44881\nP3E= 44882\nIFRhbWls 44883\nVGlja3M= 44884\nIHBlc3Q= 44885\nJ24= 44886\nIHBvcm5vZ3JhcGh5 44887\nX21vZGFs 44888\nIC0tLS0tLS0tLS0= 44889\nIGRpc3Bvc2FibGU= 44890\nRlJFRQ== 44891\nIHNoYXJr 44892\nQ0hF 44893\nIGRlcGljdGVk 44894\nIGRlbW9uc3RyYXRpb25z 44895\nIEtpbGxlZA== 44896\nIFJVTEU= 44897\nIG9ic2Vzc2Vk 44898\nIHNpbXBsaWZpZWQ= 44899\nUG9zdGFs 44900\nIGNvbmNlcHR1YWw= 44901\nIHBzdA== 44902\nTGFz 44903\nX1BST0pFQ1Q= 44904\ndWNjZWVkZWQ= 44905\nb2x1 44906\nxJ9p 44907\nIHBlcnNvbmFsaXRpZXM= 44908\nIHJlc2hhcGU= 44909\nIGVuY2xvc2Vk 44910\nCXB0cg== 44911\nIHR1dG9yaWFscw== 44912\nIGV4cGxvZGVk 44913\nX0RJUkVDVE9SWQ== 44914\n5YaF5a65 44915\nIGNhbm9u 44916\nIHJlY29nbmlzZQ== 44917\nUEFE 44918\nIEFwcHJveA== 44919\nIFJlc3RvcmU= 44920\nIEltcG9ydGFudA== 44921\nIGhlYXZpZXI= 44922\nLlNlcXVlbnRpYWw= 44923\nRWFydGg= 44924\nIE1pbGs= 44925\nLnNldFJlcXVlc3Q= 44926\nLnRlbQ== 44927\nIHJlY29uc3RydWN0 44928\nIHNrZXB0aWNhbA== 44929\nX1ByaXZhdGU= 44930\nQlVG 44931\ncXVh 44932\nOmE= 44933\nIHNlaw== 44934\nIGR3ZWxs 44935\nb3NzYQ== 44936\nIHJld2FyZGVk 44937\n0LjQuQ== 44938\nKHRvcGlj 44939\nX3BhcnRpdGlvbg== 44940\nIF9fX19fX19fX19fX19fX19fXw== 44941\nS2V5d29yZHM= 44942\nIEZyYW5jbw== 44943\nTGl0ZQ== 44944\nIG5ha2Vu 44945\nINC30LA= 44946\nT0JKRUNU 44947\nIGNyYWZ0cw== 44948\nIFN3YXA= 44949\nLlhuYQ== 44950\nLkNvbm5lY3Q= 44951\nIGJhbGNvbnk= 44952\nKHJlYWw= 44953\nIEJhcm5lcw== 44954\nYmly 44955\nIFR3ZW50eQ== 44956\nYXlhbg== 44957\nYXRhcnM= 44958\nIFByb3BlbA== 44959\nIElobmVu 44960\nVXBncmFkZQ== 44961\nIGN1cmI= 44962\nLXNlY29uZA== 44963\nIG5lcGg= 44964\nLnByZXM= 44965\n7J6F 44966\nLnNlcQ== 44967\nIHBhZGRlZA== 44968\nIj8= 44969\namw= 44970\n44Os 44971\nJyk8Lw== 44972\nIGNpdmlj 44973\nZ29ucw== 44974\nPmE= 44975\nQ29vcmRpbmF0ZXM= 44976\nIGVuYWN0ZWQ= 44977\nRU5UUw== 44978\nIGxhYw== 44979\nLmZpbmFs 44980\nIFBocFN0b3Jt 44981\nY2FsbGVk 44982\nIGlucXVpcmllcw== 44983\nLm1pZGRsZXdhcmU= 44984\nIERvd250b3du 44985\nLyc7Cg== 44986\nIGtpbG9tZXQ= 44987\nYWNjZWw= 44988\nIHF1aWVu 44989\nd3N0cmluZw== 44990\nc2V0RGF0YQ== 44991\nIG1hbmVyYQ== 44992\nIG1vZHVsYXI= 44993\ncmltcA== 44994\nIHRhcmlmZnM= 44995\n4oCZaWw= 44996\nX1RIUk9X 44997\nL2NvbG9y 44998\nIEhUTUxFbGVtZW50 44999\nIGNhcnJv 45000\nIHByZXJl 45001\nIHBsb3R0aW5n 45002\nIFBvc2l0aXZl 45003\nIE1hY2hpbmVz 45004\nT1RFUw== 45005\n4bub 45006\ncGxlYXNhbnQ= 45007\nIGFsdGU= 45008\nIGFpbmRh 45009\ndGhlc2U= 45010\nIGNvcnM= 45011\naXBheQ== 45012\nIEFkdmlzb3J5 45013\nIFJ1Ymlv 45014\nanE= 45015\nIGxpbWVzdG9uZQ== 45016\nIGRldGFjaGVk 45017\n6K6+572u 45018\ndGVuYW50 45019\nIERlcHRo 45020\nYWxvcmU= 45021\nINGB0YLRgNC+0Lo= 45022\nIEZPUkU= 45023\nIExheQ== 45024\ncHJlc2VudGF0aW9u 45025\nKScpOwo= 45026\nLnN1YnBsb3Rz 45027\nz4M= 45028\nTk9X 45029\nR2Fy 45030\naGFuZGxlcw== 45031\nYWJyYQ== 45032\ncHV0aWVz 45033\nIEVsZWN0cmljYWw= 45034\nTWlkZGxl 45035\ncm9waWM= 45036\nIEpE 45037\nIER5bg== 45038\nIEJyaXN0b2w= 45039\nIE1jQ2FydGh5 45040\nIHN0cmlrZXI= 45041\nIGVudW1lcmFibGU= 45042\nIEV2YW4= 45043\nLmRlZmF1bHRz 45044\ncXVlbmNlcw== 45045\nKXx8 45046\nCXRva2Vu 45047\n4peP 45048\nLWRyb3Bkb3du 45049\nU1RPUkU= 45050\nIEdyYXBoaWM= 45051\nKHBw 45052\nRXhwbA== 45053\nIHVwd2FyZHM= 45054\nIERpc3RyaWJ1dGVk 45055\nIFdFQg== 45056\nSmVy 45057\naXNOYU4= 45058\n55Sf5oiQ 45059\nPlI= 45060\nw7xzc2Vu 45061\nZWZz 45062\nIHVuY292ZXI= 45063\nIGx1ZA== 45064\nLmNhbGN1bGF0ZQ== 45065\nIGludHB0cg== 45066\nIG1pZGZpZWxkZXI= 45067\nLkhlYWRlcnM= 45068\nIG1m 45069\nZXJlZg== 45070\nLk1ldHJv 45071\nIFNwZWFraW5n 45072\nOmI= 45073\nIGNyeXB0b2N1cnJlbmNpZXM= 45074\nIGRlbW9ucw== 45075\nCUVYUEVDVA== 45076\nIHdpY2tlZA== 45077\neW91dHViZQ== 45078\nOkludA== 45079\nIEhpbmRp 45080\nIENBVA== 45081\nINi5 45082\ncmFy 45083\nb21vcmU= 45084\nL3Blcg== 45085\nL2xpY2Vuc2U= 45086\nIHJlaW0= 45087\nIGF3YWl0aW5n 45088\nIGxldGhhbA== 45089\nIEVG 45090\ncm91bmRlZA== 45091\nIFBsYXRpbnVt 45092\nINCy0YHQtQ== 45093\nLmNvb3Jkcw== 45094\nLkRldmljZQ== 45095\nL2l0ZW0= 45096\nIFdlbm4= 45097\nY29tcGlsZUNvbXBvbmVudHM= 45098\nIEtpbmRlcg== 45099\nLnJlbW92ZUl0ZW0= 45100\nIGFuZGE= 45101\nYm5i 45102\nIHByYQ== 45103\nKHRyYW5zYWN0aW9u 45104\nIGVtYmFycmFzc2luZw== 45105\nCUJPT0w= 45106\nLmNvbnRlbnRWaWV3 45107\nIGV2ZW50ZGF0YQ== 45108\nYXRvcmU= 45109\nIHByb3ZpZGVkSW4= 45110\naXJtYQ== 45111\nIHpvbmE= 45112\nX0hX 45113\n5pk= 45114\nIHN0b3Zl 45115\nIGNvdW50ZXJwYXJ0 45116\nX1Byb2R1Y3Q= 45117\nX01BTkFHRVI= 45118\nIGluZnJpbmc= 45119\nIEVSQQ== 45120\nX3BhcnR5 45121\n0ZE= 45122\nIGluaWNp 45123\nX1JlcXVlc3Q= 45124\nIG1pcmFjbGU= 45125\nIGNhbmNlbEJ1dHRvbg== 45126\nU3B5 45127\nYXTDsw== 45128\nIHBvbGlzaA== 45129\nIE5pY29sZQ== 45130\nLmRpc3BsYXlOYW1l 45131\nXFJlcXVlc3Rz 45132\nIHVzZUhpc3Rvcnk= 45133\nUm91dGVyTW9kdWxl 45134\nIHN0YXJlZA== 45135\nSURFUg== 45136\n0YPQvdC60YbQuA== 45137\nIG5vdGE= 45138\nJGFycg== 45139\ncGVjaWZpZWQ= 45140\nIHRvcHA= 45141\nX0RSSVZFUg== 45142\nL25n 45143\n5aA= 45144\nX3Rt 45145\nJXRpbWVvdXQ= 45146\nPHM= 45147\nICgqKQ== 45148\nIEh0dHBSZXF1ZXN0 45149\nX1RSQUNL 45150\nKG5vdGU= 45151\nIEV4cGxvcmU= 45152\nX3NlcnY= 45153\nIOe7 45154\nQmluZGVy 45155\nKyIs 45156\nLmF0dA== 45157\nIEV0aGk= 45158\nIGPDs2RpZ28= 45159\nPSdc 45160\nLmxpbmVz 45161\nKE9m 45162\n5bCG 45163\nbWlzc2libGU= 45164\nIHbDqQ== 45165\nIGFjb3VzdGlj 45166\nIGNyYWZ0aW5n 45167\nbml0 45168\nLmJh 45169\nIEx1Y3k= 45170\nIGlQb2Q= 45171\nIHB1cGlscw== 45172\nLW1heA== 45173\nX3dy 45174\nKGNw 45175\nIFJFUE9SVA== 45176\nIGRucw== 45177\nIFJlZmVyZW5jZXM= 45178\nIHVuZGVydGFrZW4= 45179\nIGvDuGJlbmhhdm4= 45180\nIGNoYWk= 45181\nIENyb2F0 45182\nX0xvZw== 45183\ncm93bmVk 45184\nX21lZA== 45185\nCWRhdGU= 45186\nI19f 45187\nIGNvc3R1bWVz 45188\nIFJlcXVpcmVz 45189\nYWZmbGU= 45190\n54q25oCB 45191\nLVNlbWl0 45192\nZWxhaWRl 45193\n0LXRgtC+0LQ= 45194\nIHBlc3RpYw== 45195\nIGRyYQ== 45196\nRE9DVU1FTlQ= 45197\nIC4uLg0K 45198\nfWB9Cg== 45199\nIEF1Y3Rpb24= 45200\nIERvY2s= 45201\neHh4eHh4eHg= 45202\nKGdldFN0cmluZw== 45203\nhY0= 45204\nIGJvcmRlcldpZHRo 45205\nIE1hY2hpbmVyeQ== 45206\nIHByZWRpY3RhYmxl 45207\nLlNI 45208\nIGFtcGxpdHVkZQ== 45209\nLmZvclJvb3Q= 45210\nSU5hdmlnYXRpb24= 45211\nVGFibGVNb2RlbA== 45212\nYXR0cmli 45213\nIG1hbmV1dmVy 45214\nIGV4Y2F2 45215\nQkVSUw== 45216\nIGRhcGF0 45217\nIGluc3RhbGxhdGlvbnM= 45218\nLkFzeW5j 45219\nIHJheXM= 45220\nPeKAnQ== 45221\nOw0NCg== 45222\nLmNyeXB0bw== 45223\nX2RiZw== 45224\nIEVudW1lcmFibGU= 45225\nT2ZTaXpl 45226\nX2Vwb2Nocw== 45227\nbXc= 45228\nTUVOVQ== 45229\nb3V0bGluZQ== 45230\nIFBhcGVycw== 45231\nPT09PT09PT09PT09Cg== 45232\nIHVuaWZvcm1z 45233\nIEdpZw== 45234\nLXBhY2thZ2U= 45235\nIEplbmtpbnM= 45236\nIEhvbWVQYWdl 45237\nLmlzU2VsZWN0ZWQ= 45238\nIG1lY2hhbmlj 45239\nTUs= 45240\nIFNvdW5kcw== 45241\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 45242\nIHJlc2VhcmNoaW5n 45243\nIGluZm9z 45244\nb2dyYXBoaWNz 45245\nZXJzZXQ= 45246\nKFsnLw== 45247\nIFRpbWJlcg== 45248\nLmFnZW50 45249\nLnRvSlNPTg== 45250\nX2NvbW1hbmRz 45251\ncGFyaW5n 45252\nX2FkanVzdA== 45253\nLm5vbWU= 45254\nKGdsbQ== 45255\nU3RhdHVzQmFy 45256\nZmlsZXBhdGg= 45257\nP+KAmQ== 45258\nIGRldGVjdGl2ZQ== 45259\nIHVuc2VyZXI= 45260\nIFRpYmV0 45261\nRU5ERUQ= 45262\nKHNlZWQ= 45263\nIHNuZWFr 45264\nIGFtb3I= 45265\nPSIvLw== 45266\nIFBhbnRoZXJz 45267\nYWxsYXg= 45268\nIExJVkU= 45269\nCURXT1JE 45270\nXT0t 45271\nIHRvcm5hZG8= 45272\nL21pbg== 45273\nIGx1bmdz 45274\nLWN1cnJlbnQ= 45275\nIEJvb2tpbmc= 45276\n5YiX6KGo 45277\nIGVuam95bWVudA== 45278\n4KSw 45279\nSkE= 45280\ndHlwZWQ= 45281\nLkJ0bg== 45282\nZmF0 45283\ndWdhbA== 45284\nIFNoYXJlcw== 45285\nIGRpc2dy 45286\nIEJBUg== 45287\nIEZPWA== 45288\nT3Bjb2Rl 45289\nIFN6 45290\na2V5ZG93bg== 45291\naWN0aW9uYXJpZXM= 45292\nIGRldGFpbGluZw== 45293\nfSkpCg== 45294\nIHBvaw== 45295\nIGRlbW9uc3RyYXRpbmc= 45296\nIG5vdGF0aW9u 45297\nbGF5ZXJz 45298\nQGlm 45299\nIE5QUg== 45300\nLnN0cmljdEVxdWFs 45301\nIFJlY2lwZXM= 45302\nLlRlbnNvcg== 45303\nIGxpcXVvcg== 45304\nIGRlYnRz 45305\nLmVuZHNXaXRo 45306\nV2hlZWw= 45307\nLlBvcw== 45308\nQ1NW 45309\nJGFyaXR5 45310\nIHVuc3RhYmxl 45311\nKGxvc3M= 45312\nRU5TT1I= 45313\nIGVsZXZlbg== 45314\nIExvcGV6 45315\nIEhvcGtpbnM= 45316\nY29ub20= 45317\nIFNldGg= 45318\nIHBvZW1z 45319\nUXVhbnQ= 45320\nIGdzbA== 45321\nIHN5cnVw 45322\nIHNpYmxpbmc= 45323\nIGNhc3M= 45324\nLXZvdXM= 45325\nw7Z0 45326\nX1BBVFRFUk4= 45327\nX1NFQ1RJT04= 45328\nZXN0aW1hdGVk 45329\ndXBncmFkZQ== 45330\nLm1vbmdvZGI= 45331\nIEJvYXQ= 45332\nX0NUWA== 45333\nIGZldGNoaW5n 45334\ndXN0aW4= 45335\ncGllbA== 45336\nTWFyZw== 45337\nUmVmbGVjdGlvbg== 45338\nIGR1Y3Q= 45339\nIE11bmljaXBhbA== 45340\nIGJ4 45341\nLkdldEN1cnJlbnQ= 45342\nbWxpbms= 45343\nIEFjY291bnRpbmc= 45344\nIEdlbmV2YQ== 45345\nX1Bvcw== 45346\nIHBhc3Nlcg== 45347\nIGhlYXJpbmdz 45348\nY29tcGFu 45349\nIGZyYWdpbGU= 45350\nSW5pdGlhbGl6ZXI= 45351\nd2Fsa2Vy 45352\nLk1hdGVyaWFs 45353\nIEh1bnRpbmc= 45354\ndHJ5c2lkZQ== 45355\nIGthdA== 45356\nIGNsZXJr 45357\n4Z8= 45358\nZG9pbmc= 45359\nCWdyb3Vw 45360\nIHNhbmN0aW9u 45361\nLmxi 45362\nIExhenk= 45363\nIENvbnN0cmFpbnQ= 45364\nUGFnaW5hdGlvbg== 45365\nIHBvdXZleg== 45366\nIEluZGljYXRlcw== 45367\nTUVS 45368\nIGNvdXJz 45369\nIHllYXJseQ== 45370\nIGdyb3NzZQ== 45371\nYWJicmV2 45372\nIERPTg== 45373\nIHByb2NlZWRlZA== 45374\nZW50bGljaA== 45375\nIHByb3BlcnR5TmFtZQ== 45376\nIFRlYWNoaW5n 45377\nc3RhZHQ= 45378\nIGN1dG9mZg== 45379\nb3JuZXJz 45380\nIGFmcmljYQ== 45381\nIHJlbmRlcnM= 45382\nIFlhbmtlZXM= 45383\nIFRvb2xiYXI= 45384\nc3BhY2Vz 45385\nLmZpbGxTdHlsZQ== 45386\nIHNlZ3VuZG8= 45387\nX3N0cmxlbg== 45388\nLkZpcmViYXNl 45389\n5aSE 45390\nIG1lbnRpb25pbmc= 45391\nXCg= 45392\nIFZhbHZl 45393\nU2V0dGVy 45394\nIHNwYW5z 45395\nIEFsY29ob2w= 45396\nIExldHRlcnM= 45397\nXHhl 45398\nIFRL 45399\nX0JMRQ== 45400\nLmdldFJlc3VsdA== 45401\nPFBsYXllcg== 45402\nIFBhdHQ= 45403\nIGVhc2luZw== 45404\nIHR1cmtleQ== 45405\nIEZlbg== 45406\nJyki 45407\nIGNvbmZpbmVk 45408\nIGluY2x1cw== 45409\nU3VwZXJ2aWV3 45410\nKHdpdGhJZGVudGlmaWVy 45411\nZW5jaWFs 45412\nIHN0dWZmZWQ= 45413\nVGhldGE= 45414\nIGVjb25vbWlzdHM= 45415\nfSkpOwoK 45416\nY29va2llcw== 45417\nIFJvb3Nl 45418\nIENoZWVzZQ== 45419\nIGZpY2hpZXI= 45420\nIGVuZm9yY2Vk 45421\nQUJC 45422\nbm/Fm2Np 45423\nX0FMTE9X 45424\nIHJlY3J1aXRlZA== 45425\nIGV4cGVuZGl0dXJl 45426\nLW5pZ2h0 45427\nIGFzc2VydE5vdE51bGw= 45428\nX2V4ZWN1dGU= 45429\nINiv 45430\nSU5ERVg= 45431\nX0ZNVA== 45432\nIHJlc2N1ZWQ= 45433\nIE1vbnRobHk= 45434\nIENvbnNlcnZhdGlvbg== 45435\nIEdlYg== 45436\nT2JhbWE= 45437\nRXBvY2g= 45438\naWNpZXM= 45439\nIE9ydA== 45440\nIHNvaXQ= 45441\nKGljb24= 45442\nRnJpZW5kcw== 45443\nbW9s 45444\nIGdyb3VuZGVk 45445\nIENhdXNl 45446\nYWRlbmE= 45447\nV0VFTg== 45448\nIEx1bg== 45449\nSVRJVkU= 45450\nLmxvb3A= 45451\nX3VudGls 45452\nIGNvcnI= 45453\nLmVkZ2Vz 45454\nIGh5cG90aA== 45455\nY2hlZHVsaW5n 45456\ndHJhbnNsYXRvcg== 45457\nINCc 45458\nUm9t 45459\n44CRCgo= 45460\nIFhhbWFyaW4= 45461\nIHZpb2xhdGluZw== 45462\nLmFuY2hvcg== 45463\nLS0tCgo= 45464\nIHRyYWRlcg== 45465\nQURWRVJUSVNFTUVOVA== 45466\nIHVuc2VyZQ== 45467\nIERBTw== 45468\nIGJsb25k 45469\nIFBBVA== 45470\nLmdsb2I= 45471\nIOi+kw== 45472\nIHNwbGl0dGluZw== 45473\nIHVuc3Vic2NyaWJl 45474\nIGF0bW9zcGhlcmlj 45475\nIFRyaW0= 45476\nIGNpdGF0aW9u 45477\nIGluZmVyZW5jZQ== 45478\nIEZ0 45479\nIERhcndpbg== 45480\nZmluZE9uZQ== 45481\nIEdlbA== 45482\nKENvbnZlcnQ= 45483\nIGFjY2Vzc29y 45484\nO3RleHQ= 45485\nKHNvcnRlZA== 45486\nIGp1ZGdlZA== 45487\nKTtc 45488\nOnA= 45489\nIG1laW5l 45490\nIFNsaW0= 45491\nLkNvbW1hbmRz 45492\nIHBlcmNlaXZl 45493\nY29ob2xpYw== 45494\nPERhdGE= 45495\nLmVudHJ5U2V0 45496\nIGFzc2VydEZhbHNl 45497\nIFBhdHJvbA== 45498\nZW5zZW0= 45499\nxYLEhQ== 45500\nqKE= 45501\nV0lEVEg= 45502\nIFJlc2N1ZQ== 45503\nIFVJRg== 45504\nX1RIUkVTSE9MRA== 45505\nIE1pY2hlbA== 45506\nQVRFUklBTA== 45507\nb3BlbnNvdXJjZQ== 45508\nIERpYW5h 45509\nIGludml0ZXM= 45510\nX0JPRFk= 45511\nIHJlc2Vydm9pcg== 45512\nIHJvaQ== 45513\nY3VzdA== 45514\nKHRj 45515\n77yBIik7Cg== 45516\nIGZlc3RpdmFscw== 45517\nIHBlcmZvcm1lcnM= 45518\nIGNsaW1iZWQ= 45519\nIGp1bmdsZQ== 45520\nU3RyaW5nTGVuZ3Ro 45521\nIHVubGF3ZnVs 45522\naWVycmU= 45523\ndmVydGlzZW1lbnQ= 45524\nIHN0YWtlcw== 45525\nIGhhdHM= 45526\nTW9kaWZ5 45527\nIExFVFRFUg== 45528\nLkhpZGU= 45529\nIHN0YXR1dG9yeQ== 45530\nX3doaXRl 45531\nIFBlcmw= 45532\ndXRlbmJlcmc= 45533\nZW1wbGU= 45534\nLldvcmxk 45535\nIG92ZXJsb29rZWQ= 45536\nIGNvbmNsdWRlcw== 45537\nLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 45538\nLXdpc2U= 45539\nCXN0cmVhbQ== 45540\ncG9wdWxhdGlvbg== 45541\nIGV2ZW50bw== 45542\nIGlsbHVzdHJhdGlvbnM= 45543\nZnRz 45544\nIGF1dG9m 45545\nIFByb2NlZHVyZQ== 45546\nIGRlc2VydmVk 45547\nLXRpbWVz 45548\nIGdvbA== 45549\nTlNFcnJvcg== 45550\nY3Jlc3Q= 45551\nIFBha2lzdGFuaQ== 45552\nYW55Y2g= 45553\nZ2V0Q3VycmVudA== 45554\nIGxhcg== 45555\nbnRs 45556\nIFJlYmVjY2E= 45557\nIG1hdGVyaWE= 45558\nIGZpbmRCeQ== 45559\nL2Fk 45560\nQ2FsbGJhY2tz 45561\nIEFscw== 45562\nIEthdGll 45563\nIE9ic2VydmFibGVDb2xsZWN0aW9u 45564\nIERvY3VtZW50YXRpb24= 45565\nVHlwZWQ= 45566\nIEN1bHR1cmVJbmZv 45567\nIFRpbW90aHk= 45568\nIGxhdGVyYWw= 45569\nInR5cGU= 45570\nIHVuYXV0aG9yaXplZA== 45571\nIHRlYWNoaW5ncw== 45572\nIGRlYnVnZ2Vy 45573\nW3ZhbHVl 45574\nIGFsb3Jz 45575\nIHV6 45576\nIHNjYXR0ZXI= 45577\nIGRvd253YXJk 45578\nIG1pZ2xp 45579\nc3RhdHVzQ29kZQ== 45580\nICgpKQ== 45581\nIE1X 45582\nINC80L7Qtg== 45583\nUk9TUw== 45584\nLmJ1Zg== 45585\nIGZhaXJ5 45586\nIEluZnJhc3RydWN0dXJl 45587\nPT4i 45588\ndGxlbWVudA== 45589\nJCgi 45590\nRnJvbVN0cmluZw== 45591\nIEJpbGQ= 45592\nIGNvbnZlbnRpb25z 45593\nX25hdGl2ZQ== 45594\nIEluc3BlY3Rvcg== 45595\nIFBpc3Q= 45596\ndWJhcg== 45597\nIHJlZ3M= 45598\nIFBpbG90 45599\nVGh1cw== 45600\nPicr 45601\nIGNlbGE= 45602\nLm5ld3M= 45603\nKFByb2R1Y3Q= 45604\nTGl2aW5n 45605\nUnVzc2lh 45606\nIGZhY2V0 45607\nZXRpY2Fs 45608\nIFsnJA== 45609\nL1s= 45610\nIERpcmU= 45611\nIGdhc2Vz 45612\nIElORk9STUFUSU9O 45613\nIEVhdA== 45614\nIEZvcnVtcw== 45615\nIENoYXJhY3RlcnM= 45616\nX21ldA== 45617\nIOyLnA== 45618\nIGtpbmdz 45619\nYWNoaWU= 45620\nIExhbWJkYQ== 45621\nIHRpbWVycw== 45622\nIExpZ2h0aW5n 45623\nIENhc2V5 45624\nYWRkaXI= 45625\nYW5kZXg= 45626\nLmFuc3dlcg== 45627\nIEhpcA== 45628\nIFByaW5jaXA= 45629\nU3RhcnREYXRl 45630\nIOOAjA== 45631\ndHJlcw== 45632\nICYj 45633\nLk1heFZhbHVl 45634\nIFByb2JsZW1z 45635\nIGxhdGV4 45636\nT2ZDbGFzcw== 45637\nIEx5bm4= 45638\nLy8n 45639\nIHZveWFnZQ== 45640\nIHNodXR0bGU= 45641\nIFJvbGxlcg== 45642\nIFJ1bnRpbWVFcnJvcg== 45643\ndXlh 45644\nRGlj 45645\nCWJ1aWxkZXI= 45646\nIGJ1bGx5aW5n 45647\nIHNpbXBsZXN0 45648\nLmNhbGxlZA== 45649\nIExS 45650\nIG1vcmFsaXR5 45651\nIHN0dXJkeQ== 45652\ndHJhY2tpbmc= 45653\nLnN3YWdnZXI= 45654\nX0JJTkQ= 45655\nSVRPUg== 45656\nLXVybGVuY29kZWQ= 45657\nINGF 45658\nIFRyaW5pdHk= 45659\nIHRyYXBz 45660\nIHwt 45661\nIHNldFRleHQ= 45662\nIGJhcmdhaW4= 45663\nIGJyYWtlcw== 45664\nLmdldENvZGU= 45665\nIG1pZ3JhdGU= 45666\nIHJpYmJvbg== 45667\nKXJldHVybg== 45668\nIGNoYXJnZXI= 45669\nYWNvbQ== 45670\nQURJVVM= 45671\nIEFtYmFzc2Fkb3I= 45672\nLWFmdGVy 45673\nIGFubmk= 45674\nCXNwaW4= 45675\nQ29uY2VwdA== 45676\nIEhlbmRlcnNvbg== 45677\nIEhPU1Q= 45678\nLnJhbms= 45679\nIE5vcnRoZWFzdA== 45680\nIGJlcmxpbg== 45681\nIHJlcXVpcw== 45682\nLmZlZWQ= 45683\nIHNvdXJjZU1hcHBpbmc= 45684\nIFJlbmNvbnRyZQ== 45685\nLmFqYXg= 45686\nbmVzdGpz 45687\nIHRyZWs= 45688\nIE5hY2lvbmFs 45689\nICZb 45690\nIHBheWFibGU= 45691\nb3J0ZXg= 45692\nIGRlcHQ= 45693\nZmllbGROYW1l 45694\nIGNvbXBsZXRlcw== 45695\nIFJWQQ== 45696\nIG9uaW9ucw== 45697\nYWxpZ25tZW50 45698\nRm9ybWF0cw== 45699\nICd7JA== 45700\nSGFzaFNldA== 45701\nIEJvZA== 45702\nLkludmFyaWFudEN1bHR1cmU= 45703\nIHNldHRsZW1lbnRz 45704\nIGh5ZHI= 45705\nLnVwZGF0ZWQ= 45706\ndmVudGg= 45707\nKHNlY29uZHM= 45708\nPSIvIg== 45709\nIHdlYnBhZ2U= 45710\nKAoK 45711\nIHRpcg== 45712\nIHRvZXM= 45713\nIEJyaWNr 45714\nIGFtYml0aW9u 45715\nUG90 45716\nPW1heA== 45717\nRVRJTUU= 45718\nIGRlcG90 45719\nY2FsbHM= 45720\nIE5vcndlZ2lhbg== 45721\nYDo= 45722\nIGJ1cmdlcg== 45723\nIHByb2Zlc3NvcnM= 45724\nIEFsbG9jYXRl 45725\nLXRoaXJkcw== 45726\nLWNoYXJ0 45727\nIGZvcmQ= 45728\nKk4= 45729\nLmtvdGxpbg== 45730\nIHBhcGVyd29yaw== 45731\nIERFVklDRQ== 45732\nJUAiLA== 45733\ncmVzcGVjdA== 45734\nKG1w 45735\n6auY 45736\nLWlm 45737\nIGN1c2hpb24= 45738\nb2JvdA== 45739\nIHBhcmM= 45740\nU1BBQ0U= 45741\nIE5ldGFueWFodQ== 45742\nIHNlbGZpc2g= 45743\nZmVhdA== 45744\nIGNsaWVudGVz 45745\nLXRvb2xz 45746\nIHBvcmNo 45747\nIGpx 45748\nLnZlcmJvc2U= 45749\nIGxpYmVyYWxz 45750\nXSkKCgo= 45751\ncGllcw== 45752\nTm90Qmxhbms= 45753\nKHRlcm0= 45754\nyJtp 45755\nX1BhcmFtcw== 45756\nLm5vcm1hbGl6ZQ== 45757\nQnVsbGV0 45758\nQVNJQw== 45759\nKGhleA== 45760\nX2NsaWVudGU= 45761\nKyw= 45762\nX0RJ 45763\nIGZvcnRoY29taW5n 45764\nfSIpXQo= 45765\nc2Vv 45766\nVW0= 45767\nPk5hbWU= 45768\nIGNvbWZvcnRhYmx5 45769\naXJlY3Rpb25hbA== 45770\nV0lUSA== 45771\nL3By 45772\nIFBvb3I= 45773\nIFZpdGFtaW4= 45774\ndmlj 45775\nR0g= 45776\nIHByaW9yaXQ= 45777\nIE5O 45778\nIENsb3NlZA== 45779\npO0= 45780\nIGlzT3Blbg== 45781\nXENvbnNvbGU= 45782\nQW5kRmVlbA== 45783\nLlNVQ0NFU1M= 45784\nX09QRVJBVElPTg== 45785\ncG9sYXRpb24= 45786\nIFRhcw== 45787\ncHN6 45788\nPicu 45789\nQ1VSUkVOVA== 45790\nVmVuZG9y 45791\naG9zdHM= 45792\nIEVyZA== 45793\nPnRhZ2dlcg== 45794\nIHNvdXJjZU1hcHBpbmdVUkw= 45795\nIG1hcmF0aG9u 45796\nX2Nsb3NlZA== 45797\nIGV4ZW1wdGlvbg== 45798\nIHJlY29nbml6ZXM= 45799\naWRlc2hvdw== 45800\nJyQ= 45801\nKCcvJyk7Cg== 45802\nbWl0cw== 45803\nd2Fyeg== 45804\nIENoZXJyeQ== 45805\ntaw= 45806\nbm9y 45807\ncG9ydGU= 45808\nIHds 45809\nX2JhY2t1cA== 45810\nLmdldEJvb2xlYW4= 45811\nLmdldFJlc291cmNl 45812\nIGRlZmluaXRpdmU= 45813\nLkVkaXRUZXh0 45814\nIHPDrQ== 45815\nLkNPTlQ= 45816\nIFBMQVlFUg== 45817\nLmNhcmRz 45818\nIFNob3Jl 45819\nKCcvJykK 45820\nY2x1aXI= 45821\nV2ViRHJpdmVy 45822\nKG1vbnRo 45823\nLXJlbGVhc2U= 45824\nIGluc3BlY3Rvcg== 45825\n5aM= 45826\nIE5G 45827\nX2NsaXA= 45828\n5a2Q 45829\nIGludGVyYWN0aW5n 45830\nLnRtcA== 45831\nICcnJwoK 45832\nIGRlZQ== 45833\nIGZyb3N0 45834\nIl0pKQo= 45835\nIFBsYWNlcw== 45836\nVGhyb3dz 45837\nZm9yaw== 45838\nL2RheQ== 45839\naVBob25l 45840\nIE1JQw== 45841\nIGZvbGRpbmc= 45842\nIGNyb3Jl 45843\nIENoaWVmcw== 45844\ncGhlcmljYWw= 45845\nKHByaWNl 45846\nLldyaXRlU3RyaW5n 45847\nIGV4aXRpbmc= 45848\nXScsCg== 45849\naWdodGluZw== 45850\nSW5ncmVkaWVudA== 45851\nKHZlcnRleA== 45852\nIHNjcm9sbFZpZXc= 45853\naGY= 45854\nOm5ldw== 45855\nU0VO 45856\nc2VjdG9y 45857\nIHNwaW5z 45858\nIFNjaGVkdWxlcg== 45859\nb3RlY2hu 45860\nc2VtaWNvbG9u 45861\nRm9udE9mU2l6ZQ== 45862\nIFNwZWNpZmljYWxseQ== 45863\nZmxhbW0= 45864\nLk9iamVjdElk 45865\nIGNvbnRh 45866\nX3Blcm1pc3Npb25z 45867\nCUZST00= 45868\nSUNPREU= 45869\nL2tn 45870\nIEhvdGVscw== 45871\nLW1lZA== 45872\nIERpbg== 45873\nIG5hdnk= 45874\nZ2V0UGFyYW0= 45875\nIG1lbmQ= 45876\nIHBvcnRyYXllZA== 45877\nIE1ldHJvcG9saXRhbg== 45878\nUGFpbnRlcg== 45879\nIHJlZmVycmFs 45880\nX2dvb2Q= 45881\nIG1hcnZlbA== 45882\nb3NhaWM= 45883\nPigm 45884\nLnVy 45885\nIGVzdG9z 45886\nV2lsbGlhbQ== 45887\nIHRpbWJlcg== 45888\nIHF1ZWxxdWVz 45889\nIERvY3VtZW50cw== 45890\nLlhhbWw= 45891\nIGJhdGNoZXM= 45892\n6YGT 45893\nIFJlbGVhc2Vk 45894\nVGFpbA== 45895\nQ09PS0lF 45896\naGVpZA== 45897\nX3N0YXRpb24= 45898\nIFZpYQ== 45899\nU2FsZQ== 45900\nIFJlcGVhdA== 45901\nIHByb21pbg== 45902\nIFpv 45903\nLWZvcndhcmQ= 45904\nIElvbg== 45905\naXRhcnk= 45906\nIGp1cw== 45907\nLXJlcXVlc3Q= 45908\nIHByb3VkbHk= 45909\nIFN0cmVhbWluZw== 45910\nKE1vdXNlRXZlbnQ= 45911\nIFNwcmludA== 45912\nX3JvdGF0aW9u 45913\nUmVwb3NpdG9yaWVz 45914\nIHRhcnQ= 45915\nINGB0LI= 45916\nIG1hcHBpbmdz 45917\n6Ko= 45918\nQ3U= 45919\nQ3ljbGU= 45920\nIGJ1bg== 45921\nCWx1YQ== 45922\n44OJ 45923\nICgoIQ== 45924\nIGNvbGxlY3RpdmVseQ== 45925\nIENvbmQ= 45926\nIHdzenlzdA== 45927\nKGxpYg== 45928\nb3BlbmhhZ2Vu 45929\nX3NraXA= 45930\nLkNvbHVtbkhlYWRlcg== 45931\n6YI= 45932\ncGVyaWVuY2Vk 45933\nj+i/sA== 45934\nX3Byb3Bz 45935\nIGNvbnRyYWNl 45936\nIG1hdGNodXA= 45937\nYWJldGlj 45938\nLm1lbWJlcnM= 45939\nUkVDVA== 45940\nKGRhdA== 45941\nIHNvZw== 45942\ncmVub20= 45943\nX01ldGhvZA== 45944\nQ3VzdG9tZXJz 45945\nZnVsbG5hbWU= 45946\nWk4= 45947\ncmV0cnk= 45948\nIGthcA== 45949\nIE5ldQ== 45950\n6Io= 45951\nYWRkQ2hpbGQ= 45952\nd2lsbFJldHVybg== 45953\nX3Blcm1hbGluaw== 45954\nIGVuZXJnZXRpYw== 45955\nIFdldA== 45956\nIE1vcnI= 45957\nIGdjZA== 45958\nY291bnRz 45959\nLHR5cGU= 45960\nZGln 45961\nKExvZ2lu 45962\nIGNyYWNrcw== 45963\nIGJhY3RlcmlhbA== 45964\nIE1lYXQ= 45965\nIEFybXN0cm9uZw== 45966\nIEJyb256ZQ== 45967\nIGFwcHJveGltYXRl 45968\nX2RpcnM= 45969\nbGlnYQ== 45970\nxYJhZA== 45971\nIGtpbmRuZXNz 45972\nIGNvbnRyZQ== 45973\nIEVWRVJZ 45974\nTUVU 45975\nIGFubm91bmNlbWVudHM= 45976\nZ3Bpbw== 45977\nIFdhaXRGb3JTZWNvbmRz 45978\nIFBob3Rvc2hvcA== 45979\nIGRpc2NvbnRpbg== 45980\nL2Rk 45981\nIHRvcG9sb2d5 45982\nYW5pY2Fs 45983\nLmludGVyZmFjZQ== 45984\nYXVjb3Vw 45985\nLkhhc2hTZXQ= 45986\nQVJJQU5U 45987\nKHJvdXRlcw== 45988\nIFRlaA== 45989\nIGh5cGU= 45990\nXSIpLg== 45991\nIHNsYW0= 45992\nIGJyb3Ro 45993\nLWludGVy 45994\nIFJpZA== 45995\nLW1hbmFnZXI= 45996\nQ2FuY2VsYXI= 45997\nIFBhZ2luYXRpb24= 45998\nIHNvdW5kdHJhY2s= 45999\nIHBvc3Rlcmlvcg== 46000\nIHNjcnVi 46001\nY3JlYXRpbmc= 46002\nLSo= 46003\naXJ0ZWVu 46004\nLmR5 46005\nLnN5bW1ldHJpYw== 46006\nICIiLg== 46007\nPT09PT09PT09PT09PT09 46008\nIGNoYXNzaXM= 46009\nIG51bWJlck9mUm93cw== 46010\nRGV2ZWxvcGVy 46011\nX2JpbnM= 46012\nIE9VUg== 46013\ncmllYg== 46014\nUHJvcw== 46015\nIHdpxJk= 46016\nImQ= 46017\nIGFzeW5jaW8= 46018\nemVpZ2Vu 46019\nX3NwaQ== 46020\nLkFMTA== 46021\nIHNjcmV3cw== 46022\nQ2hpbmVzZQ== 46023\nIGFwaUtleQ== 46024\nIHVuc3VjY2Vzc2Z1bA== 46025\nIFNlYWhhd2tz 46026\nT1JH 46027\n56ug 46028\nIHByb2Zlc3Npb25hbGx5 46029\nIENvdXBvbg== 46030\n5a2X5q61 46031\nQ29udmVudGlvbg== 46032\nIHBvbHlt 46033\n5omL 46034\nIHNhbHZhdGlvbg== 46035\nIGVuZ2luZWVyZWQ= 46036\nIFdyZXN0 46037\nIEdDQw== 46038\nIHdhcm1lcg== 46039\nTGF5b3V0Q29uc3RyYWludA== 46040\nIGFnZ3Jhdg== 46041\nU2NyaXB0cw== 46042\ndmVudHVyZQ== 46043\nIHJlZnJpZ2VyYXRvcg== 46044\nIGlubm92YXRpb25z 46045\nIFJ1bm5lcg== 46046\nTklD 46047\nIFJvbGxpbmc= 46048\nQ29udHJvbEV2ZW50cw== 46049\nIGxvb3M= 46050\ncGFj 46051\nCXBhbmVs 46052\nZWZl 46053\nIEJ1ZGRoYQ== 46054\nLS0tLS0tLS0tLS0tLS0K 46055\n5bqT 46056\nKGZvcktleQ== 46057\nIGx1bWlu 46058\nICg/ 46059\nIEFJRFM= 46060\nLHVzZXI= 46061\naW1pZW50b3M= 46062\nY29udGVudFR5cGU= 46063\nYW50bHI= 46064\n6aY= 46065\nIFdlbHQ= 46066\nUHJvZHVjdGlvbg== 46067\nbWlnaHQ= 46068\nIFZJSQ== 46069\nIiwo 46070\nIG9ic2VydmluZw== 46071\nIGRlbGliZXJhdGU= 46072\nKGNvbnRyb2w= 46073\nIHdpdGhk 46074\nIHNlbWFuYQ== 46075\nU1RBQ0s= 46076\ndWNoZW4= 46077\nTmljZQ== 46078\nIERldXRzY2hsYW5k 46079\nIFNwZWNpZmllcw== 46080\nZG1h 46081\naXppbw== 46082\nIEZhY3Rz 46083\nX3BvcHVw 46084\nIERpcmVjdG9ycw== 46085\nezo= 46086\nW1I= 46087\nINGN0LvQtdC80LXQvdGC 46088\nIHBsYXQ= 46089\nIGRpcmVjdGluZw== 46090\n5LiJ 46091\nIEdpbGJlcnQ= 46092\n4oCmLgoK 46093\nLnFtbA== 46094\nIHRoZXJlYWZ0ZXI= 46095\nIGRpc3Bvc2l0aW9u 46096\nZHJhZnQ= 46097\nIHN1cmdlb24= 46098\nIEluc2lkZXI= 46099\nQmxlbmQ= 46100\nIFRyZXY= 46101\ndHJpbnNpYw== 46102\nVG9waWNz 46103\ncmlldmU= 46104\nX0ZJTEVOQU1F 46105\nIGF1dHJlcw== 46106\nSm9zZQ== 46107\nUHJvZHVjZXI= 46108\nZXJ1cw== 46109\nIHBldGl0 46110\nIE5FWFQ= 46111\nIEZpbHRlcnM= 46112\nIHJlcGxpY2F0ZQ== 46113\nIl0pLg== 46114\nIGxlbmRlcnM= 46115\nXSIsCg== 46116\nO2NoYXJzZXQ= 46117\nQ3BwT2JqZWN0 46118\nIGZsb3JhbA== 46119\nIFRpcG8= 46120\nIGNpcmN1aXRz 46121\nZWFzeQ== 46122\nKCYk 46123\naXR0YQ== 46124\nZXJ5bA== 46125\nX0NPTU1PTg== 46126\nJ319Pgo= 46127\nLWJhY2tlZA== 46128\nKHZhcmlhYmxl 46129\nKEluZGV4 46130\nIHZvaXI= 46131\nX2xvY2F0aW9ucw== 46132\nKyspew== 46133\nIExvdWlzdmlsbGU= 46134\nIGdyYXRpdHVkZQ== 46135\nLk1vY2tpdG8= 46136\nIFBvd2Vycw== 46137\naWV1cnM= 46138\nIGdlb2dyYXBoaWM= 46139\ncmFsZQ== 46140\nIGNyYQ== 46141\nIFNwdXJz 46142\naXBoZXJ0ZXh0 46143\nQUNJT04= 46144\nLWNvbW1vbg== 46145\nIHZpY3Rvcmllcw== 46146\nIEZpbmFscw== 46147\nLnNodWZmbGU= 46148\nLW1pbGxpb24= 46149\nX1BST0M= 46150\nYXNzdW1l 46151\nIGlscw== 46152\nREJD 46153\nQm9vdFRlc3Q= 46154\nIGxhdm9y 46155\nLnRlc3Rpbmc= 46156\nLmFzdA== 46157\nIl0v 46158\nbW9pZA== 46159\nIHF1YWxpZmljYXRpb24= 46160\nZ2VzY2g= 46161\nCXB1dA== 46162\nIGFpcnBvcnRz 46163\nSkk= 46164\nVGVhY2hlcg== 46165\nX3VuaWZvcm0= 46166\nIG5hbWE= 46167\nIEJhc3Q= 46168\nZXJ0eXBl 46169\nY2FwdHVyZQ== 46170\nZ2V0QWxs 46171\nIFJleW5vbGRz 46172\nb29sZWQ= 46173\nLmNvbW1lbnRz 46174\nIGNoaW4= 46175\nKS4q 46176\nINC40LvQuA== 46177\ndGds 46178\ndWRvcw== 46179\nIGTDrWFz 46180\nY2hhaQ== 46181\nLnByb2dyYW0= 46182\nIHBzeg== 46183\nCWljb24= 46184\ncGhpbA== 46185\nZW50cmFs 46186\nX1dSQVA= 46187\nb3Zp 46188\nIG5vc3RhbGc= 46189\nSW5maW5pdHk= 46190\nCXlpZWxk 46191\nIHZpdGFtaW5z 46192\nUXVhdGVybmlvbg== 46193\nU2luaw== 46194\nX2dvb2Rz 46195\nIC4uLi4uLi4u 46196\nIFdpbmdz 46197\ndXJpZGFk 46198\nLXN0b3J5 46199\nIl0pCgo= 46200\naWRlbGl0eQ== 46201\nVHlwZURlZg== 46202\nR3Rr 46203\nIO2M 46204\nX01haW4= 46205\nIGNoZXo= 46206\nIFJhdmVu 46207\nIHBheXJvbGw= 46208\nIGZyZWVsYW5jZQ== 46209\nTExV 46210\nIE1lbmQ= 46211\nZWRheQ== 46212\nQXBpTW9kZWxQcm9wZXJ0eQ== 46213\nLkZvcm1Cb3JkZXJTdHlsZQ== 46214\nIGVjb25vbWlzdA== 46215\nc3RhbmJ1bA== 46216\nIGZyZWlnaHQ= 46217\nLUFnZW50 46218\nKG1ldGE= 46219\nIHN5bW1ldHJ5 46220\nICcuLg== 46221\nLkNhbGVuZGFy 46222\nLWF1dA== 46223\nZ2Y= 46224\ncGVudA== 46225\neWNsb3BlZGlh 46226\nIHdpc2hpbmc= 46227\nCgoKCgoKCgoKCgoK 46228\nIGdlbnRsZW1hbg== 46229\nIOqz 46230\nPSM= 46231\nIGxlY3R1cmVz 46232\n4oCcSW4= 46233\nICFf 46234\nIGhi 46235\nIFZlbmRvcg== 46236\nUmVjZW50bHk= 46237\nX25vdGVz 46238\n5o+Q56S6 46239\nIk15 46240\nSGVhZGVyc0hlaWdodA== 46241\nX1NP 46242\nIHVud2lsbGluZw== 46243\nIHN1cGVyaGVybw== 46244\nZ2lv 46245\ncHN5 46246\nIFBlZXI= 46247\namF2YXg= 46248\nJmFwb3M= 46249\nIENyaXNpcw== 46250\nb3JkaW5hbA== 46251\nTWVtY3B5 46252\nKysrKysrKysrKysrKysrKw== 46253\nLXZhbA== 46254\nIHdvcmtib29r 46255\nLWFw 46256\nPWs= 46257\nIG1ldGFsbGlj 46258\nX3BlZXI= 46259\nQnlQcmltYXJ5S2V5 46260\nX1NE 46261\ndWF0b3I= 46262\nX1NIQURFUg== 46263\nKU1hdGg= 46264\nLlRyYW5zZm9ybQ== 46265\nIGNvd3M= 46266\nUGhp 46267\nIENsZW0= 46268\nKF8oIg== 46269\nIEx1ZA== 46270\nLWRlbGF5 46271\nIFNlY3VyaXRpZXM= 46272\nIE9ydGhvZG94 46273\nU3ltZm9ueQ== 46274\nKHJlcG9ydA== 46275\nIGVudGVydGFpbg== 46276\nRVBT 46277\naXpvcGg= 46278\nZXh1YWw= 46279\nSVJE 46280\n5LuO 46281\nIGxpdGg= 46282\nIHNhbml0aXpl 46283\nIGZlbWluaW5l 46284\nSVNCTg== 46285\nLmF1dGhlbnRpY2F0aW9u 46286\nX3BpcGVsaW5l 46287\nL2NvbnN0YW50cw== 46288\nIENPTkY= 46289\nIGx1Y3I= 46290\ncmljaWE= 46291\nLnR0Zg== 46292\nLnNldENvbnRlbnQ= 46293\nIHN0YW4= 46294\nb3JlYW4= 46295\nIExsb3lk 46296\nLnJhd1ZhbHVl 46297\nIGdvcg== 46298\nIEJyb3ducw== 46299\nUmVncmVzc2lvbg== 46300\nIGxvd2VyaW5n 46301\nbmFpc3NhbmNl 46302\nIGJsb3dz 46303\nIGFtYXplZA== 46304\nIHVucmVsYXRlZA== 46305\nUmV2aWV3cw== 46306\nIHJ1Ynk= 46307\nIE1vZGlmaWVy 46308\nIGdpYW50cw== 46309\nLnRocmVhZA== 46310\nIGNvbnRhaW5tZW50 46311\nIFN0YXJ0Q29yb3V0aW5l 46312\ndW1hdA== 46313\nb3JlbGVhc2U= 46314\nIFJhbmR5 46315\nQGVuZGlm 46316\nRGlnZXN0 46317\nIHN1YnVyYmFu 46318\nPSIpOwo= 46319\nIGFubm9uY2U= 46320\nLnZhcmlhYmxl 46321\nXEZvdW5kYXRpb24= 46322\nIGFjcmU= 46323\nVmFu 46324\nIHR1cGxlcw== 46325\nZG5z 46326\nIFN0YW5kaW5n 46327\nX2xhcmdl 46328\nIGJveGluZw== 46329\nU3VwcG9ydEFjdGlvbkJhcg== 46330\nIEZvcnR1bmU= 46331\nIFJ1bQ== 46332\nX211bHRpcGxl 46333\nYXJjaGljYWw= 46334\nIGZ3cml0ZQ== 46335\nX3F1b3Rl 46336\nIGZvb2xpc2g= 46337\nIGNvbXByaXNpbmc= 46338\nINC+0L8= 46339\nLXNlbGVjdGVk 46340\ndmY= 46341\nbWFpZA== 46342\nTmFtYQ== 46343\nKGRhdGV0aW1l 46344\nIGluZGlyZWN0bHk= 46345\nZ2FydA== 46346\nZml4dHVyZXM= 46347\nY2hvcw== 46348\nIEhhbG8= 46349\nIHJlY3VycmluZw== 46350\nLW5ld3M= 46351\ndmls 46352\nIE51cnNpbmc= 46353\nLXByb2R1 46354\nIEhR 46355\nXEh0dHBGb3VuZGF0aW9u 46356\nZW5jaQ== 46357\nYXVlbg== 46358\nIHZ5 46359\nb2NyYWN5 46360\nIGRlbGVnYXRpb24= 46361\nIGFzcGhhbHQ= 46362\nIHNldFNlbGVjdGVk 46363\na29r 46364\nL3Jlc3Q= 46365\nbWV0aWNz 46366\nIE5TRGF0ZQ== 46367\nIHRyYXZlbGxlZA== 46368\nIHJlY2li 46369\nIG1pbWU= 46370\nQ0xJRU5U 46371\nIEdV 46372\nIEhBTkRMRQ== 46373\nL1E= 46374\nW3o= 46375\nIGJvdGhlcmVk 46376\nIEJCUQ== 46377\nw6dhcw== 46378\nX2V4YW1wbGVz 46379\nX0ZJTg== 46380\nIHdoaXRlQ29sb3I= 46381\nIGFzdHJvbm9t 46382\nLWRpcg== 46383\nIHNvdmVyZWlnbg== 46384\nIGJyZWV6ZQ== 46385\nIGlubmluZw== 46386\nIEVkbW9udG9u 46387\nZ2xp 46388\nLmJsb2dzcG90 46389\nanN4 46390\nIHZlcnNh 46391\nIE1vaGFtbWVk 46392\nLkpvYg== 46393\nLXRvZ2dsZXI= 46394\nINC/0L7Qu9GM0LfQvtCy0LDRgg== 46395\nYXJkb24= 46396\nIG5ld2Jvcm4= 46397\nIG5hdmFs 46398\nbm90ZXE= 46399\nIHR1bWJscg== 46400\nIGhlbnRhaQ== 46401\nIFR5cGljYWxseQ== 46402\nIGxvb3Q= 46403\nLlNwcml0ZQ== 46404\nRmxpZ2h0 46405\nIHdhdmVsZW5ndGg= 46406\nLXNr 46407\nIEVsbGU= 46408\nX2V4cG9ydHM= 46409\nINGP 46410\nIElI 46411\naXpvcGhyZW4= 46412\nIO2B 46413\nX3ByaW1hcnk= 46414\nIG1vaXM= 46415\nIEJO 46416\nIHN5c3RlbWlj 46417\nIGRpZmVyZW50ZXM= 46418\nSU5DVA== 46419\nICcnCgo= 46420\nJHE= 46421\nV2lkZ2V0SXRlbQ== 46422\nY2xpZGU= 46423\nJGZpbGU= 46424\nTGVtbWE= 46425\nL3RhYmxl 46426\nYWdyaWQ= 46427\nIE1vbmdvREI= 46428\naW50ZQ== 46429\nIGFwcHJlbnQ= 46430\nwq1pbmc= 46431\nLkRi 46432\nIMOC 46433\naGFtbWVy 46434\nPScnOwo= 46435\nIGJyb2tlcnM= 46436\naXRsZW1lbnQ= 46437\nc2VtYmxpZXM= 46438\nRWxl 46439\ne3g= 46440\nIGxhc3RuYW1l 46441\nPC0= 46442\nIGZsYXR0ZW4= 46443\nX2JhbmQ= 46444\nLlJvb3Q= 46445\nLnJlYWRGaWxlU3luYw== 46446\nPT09PT09 46447\nLnJ4 46448\nPw0K 46449\nIG1ldGFwaG9y 46450\nVGk= 46451\nY29udGU= 46452\nIGRlYml0 46453\nIGNvbnRlbXB0 46454\nQ3BwVHlwZQ== 46455\n5pSv 46456\nRm9ybUZpZWxk 46457\ncmF0aW8= 46458\nb3NvcGhlcg== 46459\nIGltcGxhbnQ= 46460\nUFVSRQ== 46461\nIGFsdGE= 46462\nX21hbmFnZW1lbnQ= 46463\nIHJlZmluZQ== 46464\nIENoZWNrQm94 46465\nIENoYXJs 46466\nLXZlcnNpb24= 46467\nY29uZGl0aW9uYWw= 46468\ndmVudWVz 46469\nIHJpZmxlcw== 46470\nIG9mZnNwcmluZw== 46471\nIG1pbGxpbmc= 46472\nIHNoYXJwbHk= 46473\nIHVuZGVyd2F0ZXI= 46474\nKG9yaWdpbg== 46475\nX0NvbnRyb2w= 46476\nIC4k 46477\nUGx1Z2lucw== 46478\nIGRyeWluZw== 46479\nIGlsbHVzdHJhdGVz 46480\nLXU= 46481\nIHZlZ2V0YXJpYW4= 46482\nbnBj 46483\nSGVhcnQ= 46484\nOycsCg== 46485\nY29tbWE= 46486\ndGVlbnRo 46487\nYXNhbg== 46488\nL3NwZWM= 46489\nX21vdmVz 46490\nLW1hcmdpbg== 46491\nIGluZ2Vu 46492\nwqDCoMKg 46493\nIHByb2pldA== 46494\nIG90cmE= 46495\nIGJyYXM= 46496\nLnV0Yw== 46497\nIHNsZXB0 46498\nPXN1Yg== 46499\nYWJpbGl0 46500\ncG9zdGVy 46501\nIHNkaw== 46502\nb3VuY2lsbA== 46503\nIHdk 46504\nUHJlcGFyZWRTdGF0ZW1lbnQ= 46505\nIERydW0= 46506\nKGF0dHJpYnV0ZQ== 46507\nIEV0aGVybmV0 46508\nCURC 46509\nQ2FsaWZvcm5pYQ== 46510\nY3ViZQ== 46511\nW0k= 46512\nLkNyZWF0ZWQ= 46513\nIEhN 46514\nIHRyYWNpbmc= 46515\nRm9ybXNNb2R1bGU= 46516\nLXlvdQ== 46517\nLmN1cnJlbmN5 46518\nZmVlZGluZw== 46519\nIHRib2R5 46520\nTGk= 46521\nYWNjaW9u 46522\nbmFz 46523\nIHRyb3V2ZXI= 46524\nTk9ORQ== 46525\nIn0sDQo= 46526\nIGZ0cA== 46527\nV2l0aElkZW50aWZpZXI= 46528\ncG9sYXRl 46529\nRmlsZUluZm8= 46530\nIHB1cnN1ZWQ= 46531\nICAgIA0KICAgIA0K 46532\nREVTQ1JJUFRJT04= 46533\nfSovCg== 46534\nRnJvbU5pYg== 46535\nIGRlY29yYXRpdmU= 46536\nX1NTTA== 46537\nKGNoYXQ= 46538\nVExT 46539\nIHN1cnByaXNlcw== 46540\nYWxjdWxhdGU= 46541\nIFNwbGFzaA== 46542\nKENvbmZpZ3VyYXRpb24= 46543\nIFNFTQ== 46544\naW1zb24= 46545\nL2xpYnJhcnk= 46546\nPERvdWJsZQ== 46547\nLnJvYm90 46548\nwqDCoMKgwqDCoMKgwqDCoA== 46549\nIENQRg== 46550\nIFVuZGVyc3RhbmRpbmc= 46551\nIGNvc21ldGlj 46552\nIFh0 46553\ndGlwcw== 46554\nK2s= 46555\nKCIn 46556\nIFBEVA== 46557\nV0FS 46558\nLmdldE9iamVjdA== 46559\nIFRyYWRpdGlvbmFs 46560\nLnNsdWc= 46561\nIERpcGw= 46562\nPSIiLA== 46563\nIEZpbG1z 46564\nIEFuaW0= 46565\nLmhlbHA= 46566\nIGVtYmFzc3k= 46567\nIEJvb3Rz 46568\nIGJ1bms= 46569\nLXJpc2s= 46570\nIHBjaQ== 46571\nIC9cLg== 46572\nIElQVA== 46573\nIGNyYXNoaW5n 46574\nIGlwdg== 46575\nX2tl 46576\nIFJFU1A= 46577\nLkxvZ0Vycm9y 46578\nIGluYWRlcXVhdGU= 46579\nSW9u 46580\nIEbDvHI= 46581\ncmljdWxh 46582\nIHNob3VsZEJl 46583\nYWxyZWFkeQ== 46584\nJ10uIjwv 46585\nIFN0dWZm 46586\nRGlnaXRl 46587\nIHRyYW5zbGF0b3I= 46588\nX3Nwcml0ZQ== 46589\nbGV0YWw= 46590\nIG1haW9y 46591\nIFNleGU= 46592\ndGhhbmtz 46593\nIENvbXBsZXRlZA== 46594\nIGdhc29saW5l 46595\nLmF0dHJz 46596\nYmFnYWk= 46597\nIE9yaWc= 46598\nOl0s 46599\nLmxvY2FsZQ== 46600\nIFJvbWE= 46601\nw61m 46602\nIGZhdm9yZWQ= 46603\nIHZhaW4= 46604\nIHNwb29u 46605\nIEphaHJlbg== 46606\nIG5pbmc= 46607\nV1dX 46608\nLGZsb2F0 46609\nX0RBVEFCQVNF 46610\nQm9vdHN0cmFw 46611\nIENCQw== 46612\nIENodW5r 46613\nX2ludG8= 46614\nIEtvbA== 46615\nIGRlZmVuc2Vz 46616\nb3JlZFByb2NlZHVyZQ== 46617\nYmFsbHM= 46618\nVGV4dENoYW5nZWQ= 46619\nIHNoYXBpbmc= 46620\nIH19Pg== 46621\nR0VE 46622\nZmFx 46623\nIG9wdGlvbmFsbHk= 46624\nX0Rpcw== 46625\nIFN1Y2Nlc3NmdWw= 46626\nIENlbnN1cw== 46627\nIGluY2FyY2Vy 46628\nX0NBUkQ= 46629\nIGF2aWF0aW9u 46630\nIEd5bQ== 46631\nQXV0aG9yaXR5 46632\nLkJlYW4= 46633\nc2hhZGVy 46634\nTm90RXhpc3Q= 46635\nX1RleHRDaGFuZ2Vk 46636\nIFNUT1A= 46637\nKHRlYW0= 46638\nIkg= 46639\nd2c= 46640\nIGdyaW5kZXI= 46641\nIHN0cmlwZQ== 46642\nIHByZXNlcnZhdGlvbg== 46643\nQ2xhaW0= 46644\nYXZlcnNhbA== 46645\nd2FyZWhvdXNl 46646\ndGFyZ2V0cw== 46647\nVHJ1c3Q= 46648\nIGFsbGV2 46649\nLHd3dw== 46650\nb3Vzc2U= 46651\nX2NoYW4= 46652\nX1NpemU= 46653\nc3lzdGVtcw== 46654\nIG9iamVjdGlvbg== 46655\nIEthbmU= 46656\nIGNvcnJvcw== 46657\nIERTTA== 46658\nIHVh 46659\nIE1I 46660\nIFN0cmF0ZWdpYw== 46661\nX3RjcA== 46662\nIOqwkg== 46663\nIGJvcnJvd2Vk 46664\nIEFjaA== 46665\nCWNvbW1hbmQ= 46666\nIGdwcw== 46667\nbGVzdG9u 46668\naWNoZXZlcg== 46669\nIFVB 46670\nIGFzc2F1bHRlZA== 46671\nIHNwZWNpYWxpemVz 46672\nCXNlYXJjaA== 46673\nSG90ZWw= 46674\nICAgICAgICAgICAgICAgICAgICANCg== 46675\nIFBpdGNo 46676\nINmB 46677\nUkVBRFk= 46678\nIHBhcmVudGFs 46679\nIGfDqW7DqQ== 46680\nIGRvbm7DqWVz 46681\nIGRldGFpbg== 46682\nVEFSR0VU 46683\nIHByb3RhZ29uaXN0 46684\nIGNsZWFySW50ZXJ2YWw= 46685\nIEljb25CdXR0b24= 46686\nIEdldEFsbA== 46687\nVHlwZUluZm8= 46688\nRUg= 46689\n4oCcVGhleQ== 46690\nIHtb 46691\nIGdhZw== 46692\nINqp 46693\nIERyb3Bkb3du 46694\nLmZyZWU= 46695\nZ29uZQ== 46696\naW1lbnM= 46697\nIGluc3RhbA== 46698\nCWN1cmw= 46699\nX0NBTg== 46700\nIEJvbmU= 46701\n77yU 46702\nb255bXM= 46703\nLWdvdmVybm1lbnQ= 46704\nLmJpbmRpbmdOYXZpZ2F0b3I= 46705\nIERhbnM= 46706\nIE1jTA== 46707\nKGVu 46708\nPihf 46709\n0JLRiw== 46710\nLio7DQo= 46711\nPWo= 46712\nLWNvcg== 46713\nU29u 46714\nLlRvb2xTdHJpcEl0ZW0= 46715\nLWFyb3VuZA== 46716\nX1hNTA== 46717\nZW5kRGF0ZQ== 46718\nIHNsYWNr 46719\nIHJvdGF0ZWQ= 46720\nIG5vcWE= 46721\nIGNvdHRhZ2U= 46722\nIGVuY29udHJhcg== 46723\nX3NraWxs 46724\naG91ZXR0ZQ== 46725\nIQ0K 46726\nLndlYXRoZXI= 46727\nIGVtcGhhc2l6ZWQ= 46728\n5a62 46729\nINGB0L/QuNGB 46730\nIENvbXBpbGVy 46731\nKGFuZHJvaWQ= 46732\nIOKAug== 46733\nLnR1cm4= 46734\nIHN1cHByZXNzaW9u 46735\nX2NhbGxz 46736\nICpA 46737\nKHN0cmxlbg== 46738\nLmhleA== 46739\nIEJpbGxz 46740\nIFJTQQ== 46741\nz4I= 46742\nIEVzY2FwZQ== 46743\nZW1lbnRpYQ== 46744\nIGZyb250ZW5k 46745\nIHBpbnQ= 46746\nX2V4Yw== 46747\nenpv 46748\nW10sCg== 46749\nICInLCci 46750\nLkVudmlyb25tZW50 46751\nIGFmb3JlbWVudGlvbmVk 46752\nIGVuZHVyZQ== 46753\ncHJvdG90eXBl 46754\ndGhlcmFweQ== 46755\nc3Np 46756\nRGVn 46757\nX3BsdWdpbnM= 46758\nLnVzZXJJbmZv 46759\nUHJpbnRlcg== 46760\nIFBST0dSQU0= 46761\nIHJ1aW5z 46762\nIGVtcGlyaWNhbA== 46763\nIGNyYXds 46764\nIEJvaWxlcg== 46765\nLWNvbW1lbnQ= 46766\nLnN1YnBsb3Q= 46767\nX2V0 46768\nICcuJyw= 46769\nbWlub3I= 46770\nIEN1c3RvbXM= 46771\nIHlhdw== 46772\ndW5kZXJsaW5l 46773\nIENvbW8= 46774\nKCgn 46775\nKG1lYW4= 46776\nIGNoYXF1ZQ== 46777\nIEJsb2Nrcw== 46778\nLnJhZA== 46779\naWxpYnJpdW0= 46780\nIHdlYmRyaXZlcg== 46781\nIG1lbGhvcg== 46782\nZGFuYQ== 46783\nIEFidXNl 46784\nIFNvdXRod2VzdA== 46785\nIFBhcmVu 46786\nUEVSVElFUw== 46787\nCUlM 46788\nIHNjcmVhbQ== 46789\ndnU= 46790\nIGluY29tZXM= 46791\nIG5pbQ== 46792\nIGxhY2U= 46793\nIGNvbXBlbnNhdGU= 46794\nUmV2ZXJzZQ== 46795\nRGF0 46796\nX2F0dGFjaw== 46797\nIG5vdXI= 46798\nYWNoZW4= 46799\nY2Vr 46800\nPEZ1bmM= 46801\nd2ll 46802\nY29tcHJlc3NlZA== 46803\nLW1hdGNo 46804\nKCIiKV0K 46805\naW1pemVk 46806\nLm9yaWVudGF0aW9u 46807\nLmNvbXBhcmVUbw== 46808\nIG1hc3NhZ2dp 46809\nIOychA== 46810\nIGVsYm93 46811\nIGFudGlveGlk 46812\ndW5kcmVkcw== 46813\nL3Rvb2xz 46814\nIFJPVw== 46815\nYW5tYXI= 46816\nIFdvdw== 46817\nX3RpY2tldA== 46818\nUHJvZ3JhbW1pbmc= 46819\nIHRoZW9y 46820\nLXJldmlldw== 46821\nKCkpKSk7Cg== 46822\nIFJpY2hhcmRzb24= 46823\nIFBvY2tldA== 46824\nXVtd 46825\nYW1wcA== 46826\nX2hlYWx0aA== 46827\nIFBPUA== 46828\nIE5hdmFs 46829\nR3Vlc3M= 46830\nIGFuY2VzdG9y 46831\nLkdldEFsbA== 46832\nLmxvY2FsU2NhbGU= 46833\nIE1hcHBlcg== 46834\nIGFjY3VtdWxhdGlvbg== 46835\nIHNpbXVsYXRlZA== 46836\nIERyaXZlcnM= 46837\nIGTDqXM= 46838\nY3VycmluZw== 46839\nIGVsZXBoYW50 46840\nIGFkdmVydGlzZWQ= 46841\nIG1haWxib3g= 46842\nU0hJRlQ= 46843\nIE1vbmljYQ== 46844\nIGFuYw== 46845\nIHdhcmRyb2Jl 46846\nSW5ncmVkaWVudHM= 46847\nIHx8DQo= 46848\naXBweQ== 46849\nIGFudGliaW90aWNz 46850\nYXZpbmdz 46851\nKGN4 46852\nIEZlcnJhcmk= 46853\nIEFuaW1hdG9y 46854\nLmR0eXBl 46855\ncmVtb3ZlZA== 46856\nb3JkZXJieQ== 46857\nIGNyZXM= 46858\nb2PDqg== 46859\nIHB5bQ== 46860\nIENpcmN1bGFy 46861\nQGluZGV4 46862\nIFdhcm0= 46863\nU2F5 46864\nIEFzc2lzdGFuY2U= 46865\nIGN1cnRhaW4= 46866\nIE1vbnRl 46867\nSUxFUg== 46868\nIENWRQ== 46869\nIER1Y2s= 46870\nIEFsbG93cw== 46871\nX2ZpcmU= 46872\nIERlcmJ5 46873\nIHJlcG9z 46874\nIGh0dHBDbGllbnQ= 46875\nIHBzeWNoaWF0 46876\nIG5vd2FkYXlz 46877\nIGNhdXRpb3Vz 46878\nIENvbXB1dGluZw== 46879\nIGNvbXBsZXRpb25IYW5kbGVy 46880\nIFdlbHNo 46881\nIEJFU1Q= 46882\nIHN0cmVzc2Z1bA== 46883\nX1BF 46884\n5pel5pyf 46885\nIERhdGFGcmFtZQ== 46886\nCUludGVnZXI= 46887\nX1ByaW50 46888\nTW92ZXM= 46889\nIHRyYW5zZm9ybWluZw== 46890\nLkJhdGNo 46891\neWFob28= 46892\nUG9zaXRpb25z 46893\nemVq 46894\nIG5vb2Q= 46895\naW9yZXM= 46896\nXyo= 46897\nIGNsaw== 46898\nIEZsb3lk 46899\nIGhhcA== 46900\nZm9udHNpemU= 46901\nIG5heg== 46902\nLm5vdGlmaWNhdGlvbg== 46903\nIERlcHJlc3Npb24= 46904\nIGFjbmU= 46905\nKioqCgo= 46906\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 46907\nLmNvbnRlbnRz 46908\neW50aA== 46909\nIFN0cmFpZ2h0 46910\nJyl9fSI+PC8= 46911\nIGJ1bGI= 46912\nUlg= 46913\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 46914\nIGNvbXVuaWM= 46915\nIFJO 46916\nLW1lZGl1bQ== 46917\nTEVBTg== 46918\nPWxlbg== 46919\nUGhvbmVOdW1iZXI= 46920\nZXJ2YXRpb25z 46921\nQWNjdXJhY3k= 46922\nIEFubm90YXRpb24= 46923\nX2tleXdvcmQ= 46924\nX2hpbnQ= 46925\nIEF0aGVucw== 46926\nIGFzc2lzdGluZw== 46927\nIEhD 46928\nLkluaXRpYWxpemU= 46929\nJykpKQo= 46930\ndXBh 46931\nIHN1aXY= 46932\nIElQQw== 46933\nPFRFbnRpdHk= 46934\nIGJyYW5kZWQ= 46935\nb29tbGE= 46936\nbGFyxLE= 46937\nIFhNTEh0dHBSZXF1ZXN0 46938\nIGTDqWrDoA== 46939\nIHRyYW5zY3JpcHRpb24= 46940\nIHByZXZhbGVudA== 46941\nLnBsYW4= 46942\nIHN0YXJl 46943\nIHdvcmtvdXRz 46944\nIEVkdWNhdGlvbmFs 46945\nIG1lc3N5 46946\nIE1PVA== 46947\nLkNvbW1hbmRUeXBl 46948\nUWVk 46949\nKGdjYQ== 46950\nIExpbmVhckxheW91dE1hbmFnZXI= 46951\nIEJsb3c= 46952\nIEFsdW1pbnVt 46953\nIHN3aW5nZXJjbHVi 46954\nIFRyYW5zaXQ= 46955\nIGV4cG9z 46956\ndmly 46957\nKHNlY29uZA== 46958\nIGJlbG9uZ2Vk 46959\nU3RvbmU= 46960\n6ZW/ 46961\nIFN1bA== 46962\nIGdpZA== 46963\nIGFsbG95 46964\nZXJ2YQ== 46965\naXNlY29uZA== 46966\nX1JFTkRFUg== 46967\nIGFuZ2Vscw== 46968\nIFBoaWxvc29waHk= 46969\nb3B1cw== 46970\nIG1vbw== 46971\nZW5ndWlu 46972\nX1ZBUklBQkxF 46973\nX0RFU1Q= 46974\nKGF1eA== 46975\nIGhvZQ== 46976\nIGRvYg== 46977\nYXR0YWNobWVudHM= 46978\nIGNvcnJpZG9y 46979\nIGRpdmlkZW5k 46980\nnbw= 46981\nIFRocm91Z2hvdXQ= 46982\nLm9wdGlt 46983\nJG5ldw== 46984\nIGJlcmc= 46985\nIHNwcmVhZHNoZWV0 46986\nLlRyeUdldFZhbHVl 46987\nIHBheW91dA== 46988\nIE9uRGVzdHJveQ== 46989\nYXV0aGVudGljYXRpb24= 46990\nIE1pZ3VlbA== 46991\ncnRj 46992\nIENocmlzdGluZQ== 46993\nIEFJUg== 46994\nIGp1cmlz 46995\nIGRlc3BhaXI= 46996\nIHBhdGVudHM= 46997\nLWhhcw== 46998\nJV4= 46999\n5LuY 47000\nX3N0cmR1cA== 47001\nIFJlYXI= 47002\nZXR0ZXM= 47003\nKHByb3BlcnRpZXM= 47004\nIHdyaXRhYmxl 47005\nLmlzTnVsbA== 47006\nb2xpY3M= 47007\nX2Jsb2I= 47008\nIGN1YWxxdWllcg== 47009\nYWZp 47010\nb3d5Y2g= 47011\n6I635Y+W 47012\nw4c= 47013\nIENhcmRpbmFs 47014\nIHRlbWE= 47015\nIkFuZA== 47016\nUGFnZVNpemU= 47017\n56eS 47018\nLlNpbXBsZURhdGVGb3JtYXQ= 47019\nIFdpbm5lcg== 47020\nIGNvcnJlbw== 47021\nX3dl 47022\nLmFkZE9iamVjdA== 47023\nKGNvdXJzZQ== 47024\nIGhvZw== 47025\nb3Bybw== 47026\nIHByb2JhdGlvbg== 47027\ndW5hYmxl 47028\nKGFjdGl2ZQ== 47029\n5Zu+54mH 47030\nIHBlcnRhaW5pbmc= 47031\nIGVtcGhhc2l6ZQ== 47032\nIFByaW50ZXI= 47033\nPS4= 47034\nIHVwZ3JhZGluZw== 47035\nL2NvbnRhY3Q= 47036\nPVtb 47037\nLXNhbg== 47038\nCXZhbHVlcw== 47039\nIGRvc2FnZQ== 47040\nU29saWQ= 47041\nIFJvb3NldmVsdA== 47042\n5ZWG5ZOB 47043\nIHJlY3JlYXRpb24= 47044\nIFRlcm1pbg== 47045\nLkJhZA== 47046\nIEJvbHQ= 47047\nU2t5 47048\nX0ltYWdl 47049\nIHNxdWly 47050\nIENvYg== 47051\nT1JO 47052\nIGF1Yw== 47053\nLkxFRlQ= 47054\nJ0I= 47055\nLXJlc2lzdGFudA== 47056\nPiIr 47057\nIHRva2VuaXplcg== 47058\nIHNvdmVyZWlnbnR5 47059\nIFBlbmNl 47060\nKCkiKTsK 47061\nIHBlc3NvYXM= 47062\nLkdl 47063\nIEluY2x1ZGVk 47064\nIHBhZ2luYQ== 47065\nIGV4cG9zaW5n 47066\n0LXRiA== 47067\nX1NDUklQVA== 47068\nLyQnLA== 47069\nVGh1bWJuYWls 47070\n15Q= 47071\nd2ViRWxlbWVudFg= 47072\nd2ViRWxlbWVudFhwYXRocw== 47073\ncHJlc3N1cmU= 47074\nIEN1cnJ5 47075\nX0NQ 47076\nT0xVVElPTg== 47077\nSUxFUw== 47078\ncHJvdGVjdA== 47079\nb29sYQ== 47080\nV29ya3NwYWNl 47081\ne307Cg== 47082\nIFVOUw== 47083\nIHN5bXBhdGh5 47084\ncm9rZXI= 47085\nIHJlbW9kZWw= 47086\nCWNlbGw= 47087\nIGF0b3A= 47088\nLkZ1bGxOYW1l 47089\nIGZhdXQ= 47090\nIEVhc2lseQ== 47091\nX2R5bmFtaWM= 47092\nIGZyYW1lZA== 47093\nIG1vdGl2ZQ== 47094\n6Lev 47095\nc2Ft 47096\nIG1hcmNh 47097\nIFRleHRFZGl0aW5nQ29udHJvbGxlcg== 47098\nIGRlc3RydWN0b3I= 47099\nY3JlYW0= 47100\nIHJ1ZGU= 47101\nIEJvbGQ= 47102\nIEluZGlnZW5vdXM= 47103\nIGdlbnM= 47104\nIHJlbGFjaW9u 47105\nKHN5c3RlbQ== 47106\nIFVJRm9udA== 47107\nX2NoYXJnZQ== 47108\nVVNURVI= 47109\nRVY= 47110\nLk5hbWVzcGFjZQ== 47111\nIG1lcmdlcg== 47112\nIGNhbGxvYw== 47113\nZ2FuZw== 47114\nQmFkUmVxdWVzdA== 47115\nIHNwZXI= 47116\nLWRlc2lnbg== 47117\nIOKH 47118\nQ2hhbg== 47119\nIG9yZ2FuaXNt 47120\nLCk= 47121\nPWlk 47122\nX3BsYW5l 47123\nIENhc2Vz 47124\nZWxmYXN0 47125\nIExlZ2lzbGF0dXJl 47126\nIEZha2Vy 47127\nIGludm9raW5n 47128\nLXV0aWxz 47129\nKCkuJw== 47130\nLmZhY2U= 47131\nIGd1YXJkaWFu 47132\nbXlNb2RhbA== 47133\nIGNsaXBib2FyZA== 47134\nIEFUTQ== 47135\nIHBlYXM= 47136\nIFN5bHY= 47137\nLmNhbGM= 47138\nIENvbnRhY3Rz 47139\naW50VmFsdWU= 47140\nIG1vZGlmeWluZw== 47141\nIEJhcmI= 47142\nLmxvc3M= 47143\nX3BlcmNlbnRhZ2U= 47144\nQXNrZWQ= 47145\nKGxzdA== 47146\nYXRlZ29yaWNhbA== 47147\nLWZpbGVz 47148\nIFJvbWFuaWE= 47149\nLkFj 47150\nIGhhaQ== 47151\nIEZseWluZw== 47152\nIMW8 47153\nanA= 47154\nIFRyYWluZXI= 47155\nLmFyYw== 47156\nX2RlZw== 47157\nIHRyYWNlYmFjaw== 47158\nT3JGYWls 47159\nRkxPVw== 47160\nLm9sZA== 47161\nb3lh 47162\nZ210 47163\naXNlbXB0eQ== 47164\nIHZhY2NpbmF0aW9u 47165\nIG9ic29sZXRl 47166\ncmVjb2duaXplZA== 47167\nIHJ1aW5lZA== 47168\nIFJlaW4= 47169\nIFRyYWNraW5n 47170\neGZi 47171\n2KfbjA== 47172\nIHbDpnJl 47173\nIGJyeXN0ZXI= 47174\nIElUUw== 47175\nIGRlc3Rpbnk= 47176\nIHN3ZWFy 47177\nIHJlZGVz 47178\nIGNsZg== 47179\nIGZsaXBwZWQ= 47180\nCWhlYWQ= 47181\nQmx1ZXRvb3Ro 47182\nIE92ZXJyaWRlcw== 47183\nOkJvb2xlYW4= 47184\nXz0= 47185\nX2xy 47186\nc3Bhd24= 47187\nOmluZGV4 47188\nVkFMVUVT 47189\naXNrZXk= 47190\nPyIpOwo= 47191\nLnN5bnRoZXRpYw== 47192\nIENoZWNraW5n 47193\nc3RydWN0dXJlcw== 47194\naXBpbmc= 47195\nIHZvY2Fscw== 47196\nLVVw 47197\nIE1hbnVmYWN0dXJlcnM= 47198\nIE1hcnJpYWdl 47199\n5Luj56CB 47200\nIGdhcm5lcg== 47201\nX0NsaWVudA== 47202\ncGFyYWxsZWw= 47203\nUklFTkQ= 47204\nIHZpbmVnYXI= 47205\nc2VndWU= 47206\nSkI= 47207\nIGNvbnRhY3Rpbmc= 47208\nIENhcnJvbGw= 47209\nIG91dHJlYWNo 47210\ndGVuc29y 47211\nX3ZhcmlhbnQ= 47212\nIHRoZWF0 47213\nbGljYWJsZQ== 47214\ne3w= 47215\ndGlueQ== 47216\nX2xldHRlcg== 47217\nIHBlbmNpbA== 47218\nSGVhZGVyc0hlaWdodFNpemVNb2Rl 47219\naWx0cm8= 47220\nLmF1dG9jb25maWd1cmU= 47221\nLmRyYWc= 47222\nLnVzZVN0YXRl 47223\nIEJNSQ== 47224\naGludA== 47225\nQ29tcGlsZQ== 47226\nKlw= 47227\nZW5hcnk= 47228\nIGx2bA== 47229\nLkNhY2hl 47230\nKz0i 47231\nX3R2 47232\ncnVpdG1lbnQ= 47233\nIGZyZWFk 47234\nQXJ0aWNsZXM= 47235\nZmlsYQ== 47236\nIHBhY2thZ2Vk 47237\n4piG 47238\nQVRIRVI= 47239\nIFBsYW5uZWQ= 47240\nc2NoZW1l 47241\nIGRpYXJ5 47242\nIG9mZmVuc2Vz 47243\nLzw/ 47244\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47245\nUHJvZ3Jlc3NIVUQ= 47246\nIEdvcg== 47247\nLmdldFRpdGxl 47248\nIG1vY2tlZA== 47249\nIFRvcnk= 47250\nICIpIjsK 47251\nI2c= 47252\nIGxpZWQ= 47253\nIHN2Yw== 47254\nX2d1aQ== 47255\nRU5UUlk= 47256\nIHNlcnZpY2lv 47257\nbW91c2VvdmVy 47258\nU0FDVElPTg== 47259\n44Kz 47260\nIHJlaWZl 47261\nbGVjdHJpYw== 47262\nX2NyZWF0aW9u 47263\nUmVhbGl0eQ== 47264\nKCcr 47265\ncHJvZHVjdElk 47266\nU3VwcGxpZXI= 47267\nLUxl 47268\nLnJlcG8= 47269\ndWNraW5n 47270\nX1N0cg== 47271\nIFJlbGF5 47272\n0LjQuA== 47273\nIHBlcnY= 47274\nQ2hpY2Fnbw== 47275\nIG1haXNvbg== 47276\nIHN0aWNrZXI= 47277\nX3ByZXNzZWQ= 47278\nU3dhcA== 47279\nIElH 47280\nIHN1c2NlcHRpYmxl 47281\nb2NhZG8= 47282\nIGdpbg== 47283\nZXhl 47284\naWdoYm9yaG9vZA== 47285\nKWA= 47286\nIGRpYWdyYW1z 47287\nIGluZmxhbW1hdG9yeQ== 47288\nIHTDqQ== 47289\nIFBvcHVw 47290\nIGFwcHJlaA== 47291\nIFBvcnRmb2xpbw== 47292\nIHdvcnM= 47293\nLmVudW1z 47294\n0LXQs9C+ 47295\nL0J1dHRvbg== 47296\nIFBoYW50b20= 47297\nICM6 47298\nIGRpaw== 47299\ncGFnZXI= 47300\nZnRhcg== 47301\nIG9yZ2FuaXplcg== 47302\nKGNoaWxkcmVu 47303\nIE11bmljaA== 47304\nIHN0cmFuZw== 47305\nIFJX 47306\n44K/ 47307\nTWFo 47308\ncHRpZGU= 47309\nIGxlYXJucw== 47310\nIHJlZHVjdGlvbnM= 47311\nIFJlcGxhY2VtZW50 47312\nT1RT 47313\nYWxjb24= 47314\nKHBhcnRz 47315\nYmFzaA== 47316\nIENpdGl6ZW4= 47317\njbDsnbQ= 47318\nIEh0dHBTZXJ2bGV0 47319\nX1NDSEVNQQ== 47320\nbWVhbnM= 47321\nIGhvcnJpZmlj 47322\nVkVSSUZZ 47323\nIERDSEVDSw== 47324\nICgv 47325\nLmJlZm9yZQ== 47326\nLnRleHR1cmU= 47327\nZ2V0TW9jaw== 47328\nIFNlbnNl 47329\nSW5zcGVjdG9y 47330\nVGV4dE5vZGU= 47331\nKEFM 47332\nLmdldE5vZGU= 47333\nIGJveWM= 47334\nIEJyaXNiYW5l 47335\nIGJhdHRsaW5n 47336\nCXR4 47337\nIGxvYmJ5aW5n 47338\nYnVpbHQ= 47339\nIFNFRUs= 47340\nIHJhbmRvbWl6ZWQ= 47341\nZ25p 47342\nX2NsdXN0ZXJz 47343\nX2lkZW50aXR5 47344\nIGNhcmRpYWM= 47345\nIG5ld1VzZXI= 47346\nLlZpZGVv 47347\nZHVpdA== 47348\nXWluaXQ= 47349\nQXRs 47350\nKXZhbHVl 47351\nVGV4dFV0aWxz 47352\nINC10YHQu9C4 47353\nQ29tcHV0ZQ== 47354\nPSgn 47355\nCQkgICAgICAgICAgICAgICA= 47356\nIGFydGVy 47357\nIFRXTw== 47358\nJykpLA== 47359\nIERJVg== 47360\nIHByaXZpbGVnZWQ= 47361\nIFBhcnRuZXJzaGlw 47362\nIEhlYXRoZXI= 47363\nYmF5 47364\nYXRpc2ZpZWQ= 47365\naW5zdGFncmFt 47366\nX1NlbmQ= 47367\nIEFTRg== 47368\nJG5hbWU= 47369\nIGJvbw== 47370\nIGTDqWY= 47371\nX0ZpZWxk 47372\nIEVkdQ== 47373\nY2FuZGlkYXRl 47374\ncnVieQ== 47375\nIGFjY3VtdWxhdGU= 47376\nKEludFB0cg== 47377\nIGJ1c2luZXNzbWFu 47378\nIGVjb25vbWljYWxseQ== 47379\nIFJpbmdz 47380\nIElucHV0cw== 47381\nuYQ= 47382\nYWNpZQ== 47383\nIEFsYXJt 47384\nIExvZ291dA== 47385\nLnNlcXVlbmNl 47386\nIFZpZW5uYQ== 47387\nb3By 47388\nIGRydW1z 47389\nPWNvbmZpZw== 47390\ncXVp 47391\nIGRhdG8= 47392\nIHBvbHltZXI= 47393\nIENoYW5nZWQ= 47394\nV2ViUmVxdWVzdA== 47395\nIEFkdmFuY2U= 47396\nIHVuZGVyZ29pbmc= 47397\nLkNvbnNvbGU= 47398\nIGN1cnJlbnROb2Rl 47399\nIFdvb2w= 47400\nIHDDoWdpbmE= 47401\nUkVHSVNURVI= 47402\nIHNhZ2E= 47403\nIFlPUks= 47404\nYW1hbmhv 47405\n5a6M 47406\nIEJ1bmRlcw== 47407\nIERpYWxvZ0ludGVyZmFjZQ== 47408\nZ2VvaXM= 47409\ndW5jaWF0aW9u 47410\nPyQ= 47411\nLkFzc2VydGlvbnM= 47412\nIHNlYXRlZA== 47413\nIFNweQ== 47414\nUG9zZQ== 47415\nIkM= 47416\nIGFob3Jh 47417\nINGE0LDQudC7 47418\nIOuzgA== 47419\nIHdhcnA= 47420\nUHJvamVjdGlvbg== 47421\nIFNpbmdsZXM= 47422\nIEFkdmVydGlzaW5n 47423\nTGludXg= 47424\ndXN0eQ== 47425\nIHBlbmFs 47426\nVVNJQw== 47427\nb2RpYQ== 47428\nLm5ldGJlYW5z 47429\nIFVn 47430\nIEJyZW50 47431\nLWxvZw== 47432\nL2NhdGVnb3J5 47433\nIEN1c3RvbWl6ZQ== 47434\naXJlbg== 47435\n77yaPC8= 47436\naW5hcnM= 47437\nICgrKw== 47438\nR29pbmc= 47439\nRVhFQw== 47440\nKG1lc2g= 47441\nIHBlcmltZXRlcg== 47442\nQ2xz 47443\nY2VpdmluZw== 47444\nbWVuc2FqZQ== 47445\nKCkpKXsK 47446\nIHByb3N0YXRl 47447\nX2J1eQ== 47448\nIFJvb2Y= 47449\nLlJldHVybg== 47450\nIG1hcnJpYWdlcw== 47451\nX3RodW1i 47452\n574= 47453\n4K+N 47454\nVGV4dHVyZXM= 47455\nKFRFWFQ= 47456\nc2hvcnRjdXQ= 47457\nVHJhbnNmb3JtZXI= 47458\nQVRJQw== 47459\nIFNub3dkZW4= 47460\nc2NyaWJlcnM= 47461\nbWFya2Vk 47462\nIOKGkQ== 47463\naG9yYQ== 47464\nT1BFUg== 47465\nIEZZ 47466\nIEF1dGhlbnRpYw== 47467\nIGF1ZGk= 47468\ncmFtZXI= 47469\nIExpdGVyYXR1cmU= 47470\nIGl0ZW1JZA== 47471\nLkF0dA== 47472\nKGNudA== 47473\nIEtT 47474\nLWxpbnV4 47475\nIFBhcnRpY2lwYW50 47476\nIENydWlzZQ== 47477\naXR1bG8= 47478\ndXN0cmlhbA== 47479\nIGNsYXNl 47480\nID0k 47481\nX2RhdGVz 47482\nY3VycmVudFBhZ2U= 47483\naXhh 47484\nZXhhY3Q= 47485\nIHRzbA== 47486\nLlNv 47487\nL2RvY3VtZW50 47488\naGFydA== 47489\nX0lETEU= 47490\ne30u 47491\neWV0 47492\nSXJvbg== 47493\nIFRocm9uZXM= 47494\nc25k 47495\nXHhh 47496\nIGJldmVyYWdlcw== 47497\nX3RyYW5zcG9ydA== 47498\nIGZvaWw= 47499\nIHRhc3Rpbmc= 47500\nIGdvZWQ= 47501\nTWVtbw== 47502\nIG5pdHJvZ2Vu 47503\nLk1lbWJlcg== 47504\nLmZsYXQ= 47505\nIGlsbHVt 47506\nbWluZW50 47507\nLnpvb20= 47508\nIFB0cg== 47509\nb2Npbw== 47510\nIENvbnN1bHRpbmc= 47511\nIENvbmU= 47512\nCWl0ZW1z 47513\nIExN 47514\nIG9hdXRo 47515\nIFByb2dyYW1tZQ== 47516\nb2Nob25k 47517\nKHNlbGVjdG9y 47518\nIHdhdGVycHJvb2Y= 47519\nIE1lcmtlbA== 47520\nIHN1ZmZlcnM= 47521\nIG5wbQ== 47522\n6LGh 47523\nIExhbmRpbmc= 47524\nIExBTg== 47525\nCQkJCQkJDQo= 47526\nL2lz 47527\nIHPDqXJpZQ== 47528\nIEdVSUxheW91dA== 47529\nZ2l2ZQ== 47530\nX0NZ 47531\nQnJvd3Nl 47532\nLm11bHRpcGx5 47533\nPSIkKA== 47534\ndXNv 47535\nLXBhcmVudA== 47536\nLk1hdGg= 47537\nLm51bWJlck9m 47538\nIHRpZW5lbg== 47539\nIHJlc2VudA== 47540\nIHBpdGNoaW5n 47541\nIl0pLAo= 47542\nLlV0aWxpdGllcw== 47543\nIG11bHRpcGxpY2F0aW9u 47544\nOnR5cGU= 47545\nIHBwcmludA== 47546\naWFuaQ== 47547\n5YiZ 47548\nIGxhdW5jaGVy 47549\nIHJ1Z2J5 47550\n546w 47551\nCgkJCQo= 47552\naGlk 47553\nQW5nbGVz 47554\nIGdvb2RieWU= 47555\nIGlucHV0U3RyZWFt 47556\nLndhdGNo 47557\nR29vZHM= 47558\nIFNheXM= 47559\nPkY= 47560\nIFN0aWNr 47561\nIGNlcmM= 47562\nIFNsZWU= 47563\nCQkgICAgICAgIA== 47564\nPEltYWdl 47565\nIOiuvg== 47566\nLWVkaXRvcg== 47567\ncGllY2Vz 47568\nIERyYW1h 47569\nIC8vLy8vLy8vLy8vLy8vLy8vLw== 47570\nIFRhc2tz 47571\nQVJD 47572\nZ2F0ZXdheQ== 47573\nLmdldGN3ZA== 47574\nLk1ldGFkYXRh 47575\nIGd1ZXNzaW5n 47576\n5Zyw5Z2A 47577\nIHNtYXJ0ZXI= 47578\nIEdldEVudW1lcmF0b3I= 47579\nIGVmdGVy 47580\nL29wZXJhdG9ycw== 47581\nIEdMZmxvYXQ= 47582\nIGbDuHI= 47583\nIG9wYXF1ZQ== 47584\n5L+d5a2Y 47585\nU3ByZWFk 47586\nU1lTVEVN 47587\nIGludmVyc2lvbg== 47588\nIEJhc2tldGJhbGw= 47589\nIHNpbXVsYXRpb25z 47590\nIGRlbmllcw== 47591\nIGF2ZXo= 47592\nX2xpc3RlbmVy 47593\nIGVuaGFuY2luZw== 47594\nIE15dGg= 47595\nIExha2Vycw== 47596\nX01E 47597\nTmRFeA== 47598\nREFUQUJBU0U= 47599\nIHThuw== 47600\nYXJ0aA== 47601\nW2xlZnQ= 47602\nIGNvbnRlc3Rz 47603\nc3RpbGU= 47604\nKEtFUk4= 47605\nX2Zj 47606\nX3Bt 47607\nIHByZXNpZGVudHM= 47608\nIGhvc3BpdGFsaXR5 47609\nIGZhZGVJbg== 47610\nUk9QRVJUWQ== 47611\nX21hcHM= 47612\nIERlZmluaXRpb25z 47613\nIGFzc2Vzc2luZw== 47614\nIHVzYXI= 47615\nIHF1YW50aXRhdGl2ZQ== 47616\nbW96 47617\nQmVhdXRpZnVs 47618\nWygo 47619\nYm9ucw== 47620\nZnJlcXVlbmN5 47621\nQ29udGFpbg== 47622\nIHB1enpsZXM= 47623\nIENhc3Rybw== 47624\nIHZpbGxh 47625\nIGtpbmRseQ== 47626\nRm9udEF3ZXNvbWU= 47627\nZXJuYQ== 47628\nZXBvY2hz 47629\nX2RhdGFz 47630\nCWlw 47631\nLnBhZGRpbmc= 47632\nIENvbnRlc3Q= 47633\nIGVkaXRpb25z 47634\nIGRpc3Byb3BvcnRpb24= 47635\nIElDTw== 47636\nIGNvbWViYWNr 47637\nPXZhbHVl 47638\ncmlhZA== 47639\nLXNvcnQ= 47640\nU3VibWl0dGVk 47641\nKG5ldHdvcms= 47642\nIENlbA== 47643\nIGluc3RhbGxtZW50 47644\nbGFzaGVz 47645\nLkxpc3RWaWV3 47646\nIFZhdGljYW4= 47647\nKE1lZGlhVHlwZQ== 47648\nSVZFRA== 47649\ncmVhY2hhYmxl 47650\nOklz 47651\nIENJVFk= 47652\n5Lqs 47653\nIEhlbHBmdWw= 47654\nIGJhxZ8= 47655\nJQ0K 47656\nIHBzeWNoaWF0cmlj 47657\nIHJlY3ljbGVk 47658\nRk9STUFU 47659\nIEdyb3c= 47660\nYmluZQ== 47661\nR2l0 47662\nLnNz 47663\nIFdlYXBvbnM= 47664\nIFN0eQ== 47665\nX2Fycm93 47666\nKnNlbGY= 47667\naXJlbWVudA== 47668\nIGRlZ2xp 47669\nQXBwRGVsZWdhdGU= 47670\nX2Jhbm5lcg== 47671\nIGNvb3JkaW5hdGVk 47672\nIFdlYmNhbQ== 47673\nIGNlbGVicmF0aW9ucw== 47674\nLmFjdA== 47675\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 47676\nKHNob3c= 47677\nIHdlZWtkYXk= 47678\nIGNvbmNlcnRz 47679\n0L7Qu9C9 47680\nY2xpbg== 47681\nIGNyb24= 47682\nIE5pbQ== 47683\nLnNldFZlcnRpY2Fs 47684\nIEVsbGVu 47685\n2LPYqg== 47686\nIFNBTQ== 47687\nRWZm 47688\nZ3o= 47689\nc3RlYW0= 47690\nIGFudGlxdWU= 47691\ncGh5c2ljYWw= 47692\nIEZvcm1EYXRh 47693\nLnNldHRlcg== 47694\nIFBPSU5U 47695\nQm9u 47696\nIGZsYXZvdXI= 47697\nZXJ2ZW50aW9u 47698\nX0VOVElUWQ== 47699\nCSAgICAgICAgICAgIA== 47700\nIGludHJpbnNpYw== 47701\nIOaO 47702\nYXBwZW5kVG8= 47703\nYXJhbWVs 47704\nKV0p 47705\nIFJlY29tbWVuZA== 47706\nKW0= 47707\nT3V0T2ZSYW5nZQ== 47708\nIGtuaWdodA== 47709\nIHNhdGVsbGl0ZXM= 47710\nIFRpdGFucw== 47711\nIHdlaWdoZWQ= 47712\nIERhbmE= 47713\nZWFzZQ== 47714\nIHNpcA== 47715\nU0lN 47716\nIERldmVsb3BlcnM= 47717\nbWFsaW5r 47718\nL2NoZWNr 47719\nX1BMTA== 47720\nbnVuZw== 47721\nIGRyeWVy 47722\nPUE= 47723\nLmR3 47724\nX1NRTA== 47725\nIHN1YnBsb3Q= 47726\nRFJPUA== 47727\nIHByb3RvdHlwZXM= 47728\nIGhvdXJseQ== 47729\nZGlzcGxheU5hbWU= 47730\nIGFzaQ== 47731\nIFZpb2xlbmNl 47732\nIGFzdHJvbmF1dA== 47733\nIGRhdGF0eXBl 47734\nIGluZm9ybWF0aW9uYWw= 47735\nIGludmVzdGlnYXRpdmU= 47736\nZXRlcm1pbmVk 47737\ncmVuYWw= 47738\nOyc+ 47739\nCWNvbA== 47740\nVkc= 47741\nX2Jvb2xlYW4= 47742\ncmVjZW50 47743\nICopCgo= 47744\nIFJhaW5ib3c= 47745\nb21tZW4= 47746\nIGx1cg== 47747\nIG9wcHJlc3Npb24= 47748\nKCIsIik7Cg== 47749\nIEZhY2lsaXR5 47750\nREVGSU5FRA== 47751\nIG5lb24= 47752\nIG9mZmVuZGVy 47753\nQUZQ 47754\nIENsZWFuaW5n 47755\nW10pOg== 47756\nIHVuZG9jdW1lbnRlZA== 47757\nLlJlcG9zaXRvcmllcw== 47758\nIEd1aXRhcg== 47759\n0LDRgdGB0LjQsg== 47760\nU2tpbGxz 47761\nIHRlc3RpbW9u 47762\ncnlwdG9ncmFwaHk= 47763\nIEFtYmVy 47764\nIFN0YWxpbg== 47765\nIGxvbmU= 47766\nIGFwZW5hcw== 47767\nIGRpZXNlcw== 47768\nIEFyZHVpbm8= 47769\n6L2s 47770\nPT0t 47771\nX0FjdA== 47772\nIGNvZGVk 47773\n4pag 47774\nYW1idXJnZXI= 47775\nLWxpbmtz 47776\nIGFybW91cg== 47777\nLkhpZ2g= 47778\nZ2V0Q29udGVudA== 47779\nc3RhZw== 47780\nIGhlY2s= 47781\nIOyXhg== 47782\nIE1jQ29ubmVsbA== 47783\nIENvbmNlcnQ= 47784\nIEFsbG9j 47785\nw6RyZQ== 47786\nLnJlcGxhY2VBbGw= 47787\nIHBhcnRpdGlvbnM= 47788\ncm90dA== 47789\nIEZsZQ== 47790\nX1RSRUU= 47791\ncmVhc29uYWJsZQ== 47792\nIFJlcG9ydGluZw== 47793\nIGJpbGxpb25haXJl 47794\nc2NvcmVz 47795\nbWlucw== 47796\nLWV5ZQ== 47797\nTU9SRQ== 47798\nYWJvcnQ= 47799\nIFNXVA== 47800\nIGludmVydGVk 47801\nIFRlYWNoZXJz 47802\nO24= 47803\nIGFzdHJv 47804\n0L3QvtCy 47805\n0LDQvdC40YY= 47806\ncHJvZHVjdG8= 47807\nY291bnRyaWVz 47808\nIE93ZW4= 47809\nIGNvbnRhbWluYXRpb24= 47810\nIHZpYmU= 47811\nIEVsbGk= 47812\nLnNjcmlwdA== 47813\nIE9saXZl 47814\nRE1B 47815\ndmllcg== 47816\nOnNlbWljb2xvbg== 47817\nLW1vZHVsZQ== 47818\nZ3Jlc3NpdmU= 47819\nYWd1 47820\nX3BsYXllcnM= 47821\nIHJlc3VsdGFkb3M= 47822\nc3RhcnRlZA== 47823\nc2Nyb2xsVG9w 47824\nPT09PT0= 47825\nIHdlaWdoaW5n 47826\nIFtbWw== 47827\nemFobA== 47828\nKE5T 47829\nIEFzc2VydGlvbg== 47830\nbGVhZ3Vl 47831\nLnNldFRleHRDb2xvcg== 47832\nCU1lc3NhZ2U= 47833\nIG1vbXM= 47834\nX0FG 47835\nLndo 47836\nQUxT 47837\nIGF1dHJl 47838\nXQoKCgo= 47839\nLm9wYWNpdHk= 47840\nIEJ1ZGRoaXN0 47841\nIGRlYWY= 47842\nIE9yZ2FuaXNhdGlvbg== 47843\nKEdsb2JhbA== 47844\nZW5zY2g= 47845\nIGhlYWRhY2hl 47846\nIEFsaWVu 47847\nX2lub2Rl 47848\nIFN0YXJr 47849\nIOaJ 47850\nLWxuZA== 47851\nb3JlZg== 47852\nX2ZlYXQ= 47853\nIHBlZGVzdHJpYW4= 47854\nIG5vbWluYWw= 47855\nIGJhbGxvb24= 47856\nIHNwcml0ZXM= 47857\nUHJvdG90eXBlT2Y= 47858\nIEFwb3N0 47859\nIEZFQVRVUkU= 47860\nT0g= 47861\nIHJlY2Vzcw== 47862\nIERvbm5h 47863\nY29uc3VtZXI= 47864\nJEdMT0JBTFM= 47865\nIEdJRg== 47866\nLWZyYW1l 47867\nSW5pY2lv 47868\nIHBhc3NhZ2Vz 47869\nRGF0ZVN0cmluZw== 47870\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47871\nLmJ5dGU= 47872\nQnVn 47873\naW5pdGlhbGl6ZXI= 47874\ncGt0 47875\nb2RpdW0= 47876\nIERFUg== 47877\nLm9wcw== 47878\nbGVyaQ== 47879\nIGdpZnRlZA== 47880\nIGRldGFjaA== 47881\ndGVycmFpbg== 47882\nZWx0ZXJz 47883\n44GP 47884\nLmxvYWRlcg== 47885\nIE5HTw== 47886\nc3RybmNtcA== 47887\nS2g= 47888\nKGZvbnRTaXpl 47889\ncm9ja2V0 47890\nIHByZWNlZGVudA== 47891\nIEF1cm9yYQ== 47892\nIEV4cGVyaW1lbnQ= 47893\naXNwaGVyZQ== 47894\nRW5jb2RlZA== 47895\nIOKAkwoK 47896\nIHB5cmFtaWQ= 47897\nIEFubml2ZXJzYXJ5 47898\nb2ZpbA== 47899\n658= 47900\nKHBsdWdpbg== 47901\nQ29lZmY= 47902\nIGNvb3BlcmF0ZQ== 47903\nIHByZWRvbWluYW50bHk= 47904\nSVNN 47905\nUGhyYXNl 47906\nX0RFRklORQ== 47907\nRmxpcA== 47908\nQU1JTFk= 47909\nIE1hcmtldHM= 47910\nIFN0cmVhbVJlYWRlcg== 47911\nIENvbWJpbmU= 47912\nIG1hbnVzY3JpcHQ= 47913\nenph 47914\nLHRw 47915\nV2hhdGV2ZXI= 47916\nSVRJQ0FM 47917\naWdoYm91cg== 47918\nRGF0YVByb3ZpZGVy 47919\nLlRleHR1cmU= 47920\ncHJpdmFjeQ== 47921\nLlNESw== 47922\nIHJlY2hhcmdl 47923\nIGNwcA== 47924\nIENGRw== 47925\nKGhvbGRlcg== 47926\nKHB5 47927\nbW90 47928\nIHNhdm9pcg== 47929\nIFJvc2E= 47930\nIFBDcw== 47931\nIO2Z 47932\nLmhlcm9rdQ== 47933\nIGZyZW4= 47934\nIFJpbGV5 47935\nYWdhdGU= 47936\nIHNvbmQ= 47937\nLnhsc3g= 47938\nIGhhY2tlZA== 47939\nc3RhZA== 47940\nR2k= 47941\nIHNhbml0eQ== 47942\nIFNxbERhdGFBZGFwdGVy 47943\nLi4uIiw= 47944\nIFB1c3N5 47945\nICoqKioqKioqKioqKioqKio= 47946\nIGhhc3NsZQ== 47947\nX1BBUkVOVA== 47948\nIFVBRQ== 47949\nIGJlZ2lubmVycw== 47950\nKENsaWVudA== 47951\nIHN0YXRpc3RpY2FsbHk= 47952\nLmhvdXI= 47953\nZWRlbHRh 47954\nIHRyYWN0aW9u 47955\ndWVsdmU= 47956\nYXJhdA== 47957\nIHNhdW5h 47958\nSU5WQUxJRA== 47959\nIGluZGljdG1lbnQ= 47960\nQUxMRQ== 47961\nIGRpc3NlbnQ= 47962\nIFR5cG9ncmFwaHk= 47963\nIGludGVudGlvbmFs 47964\nc2l0 47965\nIEFuaW1hbHM= 47966\nIGNvdW50cnlzaWRl 47967\nIHVhcnQ= 47968\nfVwi 47969\nIHNlYW1sZXNz 47970\nvuekug== 47971\nIGF1dG9z 47972\nICInIjsK 47973\nRmx1c2g= 47974\nQU5OT1Q= 47975\nIGFsZ2VicmE= 47976\nYXNzb2M= 47977\nIFdhdGVycw== 47978\nIHByZXBhcmF0aW9ucw== 47979\ncm9ueW0= 47980\nWyxd 47981\nU2Fucw== 47982\nIGFybWllcw== 47983\naXBlZw== 47984\nIGNyZWFteQ== 47985\nLmFydA== 47986\nZXRyZQ== 47987\nIEFuaW1hdGVk 47988\nIHVucGxlYXNhbnQ= 47989\nZW1lYW4= 47990\nZ3JlYXQ= 47991\nacSF 47992\nIEVhcmxpZXI= 47993\nIGNoaWM= 47994\nIHByZXNlcnZpbmc= 47995\nKGV4ZWM= 47996\nIEludmVzdGlnYXRpb24= 47997\nCUdQSU8= 47998\nIHJpZ29yb3Vz 47999\naWpv 48000\nPW51bQ== 48001\nIHRvb2xTdHJpcA== 48002\nKXNldA== 48003\nKyIm 48004\nIEFjY2VsZXI= 48005\nIGRldmVsb3BtZW50YWw= 48006\naXNwb3NhYmxl 48007\nIGZsYXdlZA== 48008\ncmVuZQ== 48009\nVXBkYXRpbmc= 48010\nIHdhdGNoZG9n 48011\nIGRlbm9taW5hdG9y 48012\nIHN1YnVyYnM= 48013\nIC4uLik= 48014\nIGNvbnZpY3Rpb25z 48015\nY2xvc3VyZQ== 48016\nLklQ 48017\nIHRyYW5zbGF0ZXM= 48018\nLnN3dA== 48019\nLlRyYWNl 48020\nIG1ldHRyZQ== 48021\nLmlzRW5hYmxlZA== 48022\nIEVmZmVjdGl2ZQ== 48023\nLnRvSW50 48024\nIGVuY2hhbnQ= 48025\nIHN0dW5uZWQ= 48026\nIHBvaQ== 48027\nL2NvZGU= 48028\nYWRt 48029\nLmRhdGFiaW5kaW5n 48030\nIExvcmVt 48031\nX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== 48032\nIGxlZGdlcg== 48033\nIGNhcmE= 48034\nIEdpcg== 48035\nIHdhaXRz 48036\nVW5v 48037\nIGN3ZA== 48038\n6L6R 48039\nIFRSZXN1bHQ= 48040\nIHJlam8= 48041\nIGVtaXR0ZWQ= 48042\nIFdlc3RtaW5zdGVy 48043\n5LiA5Liq 48044\nbmVr 48045\nX1Rpcw== 48046\nIGVuYWN0 48047\nCXdpdGg= 48048\nb3JnaWE= 48049\nIGp1ZQ== 48050\nUGVyZm9ybQ== 48051\nU1BBVEg= 48052\nLnRvcGlj 48053\nIERhdGVu 48054\n4bqn 48055\nIHNpdGlv 48056\nX01N 48057\nIlNv 48058\nYmlhbA== 48059\nIHNjb3BlZA== 48060\nUmVxdWlyZXM= 48061\nIFRPVEFM 48062\nIENoYW5jZWxsb3I= 48063\nKGNvbnRlbnRz 48064\nIHN0ZWFsdGg= 48065\nZGV2aWNlcw== 48066\nLXBhc3M= 48067\naWxpaA== 48068\nIE1hbGNvbG0= 48069\nIERlcG90 48070\nIGNvbmZpZ3Vy 48071\nYXVzc2lhbg== 48072\nX2NvbnN0cmFpbnQ= 48073\n0LLQtdGC 48074\nR1JB 48075\nIFJhdGVz 48076\nLmRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 48077\nIE5vYmVs 48078\naXRpY3M= 48079\nIGlnbm9yYW50 48080\nIFJlcG9ydGVy 48081\nIEVib2xh 48082\nIFNob2Nr 48083\nX3JlbGF0aW9u 48084\nIE5pbmph 48085\nKWM= 48086\nIHRpY2tlcg== 48087\nLmlzQ2hlY2tlZA== 48088\nIFN1cHBsaWVycw== 48089\nIFJhcGlk 48090\nTGV2ZWxz 48091\n4oKs4oSi 48092\nCXF1ZXVl 48093\nIGNob3A= 48094\nIFVuaXg= 48095\ncmVqZWN0 48096\nLWNhbGVuZGFy 48097\nKHNvcnQ= 48098\nw6huZQ== 48099\nZXJjaWNpbw== 48100\nIGhlY3Q= 48101\nQ0FMTFRZUEU= 48102\ncm91cG9u 48103\nIHJlbnRhbHM= 48104\nYXV0aG9ycw== 48105\ne25hbWU= 48106\nIEZJRk8= 48107\nIGxhc3Nlbg== 48108\nIE5vdXM= 48109\nIHNuYXBwZWQ= 48110\nIGZlcnRpbGl0eQ== 48111\nImxvZw== 48112\nY2xpY2tlZA== 48113\nIHBsYW50aW5n 48114\nIGdi 48115\nL291dHB1dA== 48116\nUEVBVA== 48117\nIGNhdGVnb3JpYQ== 48118\nIGJhY2g= 48119\nUHJvZmVzc29y 48120\naW50aA== 48121\nIl0NCg== 48122\nUmVjb3JkZXI= 48123\nc2VyZGU= 48124\nIFRyYW5zbWlzc2lvbg== 48125\ndHJhZA== 48126\nIHR1cmJv 48127\nX1ZFUlRFWA== 48128\nXEV2ZW50 48129\naWx2ZXI= 48130\nIGJvZGlseQ== 48131\nIFNvdXJjZXM= 48132\nIGtpbGxpbmdz 48133\nLnhyVGFibGVDZWxs 48134\nIGZvbGRlZA== 48135\nL2xlZ2Fs 48136\ndW5lcg== 48137\nIFJpZmxl 48138\nIE1JREk= 48139\nX1NlbGVjdGVkSW5kZXhDaGFuZ2Vk 48140\nLlNpemVUeXBl 48141\nIFdlYlNvY2tldA== 48142\nIHNlbGVjY2lvbg== 48143\nU2FuZA== 48144\nb3Ryb3M= 48145\nIGVudmlzaW9u 48146\nL2V0Yw== 48147\nIE1lbGlzc2E= 48148\nU3BvdA== 48149\n0L3QvtC1 48150\nX0FSTQ== 48151\nQXR0ZW1wdA== 48152\nIEJJ 48153\n44GU 48154\nIERV 48155\nIGJhY2tsYXNo 48156\nc3RyaWRl 48157\nL2NsYXNzZXM= 48158\nIHRleHRDb2xvcg== 48159\nX3N0YWZm 48160\nb2JsaW4= 48161\nYWdlbnRh 48162\nLmNvbGxlY3Rpb25z 48163\naWxsYWdl 48164\nJw0KDQo= 48165\nZmxhdHRlbg== 48166\nX3NhbGVz 48167\nX01BU1RFUg== 48168\nVFc= 48169\nX2Rh 48170\nUGl0Y2g= 48171\ncGhpZXM= 48172\nIHpvbWJpZXM= 48173\nIFZFUlk= 48174\nIFBoYXJtYWN5 48175\nIHByb2dyZXNzQmFy 48176\nIGhhc2h0YWc= 48177\nU2lkZWJhcg== 48178\nQHN0b3A= 48179\nKHBj 48180\n0L7Qu9C2 48181\nTUFLRQ== 48182\nIENvcm9u 48183\nIGt2aW5uZXI= 48184\nIE1haWQ= 48185\nYm9i 48186\nLnRpdGxlTGFiZWw= 48187\nIHN1Y2Nlc3Nlcw== 48188\nIERlbW9jcmFjeQ== 48189\nIFN1cmdlcnk= 48190\nIGNvdWdhcg== 48191\nIGN1cnNv 48192\nIGxvcm8= 48193\naXN0ZW5jeQ== 48194\nU2VuaW9y 48195\nw6Zr 48196\nIEFBQQ== 48197\nIEJPT0s= 48198\n0LrQvg== 48199\nV1NUUg== 48200\nICovLAo= 48201\nb3lhbA== 48202\nLnZlY3Rvcg== 48203\nIFNQRUM= 48204\nU1NG 48205\nIGNvbXB1bHM= 48206\nIEFwcGVhbHM= 48207\nIFdpbnN0b24= 48208\nIE1vY2tpdG8= 48209\nY29udHJpYg== 48210\nLmF2YWlsYWJsZQ== 48211\nZW50aXR5TWFuYWdlcg== 48212\nYXJpYXM= 48213\nX3NhbGU= 48214\nX3Jz 48215\nIGRlY29kaW5n 48216\nIGxvY2F0b3I= 48217\nb2xpdGg= 48218\nIGtvbA== 48219\nIGFzY2lp 48220\nIFJ1dA== 48221\nL2ludGVyZmFjZQ== 48222\nCQkJCQkJICAg 48223\nIE51bWVy 48224\nLmZsaXA= 48225\nLWRlbA== 48226\nIGJvbHN0ZXI= 48227\nb25vbWlj 48228\nIHpt 48229\nTEc= 48230\nRmluZEJ5 48231\nIGFkYXB0aXZl 48232\nbG9v 48233\nIHZ1ZQ== 48234\nKHJldmVyc2U= 48235\nX2NhbnZhcw== 48236\nLnJvbGVz 48237\naWZpY2Fkbw== 48238\ndmVuaWVudA== 48239\nIkFz 48240\nIEVudHI= 48241\nYWxpZ25lZA== 48242\nIGJlcmVpdHM= 48243\nLy8vCgo= 48244\nLmd3dA== 48245\nLmVtcGxveWVl 48246\nX2NsaQ== 48247\nIGFudGljaXBhdGU= 48248\n6ZmQ 48249\nIHBpaw== 48250\nIG11c2hyb29tcw== 48251\nKHR0 48252\nIG9tYQ== 48253\nIFNhbmNoZXo= 48254\nX2dvb2dsZQ== 48255\nLlZhbGlk 48256\nIEZpbGVOYW1l 48257\naXZhdGl2ZQ== 48258\na2Vk 48259\nLXdhcg== 48260\nIG1hdHVyaXR5 48261\n0LjQtA== 48262\nIG1pbmVy 48263\nUmVkdWNlcnM= 48264\nIExhdExuZw== 48265\nX1NURA== 48266\nRGlnaXRz 48267\nQ2FsYw== 48268\nLXVwbG9hZA== 48269\nIGhhbmRpYw== 48270\n4Li14LmI 48271\nZWdyYXRlZA== 48272\nIFNUTQ== 48273\nQ2xpZW50cw== 48274\nIFR1cmJv 48275\nU1lOQw== 48276\nIHBob3RvZ3JhcGhlcnM= 48277\nLk91dA== 48278\nLmNoYXJhY3Rlcg== 48279\nQlVJTEQ= 48280\nLnVubG9jaw== 48281\nIGFyaXNlcw== 48282\nIENvbW1hbmRz 48283\nKCIiKTsNCg== 48284\nX0ZPUkU= 48285\nOycs 48286\nKyIn 48287\nLkltYWdlcw== 48288\nIil7 48289\nIE1leWVy 48290\nIG5lZ2F0aXZlbHk= 48291\nIERMTA== 48292\nIGV4ZQ== 48293\nIGRlZmljaWVuY3k= 48294\nIHdpbGRseQ== 48295\nLXN3aXRjaA== 48296\nY29uc3RydWN0aW9u 48297\nIGV4Y2VwdGlvbmFsbHk= 48298\nIExpeg== 48299\nL2phdmE= 48300\nIHRoZWlycw== 48301\nIENvbnRlbXBvcmFyeQ== 48302\nbGlz 48303\nLmZpbGxSZWN0 48304\nIE5GQw== 48305\nIHJlaGU= 48306\nKG51bWJlcnM= 48307\nIHJhc3Rlcg== 48308\nIGZpZ3VyaW5n 48309\nIHNob3dj 48310\nIEppbGw= 48311\nIGFyY2FkZQ== 48312\nIENvbnN0cnVjdHM= 48313\nbWRs 48314\nKCd8 48315\nIGlkZW50aWZpZXJz 48316\nIHN0ZWxsYXI= 48317\nKENvbm5lY3Rpb24= 48318\nICJ7ew== 48319\neW9y 48320\nKG15c3FsaQ== 48321\nIGRvdmU= 48322\nT2ZCaXJ0aA== 48323\nLmRpc2Nvbm5lY3Q= 48324\nX2hp 48325\nIHp3aXNjaGVu 48326\nIEdydW5k 48327\naXJvcw== 48328\nX0FycmF5 48329\nLm9uY2xpY2s= 48330\nYW5zb20= 48331\nQW5zd2Vycw== 48332\nCXJlbW92ZQ== 48333\nRmE= 48334\nIGh1cnJ5 48335\nLWluZg== 48336\nIGdldENsYXNz 48337\nIFJlZ3VsYXRpb24= 48338\nIEZMQUdT 48339\nbWlzYw== 48340\nS2Vu 48341\nX2hlYWRpbmc= 48342\nR0h6 48343\nLWVudHJ5 48344\nIGJpb2dyYXBoeQ== 48345\nU2ln 48346\nLW1m 48347\nV2F0Y2hlcg== 48348\n4oCcQQ== 48349\nfXB4 48350\nIHNwaWN5 48351\nX3Nx 48352\nTG9zdA== 48353\nKHRyYWNr 48354\n0LDQu9C4 48355\nRGVzY2VuZGluZw== 48356\nPGJpdHM= 48357\ncXVpbmU= 48358\nIEFkdm9j 48359\nX1NO 48360\nIEhhbm5haA== 48361\nUE9Q 48362\nIGVtaXR0ZXI= 48363\nIGN5bg== 48364\nIENBRA== 48365\nPyku 48366\nL3NldA== 48367\nIFNpc3Rlcg== 48368\nIEVuZHBvaW50 48369\nIG1lbm9y 48370\nIGludGVycA== 48371\ncms= 48372\naWRsZQ== 48373\nIG91dGZpdHM= 48374\nLnZlcnRleA== 48375\nIGNsaWM= 48376\nQVJFTg== 48377\nIHBvc3R1cmU= 48378\nIE9wcG9ydHVuaXR5 48379\ndng= 48380\nIEZvcmJlcw== 48381\nLkRpcmVjdGlvbg== 48382\nIHJlc2lkZQ== 48383\nIHJlbWVtYmVyaW5n 48384\nbmVzdHk= 48385\nQXV0b3Jlc2l6aW5n 48386\ncHJvdmlkZXJz 48387\nIEFI 48388\nIGh1cnRpbmc= 48389\nIExpbHk= 48390\nZXZhbHVhdGU= 48391\nbGlqaw== 48392\ncGFwZXJz 48393\nIFNtYXNo 48394\nIExBU1Q= 48395\nIHdlbGxz 48396\nd2FzaGVy 48397\nX1JPTEU= 48398\nIERhbmdlcg== 48399\nKigo 48400\nX3JlcG9zaXRvcnk= 48401\nIFJlc29sdmU= 48402\nIFJvb21z 48403\nX1JH 48404\nIFFU 48405\nb29w 48406\nIEhlYXA= 48407\nIHNsb3dpbmc= 48408\nIGdyYXR1aXRl 48409\nX2NhdGFsb2c= 48410\nIHBvbHlub21pYWw= 48411\nTHk= 48412\ncGNz 48413\nRm94 48414\nIEN5cg== 48415\nIGRpbWlu 48416\nL21vbnRo 48417\nU2FsdA== 48418\nIGhpbmQ= 48419\nLlBFUg== 48420\nRm9ydW0= 48421\nY2Vu 48422\nX3BvbA== 48423\n7Zi4 48424\nIGluc2Vy 48425\nKH4= 48426\nQHRlc3Q= 48427\nIEdvbGRtYW4= 48428\nIHVwbG9hZGluZw== 48429\nRmM= 48430\nIGtvbW1lcg== 48431\nIG1pdHQ= 48432\nX2xvZ2dlZA== 48433\nIGJ1Y2tz 48434\nLWxheWVy 48435\nKX07Cg== 48436\nIE9N 48437\nIHZlZw== 48438\nY29sb3Vy 48439\nINC+0LHRig== 48440\nU3RkU3RyaW5n 48441\nX3F1ZQ== 48442\nIFRpYW4= 48443\nIHNwZWNpYWxpemU= 48444\n0LjQvw== 48445\nINC60Ls= 48446\ndHJpYWw= 48447\nLWVkZ2U= 48448\nIG1hcnM= 48449\nT0dMRQ== 48450\nIGVtcGF0aHk= 48451\nIEJvbQ== 48452\nIGNvbGxpc2lvbnM= 48453\nIGNhcnRl 48454\nIFRlaWw= 48455\nIE1QTA== 48456\nIHBvcm7DtA== 48457\nIGFpcmxpbmVz 48458\nQXdz 48459\nTnM= 48460\nIFNwYXdu 48461\nKHVzZQ== 48462\n6buY6K6k 48463\nIHlhY2M= 48464\nc3Rvcg== 48465\nIGNvbmZlc3M= 48466\nIHBlcXVl 48467\ncmFnZQ== 48468\nPyIK 48469\nL2RhdGF0YWJsZXM= 48470\nIFNob3dlcg== 48471\nX18v 48472\nIGNyeXN0YWxz 48473\nIGJ1c2Nhcg== 48474\nIEhhdXM= 48475\naXphw6fDo28= 48476\nX2VudGl0aWVz 48477\nlYw= 48478\nmow= 48479\neGNj 48480\ndmlydA== 48481\nLWNoZXZyb24= 48482\nKFJlc3VsdA== 48483\nY2FrZQ== 48484\nQ09NRQ== 48485\nIHByb2hpYml0 48486\nIENoZXNz 48487\nIGJlYXVjb3Vw 48488\nINGH0YLQvg== 48489\nUlVO 48490\nIElL 48491\nw7PFgg== 48492\nX1VwZGF0ZQ== 48493\nIHNsZWVr 48494\nIFNwZWNpZnk= 48495\nX2NyZWRlbnRpYWxz 48496\nxZ90 48497\nIFVzZXJOYW1l 48498\nCVZhbHVl 48499\nIGFycmF5TGlzdA== 48500\nIGV4Y2hhbmdlZA== 48501\naXBzaXM= 48502\nLnJlbGF0ZWQ= 48503\nIFNlaXRl 48504\nX0JBUg== 48505\nIExlbQ== 48506\nIFdBVENI 48507\nIENsaWVudHM= 48508\nIC4q 48509\nIEVhcmw= 48510\nLXJlcG9ydA== 48511\nIGZvcmVpZ25lcnM= 48512\nIHN0cmVuZ3RoZW5pbmc= 48513\nCURlc2NyaXB0aW9u 48514\nKGdv 48515\nLnRvb2xiYXI= 48516\nIGNhbGN1bGF0ZXM= 48517\nCXNvdXJjZQ== 48518\nIGN6YXM= 48519\nIHJlY2w= 48520\nYWJv 48521\nIGxvY2FsaG9zdA== 48522\nIF57Cg== 48523\nLlBvcA== 48524\nIERlc2lnbmVk 48525\nXEFic3RyYWN0 48526\nSG9sZA== 48527\nIEd1aWRlbGluZXM= 48528\naXBsaW5l 48529\nIGNhY2hpbmc= 48530\nLlJlYWRlcg== 48531\nX2V4dGVybmFs 48532\nLnN0cnB0aW1l 48533\nIFdlZWtlbmQ= 48534\nLU1hcg== 48535\nIEJlaQ== 48536\nIHsqfQ== 48537\nIFJ1ZA== 48538\nIGV4cGxvcg== 48539\nIEJvdWxldmFyZA== 48540\nQ2FzaA== 48541\nIHByZXBhcmVz 48542\nIHNlcmlhbGl6YXRpb24= 48543\nZXdhdGVy 48544\nIGFkYw== 48545\nOgoKCgoKCg== 48546\nUmVmZXI= 48547\nIHNjYW5uZWQ= 48548\nfX0KCg== 48549\nIEZ1bA== 48550\nIHRvdXJpbmc= 48551\n44OD44Kv 48552\nPigo 48553\nc3VydmV5 48554\nIO2Y 48555\nLi4uJykK 48556\nIERpdmlkZXI= 48557\nb3Ns 48558\nX0NBTkNFTA== 48559\nX3ByZXBhcmU= 48560\nc3Rpbg== 48561\nIEhlYXRo 48562\nLlByaW1hcnlLZXk= 48563\nIOKGkA== 48564\nIExvY2FsRGF0ZVRpbWU= 48565\nIGNvb3BlcmF0aXZl 48566\nTGVhcm5pbmc= 48567\nLmVucXVldWU= 48568\nIGdvb2c= 48569\nIFJlZ3Jlc3Npb24= 48570\naW1hdGVz 48571\nIHZveWV1cg== 48572\nIERyaW5r 48573\ncGx1Zw== 48574\nIGxlbmRlcg== 48575\nbWFuYQ== 48576\nIHBlcnNvbm5lcw== 48577\neXBzZQ== 48578\nIHVubGluaw== 48579\nIFJhdmVucw== 48580\nIGh1cmQ= 48581\nIHBlcmlvZGljYWxseQ== 48582\nQVJHUw== 48583\nIEdI 48584\nY2hhcmFjdGVycw== 48585\nLi4uIgoK 48586\nLWVzdGFibGlzaA== 48587\nIGRu 48588\nKGNvbmRpdGlvbg== 48589\nIEdyYXZpdHk= 48590\nIGVzdGFz 48591\nX2ZvY3Vz 48592\nQ3JlYXR1cmU= 48593\nKHNpdGU= 48594\nIGNhcnI= 48595\nIFJM 48596\nIFJJ 48597\nIE1vdG8= 48598\nQVNG 48599\nIEx1Y2tpbHk= 48600\nCVJvdXRl 48601\nIGVudHJvcHk= 48602\nKCIsIg== 48603\nQ29sbGVjdA== 48604\nKGNvbnRhY3Q= 48605\nIEZsb3JlbmNl 48606\nIHByZW1pdW1z 48607\nIGxpZmVjeWNsZQ== 48608\nIGJhbnM= 48609\neGVm 48610\nV2ViS2l0 48611\nIEZsb2F0aW5n 48612\nIGNvc2E= 48613\nU3BlY2lmaWM= 48614\nIExvYW5z 48615\nYnJlYWQ= 48616\nIGRlc2NyaXB0b3Jz 48617\nIHs6Lg== 48618\nVEhSRUFE 48619\nIFRyZW50 48620\nIHNjb3A= 48621\nUUE= 48622\nIEFudGFy 48623\ncGVs 48624\nX2RpZmZlcmVuY2U= 48625\nX2NoYW5nZXM= 48626\nKC4uLik= 48627\nIFJvdGF0aW9u 48628\nIExHUEw= 48629\nIEpVU1Q= 48630\nKFRhc2s= 48631\nX3N1YnNldA== 48632\nIFRSQU5T 48633\n5Yqb 48634\nIFNjb3V0 48635\nLXBvcHVw 48636\nIHNtb2tlZA== 48637\nX0NsYXNz 48638\nIHR1cm5vdmVy 48639\nYnJha2s= 48640\nIFJvY2t5 48641\ndGFz 48642\nLlJlZ3VsYXJFeHByZXNzaW9ucw== 48643\nIEVsbGlvdHQ= 48644\nIFNwaW5uZXI= 48645\nRFVDVElPTg== 48646\nIGxpYnJl 48647\nIG1vbHRv 48648\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 48649\nIEZUUA== 48650\nbXBlZw== 48651\nKGZlYXR1cmVz 48652\nIGJhbGQ= 48653\nIFZpZA== 48654\nIHNob3V0aW5n 48655\nTGludA== 48656\nIHNvY2tldHM= 48657\nIHByb3c= 48658\nIG5vdXZlbGxl 48659\naXNjYXJk 48660\nIFNwb25zb3I= 48661\nIGNvbnN1bHRh 48662\nKSkpOw== 48663\nSW5kaWFu 48664\nIFJhc3BiZXJyeQ== 48665\nIHRlYW1tYXRl 48666\nIEpXVA== 48667\nIEdoYW5h 48668\nIGNha2Vz 48669\ncHJpbWVy 48670\nZm9ybWE= 48671\nZXJnYXJ0ZW4= 48672\nX01hbmFnZXI= 48673\nIHByZXNlYXNvbg== 48674\nR0FNRQ== 48675\nfCI= 48676\nIEJyb2Nr 48677\nIG9jY3VweQ== 48678\nIGRlY29yYXRpb25z 48679\nw6FuZA== 48680\nIGNvdA== 48681\nIHBhcmFu 48682\nRGlzaw== 48683\ncmVtYWlu 48684\nPj8= 48685\nU3Ryb25n 48686\nIGZyYW5jZQ== 48687\nIEVyYQ== 48688\nLWNy 48689\nLkJ1ZmZlcmVkUmVhZGVy 48690\nIFBhcmFkaXNl 48691\nIFZBVA== 48692\nIEFuZGVycw== 48693\nIGxpbWI= 48694\nYW1wb28= 48695\nIGltcGVyYXRpdmU= 48696\nVVRJTElUWQ== 48697\nIFJlY29nbml0aW9u 48698\nIHJhZ2F6emU= 48699\nIHBvcHM= 48700\neXByZXNz 48701\nIGVtYmFyZ28= 48702\nLy97Cg== 48703\nIHN5bGw= 48704\nUFRS 48705\n5a2Y5Zyo 48706\nIGRpZG50 48707\nTWFpbGVy 48708\nIGFjYWRlbWljcw== 48709\nIEZyYXVlbg== 48710\nbmVpZGVy 48711\nLXJlbA== 48712\nIHJhaW5ib3c= 48713\nKElu 48714\nIHNsaWNlZA== 48715\nPT09PT09PT09PT09PQo= 48716\nKHNlbmQ= 48717\nTlNNdXRhYmxlRGljdGlvbmFyeQ== 48718\ndm9z 48719\nKHBhY2thZ2U= 48720\nIG9yZGluYW5jZQ== 48721\ndmlld2Vy 48722\nIFNhbnRvcw== 48723\nLXNlbGxpbmc= 48724\nIGdvdg== 48725\nZXR0bGU= 48726\nIGZvdW5kZXJz 48727\nIHdha2luZw== 48728\nc2xhc2hlcw== 48729\nLXBvdW5k 48730\ncmVjaHQ= 48731\n2KfYqg== 48732\nLm9uQ2xpY2s= 48733\nIG5vcmQ= 48734\nc3TDpG5k 48735\nX3doZW4= 48736\nVVRFUlM= 48737\naWNj 48738\nIGNhcHN1bGU= 48739\nIFdpZA== 48740\nTWFyYw== 48741\n4Li4 48742\ncm9yZWQ= 48743\nVUdF 48744\nTE9VRA== 48745\nIEF1ZGl0 48746\naXBpZW50cw== 48747\nb3BpYW4= 48748\nIFN1ZQ== 48749\nIHd1cmRlbg== 48750\nLkhlbHBlcnM= 48751\nIGZhY3Rpb25z 48752\nW25w 48753\nLXRoYW4= 48754\nIHJlY28= 48755\nIGthcw== 48756\nIGNtZHM= 48757\nL25ldHdvcms= 48758\neGJm 48759\nZ2V0Q29sb3I= 48760\nIGJpYXNlZA== 48761\nIExhaw== 48762\nRGF0YXM= 48763\ndmVudHM= 48764\nIOuy 48765\nX1BT 48766\nLlZhbGlkYXRl 48767\nSW52b2tlcg== 48768\nIG5ldWVu 48769\nIGp1dmVuaWxl 48770\nVklTSU9O 48771\nIGRldm90ZQ== 48772\nIGxpbmhh 48773\nIGRpc2NvdW50ZWQ= 48774\nXENvbmZpZw== 48775\nIHdvcnRod2hpbGU= 48776\nIHNraW5ueQ== 48777\nIENvdXJzZXM= 48778\nbGV5cw== 48779\nIE1vcnRnYWdl 48780\nS2V2aW4= 48781\nIGFubm91bmNlcw== 48782\nXSkq 48783\ncmVzZXJ2YXRpb24= 48784\nIOaVsA== 48785\nIHByZWp1ZGljZQ== 48786\nIFN0cmluZ0NvbXBhcmlzb24= 48787\nIGJlYXJk 48788\nLXdpbg== 48789\nIFPDo28= 48790\nCW1z 48791\namFs 48792\nIEVhcm4= 48793\nX3BvcnRz 48794\nIE5vbWJyZQ== 48795\nX0NPUg== 48796\nIEJVSUxE 48797\nLnNvdW5k 48798\nWWVsbG93 48799\nIGxpbmViYWNrZXI= 48800\nIGNoYXJpdGFibGU= 48801\nanVn 48802\nX05PTk5VTEw= 48803\nIERlbnRhbA== 48804\nIj4kew== 48805\nCW1hdGNo 48806\nUnVzc2lhbg== 48807\nIHZlcnNjaA== 48808\nIHBpbm5lZA== 48809\nIGFkb3B0aW5n 48810\nT3B0aW9uc01lbnU= 48811\nUGFn 48812\nIHBhaXJpbmc= 48813\nIHRyZWFk 48814\nZXJjaXNlcw== 48815\nIFNwcmVhZA== 48816\nKWk= 48817\nIEJBRA== 48818\nX3Rm 48819\nVUlJbWFnZVZpZXc= 48820\ncG9wdWxhdGU= 48821\nYmFi 48822\nIM+D 48823\nWysr 48824\nIG9waW9pZA== 48825\nICMjCg== 48826\nZHR5cGU= 48827\nIFN0YXJ0cw== 48828\nKCcvJyk= 48829\nIHBlcnNvbmFscw== 48830\nLW1hcmtldA== 48831\nIHJlZHVuZGFudA== 48832\nIEVzc2VudGlhbA== 48833\nIHNjcmFweQ== 48834\nINC40Lw= 48835\nYWNs 48836\nIGNyZWFy 48837\nIEJlbmQ= 48838\nIHJlbGlldmU= 48839\nLXJvb20= 48840\nd2lmZQ== 48841\nIHbDoA== 48842\nIFFQb2ludA== 48843\nIHF1YXNp 48844\nIG1ldGhvZE5hbWU= 48845\nXHhj 48846\nIFBlcnU= 48847\nL1RoZQ== 48848\nLm9ybQ== 48849\nIHZpeg== 48850\nL3BkZg== 48851\nTG9jYXRlZA== 48852\nIGNvbmZyb250YXRpb24= 48853\nIENoYW1waW9uc2hpcHM= 48854\nIGh5cGVydA== 48855\nIGRq 48856\nIFVzZXJJbmZv 48857\nIOWIm+W7ug== 48858\nXHhi 48859\nKHNpbQ== 48860\nID09Cg== 48861\nIHN0YWdpbmc= 48862\nIGRyYXN0aWNhbGx5 48863\n5a2m 48864\nbG9yZHM= 48865\nLmxlc3M= 48866\n0LLQtdC00LjRgtC1 48867\nIEJ1Y2tldA== 48868\nIE1hbQ== 48869\nLnRlcm0= 48870\nX3Bp 48871\nY3p5 48872\nLnB1Yg== 48873\ncHJlY2lv 48874\nIFZpcnQ= 48875\nIHJvbWFu 48876\naXRhdA== 48877\nTGV4 48878\nX2luZm9z 48879\nxLA= 48880\nLm90aGVy 48881\nVkVMTw== 48882\nIHBvbmRlcg== 48883\nIGhhbm5v 48884\nKFBhZ2U= 48885\nZG9p 48886\nIHBvbGl0ZQ== 48887\nIHByb2dyYW1tZXI= 48888\nRGllcw== 48889\nJGQ= 48890\nIHJlcGxpY2F0aW9u 48891\nYWRkQ29sdW1u 48892\nZnJpY2Fu 48893\nIGxlbmc= 48894\nYmVlcg== 48895\nb2l0 48896\nIHdhc3Rpbmc= 48897\neWxpbQ== 48898\nbWVhc3VyZQ== 48899\nTmVn 48900\nIHBhcnRpZQ== 48901\nLmNvbnNvbGU= 48902\nIEd1aW5lYQ== 48903\nVEVM 48904\nX2ZhY3Q= 48905\nLmNodW5r 48906\nIGxlbnQ= 48907\nIGFsbGVy 48908\nIOCklQ== 48909\nX2lkbGU= 48910\nIGFkbWlzc2lvbnM= 48911\nSlNPTkFycmF5 48912\nIHZpYnJhdGlvbg== 48913\nLmhlbHBlcnM= 48914\n5aSW 48915\nIGhlbg== 48916\nam9obg== 48917\nIOyDnQ== 48918\nIGp1ZGdlbWVudA== 48919\nIGdlZW4= 48920\ndGVycmE= 48921\nXns= 48922\nIEl6 48923\nIGPDog== 48924\naW5zdGFuY2Vz 48925\nIHRocmVhdGVucw== 48926\nIG3DvHNzZW4= 48927\nS2luZE9mQ2xhc3M= 48928\nIHN0b3J5dGVsbGluZw== 48929\nX2RlbW8= 48930\ncmlhcw== 48931\nUHJpdmFjeQ== 48932\naGlmdA== 48933\nIFlp 48934\nZXNvcg== 48935\n7ZWg 48936\nZW5zaXRpdml0eQ== 48937\nLldyaXRlcg== 48938\n4LiC 48939\nRGlzdHJpY3Q= 48940\nLmdldEpTT05PYmplY3Q= 48941\nSW1wcm8= 48942\nKGdldFJlc291cmNlcw== 48943\nIFNQRUxM 48944\ncm9kdWNl 48945\nIHNsb3dlZA== 48946\nIGxpbmV3aWR0aA== 48947\nIGhvbmVzdHk= 48948\nIENvb3Jk 48949\nIEZvcms= 48950\nIERpc3BhdGNoUXVldWU= 48951\nIENsaWZm 48952\nIFdpcmluZw== 48953\nX1RJTUVTVEFNUA== 48954\nb2xsYWg= 48955\nYXZvaWQ= 48956\nKytdOwo= 48957\nc2VtYW50aWM= 48958\nLWNzcw== 48959\nIHZldG8= 48960\nIE1lcnI= 48961\nIGxlZ2lzbGF0b3Jz 48962\nQ0VFREVE 48963\nIHF1ZXN0aW9ubmFpcmU= 48964\nIFBpbGxz 48965\nQ2FsY3VsYXRl 48966\nKGNvcmU= 48967\nJ2U= 48968\nIGRpc2xpa2U= 48969\nIFByZWZlcmVuY2Vz 48970\nX0VYVEVSTkFM 48971\n6LCD 48972\nIGRvZGdl 48973\n5pyN5Yqh 48974\nLm5hbWVz 48975\nLmRyYXdJbWFnZQ== 48976\nX3Byb20= 48977\ndWNrbGFuZA== 48978\nIDwkPg== 48979\nxLF6 48980\nL3NpdGU= 48981\n6aG5 48982\ncm9waGU= 48983\nIGNvbXBlbGxlZA== 48984\nIGxhcHRvcHM= 48985\nIHVuaQ== 48986\nQ0xPU0U= 48987\nIGNhc3VhbHRpZXM= 48988\nIFVuaWZvcm0= 48989\nVGVybWluYWw= 48990\nLiIsIg== 48991\nREFU 48992\nKFRyZWVOb2Rl 48993\nIEdhbmRoaQ== 48994\nKHN0bXQ= 48995\nQVhC 48996\nKk0= 48997\nIHVtYnJlbGxh 48998\nYW5pbWFs 48999\nIGdycGM= 49000\nIHdoZXJlYnk= 49001\nIGZsb2F0cw== 49002\nCWFyZw== 49003\nIGRiZw== 49004\nIGV4Y2VlZGluZw== 49005\nRXZlbnRUeXBl 49006\nLlNhdmVDaGFuZ2VzQXN5bmM= 49007\nIHt7ew== 49008\nIG93ZWQ= 49009\nYWhyZW5oZWl0 49010\nIOyn 49011\nIGVxdWlwbw== 49012\ndXJhaQ== 49013\nIGlkb2w= 49014\nXSIpCg== 49015\nX21ham9y 49016\nIGVudGlyZXR5 49017\naW5nZXJwcmludA== 49018\nw6dvcw== 49019\nL2FjY291bnQ= 49020\nCXJpZ2h0 49021\ndXJzb3M= 49022\nIEVEVA== 49023\nX0lOU0VSVA== 49024\nIHNoaW5pbmc= 49025\nIDw6 49026\nRWRnZUluc2V0cw== 49027\nIGNvbG9uaWVz 49028\nLklN 49029\nCSAJ 49030\nUk9BRA== 49031\nQ0NDQw== 49032\ncGxhY2luZw== 49033\nIGdldEFjdGl2aXR5 49034\nZW1hY3M= 49035\nJyUo 49036\nLmNsaWNrZWQ= 49037\nIFRoZW0= 49038\naXNpYQ== 49039\nQnVzY2Fy 49040\nLnJlbmFtZQ== 49041\nIG9hdGg= 49042\nIGFmdGVyd2FyZA== 49043\nIFVGTw== 49044\nQVBT 49045\nIEphY2tzb252aWxsZQ== 49046\nLnNvbWU= 49047\nQ29uZmlybWVk 49048\nLnNjYW4= 49049\naWdJbnRlZ2Vy 49050\nRGVjb3JhdG9y 49051\nc2hpZWxk 49052\ncmVzc2l2ZQ== 49053\nLmRpZA== 49054\n6K+36L6T5YWl 49055\nIHNodXR0ZXI= 49056\nRGFt 49057\nIHBhcmVudGluZw== 49058\nZXllZA== 49059\nJGl0ZW0= 49060\nLWRldmVsb3A= 49061\nIGV4dHJhY3Rz 49062\nIGRlY2VudHJhbGl6ZWQ= 49063\nIEVsc2E= 49064\nX3NwaW4= 49065\nXSkr 49066\nLWluaXRpYWw= 49067\nIG11bHRpdHVkZQ== 49068\nIHNlbnNvcnk= 49069\nIE1PREVM 49070\nIHNhZmVndWFyZA== 49071\n7Lk= 49072\nIGh1bnRlcnM= 49073\nIFRpbnk= 49074\nSU5P 49075\nZGVjb3JhdGU= 49076\nIE5vU3VjaA== 49077\nSG8= 49078\nKFJlc3BvbnNl 49079\nIHJ1bGVy 49080\nCXNob3J0 49081\nIGNhc3Rlcg== 49082\nIGNsaWVudElk 49083\nIHBkYg== 49084\n64+E 49085\naXRpYw== 49086\nIEdhbWVTdGF0ZQ== 49087\nIG5ld0l0ZW0= 49088\nKQoKCgoKCg== 49089\nb3Vpcw== 49090\nbm9j 49091\nLkJMQUNL 49092\nX1ZFQ1RPUg== 49093\nLS0tLS0tLS0tLTwv 49094\nIGV4YW1pbmVz 49095\nCWJsb2Nr 49096\nIGFkZG9u 49097\nIHN1cnZleWVk 49098\nIExpc3RlbmVy 49099\nIGZyb250aWVy 49100\nIGxhY2tlZA== 49101\nSlVTVA== 49102\nINGN0YI= 49103\nIHRpbnQ= 49104\nIE15c3Rlcnk= 49105\nZGF0ZVRpbWU= 49106\nIFR1dG9yaWFs 49107\nIGZ1bGxOYW1l 49108\nIERyYWdvbnM= 49109\nX0ZJTEVT 49110\nIFByaW50V3JpdGVy 49111\nIGJlZXQ= 49112\nIExhZGllcw== 49113\nX3RpcA== 49114\nIEphaHJl 49115\nb3JhbWE= 49116\nIGluc3VsYXRpb24= 49117\nKEVudmlyb25tZW50 49118\nX2FzdA== 49119\nYmVyZ2Vy 49120\nbGVuYQ== 49121\nb2dlbmVvdXM= 49122\nX01PTlRI 49123\nLXByZXNlbnQ= 49124\nIGZyYW1ld29ya3M= 49125\nUVE= 49126\nUEhQRXhjZWw= 49127\nIGNvdW50ZG93bg== 49128\nIEZX 49129\nKGNsdXN0ZXI= 49130\nOmM= 49131\nIG9raHR0cA== 49132\nb2JzZXJ2ZQ== 49133\nW3BsYXllcg== 49134\nLmhl 49135\nIFBhbmFtYQ== 49136\nQXVzdHJhbGlh 49137\nIG91bmNlcw== 49138\nIGFnZ3Jlc3NpdmVseQ== 49139\nIHdhcm5z 49140\nIGN1c3RvbWl6YXRpb24= 49141\nX1F1ZXJ5 49142\nd2lz 49143\nIGludmFs 49144\nQUZG 49145\nKGNhbWVyYQ== 49146\nV2ly 49147\nIG5lZ290aWF0aW9u 49148\nCU8= 49149\nIHJlc3BlY3RmdWw= 49150\nIGRpYW1vbmRz 49151\nJ2F2 49152\nYXBwcm94 49153\nL2Ry 49154\nIGdyYWJz 49155\nIGFjY29tcGFuaWVz 49156\nY29uc3RyYWludA== 49157\nIHJleg== 49158\nKHJlZ2lvbg== 49159\nIGJhaXQ= 49160\ndGVybWluYXRl 49161\nIEJlbGdpYW4= 49162\nYXNzaXVt 49163\nIF0NCg== 49164\nU3lzdGVtcw== 49165\nb3VzZWRvd24= 49166\nLmJ1cw== 49167\nU2V0VmFsdWU= 49168\nIFByZXA= 49169\nIGNvbnZlbmllbnRseQ== 49170\nLm1pZA== 49171\nY2FzZWNtcA== 49172\nTnVtZXJv 49173\nZGFpbHk= 49174\nIENvZGluZw== 49175\nKGRlc3RpbmF0aW9u 49176\nIyQ= 49177\ndWrEhQ== 49178\nIGVtZXJnZW5jZQ== 49179\nX3BhcmE= 49180\nX0lOQ0xVREU= 49181\nIzo= 49182\nIHJlY29nbml6aW5n 49183\nIGZ1Zw== 49184\nIn19LAo= 49185\nIGJ1aWxkZXJz 49186\nIFRlcnJpdG9yeQ== 49187\nIGluaGVyZW50bHk= 49188\nIGRlcml2aW5n 49189\nLmV0aA== 49190\nIERpbm5lcg== 49191\nLnNldE9iamVjdE5hbWU= 49192\nIGNlbGVicmF0ZXM= 49193\nIHF1ZXVlcw== 49194\nIE1hcmtz 49195\nQUxURVI= 49196\nIERhcnQ= 49197\ncG9rZQ== 49198\nX0NIQU5HRUQ= 49199\nIHBhYXI= 49200\nbGllcw== 49201\nLnZvbGxleQ== 49202\nIE1lYW5pbmc= 49203\nIE9GRlNFVA== 49204\nZW5zaW5n 49205\nIGZyw6Vu 49206\nLmxvY2FsU3RvcmFnZQ== 49207\nIOup 49208\nKHt9KTsK 49209\nZGVjb2Rlcg== 49210\nIHJvdWxldHRl 49211\nIGRpc21hbnQ= 49212\nSXI= 49213\nIGluc3VyZw== 49214\nICcnOgo= 49215\nLuKAnQo= 49216\nIGJydW5ldHRl 49217\nLmFzc2V0cw== 49218\nX05FVFdPUks= 49219\n4LiK 49220\nbnlt 49221\nX1NvdXJjZQ== 49222\nXFRlc3Rz 49223\nRXNjYXBl 49224\nY3J5cHQ= 49225\nLlhNTA== 49226\nIHNvdW5kaW5n 49227\nb3Bjb2Rl 49228\nIGNsYXNzaWZ5 49229\nIGVtYmFycmFzc2Vk 49230\nIExPR0lO 49231\nIHJlc2lkdWU= 49232\nIE5FRUQ= 49233\nLmRlZXBFcXVhbA== 49234\ncGVyYw== 49235\nLWNhbA== 49236\nUmVkaXM= 49237\nVHJh 49238\nKF8p 49239\nYXNrZXRz 49240\nZ3JhZGF0aW9u 49241\nIGVuenltZQ== 49242\nIFN0ZXBoYW5pZQ== 49243\nLkludmFsaWQ= 49244\nJ10/Pjwv 49245\nIGRpc3BsYWNlZA== 49246\nIGVsZW1lbnRvcw== 49247\nKGR1cmF0aW9u 49248\ncm93Q291bnQ= 49249\nIEZTdGFy 49250\nbGV0YQ== 49251\nL3BvcHBlcg== 49252\nIHN0YXRv 49253\nIHBlcmZvcm1lcg== 49254\nIGRpc2NpcGxpbmVz 49255\nIEZ1bGx5 49256\naWN1bGFybHk= 49257\nIGVyc3Rlbg== 49258\nIFBvbHlnb24= 49259\nIGRpc2NpcGxlcw== 49260\nLmlzZGly 49261\nIHRlc3RpZnk= 49262\nX1NS 49263\ncHJpc2luZ2x5 49264\nIEdMaW50 49265\nIHdpcGVk 49266\nIGNhcnZlZA== 49267\nIERpc2g= 49268\nLmhlcm9rdWFwcA== 49269\nc3RpdGlhbA== 49270\nIE1BVENI 49271\nY2xhaXI= 49272\nIERheXRvbg== 49273\nLycpCg== 49274\nSURETEU= 49275\nIGluZnJh 49276\nIGxpdmVseQ== 49277\nIGRlcHM= 49278\nIFsuLi5d 49279\nCQkJCQkJCQkJCQkJCQkJCQk= 49280\nIExvbg== 49281\nRXh0cmFz 49282\nVHJhbnNpZW50 49283\n0LLQtdGA 49284\nL21vZHVsZQ== 49285\nIGVuZHVyYW5jZQ== 49286\nX3RleA== 49287\nICJ+Lw== 49288\nX3lsYWJlbA== 49289\nIG9iZWQ= 49290\nL2dhbWU= 49291\nb3BzeQ== 49292\nIGZpcnN0bmFtZQ== 49293\nLmZvcmNl 49294\nIG1hcnQ= 49295\nXENsaWVudA== 49296\nIGxlZ2l0aW0= 49297\nLmZsYXR0ZW4= 49298\nIics 49299\nb3NleHVhbA== 49300\nIGpvdXJz 49301\nTUg= 49302\nZXhwaXJlcw== 49303\nIHN0eWw= 49304\nLmludGVydmFs 49305\nS25vd24= 49306\nIGZvbGxvd2Vy 49307\nIGRhbGxh 49308\ncGlyeQ== 49309\nX3NzbA== 49310\naXNobGlzdA== 49311\nIFJleQ== 49312\nIHN1cGVybWFya2V0 49313\nT2J2aW91c2x5 49314\nLWVudGVy 49315\nIHByb2JhYmlsaXRpZXM= 49316\nIEhW 49317\nIENpbmVtYQ== 49318\nIGN0eXBlcw== 49319\nIEJDTQ== 49320\nX1RBQw== 49321\nO2E= 49322\nLmJ1dHRvbnM= 49323\nIHJldHJpZXZpbmc= 49324\naWxhcml0eQ== 49325\nIHVuZGVydGFraW5n 49326\nCXN0YWNr 49327\nIGtlbA== 49328\nIFhlbg== 49329\nKHBoaQ== 49330\nIHRvdWdoZXI= 49331\nIFNlbGxlcg== 49332\nY2Fwcw== 49333\nIEVtYmVy 49334\nIENoaW4= 49335\nIGxhdWdocw== 49336\nQ29udmVyc2lvbg== 49337\nLmxpc3RlbmVy 49338\nJkI= 49339\nIHBhcmFkaWdt 49340\nIGp1bmN0aW9u 49341\nJC8sCg== 49342\nW28= 49343\nIENvbnNlcnZhdGl2ZXM= 49344\nz4A= 49345\nbGF0ZXM= 49346\nX0V4Y2VwdGlvbg== 49347\nIG1laWxsZXVy 49348\nIHN0cmFwcw== 49349\ncXVpc2l0ZXM= 49350\nCXNu 49351\nIG1hc3NhY3Jl 49352\nb3R0ZXM= 49353\nX2dyZWVu 49354\nVGl0bGVz 49355\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 49356\nIFJlZ3VsYXRpb25z 49357\nYXJs 49358\nX3Nob3J0Y29kZQ== 49359\nIERyYXdlcg== 49360\nIHBhcm9sZQ== 49361\nIHdpbGRlcm5lc3M= 49362\naXNzb24= 49363\nIEFGVEVS 49364\nQ3JlZGVudGlhbA== 49365\nQmxvY2tpbmc= 49366\nIEhUQw== 49367\nU2lu 49368\nKGF1dGhvcg== 49369\nIGNvcnRleA== 49370\nJyl7DQo= 49371\n77yJ77yM 49372\nIGR1bXBlZA== 49373\nIFNodXQ= 49374\nIEtleUV2ZW50 49375\nCVBsYXllcg== 49376\nLmdldFBsYXllcg== 49377\nIGlnbm9yZXM= 49378\ndG9nZ2xlQ2xhc3M= 49379\nIEV4Y2x1c2l2ZQ== 49380\nPigpOw== 49381\nLmdldFA= 49382\nYW55ZQ== 49383\nIG5ldXJvbg== 49384\naWZvbGQ= 49385\nIEtub3du 49386\nQml0Y29pbg== 49387\nQW55d2F5 49388\nYXlldHRl 49389\nICdbJw== 49390\nw6BuaA== 49391\nbWdy 49392\nIGNvcnJlbGF0ZWQ= 49393\nIG5hdXNl 49394\nIG1lbnRhbGl0eQ== 49395\naGFzTWFueQ== 49396\nIEZH 49397\nYW1waWU= 49398\nSVRV 49399\nRnM= 49400\nLlNw 49401\nX2JldHdlZW4= 49402\nRGVwZW5kZW5jaWVz 49403\nb3Vn 49404\nUGxhY2Vob2xkZXI= 49405\nPXRleHQ= 49406\nIE1hbmFnaW5n 49407\nb2NhbHlwc2U= 49408\n5YyX 49409\nX21hZw== 49410\nZmxk 49411\n4pE= 49412\nQ0FN 49413\nIEhlbHBlcnM= 49414\nIGRvc3Q= 49415\nL291dA== 49416\nIGFzc2Fzc2luYXRpb24= 49417\nLmdldEltYWdl 49418\nIEtlbm55 49419\nLicpCgo= 49420\nKXsvLw== 49421\nIFJhbmdlcg== 49422\nIGdlaw== 49423\nIHNpbmNlcmU= 49424\nPFZhbHVl 49425\nIERPVA== 49426\nIFZpY3Rvcnk= 49427\nIGxlZ2VuZHM= 49428\nIHByaXNvbnM= 49429\nKGV4cHJlc3Npb24= 49430\nIFJhYmJpdA== 49431\nX3NlbnRlbmNl 49432\nIGJpdGVz 49433\nIG9uRmFpbHVyZQ== 49434\nIOKIiA== 49435\nS2lt 49436\nLmdlbmRlcg== 49437\nIM67 49438\nIFsu 49439\nIl0pOw== 49440\nbGFuZGluZw== 49441\nLWRpZ2l0 49442\nVEVNUA== 49443\nCWVudHJ5 49444\nIHN0cnRvaw== 49445\nIGRlc2NlbmRhbnRz 49446\ndW1ubw== 49447\nIGxlYW5pbmc= 49448\nIHNwZWNpZmljcw== 49449\ncW4= 49450\nIFNwYXJ0 49451\nIHBvcnI= 49452\nRURJQVRFSw== 49453\nIHNlcGVy 49454\nJ2F1dA== 49455\nIFNURVA= 49456\nIEJvcmRlckxheW91dA== 49457\nIHJldHJvcw== 49458\nIFNhbHZhZG9y 49459\nIEVOR0lORQ== 49460\neGRj 49461\nVHdlZXQ= 49462\ndms= 49463\nIOyy 49464\nXTw8 49465\naGV0aWNz 49466\nY29kaW5n 49467\nUmVhY2g= 49468\nLnJlcQ== 49469\nZ3VpZGU= 49470\nLnNjb3Bl 49471\nc2hpcnQ= 49472\ncm9nYXRl 49473\nU0VUVElORw== 49474\nIFByb3RlaW4= 49475\nIGVpbmc= 49476\nLkVNUFRZ 49477\nLmRm 49478\nIGNsZWFyZXI= 49479\nIGNyb3Nzb3Zlcg== 49480\nIFRveXM= 49481\nIGNvYXRlZA== 49482\nLk1vbnRo 49483\nIEF0dGFjaA== 49484\nL3J1bg== 49485\nLnRhYnM= 49486\nIG9nc8Ol 49487\nQnJvd24= 49488\nLkRBVEU= 49489\nIGZvcw== 49490\n5a2X56ym 49491\nV29vZA== 49492\nLXRocmVl 49493\naGVyaXRlZA== 49494\nIHJvcA== 49495\nKGFj 49496\nIGVtYm9kaW1lbnQ= 49497\nIEtlbm5ldGg= 49498\nIGNhbm5vbg== 49499\nIGJpZGRpbmc= 49500\nPElFbnVtZXJhYmxl 49501\nCXNldFRpbWVvdXQ= 49502\nX2RpZ2l0 49503\nIGVsaW1pbmFy 49504\nKG5l 49505\nYnVkZ2V0 49506\nQ1NJ 49507\nIOyVhA== 49508\nIEFTUA== 49509\nR3JvdXBJZA== 49510\nX0NPVU5URVI= 49511\nY29uc3VsdA== 49512\nIGlmcmFtZQ== 49513\nbGVnZW4= 49514\nX0RFQ0xBUkU= 49515\nU2hhcnBlcg== 49516\nIEZyaWVuZGx5 49517\ndWxldA== 49518\nLWNvbW1hbmQ= 49519\nINCg 49520\nY3ljbGVz 49521\nIFdhc3Rl 49522\nIHRhcHBlZA== 49523\nCUJ1ZmZlcg== 49524\n4oCUaW4= 49525\nIAogIAo= 49526\nIElkZWFs 49527\nIENhbmR5 49528\nX1N5bnRheA== 49529\nw6p0 49530\n7J2M 49531\nYWJvdmU= 49532\nIE5hemlz 49533\nIGZzdA== 49534\nc2Vpbg== 49535\nIGt1bm5lbg== 49536\nd2lr 49537\nIFNhdmluZw== 49538\nLmV4dGVuc2lvbnM= 49539\nIERlc2VyaWFsaXpl 49540\nb3VyZw== 49541\nLmF0dHJpYg== 49542\n77yaCgo= 49543\nIFdpbnM= 49544\nLmVxbA== 49545\nUnlhbg== 49546\nX2Fjaw== 49547\nT1VSQ0VT 49548\nIG9ucw== 49549\nZ3Jlc2U= 49550\nYWZpYQ== 49551\nTW9kZXJu 49552\nIGFkaGVyZQ== 49553\nIGJpb3M= 49554\nKGFjYw== 49555\na2Jk 49556\nVGhyb3du 49557\nqeuLiOuLpA== 49558\nCUh0dHA= 49559\nCXhtbA== 49560\nRW5kRGF0ZQ== 49561\nKHBhcnNlZA== 49562\nLmdldGVudg== 49563\ncmVnaXN0cg== 49564\nbmVsbA== 49565\naW9uYXJpbw== 49566\nLmlubmVyV2lkdGg= 49567\ncnRs 49568\nUFY= 49569\nX3BpZWNl 49570\nIERlcG9zaXQ= 49571\neWVycw== 49572\nIE5TTnVtYmVy 49573\nIGdpbnQ= 49574\nZW5zZW1ibGU= 49575\nIG5ld2NvbQ== 49576\nIFZpZXRuYW1lc2U= 49577\nX2hw 49578\nIGFjY3VzaW5n 49579\nIHF1aXM= 49580\nIGludmVzdGlnYXRvcg== 49581\nZXNzZW50aWFs 49582\nIENY 49583\nLmZvck5hbWU= 49584\nZGVmcw== 49585\nIGFuYWx5c2U= 49586\nX2FuaW1hdGlvbg== 49587\nIHRoYQ== 49588\ndGFib29sYQ== 49589\nIFRIQw== 49590\nw61jdWxv 49591\nIGdsb3dpbmc= 49592\nIGhvbm9ycw== 49593\nYnN0cmFjdA== 49594\na3A= 49595\nSVRFUw== 49596\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 49597\nI2dldA== 49598\nL0Rlc2t0b3A= 49599\nCWdsbQ== 49600\nIHppbmM= 49601\nw6F0aWNh 49602\nIDw8Cg== 49603\nVk1M 49604\nIFVubGltaXRlZA== 49605\ndnJl 49606\nLWJlZA== 49607\nX25vbmNl 49608\nIEdJ 49609\ndHJhdmVs 49610\nIGlzS2luZE9mQ2xhc3M= 49611\nIGFub255bWl0eQ== 49612\nRmlyZXN0b3Jl 49613\nIGVtYWlsZWQ= 49614\nX0ZMQVNI 49615\nIGbDpXI= 49616\n4piF4piF 49617\nIDpd 49618\nSHVt 49619\nLnJlc2VydmU= 49620\nw7xt 49621\nIGtvc3Rlbmxvc2U= 49622\nIFNDUA== 49623\ndXRhbg== 49624\nIEdvcmU= 49625\nIGNoYXRz 49626\nLz4NCg== 49627\nLmdldFJlc291cmNlcw== 49628\nIGx1bXA= 49629\nX2NvbnN0cw== 49630\nKGV4dA== 49631\nCWRpcg== 49632\n4p0= 49633\nIHBhZGRpbmdUb3A= 49634\nIG9ic2Vzc2lvbg== 49635\nIGJhbm5pbmc= 49636\nIEFwcE1vZHVsZQ== 49637\nIHBhcnRpc2Fu 49638\nIGNhdGFsb2d1ZQ== 49639\nIG1pbm9ycw== 49640\nIHBpdGNoZXM= 49641\nd2VlcA== 49642\nIHVuZGVydGFrZQ== 49643\nIHRoZW1lZA== 49644\nYXVkaXQ= 49645\nLnNjcm9sbFRvcA== 49646\nIHJlcg== 49647\nIHN5bXB0b20= 49648\nIG9wZW5pbmdz 49649\nLmJsb2Nrcw== 49650\nb3Blbmlk 49651\nIGFzc2g= 49652\nLXNhdmU= 49653\nIFBpZw== 49654\nIHJlZ2Fpbg== 49655\nIGluaWNpYWw= 49656\nL2Zhdmljb24= 49657\nCWV4cA== 49658\nIHNwaWNlcw== 49659\naXNrYQ== 49660\nY2xhaW1z 49661\nbWFr 49662\nZGVmaW5pdGlvbnM= 49663\nIGNvcnJlc3BvbmRlbnQ= 49664\nIENhbm5hYmlz 49665\nX18sCg== 49666\nIEx1Y2t5 49667\nIEdhdXNzaWFu 49668\nIE5lYXJseQ== 49669\nQ0FE 49670\nJ11dCg== 49671\nIGFkZXF1YXRlbHk= 49672\nIFRJVExF 49673\nY29uc3RpdHV0aW9uYWw= 49674\nLW1t 49675\nX292ZXJyaWRl 49676\nIGJsYXM= 49677\nLnJlYWR5U3RhdGU= 49678\nIHJlbWluaXM= 49679\nIHJlaW5mb3JjZWQ= 49680\nIENvbGxhYm9y 49681\nIGRlY29yYXRpbmc= 49682\nIGJhY2hlbG9y 49683\nRVJSVVBU 49684\nIHVwcmlnaHQ= 49685\naXBhdGlvbg== 49686\nIE5vYmxl 49687\nIHZhbHVlRm9yS2V5 49688\nIHNldExvYWRpbmc= 49689\nLklnbm9yZQ== 49690\n5YE= 49691\nR2xvYmFscw== 49692\nIE1lbnQ= 49693\nQVNTRVM= 49694\nIGxpbWJz 49695\nIEhVRA== 49696\naW5jaQ== 49697\nLml2 49698\nIFFNb2RlbEluZGV4 49699\nRnVzZQ== 49700\nIHBlZGFs 49701\nX0ZSRVE= 49702\nKHZlcmJvc2U= 49703\nIGxvbmdpdHVk 49704\nIENoYXJ0ZXI= 49705\n6re4 49706\nIGJ1bmRsZXM= 49707\nLmlnbm9yZQ== 49708\ndW1ibw== 49709\nRU1B 49710\nLi4uLi4uLg== 49711\nc3g= 49712\nLkNhcmQ= 49713\nIGhldXRl 49714\nIHN0ZWVy 49715\nanVtbGFo 49716\nIHtf 49717\nX0NoZWNrZWQ= 49718\nIGZheA== 49719\nIEd1c3Q= 49720\naXRjaGVucw== 49721\nICkpCgo= 49722\nIHJlbWFya2FibHk= 49723\nL1hNTA== 49724\nLXJlbW92ZQ== 49725\nX2J0 49726\nIGluY3Vi 49727\nLnBhY2thZ2U= 49728\nLmN1cnJlbnRUaHJlYWQ= 49729\nIEhpZ2hsYW5kZXI= 49730\nLnNpZGU= 49731\nc3BsYXNo 49732\nIGljaQ== 49733\nPUQ= 49734\nIHB1Y2s= 49735\nIGJhbGxvdHM= 49736\nIGh1Z2VseQ== 49737\nY29lZmY= 49738\nIHBEYXRh 49739\nLkNPTFVNTg== 49740\nIEhlYWxpbmc= 49741\nIG9yZGlu 49742\nISks 49743\nICcnLA0K 49744\nKG1k 49745\nIFNhc2s= 49746\nPHN0cm9uZw== 49747\nIHN1cnZpdm9y 49748\nLnNlcmllcw== 49749\nIGNhZmZlaW5l 49750\nIGAo 49751\nLlRSQUlMSU5H 49752\nX0lucHV0 49753\nKCJe 49754\nemQ= 49755\nJik7Cg== 49756\nIFBpbmc= 49757\nIHZvdWNoZXI= 49758\nLnJhdGluZw== 49759\nLXNoaXJ0cw== 49760\nIFJldHJpZXZlcw== 49761\nLmFsaWJhYmE= 49762\nT3JhY2xl 49763\nX01PVg== 49764\nT2xkRGF0YQ== 49765\nIC8qDQo= 49766\nIGdib29sZWFu 49767\nID0+DQo= 49768\nIHLDoQ== 49769\nIGJsdW50 49770\nIEltYWdlSWNvbg== 49771\naWZpaw== 49772\nUlRD 49773\nIGZpYmVycw== 49774\nIHRvaWxl 49775\nLnNlbnQ= 49776\nIFB5UXQ= 49777\nJGFwcA== 49778\nIG1lZGlv 49779\nIGdyYW50aW5n 49780\nIHRzbGludA== 49781\nIE3Dtg== 49782\nKGZpZ3NpemU= 49783\nIGh1cnJpY2FuZQ== 49784\nIGxpZmVz 49785\nIMOE 49786\ncm9jZXNzaW5n 49787\nX3N0YW5kYXJk 49788\nLW9wdGlvbg== 49789\nJykpKQ== 49790\nIHZhY2FudA== 49791\n5bel 49792\nIEhvbGxvdw== 49793\naGFuZGxlQ2hhbmdl 49794\nIGRpdmlkZXI= 49795\nIEVuZ2luZWVycw== 49796\nIHN2ZW5z 49797\nIGNvbXBsaWFudA== 49798\ndGFuZ2dhbA== 49799\nIENyZWRpdHM= 49800\nIEVtaXJhdGVz 49801\nUnVsZUNvbnRleHQ= 49802\nIHJlYWxpemF0aW9u 49803\nIGRpc3RyYWN0ZWQ= 49804\nXSs9 49805\nIGF1Z21lbnQ= 49806\nIER3 49807\nb3Rw 49808\nb3JyZW50 49809\nRWRpdGFy 49810\nLnN0b2Nr 49811\nU3R1ZHk= 49812\ncGVjdGlvbnM= 49813\nIEdhbWVNYW5hZ2Vy 49814\nPWN1dA== 49815\nIGZsb2Nr 49816\nIFJvbWFucw== 49817\ndGhlbQ== 49818\nLWhvcA== 49819\nIHNjcmVlbnNob3Rz 49820\nIC8qIQo= 49821\nIGNvbnZlcnNpb25z 49822\nIG5vcm1hbGl6YXRpb24= 49823\nKGNvbmZpZ3VyYXRpb24= 49824\nIGFlcm9z 49825\nX3NlY3VyaXR5 49826\nIScK 49827\nQm9udXM= 49828\nIERSSVZFUg== 49829\nCURhdGU= 49830\ndGll 49831\nIFd5b21pbmc= 49832\nU3RhbmQ= 49833\naXRyZQ== 49834\nIHNob3BwZXJz 49835\nIGRpc2FkdmFudGFnZQ== 49836\nIGxpa2luZw== 49837\n56yR 49838\nIHVuZGVyc3RhbmRhYmxl 49839\nU0VF 49840\nIGhveQ== 49841\nIG5pbmV0ZQ== 49842\nIGNvbmZlcg== 49843\nIG5vd3JhcA== 49844\nIFZlcm4= 49845\nLA0KDQo= 49846\naW1lc3RlcA== 49847\nTGF5b3V0TWFuYWdlcg== 49848\n4Lc= 49849\nCXdhaXQ= 49850\nUExFVEVE 49851\nSmFwYW4= 49852\nIGluZHVjZQ== 49853\nIOWv 49854\n0L7Qt9Cy 49855\nX0VORFBPSU5U 49856\nLmhvcml6b250YWw= 49857\nIGFjY2VsZXJhdGVk 49858\ncmltb24= 49859\nSVZFUw== 49860\nVHJhbnNhY3Rpb25z 49861\nTGVhbg== 49862\nIFNPVVI= 49863\nd2hldGhlcg== 49864\neWc= 49865\nIG9pZA== 49866\nIEVudGl0eU1hbmFnZXI= 49867\nT1VOVFJZ 49868\nIGZpbGE= 49869\nT0xVTU5T 49870\nSU5VRQ== 49871\nIEFuY2hvcg== 49872\nVFJBTg== 49873\nd29v 49874\nYmxvY2txdW90ZQ== 49875\nIE51cnNl 49876\nIENhcnA= 49877\nIHJlZGVlbQ== 49878\nLnRyeQ== 49879\nIEpQ 49880\nIHRpbWVzdGFtcHM= 49881\nID8+Ij48 49882\nIFJFTU9WRQ== 49883\nIFN0YXJidWNrcw== 49884\nUmVhbGx5 49885\nIGZsb29kZWQ= 49886\nLkNhbGxiYWNr 49887\nRHJvcERvd24= 49888\naXBybw== 49889\nIHRlbmRlZA== 49890\nbHRl 49891\nIHByb3BvcnRpb25z 49892\nLXRl 49893\nIFJlbmE= 49894\nbGljYXRl 49895\nZm9yY2Vz 49896\nLmV4dHJh 49897\nLmF1dGhlbnRpY2F0ZQ== 49898\n0LLQvtC0 49899\nobA= 49900\nIGZvckNvbnRyb2xFdmVudHM= 49901\nIHNlbmhh 49902\nIGtlaW4= 49903\nIG1pbmlzdA== 49904\nIFByZWZlcmVuY2U= 49905\nIFRlbGVncmFwaA== 49906\n0YPQvw== 49907\nc3RycG9z 49908\nIGlsbG5lc3Nlcw== 49909\nIHBpZ3M= 49910\nIGdldEludGVudA== 49911\nU29s 49912\nIMKh 49913\nKGNwdQ== 49914\nW3Byb3A= 49915\nc2NyZWVucw== 49916\nJyk7Pz4= 49917\nIEFjdHM= 49918\nIHN0cmR1cA== 49919\nIGF2ZXJhZ2Vz 49920\nYW5hbA== 49921\nIENhc3VhbA== 49922\nR3JvdXBCb3g= 49923\nIEhhbmRib29r 49924\nL2NvbW1lbnRz 49925\nIG51bWJlcmVk 49926\nIGJyb2FkY2FzdGluZw== 49927\n55uR 49928\nLm5hdGl2ZUVsZW1lbnQ= 49929\nLm11 49930\nIHVwZGF0ZWRBdA== 49931\nIERvZXNu 49932\nLkFD 49933\nLmNvbGw= 49934\nIHJlY29yZGVy 49935\nX3NoYQ== 49936\nQmc= 49937\nYmls 49938\nIGJvbHRz 49939\nIOes 49940\nIGltcG9zaW5n 49941\nIEluZm9ybWF0aW9uZW4= 49942\nX2ZsYXNoZGF0YQ== 49943\nZWNvbm9taWM= 49944\nUmVtYXJr 49945\ndWNhcw== 49946\nIE9mZmljZXJz 49947\nIFRFUg== 49948\nV2Fsaw== 49949\nIG1lcmNhZG8= 49950\nX2dlbmVyYXRl 49951\nSFk= 49952\nQ2FsbGluZw== 49953\nc25hcA== 49954\nc2NyaXB0SWQ= 49955\nLm9wZXJhdGlvbg== 49956\nIEZsYW1l 49957\nbGluZXNz 49958\nIHJlbnRlZA== 49959\nX3RvZ2dsZQ== 49960\nLWNoYW5naW5n 49961\nIFRZ 49962\nJ3V0aWw= 49963\nRUVQ 49964\nIGdyYXBocWw= 49965\nIFVuaQ== 49966\nIGltcHVsc2U= 49967\nLkJhc2lj 49968\nIGVuZXJnaWVz 49969\nTUFSWQ== 49970\nIE1hcmNlbA== 49971\nIG1vcnRhbA== 49972\nIGZyZXM= 49973\nbWVucw== 49974\nbW90aW9u 49975\nIHNhbXBsZWQ= 49976\n4oCcVGhhdA== 49977\naWRheQ== 49978\ncXVpcG1lbnQ= 49979\nZ2V0SW50 49980\nIEFic29sdXRl 49981\nLCci 49982\ndW5lZA== 49983\nLnNoYXJl 49984\nIH0pKA== 49985\nbW1t 49986\nIFJpc2luZw== 49987\n5Lu7 49988\nIHVuZW1wbG95ZWQ= 49989\neGZh 49990\nLmZvbGxvdw== 49991\nCQkJCSAgICAgIA== 49992\nc2x0 49993\nLlBob25l 49994\nIGtuaXZlcw== 49995\nIGV2ZQ== 49996\nb25DbGljaw== 49997\nXSkpDQo= 49998\nIFdpdG5lc3M= 49999\nCU5T 50000\nIEVPUw== 50001\nIFN0ZWZhbg== 50002\nIFByaWVzdA== 50003\n4oCUd2hpY2g= 50004\nR2V0U3RyaW5n 50005\nLkJ5 50006\nIHVwc3RhaXJz 50007\nIGRldHJpbWVudA== 50008\nYnJva2Vu 50009\nZW1icm8= 50010\nIG5pY290aW5l 50011\naWxpb24= 50012\nIGFzdG9uaXNoaW5n 50013\nX2FmZg== 50014\nIExlc3Nvbg== 50015\nIGFjY2lkZW50YWw= 50016\nb2Rvcg== 50017\nIGRlY2ly 50018\nIG5ld05hbWU= 50019\nKy4= 50020\n55u4 50021\naWdzbGlzdA== 50022\nIEdpdGh1Yg== 50023\nIHN1Y2Nlc3NpdmU= 50024\ncmFjaWFs 50025\nIGVudmlyb24= 50026\n6aqM6K+B 50027\nIHJlZGlyZWN0ZWQ= 50028\nVE9UQUw= 50029\nIGdyYWJiaW5n 50030\nIExhbmNl 50031\nIGZvcmZl 50032\nX0NC 50033\n5b6u 50034\nRWxhcHNlZA== 50035\nX3dheQ== 50036\nKERpYWxvZ0ludGVyZmFjZQ== 50037\nX21lYXN1cmU= 50038\neGJi 50039\nRG9n 50040\nRGVwYXJ0 50041\nLXNyYw== 50042\ncmVzb2x2ZXI= 50043\nd2l0aHN0YW5kaW5n 50044\nX3NoZWxs 50045\nIExhc3ROYW1l 50046\nIEF2aWF0aW9u 50047\nIGJlZ2lubmVy 50048\nKCIlLg== 50049\nKHRvb2w= 50050\nINC90L7Qsg== 50051\nOmluaXQ= 50052\nKEFQSQ== 50053\nIE1vcnJpc29u 50054\ndnRDb2xvcg== 50055\nIHN0YXBsZQ== 50056\nL0lORk8= 50057\nIHN1cGVybmF0dXJhbA== 50058\nIHN0ZWFr 50059\ndGltZWxpbmU= 50060\nenpsZQ== 50061\nImAKCg== 50062\nU2Vjb25kYXJ5 50063\nIE5lcGFs 50064\nLlN0cmluZ1V0aWxz 50065\nIGFkYW0= 50066\nICguLi4= 50067\nIHN1YnN0aXR1dGlvbg== 50068\nIGJvYXJkaW5n 50069\nIEtleXdvcmQ= 50070\nIEFzc2F1bHQ= 50071\nZGJjVGVtcGxhdGU= 50072\nIG9yZGVySWQ= 50073\nKGVuZ2luZQ== 50074\nLmFzc2VydFRoYXQ= 50075\nIFZlbnVz 50076\nIGhvbWljaWRl 50077\nIEF2YWw= 50078\nIGd1dHRlcg== 50079\nIFN1cHBvcnRlZA== 50080\nL3BhcnQ= 50081\nIGFjY2xhaW1lZA== 50082\nSGlzdG9y 50083\nIG1lc2Vz 50084\nw7xiZXI= 50085\nIFJlbmV3 50086\nIGdyYXM= 50087\nIEVr 50088\nIGluZmlsZQ== 50089\naW5keQ== 50090\nLm11c2lj 50091\nLlNjcm9sbA== 50092\nIEFnZXM= 50093\nIE5hcnV0bw== 50094\nIEdhdGhlcg== 50095\nIGNvbmZpcm1pbmc= 50096\nPSgi 50097\nIHBpdGNoZWQ= 50098\nb2xleQ== 50099\nRnJhbmNl 50100\nKyci 50101\nJHRvdGFs 50102\nIG9uZGU= 50103\nIGRpdGNo 50104\nX3NpZ21h 50105\nIGNvbnRpbnVpdHk= 50106\ncmV3YXJk 50107\nLWxvYWQ= 50108\nIHByb2Nlc28= 50109\nTG9ja2Vk 50110\nc3Rhdw== 50111\nIHNwaW5hbA== 50112\nbGF6eQ== 50113\nIT09 50114\namVzdA== 50115\nIGR1bg== 50116\nIFJvZGdlcnM= 50117\nCWdyaWQ= 50118\nIGxvZ29z 50119\nIEJlbmdhbA== 50120\nLnN1cGVy 50121\nUHJvdmlkZXM= 50122\nIG51dHJpZW50 50123\nLlRpbWVzdGFtcA== 50124\nSVpBVElPTg== 50125\n5YaM 50126\nIGZhdHM= 50127\nIFh4eA== 50128\nY3RpY2E= 50129\nVGFyZ2V0cw== 50130\nIGNvbnRvdXJz 50131\nIHJlb3JkZXJlZA== 50132\nOkFycmF5 50133\nIHRvbGVyYXRl 50134\nVmly 50135\nIHRlcnJpYmx5 50136\nIGJyaWNrcw== 50137\nKCZf 50138\naGI= 50139\nUG9ydGFs 50140\nIEJyZWFk 50141\nLndoaWNo 50142\nwq10 50143\nYXNJbnN0YW5jZU9m 50144\nIGpvYmplY3Q= 50145\nCWxlbmd0aA== 50146\nX01U 50147\nOyI+DQo= 50148\nX0VYSVNU 50149\nIG1hdGVybmFs 50150\nUkVM 50151\nIOqyveyasA== 50152\naGVl 50153\nIGxheW91dHM= 50154\nIExhcA== 50155\nYWlzeQ== 50156\nIHN0dW1ibGVk 50157\nIFVJRw== 50158\nIFNjbw== 50159\nIGltcGFpcmVk 50160\nUkVTU0VE 50161\nIGFidXNlcw== 50162\nVkY= 50163\nQVJC 50164\nLk5BTUU= 50165\ncmNo 50166\ncHJpbWly 50167\nX2NvbXBsZXRlZA== 50168\nIHBlbm55 50169\nQ2hyb21l 50170\nKGJlZ2lu 50171\nZXJuZW4= 50172\nLWNoZWNrYm94 50173\nUGxhaW5PbGREYXRh 50174\nIExQQw== 50175\ncmFkZQ== 50176\nc3Bpcg== 50177\nIGNvbmNlaXZlZA== 50178\nVGlwcw== 50179\nIElvVA== 50180\nIEdhbg== 50181\n6IGU 50182\nIGJpYXNlcw== 50183\nIGNvbnN1bHRhbnRz 50184\ncGxlZA== 50185\nX2h0 50186\nYXNzb2NpYXRlZA== 50187\nXSwKCg== 50188\nIGRlbGlnaHRmdWw= 50189\nINGC0LXQug== 50190\nSGVsdmV0aWNh 50191\nKGxvYWQ= 50192\nLWV4cGFuZA== 50193\nX1dJREdFVA== 50194\ndG9h 50195\nIEFrdA== 50196\nIG9tbg== 50197\nIGNsYXVzZXM= 50198\nSW50ZWw= 50199\nKi99Cg== 50200\nX3JlZ2lzdHJhdGlvbg== 50201\nIG9sZFZhbHVl 50202\nIHJlc3RvcmluZw== 50203\nIHVucmVhbA== 50204\nT1ZFUg== 50205\nCQoJCgkK 50206\nQVRT 50207\nX3Byb2Jl 50208\nIGRpdmlzb3I= 50209\nLnVwZGF0ZUR5bmFtaWM= 50210\n5bmz 50211\nUHJvZHVjZXM= 50212\nc3RhbXA= 50213\nLmpib3Nz 50214\nCXRhc2s= 50215\nISg6 50216\nIHBzeWNoaWM= 50217\nQGNsYXNz 50218\nTWFydGlu 50219\nIFBhc3NlZA== 50220\nY2xhcmF0aW9ucw== 50221\naGVs 50222\n0LDRhw== 50223\nCWNvcHk= 50224\nLWJpbg== 50225\nemFu 50226\naWdyYW0= 50227\n4Ka+4KY= 50228\nKHNpZw== 50229\nIENhdmFs 50230\nXyMj 50231\nICU9 50232\nb3V0bGluZWQ= 50233\nIEFjaWQ= 50234\nIHVucHJlZGljdGFibGU= 50235\nLWRhc2hib2FyZA== 50236\nSGV4U3RyaW5n 50237\nK2M= 50238\nLlB1YmxpYw== 50239\n4bqp 50240\nIGNvbnZleW9y 50241\nIEVC 50242\nIHNlbGVjdHM= 50243\nIGtub2NraW5n 50244\nIENlYw== 50245\nSUJVVEVT 50246\nb3dhxIc= 50247\nZ2F0c2J5 50248\nKnY= 50249\nZW50cm9weQ== 50250\nIGRpc3BhdGNoZWQ= 50251\nIGNhbWVs 50252\nIFNhdHVybg== 50253\nIG92ZXJ3ZWlnaHQ= 50254\nKHBob25l 50255\ncGFyYWJsZQ== 50256\nJUI= 50257\nX3ZlY3RvcnM= 50258\nIGJyZXdpbmc= 50259\nIFRr 50260\nIERvd25sb2Fkcw== 50261\nIFNhdmVk 50262\nLlByaWNl 50263\nIGN1cnZlZA== 50264\nIFBhcmVudGhvb2Q= 50265\n6LY= 50266\nLnBubA== 50267\ncGxldGVseQ== 50268\nLkRheQ== 50269\nIGFkdmVydGlzZXJz 50270\nIGVqZWM= 50271\nIHByemVk 50272\n668= 50273\nISc7Cg== 50274\nIEt1c2g= 50275\nIFRBQg== 50276\nIHF1ZXN0cw== 50277\nIGNvaW5jaWRlbmNl 50278\ndW1taWVz 50279\nIEthc2htaXI= 50280\nIEV0aGljcw== 50281\nX2dyb3d0aA== 50282\nIGFrdGl2 50283\nIGdyb3VwaW5n 50284\n5aKe 50285\nX3RydXRo 50286\n5ZCs 50287\ndG9kb3M= 50288\naXNldA== 50289\nVGV4Q29vcmQ= 50290\nw6R0dA== 50291\nIFp1cg== 50292\ncm95cw== 50293\nX01BR0lD 50294\nIGJyZXdlcnk= 50295\nKFN0YXRl 50296\nIFNNQUxM 50297\nIFBsYW50cw== 50298\naXRiYXJ0 50299\nZWFjaGVy 50300\nIEFkZWxhaWRl 50301\nTHU= 50302\nIGZpY2s= 50303\ndW5kbGVz 50304\nX2xvYWRlZA== 50305\n0LjQtQ== 50306\nUG9sbA== 50307\ncml0aWM= 50308\nRUxZ 50309\nICsn 50310\nIFByb2Zlc3Npb24= 50311\nIHN0YW1wcw== 50312\nIFNldw== 50313\nc2Nyb2xsVmlldw== 50314\nIGNvbW11bmlzdA== 50315\nL3Byb2JsZW1z 50316\nfQ0KDQoNCg0K 50317\nLG8= 50318\nIHVkcA== 50319\nIG9iZXNl 50320\nYXBwcm92ZQ== 50321\nYW5jZWxsYXRpb24= 50322\nX0dhbWU= 50323\nIEhhc2h0YWJsZQ== 50324\nYWRhcHRpdmVTdHlsZXM= 50325\nIHBvc3Nlc3Nlcw== 50326\nLm1hdGNoZXI= 50327\nZnVuY3Rpb25hbA== 50328\nTXJz 50329\nCXNhdmU= 50330\nIERiVHlwZQ== 50331\nIGtlbg== 50332\nZ2V0Q29udGV4dA== 50333\nIG1hbnM= 50334\nKHJlbA== 50335\nIEJyb3RoZXJob29k 50336\nKWAK 50337\n6Kej 50338\nLkluZm9ybWF0aW9u 50339\nT3V0T2ZSYW5nZUV4Y2VwdGlvbg== 50340\nIFNlaw== 50341\nQ2Fz 50342\nIGJsb2dnZXJz 50343\nRWl0aGVy 50344\nKCIiIg== 50345\nIHBpbmNo 50346\nIGNvYXJzZQ== 50347\nKXA= 50348\nIFB1bHNl 50349\nIGxlYXJudA== 50350\nIGRlbnRpc3Q= 50351\nIG9uY2hhbmdl 50352\nIGRpcmVjdGl2ZXM= 50353\nKGFjdGlvbnM= 50354\nbnlkZXI= 50355\nIFNoaXI= 50356\nVHJhaXQ= 50357\nX2RlcA== 50358\nIFBFVA== 50359\nIFJFUA== 50360\nLkFwcFNldHRpbmdz 50361\nY3VhZG9y 50362\naWRlbmF2 50363\nIGVudmk= 50364\nIHNsYW1tZWQ= 50365\nIFNob290 50366\nIGRhdGVGb3JtYXQ= 50367\nLmpvZGE= 50368\ndmV5cw== 50369\nICkuCgo= 50370\nIGNhcmVn 50371\nIFBhcmFsbGVs 50372\nX3RyYW5zbGF0aW9u 50373\nLmZ1bmN0aW9ucw== 50374\nLm9icw== 50375\nUnVudGltZUV4Y2VwdGlvbg== 50376\nW109 50377\nb3ZlcnZpZXc= 50378\nIFNjaGw= 50379\nIG5vaXN5 50380\nIE9uUHJvcGVydHlDaGFuZ2Vk 50381\nU2VuZGluZw== 50382\nIHVuZmFtaWxpYXI= 50383\nVXBvbg== 50384\nIFByaW50cw== 50385\nLnR5cA== 50386\nIGZsZWVpbmc= 50387\nCW1vdmU= 50388\nKFVu 50389\nIHFy 50390\n15w= 50391\nX2JldGE= 50392\nIHNraWVz 50393\nCW1l 50394\nV05E 50395\nIHN0aWNrZXJz 50396\nYmxhcw== 50397\nIGluc2VydHM= 50398\nIHZlcnNlcw== 50399\nIERldw== 50400\nIHRhbmdpYmxl 50401\nIGhlY2hv 50402\nUE9M 50403\nIHRlYXJkb3du 50404\nb21uaWE= 50405\nSUJF 50406\nLmNvdmVy 50407\nX3N0cmF0ZWd5 50408\nXi0= 50409\nc2V0UG9zaXRpb24= 50410\ndWFsZQ== 50411\nU2lnbmVk 50412\nIGlmYWNl 50413\nYXNlbGluZQ== 50414\nLnNldFRpbWU= 50415\nIE1pbmVyYWw= 50416\nIEZpZ2h0aW5n 50417\nc2tpbnM= 50418\nIGRpc2NyaW1pbg== 50419\nIGRhbnNr 50420\nIFByaW5jZXRvbg== 50421\nYWNpc3Q= 50422\nICgpKTsK 50423\ndHJhY2tz 50424\naW1vbmlhbA== 50425\nYWRlY2ltYWw= 50426\nRVBST00= 50427\ndWdnbGU= 50428\nLk5vdGlmaWNhdGlvbg== 50429\nJG1haWw= 50430\nY2FudGlkYWQ= 50431\nIEp1bmc= 50432\nIHNlZWtlcnM= 50433\nIHBsYXVzaWJsZQ== 50434\ndGllcg== 50435\n0LXQtg== 50436\nIHJhcHBlcg== 50437\nIE1hbmE= 50438\nIEh0dHBTdGF0dXNDb2Rl 50439\nIGJ1cm50 50440\nbG9zZXM= 50441\nIEZvdG8= 50442\nIEpzb25PYmplY3Q= 50443\nSW5zdGFncmFt 50444\nIHN5c2NhbGw= 50445\nIHJlYWxpdGllcw== 50446\nIE1BVExBQg== 50447\nOl57Cg== 50448\nVEVSTQ== 50449\nIENiZA== 50450\nIFBhcmFncmFwaA== 50451\nIHRyYXbDqXM= 50452\nIGNvbnN0cnVjdGluZw== 50453\nIHN3YWw= 50454\nIHBpZ2U= 50455\nTExMTA== 50456\nLWV4aXN0aW5n 50457\nR2V0cw== 50458\nIG1lbHRlZA== 50459\nIG1pdGlnYXRl 50460\nSGVu 50461\nIGht 50462\naW1hcw== 50463\nIEFv 50464\nIFBlcmV6 50465\nIERBTA== 50466\nIOuLpA== 50467\nIGRpdmlz 50468\nU3Rvcnlib2FyZFNlZ3Vl 50469\nIE1vZGlmeQ== 50470\nIMOcYmVy 50471\nX09WRVJSSURF 50472\nLnBlbQ== 50473\ndW50b3M= 50474\nIGVzcGHDsQ== 50475\nIHs/ 50476\nIFBBWQ== 50477\nX2lwdg== 50478\nIEZ1cnk= 50479\nX18uX18= 50480\nZWxvdw== 50481\nLWNlbnRlcmVk 50482\nY2hlY2tz 50483\nX1JlZw== 50484\nLUphdmFkb2M= 50485\nCWxvYWQ= 50486\nIExpa2V3aXNl 50487\n2KfZhQ== 50488\nVU5F 50489\nLnNlbQ== 50490\neGNi 50491\nIENhdmU= 50492\nX3NsZWVw 50493\nIHNpbGVudGx5 50494\nIEV4dHJlbWU= 50495\nLlRvVXBwZXI= 50496\nCUNIRUNL 50497\nIGN1ZQ== 50498\nIFFCeXRlQXJyYXk= 50499\nIGNvcnJ1cHRlZA== 50500\nIETDqQ== 50501\nIGltcGVk 50502\nR2V0TmFtZQ== 50503\nIGluYWNjdXJhdGU= 50504\nIHNvYmVy 50505\n0LXQtQ== 50506\nIGJhcmNvZGU= 50507\nLS0pewo= 50508\naW5raQ== 50509\nIMOpcA== 50510\nIGRyaQ== 50511\nIEFMVA== 50512\nPj4+Pj4+Pj4= 50513\nb250YQ== 50514\nW0w= 50515\nIGludGVyZXM= 50516\ndmVydGluZw== 50517\nIGRpYWdub3N0aWNz 50518\ncGRldg== 50519\n6Kk= 50520\nIEludGVncmF0ZWQ= 50521\nKS4n 50522\nX2dj 50523\nJHRleHQ= 50524\nLmdhbWVz 50525\nIFRlcnJh 50526\nJ1Jl 50527\nLnRyYW5zZmVy 50528\nX0ZJRk8= 50529\nZ2V0TW9kZWw= 50530\nIGJsYW5k 50531\nIENvbGVtYW4= 50532\nIHByaW1lcw== 50533\nIOaI 50534\nIGNyb3NzZXM= 50535\nbms= 50536\nR0lORw== 50537\nICde 50538\nIEJsb2I= 50539\nIGludGVyY291cnNl 50540\nIEJsdmQ= 50541\nIHdlaWdocw== 50542\nX3JlZ3VsYXI= 50543\nIFBlcnRo 50544\nIHNlcGFyYXRpbmc= 50545\nIGJpbGxlZA== 50546\nLnRhYkNvbnRyb2w= 50547\nIHB1cHBldA== 50548\nIHV0aWxpemF0aW9u 50549\nIOKWoA== 50550\nIHN1Y2Nlcw== 50551\nIGxhbXBz 50552\nX3Byb2o= 50553\nRXJpYw== 50554\nIHJlbm92YXRpb24= 50555\nIEZhbWlsaWVz 50556\nIEJpdHM= 50557\ncGFydGlhbHM= 50558\nLU1lbg== 50559\nc29sdXRpb24= 50560\nIGR3YXJm 50561\nLklOVEVHRVI= 50562\nIExPQ0s= 50563\nLmN0 50564\nIGV4Y2VycHQ= 50565\nIFBpeA== 50566\nIEZpcnN0TmFtZQ== 50567\nQU5URUQ= 50568\nIEFkbWly 50569\nLWhlbHA= 50570\nUHJpb3I= 50571\nIEFsaWdu 50572\nLklOU1RBTkNF 50573\nTGluZUVkaXQ= 50574\nKCcvOg== 50575\nIGluZXQ= 50576\nb2R1cw== 50577\nLnBrbA== 50578\nIEtZ 50579\ndXBlcnQ= 50580\nIG5lcnZlcw== 50581\nX2dyYWRpZW50 50582\nfScsJw== 50583\nX3VucmVm 50584\nIHNhdHVyYXRlZA== 50585\nIENvbm5lY3RlZA== 50586\nIEZO 50587\nRVhJVA== 50588\nIHRlbGVwb3J0 50589\nIGF2YWl0 50590\nUGFnZVJvdXRl 50591\nIGRpdm9yY2Vk 50592\nKGxhbmc= 50593\nZnN0 50594\nIFR5cg== 50595\nIG1lc3Nlbmdlcg== 50596\naWZzdHJlYW0= 50597\nWFM= 50598\nIEJhbmtpbmc= 50599\nIGluZmVjdGlvdXM= 50600\nIE1vbnM= 50601\nX0xPT1A= 50602\nIHp1csO8Y2s= 50603\nIG9idGVuZXI= 50604\nL3JlcG9z 50605\nVmVs 50606\nYWNybw== 50607\nIHVzZXJSZXBvc2l0b3J5 50608\nc3R5bGVUeXBl 50609\nIFNSQw== 50610\nVk1MSU5VWA== 50611\ncmVjdXJzaXZl 50612\nL2Jhcg== 50613\nX2NoaXA= 50614\nb21pbmF0ZWQ= 50615\nIE5pdA== 50616\n4oCUdG8= 50617\nIEJ1ZGRo 50618\n0L7QvNC10YA= 50619\nIE1BRw== 50620\nIENIRQ== 50621\nX2Rlbg== 50622\nLnJhaXNlcw== 50623\nX2RlZ3JlZQ== 50624\nIHB1bXBraW4= 50625\nX3RlbXBsYXRlcw== 50626\nX01FRElB 50627\nIFRpbWVsaW5l 50628\nIGJvdHM= 50629\nT2JqZWN0VHlwZQ== 50630\nIGJ1eXM= 50631\nLnBvc3Rz 50632\nQ0FM 50633\nd2FpdGluZw== 50634\nIERhbmllbHM= 50635\nIGRhYmVp 50636\nIFNpZ21h 50637\naWxvcg== 50638\naWdlbA== 50639\nLFc= 50640\nQURT 50641\nKHBhbmVs 50642\n7LK0 50643\naXRhdGluZw== 50644\nLnBhbGV0dGU= 50645\nIG1vc3F1aXRv 50646\nIHRlZ28= 50647\nKHBhcnNlSW50 50648\nIGRlc3B1w6lz 50649\ncHJvbWlzZQ== 50650\nIHdpag== 50651\ndHlwZXNjcmlwdA== 50652\nIFR2 50653\nX0lERU5USUZJRVI= 50654\nKS4KCgo= 50655\nX2ZsYXQ= 50656\naXRzdQ== 50657\nVVNS 50658\nZXhwZXJpZW5jZQ== 50659\nLWZpdA== 50660\ncGhpbng= 50661\nX3RocmVzaA== 50662\nIGlkZWFsbHk= 50663\nIEZyZWVtYW4= 50664\nLERC 50665\nX3J3 50666\n562J 50667\nVWI= 50668\nX3N0YXRpc3RpY3M= 50669\nPSIiPjw= 50670\nIGNob3Jl 50671\nIHlvcms= 50672\naW5zdGFsbGVk 50673\nQWRkaXRpb25hbGx5 50674\nIHBzdG10 50675\neWxrbw== 50676\nOjoK 50677\nRm9yZXN0 50678\nIGhlYWRzZXQ= 50679\nIGdhbGxvbg== 50680\n0YDQtdC8 50681\nIHdpdGhkcmF3bg== 50682\nIENhbmRpZGF0ZQ== 50683\nIG1lbHRpbmc= 50684\nIGZyZWV6ZXI= 50685\nIGhs 50686\nX0hFTFA= 50687\nbWltZQ== 50688\nKC8q 50689\nIHRoaXJzdA== 50690\nJHJldHVybg== 50691\nbWVtYmVyb2Y= 50692\n0LXQsQ== 50693\nIEh0dHBTZXJ2bGV0UmVxdWVzdA== 50694\nKG9i 50695\nX1Jlc3VsdA== 50696\nIGFzc2VydGVk 50697\nIGZ1bGZpbGxpbmc= 50698\nIHN0cmV0Y2hlcw== 50699\ncGFyYXRlZA== 50700\nLWZ1bmRlZA== 50701\nIOWb 50702\naW5nbGVz 50703\nX2Nh 50704\nLmNvbmRpdGlvbg== 50705\nIERpc3BsYXlz 50706\nIG9yYW5n 50707\nIENSRQ== 50708\nIGdsQmluZA== 50709\nIFNlbGVjdG9y 50710\nL3R5cGU= 50711\nIEFsZXhh 50712\nY2hlZHVsZXM= 50713\nIFBlbmluc3VsYQ== 50714\nIHBhcml0eQ== 50715\nCWRlc3Q= 50716\nIERvb3Jz 50717\nDQoJDQo= 50718\nX2RpbWVuc2lvbg== 50719\nIGFsb2Fk 50720\nLlN0b3JlZFByb2NlZHVyZQ== 50721\nKHBhcmVu 50722\nIEJ1cmtl 50723\nJyldCg== 50724\nLWVuZ2luZQ== 50725\nIHF1aXI= 50726\nIEh5YnJpZA== 50727\nIERvZQ== 50728\nIG91dGxpbmVz 50729\nIFRyZW5kcw== 50730\nX05W 50731\ncGVyaW1lbnRz 50732\nIEhpbg== 50733\nPycs 50734\nCVRleHQ= 50735\nRlVM 50736\nIHNtZWxscw== 50737\nIHNsaWNr 50738\nIG1pc2VyYWJsZQ== 50739\nIEFycmF5QWRhcHRlcg== 50740\nIHBhcmFtU3RyaW5n 50741\nSG9t 50742\nX2xpdGVyYWxz 50743\ndXN1YXJpb3M= 50744\nIHByb21wdGluZw== 50745\nX2xhenk= 50746\nIEFjdGl2YXRpb24= 50747\nX29j 50748\nV2Vhaw== 50749\nIGFuZWNk 50750\nIFVDTEE= 50751\nPXJl 50752\naXNzZW1lbnQ= 50753\nIEVzY29ydHM= 50754\nRXhjZWxsZW50 50755\nIFBhdXNl 50756\nIHJlcG9zaXRvcmllcw== 50757\nVE9S 50758\nYXJpYXRl 50759\nX2lzbw== 50760\ndXBkYXRlcw== 50761\naGFsYg== 50762\ndWRpYW50ZQ== 50763\n66Gd 50764\nIG5haXZl 50765\nIFBlZw== 50766\nIExvdW5nZQ== 50767\nQVJHSU4= 50768\nKGJpbg== 50769\nT25DbGlja0xpc3RlbmVy 50770\nIEZBSUxFRA== 50771\nIGxpdGU= 50772\nIGR6aWU= 50773\nIExpdGVyYWw= 50774\naXZvcg== 50775\nZmNudGw= 50776\nIGVhdHM= 50777\nIHFlZA== 50778\nVW5sb2Nr 50779\ncmlkaW5n 50780\ndW5kYWk= 50781\nPU0= 50782\nQVRURVI= 50783\nQ29uZmlndXJlQXdhaXQ= 50784\naWNpYXM= 50785\ndXN0b21lZA== 50786\nIHN1Y2Nlc3Npb24= 50787\nZW5kVGltZQ== 50788\nIEp1cGl0ZXI= 50789\nIGp1ZGdpbmc= 50790\nZHJhdGlvbg== 50791\nX2RvY3M= 50792\nLm1v 50793\nIGVkdWNhdG9ycw== 50794\nIFZpbmU= 50795\nQ29uZA== 50796\nW291dA== 50797\ncWI= 50798\nXFZhbGlkYXRvcg== 50799\nIG1lYW5pbmdz 50800\nIHByZXNlbnRseQ== 50801\nIGRpdmlkaW5n 50802\nb3R0ZW5oYW0= 50803\nYXNjdWxhcg== 50804\nIHRyYWlsZXJz 50805\nIENMT1NF 50806\n0LDQvNC4 50807\n4oCZYWk= 50808\nIEdhaW4= 50809\nd29y 50810\nIHBsYW5uZXI= 50811\nIGRpc3RyaWJ1dGluZw== 50812\ndmF0 50813\nbW9udGhz 50814\neGxhYmVs 50815\nSEY= 50816\nVmlvbA== 50817\nLkJBU0VMSU5F 50818\n0LXRgtGB0Y8= 50819\nIFJvdGF0ZQ== 50820\nIHR4bg== 50821\nOmJvbGQ= 50822\nIGJsb3Nz 50823\nRm9yZ2VyeQ== 50824\nKGVtYmVk 50825\nIGpha28= 50826\nc3ByaW50Zg== 50827\ndGhlaXI= 50828\nIGV4aGliaXRz 50829\nLXN0YXRpYw== 50830\naGVjeQ== 50831\nZ2V0QWN0aXZlU2hlZXQ= 50832\nLmNsaWVudHM= 50833\n44GN 50834\nX2hpZGU= 50835\nW3dvcmQ= 50836\nQ2I= 50837\nYWRkSXRlbQ== 50838\nYXhl 50839\nX3JhZGlv 50840\nYWxpb24= 50841\nbW9kaWZpZXI= 50842\nIHNhdHVyYXRpb24= 50843\nIGRlbm9t 50844\nX3BpeGVscw== 50845\nbWVzcw== 50846\nKGZs 50847\nYXRpZg== 50848\nIHNlY3M= 50849\nIHByb3N0aXR1dGlvbg== 50850\nIGdyYW5kY2hpbGRyZW4= 50851\nIHBhcmFkaXNl 50852\nIEZlbGQ= 50853\nX0JJTkFSWQ== 50854\naXRvdXM= 50855\n4LmE 50856\nIGZsYXNoaW5n 50857\nLXNpZGVk 50858\nIGNvbnRyYWRpY3Rpb24= 50859\nLyoKCg== 50860\neWxhYmVs 50861\nIFRldA== 50862\nIGFkbWlyZQ== 50863\ncmVzbw== 50864\nIGxldHo= 50865\nIFNFQVJDSA== 50866\nc2xvdHM= 50867\nIFJld2FyZHM= 50868\nIEhvZw== 50869\nIE5TRGF0YQ== 50870\nc3Rhc2g= 50871\nRmFsbA== 50872\nIEFtZXI= 50873\nTGluZWFyTGF5b3V0 50874\nL3Bob3Rvcw== 50875\nIGZlYXRoZXI= 50876\nIHwNCg== 50877\nRG93bmxvYWRz 50878\nLlN0YXJ0c1dpdGg= 50879\nIC8vIw== 50880\naW5lVHJhbnNmb3Jt 50881\nIGFmZmlk 50882\nVnRibA== 50883\nIFJvZ3Vl 50884\nc2NyaWJlZA== 50885\nIGZhdWM= 50886\nIE1vbnJvZQ== 50887\nIGRlY2xhcmVz 50888\nbW9kZXJu 50889\ncmVvbg== 50890\nYXliZQ== 50891\nUEFTUw== 50892\nZmVycw== 50893\nX01VTFRJ 50894\nIE1hdGhlbWF0aWNz 50895\nIHN1ZGFo 50896\nX0FUVEFDSA== 50897\nIG51bWJlcldpdGg= 50898\nIFNvbG9tb24= 50899\namlu 50900\nb2dyYWZpYQ== 50901\nw7Zs 50902\nX2Rlc2lnbg== 50903\nY3VsYXRlZA== 50904\nIEx1bmE= 50905\naWVzeg== 50906\nID0+Jw== 50907\nIHJldmVsYXRpb25z 50908\nQWxvbmc= 50909\nKGVk 50910\nIEZpbGVuYW1l 50911\nIHlsYWJlbA== 50912\nU2VjdXJl 50913\nIGJ1c2Nh 50914\nYWdub3Npcw== 50915\nX1JFQ0U= 50916\nIG92ZXJsYXBwaW5n 50917\nRXh0ZW50 50918\nIGFudGljaXBhdGlvbg== 50919\nQ2hlY2tz 50920\nIEFMU08= 50921\nb3Jj 50922\naWxpbmd1YWw= 50923\naXRhdGlvbmFs 50924\nIGFkdmFuY2VtZW50 50925\nb3Vybw== 50926\nIFByZWRpY2F0ZQ== 50927\n5b6X 50928\nZXJpYQ== 50929\nIFBpZXJjZQ== 50930\nb3Jpbw== 50931\nIG1lcml0cw== 50932\nIHBlYW51dA== 50933\nLlBhY2thZ2U= 50934\nIENvbmR1Y3Q= 50935\nX1NFTlNPUg== 50936\nIGJvaWxpbmc= 50937\nIGludHJh 50938\nIElHTg== 50939\nIEZ1cg== 50940\nLlJlZnJlc2g= 50941\nIFJlYWNo 50942\nX2RlY29kZXI= 50943\nLkV4cA== 50944\nINGC0LDQug== 50945\ncGlsbA== 50946\nLFE= 50947\nIEdyaWxs 50948\nIHBvcHBpbmc= 50949\nLkFn 50950\nIHByb3llY3Rv 50951\nIG1pbGVhZ2U= 50952\nIGVjb2xvZ2ljYWw= 50953\nXV0pOwo= 50954\nIMKt 50955\nc3VicGxvdA== 50956\nYWNhZA== 50957\nIFRyeWluZw== 50958\ncmVjaXBlcw== 50959\nJGNyaXRlcmlh 50960\nIFBlcnNpYW4= 50961\nLWJvdW5k 50962\nTUFTSw== 50963\nIEdlc3R1cmU= 50964\nIGtr 50965\nIFBWQw== 50966\nIHByb2hpYml0aW9u 50967\nIGNvbWFuZG8= 50968\nIExPT0s= 50969\nU2hvcHBpbmc= 50970\nIGRpc3RvcnRpb24= 50971\nPEJvb2xlYW4= 50972\nLkdldExlbmd0aA== 50973\ndW1wdA== 50974\nXFByb2R1Y3Q= 50975\nZWxsZXJ5 50976\nIGZpcmV3YWxs 50977\nZm9ybWF0dGVk 50978\nLnJlZGlz 50979\nIGVzYQ== 50980\nIFJob2Rl 50981\nU29t 50982\nLm5vbg== 50983\nICcpLg== 50984\nIGdldFZpZXc= 50985\n4bqhbg== 50986\ncHJ1cw== 50987\nTWF0dGhldw== 50988\nIHNpYQ== 50989\nIEZvcnM= 50990\nR1BV 50991\naWVudHJhcw== 50992\nX0lOU1Q= 50993\nIG9sYXJhaw== 50994\nIGltcG9ydGluZw== 50995\nVENQ 50996\nLyIpOwo= 50997\nZWl0aGVy 50998\nIGZyZXNobHk= 50999\nY2FzY2FkZQ== 51000\nKGNoYXJhY3Rlcg== 51001\nIEplZXA= 51002\nb3RpY3M= 51003\nX1VUSUw= 51004\nLlh0cmFQcmludGluZw== 51005\nLmZpcnN0Q2hpbGQ= 51006\nIEV4Y2VsbA== 51007\nIGR2ZA== 51008\nIHRhbGxlcg== 51009\nIHJhcw== 51010\neXBhc3M= 51011\nIGFzc2lnbnM= 51012\nIGdyaWV2 51013\nLW1vcmU= 51014\nSkQ= 51015\nIEJ1cm5z 51016\nJz4NCg== 51017\nLkRlcGVuZGVuY3k= 51018\nLlF1ZXJ5U3RyaW5n 51019\nLk93bmVy 51020\nIGV4cGlyeQ== 51021\nVGh1 51022\nKFZlYw== 51023\nIGhhemFyZG91cw== 51024\nIHJwbQ== 51025\nQVBPTg== 51026\nIGFkZFRhcmdldA== 51027\nc3ZpbGxl 51028\ncE5ldA== 51029\nIEltZw== 51030\nIFRJTUVS 51031\nLkFuaW1hdGlvbg== 51032\nIGJlaw== 51033\nIGFzc29ydA== 51034\nIGxlYmlo 51035\nIGJvZHlQYXJzZXI= 51036\nIHZpYnJhdGluZw== 51037\nSURM 51038\nIGJ1dHRlcmtuaWZl 51039\naW50ZXJz 51040\nIHBlcnN1YWRl 51041\nIExHQlRR 51042\n6Is= 51043\nLnNvZnQ= 51044\nIGJlYW1z 51045\nX3N1cg== 51046\nLkRlZg== 51047\nIGxhYnM= 51048\nCXBsdA== 51049\nIHNraW5z 51050\nIHRyYW5zZmVycmluZw== 51051\nIGltYWdpbmFyeQ== 51052\nX0VuZA== 51053\nO2JhY2tncm91bmQ= 51054\nIGxhcHM= 51055\nX0NPTU1FTlQ= 51056\nKFNETA== 51057\nb25kcw== 51058\nLlJlY29yZA== 51059\nIEltcGxlbWVudHM= 51060\nX3RpY2tz 51061\nKCkpKQoK 51062\nIGFyb3Nl 51063\nXT8= 51064\nIE1w 51065\nIElDb21tYW5k 51066\nIHNjdWxwdHVyZQ== 51067\nIGNvbnRyYWN0ZWQ= 51068\nPEhUTUw= 51069\nIGNhbGVuZA== 51070\nYXR5 51071\nL1N1Yg== 51072\nIGt2aW5u 51073\nX0lHTk9SRQ== 51074\nIFNoYW5l 51075\nTUxT 51076\nIHN0aW11bGF0ZQ== 51077\nUGFydGl0aW9u 51078\nIG11bg== 51079\nw7Nt 51080\nZXJhbGE= 51081\nLWFjY291bnQ= 51082\nLkJpbmFyeQ== 51083\nY8Op 51084\nIHNlaXpl 51085\nY29ubmVjdGlvbnM= 51086\nIAogICAgICAgIAo= 51087\nIERpYWdub3N0aWM= 51088\nVklTSUJMRQ== 51089\nIFJ1bnM= 51090\nIGltcHJlc3Npb25z 51091\nc3VpdGU= 51092\nb2JsZQ== 51093\nfi0= 51094\nYWt1a2Fu 51095\nPFBlcnNvbg== 51096\nIE5vcw== 51097\nIEd1aQ== 51098\nLndhaXRGb3I= 51099\nUkVTRVQ= 51100\nIHBvc3Rwb24= 51101\nRGlzY292ZXI= 51102\nYXJyaXNvbg== 51103\nc2hhdw== 51104\nYmxvb2Q= 51105\nQUpPUg== 51106\n5pu05paw 51107\nIE11c2U= 51108\n5pS2 51109\nIHJldGFpbmluZw== 51110\nb3R0ZQ== 51111\nIG1vc3F1ZQ== 51112\nIFNuZQ== 51113\nIHN0YW5kYXJkaXplZA== 51114\nIG1haW5sYW5k 51115\nX3RocmVl 51116\ndW5nZW9ucw== 51117\nZ2V0RG9jdHJpbmU= 51118\nIHdoYWxl 51119\nIGFnZw== 51120\nIFBvcnNjaGU= 51121\nbm93bGVk 51122\nbGF0ZW50 51123\nIFJlbGF0aW9u 51124\nIC8vJw== 51125\nIHNodXR0aW5n 51126\nIFJlbWl4 51127\nX2Nvdg== 51128\nIHNhaWxpbmc= 51129\nIHZvd2Vk 51130\nIHBvdHM= 51131\nb3V0dQ== 51132\nIGhhaXJ5 51133\nY2FzdHM= 51134\nUmVsb2Fk 51135\nIHJlY29ubmVjdA== 51136\ndGVyYQ== 51137\nLmNoaWxkTm9kZXM= 51138\nIFJhY2s= 51139\nIGN1cnJlbnRJbmRleA== 51140\nIGFsbGVu 51141\nIOeUqOaItw== 51142\nIEN1YnM= 51143\nW1g= 51144\nX1NFUQ== 51145\nX1JFTU9WRQ== 51146\nLmdldEFjdGlvbg== 51147\nKC9e 51148\nZXJyYXI= 51149\nIGV0aGVy 51150\nY3VydmU= 51151\nIHNsYXA= 51152\nIHVvbQ== 51153\nT3RoZXJz 51154\nIGVuZ3I= 51155\nRGlzcG9zaXRpb24= 51156\nIHN0YWdlZA== 51157\nRXll 51158\nIEF1eA== 51159\nYXV0aGVudGljYXRl 51160\nICQ/ 51161\nIEFuZHJlYXM= 51162\nIHNldHc= 51163\nLkFydA== 51164\nIGZvcmVjYXN0cw== 51165\nIGF1bnQ= 51166\nLW1pZGRsZQ== 51167\nIG1pc2Q= 51168\nZGVzaw== 51169\nIGVzY29ydGU= 51170\nIENhc2E= 51171\ncm9waWNhbA== 51172\nIGV4ZW1wbGU= 51173\ncGxhbmV0 51174\nKFVJTlQ= 51175\nIHdoaXA= 51176\nIFBDQg== 51177\nY2xpZGVhbg== 51178\nPSJc 51179\nIG94aWRl 51180\nIHN1Y2NlZWRz 51181\nZGVyaXZlZA== 51182\nIEVjb25vbQ== 51183\nX2Nvb3JkaW5hdGVz 51184\naXJhcw== 51185\nRHJhZnQ= 51186\nIHZpc3VhbGl6ZQ== 51187\nQnJpYW4= 51188\nX0FTU1VNRQ== 51189\nIE9iamVjdElk 51190\nIHRyYWluZXJz 51191\nX0ZPUkNF 51192\nIGNvbnNvbGVz 51193\nLXByb2Nlc3M= 51194\nbGljaGVy 51195\nIFNpbW1vbnM= 51196\nVGFraW5n 51197\nIENsYWltcw== 51198\nIGRpZmbDqXJlbnQ= 51199\nQWN0aXZpdHlSZXN1bHQ= 51200\nIHNucw== 51201\n6YCJ5os= 51202\nIENydXM= 51203\nIGxsYW0= 51204\ncmFi 51205\nIEpvYW4= 51206\nQUFB 51207\nCWZpbHRlcg== 51208\naXNob3Bz 51209\nZ2V0dGluZw== 51210\n4LU= 51211\nIHF1YW50bw== 51212\nUGFzdA== 51213\nb3ZpY2g= 51214\nIGluanVzdGljZQ== 51215\nIEZMT0FU 51216\nIGFscmlnaHQ= 51217\nXERC 51218\nKEdhbWVPYmplY3Q= 51219\ndWlzaA== 51220\nKGJvdA== 51221\nIGdhbGxvbnM= 51222\nIFLDqQ== 51223\nIFNhaWQ= 51224\nIFNURE1FVEhPRENBTExUWVBF 51225\nYWlzaW5n 51226\nX3Byb2Nlc3Nvcg== 51227\nZWxsaWRvcw== 51228\ndGVyZGFt 51229\nIEJlYW0= 51230\nVGV4dEFyZWE= 51231\nIHJldG9ybm8= 51232\nLk1ha2U= 51233\nICQoIjw= 51234\nIGxvY2tkb3du 51235\nIHJlbWVkaWVz 51236\nIHZlZWw= 51237\neGVl 51238\nZG9jdHlwZQ== 51239\nRmls 51240\nIEV4cGFuZA== 51241\nIGVtcGxveXM= 51242\nIHNlc3Npb25TdG9yYWdl 51243\nUGhw 51244\nUHVibGlzaA== 51245\nIHJldGFs 51246\nZmFicw== 51247\neW5hbWljcw== 51248\nIHRvc3NlZA== 51249\nIG51bWJlck9mUm93c0luU2VjdGlvbg== 51250\neHBhdGg= 51251\nXG1vZHVsZXM= 51252\nIGRpc2FzdHI= 51253\nIE1VTFQ= 51254\nLk1lc2g= 51255\nLXN0YWdl 51256\nIHNkZg== 51257\naXR1bmc= 51258\ndWdlcw== 51259\nID8+Ij48Lw== 51260\nX2luZGV4ZXM= 51261\nIHZhbHVhdGlvbg== 51262\nIGxpZmVsb25n 51263\nIGV4cGVkaXRpb24= 51264\nKFlpaQ== 51265\nIHBhaW5z 51266\nIFBSSQ== 51267\nIE1peGVk 51268\nIENoYW5naW5n 51269\nR2VybWFueQ== 51270\nY29tbXVuaWNhdGlvbg== 51271\nLm9yZ2Fu 51272\nIE1hcmF0aG9u 51273\nZ2V0UGF0aA== 51274\nIEFjY3VyYWN5 51275\nIEdsb2JhbHM= 51276\nJyl9fTwv 51277\nIE9XTkVS 51278\n4oCm4oCd 51279\nIHN0YWJiZWQ= 51280\nIHNjaGl6b3BocmVu 51281\nIEZu 51282\nIENPUkU= 51283\nIERhdGFSb3c= 51284\nIExURA== 51285\nIG15dGhz 51286\nIGZhbW91c2x5 51287\nfCwK 51288\nIFNlb3Vs 51289\nU2ly 51290\nIEJlcms= 51291\nUmVnRXhw 51292\nLmdldFJvdw== 51293\nIERlY29kZQ== 51294\nUk4= 51295\nIG1hbmc= 51296\nIGVtcGxveWluZw== 51297\nX25vbWJyZQ== 51298\nPFRhc2s= 51299\nIEd1eXM= 51300\nIEFydGlrZWw= 51301\nQmVycnk= 51302\nenVyZQ== 51303\nIHZhbGV1cg== 51304\naGl0cw== 51305\nIGx1Y3JhdGl2ZQ== 51306\nIGluZm9ybWF0 51307\nQ2xpbnRvbg== 51308\nIHRlcw== 51309\nIENlcnRpZmljYXRpb24= 51310\nX3dz 51311\nIG9mZmVuY2Vz 51312\nZWJyYQ== 51313\nIEF4aW9z 51314\ncmVzdGFydA== 51315\nTE4= 51316\nLkVuY29kZQ== 51317\nbWl1bQ== 51318\nIEZlYXR1cmVk 51319\n0YjQuNCx0LrQsA== 51320\nIERlcHQ= 51321\nOyYj 51322\nIE15ZXJz 51323\nCXRyYW5zZm9ybQ== 51324\nVGV4YXM= 51325\n16g= 51326\nIFlvcmtzaGlyZQ== 51327\nbG5hbWU= 51328\nQnJl 51329\n44GT44Gu 51330\nIHNjZW5lcnk= 51331\nIGbDvGg= 51332\nCQkJCSAgICAgICA= 51333\nIERvb20= 51334\nIEFETUlO 51335\nKGVz 51336\nINC80LDRgdGB0LjQsg== 51337\nX2FzY2lp 51338\nL0RhdGE= 51339\nbGVzaG9vdGluZw== 51340\nQmFu 51341\nIG1lbW9pcg== 51342\nINmG 51343\nIEF1c3M= 51344\nKXBhcmVu 51345\nIGd1aWRpbmc= 51346\nIGJheg== 51347\nw7h5 51348\nQURN 51349\nIGRtYQ== 51350\nLlF1ZXVl 51351\nIFN1cHBsaWVz 51352\nIE1jRA== 51353\nIEFnZW50cw== 51354\nX2Ji 51355\nc2xhc2g= 51356\nIGhhc2hlcw== 51357\nIGNyYW5r 51358\nIFJhZw== 51359\nIGF1dG9ub215 51360\nw610dWxv 51361\nIHJlY3Vyc2lvbg== 51362\nIENyYXp5 51363\nX3RyYWNrZXI= 51364\nIE1i 51365\nX3BoeQ== 51366\nZm9vYmFy 51367\nCXNwZWVk 51368\nIGNhbXBvcw== 51369\nIG1vdWxk 51370\nIGNoYXJpdGllcw== 51371\nSEVJR0hU 51372\nIGVhdXRv 51373\nX3NvbHV0aW9u 51374\nIERH 51375\nbWFydmlu 51376\nWWVzdGVyZGF5 51377\nIEJlY29tZQ== 51378\nPGxs 51379\nb3Jpcw== 51380\nW25leHQ= 51381\nIGluY3VtYmVudA== 51382\nIER1cA== 51383\nCW92ZXJyaWRl 51384\n5a6J 51385\nCWNmZw== 51386\nIHPDtg== 51387\nIGRlc2U= 51388\nLWRp 51389\nIG9udHZhbmdzdA== 51390\nIGRlY2lzaXZl 51391\n5Lu3 51392\nX2tlZXA= 51393\nKERhdGFiYXNl 51394\nXy8= 51395\nIENMTA== 51396\nLW1ldGhvZA== 51397\nCVBvaW50 51398\nIEJ5dGVCdWZmZXI= 51399\nIHRyYWNlZA== 51400\nYWRkVG8= 51401\n7IS47JqU 51402\nYW55YWs= 51403\nIGVtcHJlc2Fz 51404\nKHJlcG9zaXRvcnk= 51405\nLmNyZWF0ZVN0YXRlbWVudA== 51406\nIGVsYQ== 51407\nRm9yZ2VyeVRva2Vu 51408\nIGlzZW1wdHk= 51409\nYXNpbg== 51410\nIExvb2t1cA== 51411\n0LXQvdCw 51412\nIHZpb2xhdGVz 51413\nIFNtYXJ0eQ== 51414\nIHphaw== 51415\nKCQu 51416\nU0hPVw== 51417\nINCi 51418\nYXJ1cw== 51419\nKFRFU1Q= 51420\ncGFja2Vk 51421\nIGhpc3Rvcmlh 51422\nIGNhbmNlcnM= 51423\nIEtyZW1saW4= 51424\nUmVkdWNl 51425\nL2hvdw== 51426\nIMSQ 51427\nVElUTEU= 51428\nLmxvY2FsUG9zaXRpb24= 51429\nbGlhYmxl 51430\nIOesrA== 51431\nIGZyYW5jYWlz 51432\nCWhhc2g= 51433\nIGluaWNpbw== 51434\nIENyYXNo 51435\nIHsu 51436\nIGNsb2Nrcw== 51437\nZHVjdG9yeQ== 51438\nIFB2 51439\n6528 51440\nIGRvaXM= 51441\nXC0= 51442\nIGphYXI= 51443\nIE1heWE= 51444\nbW96aWxsYQ== 51445\nCXJlc291cmNl 51446\nISEK 51447\nYXlzY2FsZQ== 51448\nICctJyw= 51449\n5Y+W5raI 51450\nIHN0YWxl 51451\nQ29ybmVy 51452\nw6hsZQ== 51453\naXRpdmVz 51454\nemFz 51455\naWNvcm4= 51456\nLkV4cHJlc3Npb24= 51457\nw7N0 51458\nQXBwbGljYXRpb25z 51459\nUmVzdHI= 51460\nX0luZGV4 51461\njbDsnbTthLA= 51462\nIEpGcmFtZQ== 51463\nc2l4 51464\nX0lNRw== 51465\n6JeP 51466\nIE51bWVyaWM= 51467\nIHdpcms= 51468\nX1NVTQ== 51469\nPERhdGVUaW1l 51470\nIHB5bGludA== 51471\nIGxhbWVudA== 51472\nIFBvc2U= 51473\nX2VudHJvcHk= 51474\nIGVuY291cmFnZW1lbnQ= 51475\nIGxhaW4= 51476\n5Yib5bu6 51477\nLWZy 51478\nIGNvcnJlY3Rpb25z 51479\ncGhhcw== 51480\ndXVy 51481\nYXRlZ29yaWFz 51482\nIGNhdGFseXN0 51483\nLmFsdA== 51484\nIEZlcm5hbmRv 51485\nLkRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 51486\nIGhlcmJhbA== 51487\nIFJH 51488\nU1RFUA== 51489\nSUZu 51490\nIFRvbmc= 51491\nxb5l 51492\nIElOQ0xVREU= 51493\nIGhj 51494\ndHJhY2tlcg== 51495\nCVN0cmluZ0J1aWxkZXI= 51496\nIERlc3Rpbnk= 51497\nIHNvcGhvbW9yZQ== 51498\nIERlZA== 51499\nIFBBUkE= 51500\naXpvbnRhbGx5 51501\nLWNoYW5nZQ== 51502\nZW5kaWQ= 51503\n6YCJ5oup 51504\naWprZQ== 51505\nIEF0aGxldGlj 51506\nYmFp 51507\nZ2V0UG9zaXRpb24= 51508\nLm5hbWVzcGFjZQ== 51509\n6K6i5Y2V 51510\nUkFDVA== 51511\nIHJlbGlldmVk 51512\nIHBvdXJpbmc= 51513\nIGl5 51514\ncm92ZQ== 51515\nIGFkb2xlc2NlbnRz 51516\nIGF3ZQ== 51517\ncmVhcw== 51518\nQW50aUZvcmdlcnlUb2tlbg== 51519\ncm93bmluZw== 51520\nIFVuY2xl 51521\nLkNvbm4= 51522\nIE1lZGlhVHlwZQ== 51523\nLm9yYWNsZQ== 51524\nSU5URVJOQUw= 51525\nLGFuZA== 51526\nIGZhdXg= 51527\naXBtYXA= 51528\nJG1vZGVs 51529\nIEdlb2Zm 51530\nX0FYSVM= 51531\nKCgpKQo= 51532\nIG5lZ2xlY3RlZA== 51533\nIHF1YXJ0ZXJseQ== 51534\nIGRpZXNlbg== 51535\nIGRyYWdvbnM= 51536\nTmlnaHQ= 51537\nL1dlYg== 51538\nPFZlYw== 51539\nCSAgICAgICAgICAgICAgICAgICAgICAg 51540\nIE9icw== 51541\nYmRk 51542\nIGhlaXI= 51543\nLWFuZ3VsYXI= 51544\nTWVudVN0cmlw 51545\nICciPic= 51546\na2luc29u 51547\nINC60L7Quw== 51548\nb2duaXRpdmU= 51549\nX2xp 51550\nIGltbWluZW50 51551\nIGFmZmluaXR5 51552\nLnNpZ25hbA== 51553\nIG5vdGNo 51554\nIFN0ZWVsZXJz 51555\nbWF4bGVuZ3Ro 51556\nS0s= 51557\nIEV1Z2VuZQ== 51558\nX1BXTQ== 51559\ncm9p 51560\nIOKXjw== 51561\nIEhhbWJ1cmc= 51562\nLk11c3Q= 51563\nIGF4ZQ== 51564\nZW5lZg== 51565\nIGFtYml0aW9ucw== 51566\nIFNwZWNpZXM= 51567\nIFN0cmVzcw== 51568\nIGF3aGlsZQ== 51569\nINCx0YPQtA== 51570\nIHdpdGhzdGFuZA== 51571\nIERlY29kZXI= 51572\nX2ludmVudG9yeQ== 51573\nIHsNDQo= 51574\nIHRndA== 51575\nIHJhaWxyb2Fk 51576\nV0FTSElOR1RPTg== 51577\nIG5lZ290aWF0ZWQ= 51578\nTlNU 51579\nLXBob25l 51580\nLFU= 51581\nIGV4ZXJjaXNpbmc= 51582\n4bul 51583\nX1BJWEVM 51584\nYXZvcnM= 51585\naXRlcmF0ZWQ= 51586\nIHZhbXBpcmU= 51587\nYWRhbA== 51588\nSW5ncmVzZQ== 51589\nIHVuZw== 51590\namVjdGl2ZQ== 51591\nLmNlbGxz 51592\nIG5hbm8= 51593\nIG1hcmtkb3du 51594\nX1JVTEU= 51595\nKGV2ZW50cw== 51596\nIGx1Z2dhZ2U= 51597\nTUVTU0FHRQ== 51598\naWdrZWl0 51599\nJGNvdW50 51600\nQXR0cmlidXRlTmFtZQ== 51601\nSUdJTkFM 51602\nX0VudA== 51603\nIEJG 51604\nIENPTU1FTlQ= 51605\nX2luaQ== 51606\nIEV1cm9wZWFucw== 51607\nIEJlbGxl 51608\n5ZG9 51609\nKVsn 51610\n5bqU 51611\nIFVzZWZ1bA== 51612\nLnJlZmVyZW5jZQ== 51613\nKCkiLA== 51614\nX2dyYWRl 51615\nIEthdw== 51616\nIHNlbnRlbmNpbmc= 51617\nIHNvY2lhbGlzbQ== 51618\nbW9uc3Rlcg== 51619\nX0xBWUVS 51620\nIGRlZXBlc3Q= 51621\nd2s= 51622\nIE5vaXNl 51623\nIyMjCgo= 51624\nIHByw6lj 51625\nb3RsZQ== 51626\n0YLQtQ== 51627\nYXVm 51628\naWJhbA== 51629\nIGNvbnF1ZXI= 51630\nPkVtYWls 51631\nIGFtYnVsYW5jZQ== 51632\nT0FE 51633\nICgiJQ== 51634\nIEZJ 51635\nLmZpeHR1cmU= 51636\nIHRlcnNl 51637\nICAgIAkJCQk= 51638\nIHNhbmN0dWFyeQ== 51639\ndWdp 51640\nIENvbXBhcmF0b3I= 51641\nRGVmaW5pdGlvbnM= 51642\nIGFzdGhtYQ== 51643\nIGxhY3Q= 51644\nIGhhcmR3b29k 51645\nLmNsb2Nr 51646\nIGF0dHJhY3Rpbmc= 51647\nIE1vdXI= 51648\nKGRpc3RhbmNl 51649\naWNpdHM= 51650\nIGJvbm5l 51651\nIEFDQ0VTUw== 51652\nLkRlc2VyaWFsaXplT2JqZWN0 51653\nIFR5cGVk 51654\nIGpldQ== 51655\nIGFwcElk 51656\nIENsYXJh 51657\nIEhG 51658\nIFJlaWNo 51659\naXBwbGVz 51660\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 51661\nX2RlbGl2ZXJ5 51662\nZXJpYWxpemF0aW9u 51663\nIHBsYWludGlmZnM= 51664\nU2NpZW50 51665\nc2hvcHBpbmc= 51666\nIER1bW15 51667\nIFdhbGQ= 51668\nR3JvdXBOYW1l 51669\nIGluc2NyaXB0aW9u 51670\nZWxvZw== 51671\nOjo6Ojo6Ojo= 51672\nX2xk 51673\nQmFja1ByZXNzZWQ= 51674\nLlJhdw== 51675\nIE9uVHJpZ2dlcg== 51676\nIG11c2V1bXM= 51677\nIEJlZW4= 51678\nIEFkdmVudHVyZXM= 51679\nIHNsYXRl 51680\nIGxldHQ= 51681\nIHN1bmQ= 51682\nIEdpbg== 51683\nIE1lY2hhbmljYWw= 51684\nLnNoaXA= 51685\nQXBwQ29tcG9uZW50 51686\nIGRlc3RpbmVk 51687\nIGR3ZWxsaW5n 51688\nUHJvZmlsZXI= 51689\nUHJlcGFyZQ== 51690\nemVpY2g= 51691\nIHNpbGljb24= 51692\nKGhhcw== 51693\nICMl 51694\nVklERU8= 51695\nIGNvbGxhYm9yYXRl 51696\nTGlu 51697\nIHNjb3Blcw== 51698\nKGNsYXNzTmFtZQ== 51699\nKHNk 51700\nYW5kaW4= 51701\nLmhhbQ== 51702\nU2VydmljZUltcGw= 51703\nLWRlc2NyaWJlZA== 51704\nIGlyb255 51705\nc3RpYWw= 51706\nIEh1YXdlaQ== 51707\nKHJlcG8= 51708\nIHVuZXhwZWN0ZWRseQ== 51709\nIEthaQ== 51710\nLmluc3RhbGw= 51711\nXHhm 51712\nIGV4aGliaXRlZA== 51713\nX1RDUA== 51714\nIE94 51715\nX0NITw== 51716\nIHByb3N0aXR1ZXJ0ZQ== 51717\nIHbDpA== 51718\nIHNpdG8= 51719\nIGNvbnN0aXR1ZW50cw== 51720\nIENvbnRpbnVlZA== 51721\nIFNBVkU= 51722\ncnNz 51723\nL21lc3NhZ2U= 51724\ndWJlcw== 51725\nIG1pc2RlbWVhbg== 51726\nIHRheGF0aW9u 51727\nIHN0b3J5bGluZQ== 51728\naGFpcg== 51729\nIEZpbmRz 51730\nU0lH 51731\ndmVyaWZpY2F0aW9u 51732\nfj0= 51733\nLmhw 51734\nSXRlcmFibGU= 51735\n0YvQtQ== 51736\nYXRvcmk= 51737\nIGN0cg== 51738\nUng= 51739\nXyk7Cgo= 51740\nZGFn 51741\nLnBpbg== 51742\nIHBzZXVk 51743\nIGludm8= 51744\n0YHRgtGA 51745\nX3BpeA== 51746\n5Li656m6 51747\nIHN3b3Ju 51748\n4oCUb3I= 51749\nX3JlZ2lzdHJ5 51750\nIGRpc2FzdGVycw== 51751\nIFJPSQ== 51752\nIOKAlQ== 51753\nYWt0dQ== 51754\nZm9yZXN0 51755\nYmVpdGVu 51756\n4oCUSQ== 51757\ndWV2YQ== 51758\nZWd0 51759\nIHNwaWtlcw== 51760\nVVJFUw== 51761\nIFJlY29tbWVuZGVk 51762\nIGV4cGxvaXRlZA== 51763\nIEZyZWRlcmljaw== 51764\nX0NPTVBMRVRF 51765\nIERydWdz 51766\nISEhISEhISE= 51767\nIFJpdg== 51768\nU1RPUA== 51769\nUk9PTQ== 51770\nIFBBU1NXT1JE 51771\nQ29va2llcw== 51772\nLkVs 51773\n4but 51774\nIEJlcnQ= 51775\nIGhhc2hlZA== 51776\naWNlc3Rlcg== 51777\nIGRlY29yYXRvcg== 51778\nIHF1ZXJ5U3RyaW5n 51779\nOjsK 51780\nICJbIg== 51781\nb3RvcGU= 51782\nLUFtZXJpYw== 51783\nIE1hdHRoZXdz 51784\nVVJBTA== 51785\n4oCcLA== 51786\nU3VtbWVy 51787\nZm9z 51788\nX0NPTlRBSU5FUg== 51789\nX0FDSw== 51790\nIGZpbHRy 51791\nX2Rpc3A= 51792\nX1Jl 51793\nIGZhY2lsZQ== 51794\n0LDRiA== 51795\nIOyVig== 51796\nIGViZW4= 51797\nIHNwcmluaw== 51798\nIFF1aW50 51799\nPlY= 51800\nIGhpc3RvcmlhbnM= 51801\nb3VybWV0 51802\nIE1vbml0b3Jpbmc= 51803\nbGVkZ2Vy 51804\nY290dA== 51805\nIHdhcmU= 51806\nR0dMRQ== 51807\nY2Fycw== 51808\nIE1FRElBVEVL 51809\nIHZvbHVwdA== 51810\nX1ZpZXc= 51811\nSEVM 51812\nKGNvcHk= 51813\nKHN0YXRz 51814\nIGNocm9tb3NvbWU= 51815\nIEN1cnRpcw== 51816\nLWNvbmY= 51817\nKGFzc2V0 51818\nIGh2b3I= 51819\nRmlsZVN5c3RlbQ== 51820\nPD4oKTsNCg== 51821\nb2NvZGVy 51822\nIENhbm5vbg== 51823\nKXg= 51824\nIFNtb290aA== 51825\nIFNBUw== 51826\nX2Nl 51827\nCXByZXY= 51828\nX21vdmll 51829\nRWM= 51830\nX3dhbGw= 51831\nPEJ1dHRvbg== 51832\nIEZBU1Q= 51833\nIG9uVmlldw== 51834\ndWxhbg== 51835\nIFNVUFBPUlQ= 51836\nIGdlc2NoaWNodGVu 51837\nIFNvbnM= 51838\nSW1t 51839\nJElGbg== 51840\nIGZhaXJuZXNz 51841\nIGRwaQ== 51842\nYXRzdQ== 51843\nSm9zaA== 51844\nRXF1YWxpdHk= 51845\nIH0oKQo= 51846\nX2xlc3M= 51847\nIFJhdGlv 51848\nIENhdHM= 51849\nIFN0ZXJu 51850\nTW9uc3Rlcg== 51851\nIG1lcmN1cnk= 51852\nw7xocg== 51853\nIHBsdXNpZXVycw== 51854\nLmRlc2VyaWFsaXpl 51855\nc2NvcHk= 51856\nLkZhbHNl 51857\nKWFuaW1hdGVk 51858\nIEV4cGVydHM= 51859\nICIiKXsK 51860\nLldoZW4= 51861\nc2VlYWxzbw== 51862\nLnVucGFjaw== 51863\nTEVN 51864\nLnNlbGVjdEFsbA== 51865\nIHBlcmNlcHRpb25z 51866\ndWRpbmc= 51867\naXJsaW5n 51868\nIFByaW50aW5n 51869\nZ3JhbXM= 51870\nIEZpbGVTdHJlYW0= 51871\nZXJ2aWxsZQ== 51872\naWxvZw== 51873\naWNtcA== 51874\nX0NvdW50 51875\nIGxpdmVzdG9jaw== 51876\nLWNh 51877\nZG9jdW1lbnRz 51878\nIHBvbGVz 51879\nCXdhbnQ= 51880\nIGZsdW9yZXM= 51881\nIHN0YW5kcG9pbnQ= 51882\nIEh1Z2U= 51883\nIHJhZGlhbnM= 51884\nIFVJQmFy 51885\nRURJVU0= 51886\nIEhpc3Rvcmlj 51887\nX2hvbGRlcg== 51888\nIE1hcmluZXM= 51889\nIHTDpA== 51890\nLkxpZ2h0 51891\ncXVpcmVy 51892\nYXNvbnJ5 51893\nZGl2aWRlcg== 51894\nIEZsdXR0ZXI= 51895\nX2Zi 51896\ncmVzdHJpY3RlZA== 51897\nIEV2ZXJ5Ym9keQ== 51898\nTsOjbw== 51899\nIGtub3Q= 51900\nIFR3aXRjaA== 51901\nIGhhbGx3YXk= 51902\nKENvbGxpZGVy 51903\nSW5wdXRFbGVtZW50 51904\nPykK 51905\nL29mZg== 51906\nLyk= 51907\ncGxheWVk 51908\nW09G 51909\nIGJhdHRpbmc= 51910\nX2Rs 51911\nIGNvbWVkaWFu 51912\nIMOpdg== 51913\nIERFTQ== 51914\nIEVkZW4= 51915\nOndoaXRl 51916\nJycs 51917\nQ29uc3RydWN0aW9u 51918\nYWNlcmI= 51919\nIHRhc2tlZA== 51920\nLm1hbmFnZQ== 51921\nUmVsYXRpb25zaGlw 51922\nIHBob24= 51923\nbno= 51924\nX0JHUg== 51925\nVmFsaWRhdGVBbnRpRm9yZ2VyeVRva2Vu 51926\nX2Fpcg== 51927\n4oCcV2hlbg== 51928\nIGdsZnc= 51929\nIENvbnZlcnNhdGlvbg== 51930\nX1RPVEFM 51931\nLFo= 51932\nIGdyYXo= 51933\nIGl0ZXJhYmxl 51934\nIFBBU1M= 51935\nIGFkdmVydGlzZQ== 51936\nIG3DtmdsaWNo 51937\nL3RyYWlu 51938\nIFZvbGtzd2FnZW4= 51939\nIGNyZWVweQ== 51940\nICIpDQo= 51941\nUVVFTkNF 51942\nIGFsdGFy 51943\nIGVkaXRz 51944\nY29tcGlsZWQ= 51945\nYXduaW5n 51946\nIER1bmdlb24= 51947\nIG9zZw== 51948\nTmF2aWdhdGlvbkJhcg== 51949\nIHRyZW5kaW5n 51950\nIEVjbw== 51951\nb2dnbGVz 51952\nY2RvdA== 51953\nfC0= 51954\nU2ll 51955\nZWNyZXQ= 51956\nIE5lZ2F0aXZl 51957\nIExpbmc= 51958\nIERJTQ== 51959\nIENXRQ== 51960\nIENhcnJpZXI= 51961\nIGNhcnRyaWRnZQ== 51962\nX3VzYg== 51963\nPW9z 51964\nIEphY2tpZQ== 51965\nIG90cmFz 51966\nIGNvbW1vZGl0aWVz 51967\nIFByZXNlbnRhdGlvbg== 51968\nKSYmKA== 51969\nIE1hcnRoYQ== 51970\nIENhdGhvbGljcw== 51971\nIE1vbmQ= 51972\n0L7QsdGL 51973\nX2Fic29sdXRl 51974\nIGFzaGFtZWQ= 51975\ncG9uc29ycw== 51976\ndGFs 51977\nIHNhZG5lc3M= 51978\nIHB1w7I= 51979\nRmFkZQ== 51980\nLXByZXZpZXc= 51981\nIFJlcXVlc3Rz 51982\nIENhbHZpbg== 51983\naG9ybg== 51984\nUmV1c2VJZGVudGlmaWVy 51985\nKHByb3ZpZGVy 51986\nL2FwcHM= 51987\naW1lbw== 51988\nCUNsYXNz 51989\nU2Ftc3VuZw== 51990\nIFdPUkxE 51991\nIGNpbm5hbW9u 51992\nZG90ZW52 51993\nIElVc2Vy 51994\nIERFVg== 51995\nX0NoYXI= 51996\nLmliYXRpcw== 51997\nZXRp 51998\nL21l 51999\nc3N0 52000\nLnN5bQ== 52001\nIFJ1Z2J5 52002\nLW1hc3Rlcg== 52003\nYWphcg== 52004\nIFlFQVI= 52005\nIG9kcA== 52006\nIFJvbGVz 52007\nIGJpcGFydGlzYW4= 52008\nYWlsbGU= 52009\nIGJsb2NrZXI= 52010\nIGdyZWVucw== 52011\nLlNFQ09ORFM= 52012\nIGJlbGlldmVycw== 52013\nIExpa2Vz 52014\nRkxPQVQ= 52015\nIG1haw== 52016\nIGdjYw== 52017\n4pWQ4pWQ 52018\nKCJ+Lw== 52019\nU0NSSVBUT1I= 52020\nIHRvbm5lcw== 52021\nIFNhbmc= 52022\nIHRyYW5zcG9zZQ== 52023\nZW5uYWk= 52024\nUHJlZA== 52025\nIHNvbGx0ZQ== 52026\nLmdpdGh1YnVzZXJjb250ZW50 52027\nKHByaW50 52028\nIEhvbGU= 52029\n55yL 52030\nYWRnZXQ= 52031\nIHByb21wdHM= 52032\nIGdlbmV0aWNhbGx5 52033\nIEhvZA== 52034\nIHZlcnRpY2FsbHk= 52035\nX2NvbnRyb2xz 52036\n0YHRgtCw0L0= 52037\nIil7DQo= 52038\nJHRpdGxl 52039\nIH0pLAoK 52040\nIHN0YXRld2lkZQ== 52041\nIENvcnJlc3BvbmQ= 52042\nIEF0dHI= 52043\naXRhbnQ= 52044\nRWxlbWVudFR5cGU= 52045\nIG91dHdhcmQ= 52046\nIGZhbWlsaWE= 52047\nKGFydGljbGU= 52048\nIGJsYXQ= 52049\nwqAK 52050\nIGdsR2V0 52051\nIFJlY2VpdmVy 52052\nICUt 52053\nYWRhbQ== 52054\nV2lubmVy 52055\nIHRhaWxvcg== 52056\nX3B3ZA== 52057\nZXJ0ZW4= 52058\nU3Rhbg== 52059\nCWFsbA== 52060\nYWxpdmU= 52061\nc3RydG90aW1l 52062\n77+9cw== 52063\nc2Vzc2lvbnM= 52064\nJGNvbm4= 52065\nYXNzaXN0 52066\nIGNoYXR0aW5n 52067\nIE1hbnQ= 52068\nICVA 52069\nICIiKTsKCg== 52070\nIGRndg== 52071\nIO2VqA== 52072\nLnJlcGVhdA== 52073\nX01lc3NhZ2U= 52074\nIGFkdmlzZXJz 52075\nL3BhdGg= 52076\nIGtlcw== 52077\nKX08Lw== 52078\nTWlzYw== 52079\nIGJzb24= 52080\nIHRyaW1tZWQ= 52081\nIEFjaw== 52082\nVmVydGV4QXR0cmli 52083\n57Si 52084\ndWF0ZXM= 52085\nLm15c3Fs 52086\nIGRlc3Rpbg== 52087\nIHByb2Js 52088\nKENvbnN0YW50 52089\nYXNzZXM= 52090\nLWltYWdlcw== 52091\nX0FSRUE= 52092\nX18qLw== 52093\nW10o 52094\nIHNpZ25Jbg== 52095\nxJE= 52096\neHI= 52097\nYWhpcg== 52098\nLmZpcmVzdG9yZQ== 52099\nIHNlcXVlbnRpYWw= 52100\nIElkZWE= 52101\nLWJhc2lj 52102\nX3BhZw== 52103\nIGluc3RhZ3JhbQ== 52104\nb3Ryb24= 52105\nX2FsaWdubWVudA== 52106\nXFxcXA== 52107\nLkZhY3Rvcnk= 52108\nLnJ1bGU= 52109\nLmNoZGly 52110\nIGxpYnJv 52111\nKGdhbWVPYmplY3Q= 52112\nLlRvb2xTdHJpcEJ1dHRvbg== 52113\nIGRpc2NvdmVycw== 52114\nLkFyZ3M= 52115\nZG9i 52116\nIHZu 52117\n4oaS 52118\nIGTDvA== 52119\nIFhN 52120\nIGFsdW1uaQ== 52121\nIGhvbmU= 52122\nIHNlY3VyZWx5 52123\nX2Ryb3Bkb3du 52124\nRGlzY2xhaW1lcg== 52125\nIGR6aQ== 52126\nKHRpbWVzdGFtcA== 52127\nJyld 52128\nIGN1bHRpdmF0aW9u 52129\nLi4uCgoK 52130\nIFRyZWF0eQ== 52131\nIERpc3M= 52132\nIGNvbmZsaWN0aW5n 52133\nLmdldFNlbGVjdGlvbg== 52134\nIHBsYXlhYmxl 52135\nIFNpbGs= 52136\nIEVxdWFsaXR5 52137\nIG1veQ== 52138\nIGZsYXR0 52139\nIG1vdGl2ZXM= 52140\nUGVyZmVjdA== 52141\nLmV4aXN0 52142\nIHR3ZWFr 52143\nIG9taXQ= 52144\nIFR3aWxpZ2h0 52145\nIGtpc3Npbmc= 52146\nIGNocmlzdGlhbg== 52147\nKFNF 52148\nX2RlZmluZQ== 52149\nIFBlbmc= 52150\nU29ydGVk 52151\nJ2lu 52152\nTG9ncw== 52153\n4buHbg== 52154\nIG55bG9u 52155\nRHVtcA== 52156\nSW1hZ2luZQ== 52157\ncmVuYW1l 52158\nIGJlZm9yZWhhbmQ= 52159\ncHlnYW1l 52160\nIGJweQ== 52161\nIERq 52162\nIHRpdHVsbw== 52163\nIG5sdGs= 52164\nIFNjaG1pZHQ= 52165\nIENhdg== 52166\nKG9uZQ== 52167\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52168\nLmdldE1vZGVs 52169\nIFB0 52170\nYXRvaQ== 52171\nLmxvY2Fscw== 52172\nYnVyc2VtZW50 52173\nUHJvdmluY2U= 52174\nIEFwcHJvdmVk 52175\nKCk8PA== 52176\nw7NyaWE= 52177\ndXNjaA== 52178\nIEplbm55 52179\nYXJyYW50cw== 52180\nIExpYmVydA== 52181\nTG9yZA== 52182\nIFJlbW92ZWQ= 52183\nX2NvZGVj 52184\nLmJ1bmRsZQ== 52185\nIEdvbnphbGV6 52186\nb3BlcnM= 52187\nneWni+WMlg== 52188\nZXR0aW5n 52189\nIGdvZGRlc3M= 52190\ncmlwZQ== 52191\nIG11c2N1bGFy 52192\nCQkJCQkJCQkg 52193\nIEh1Z28= 52194\nIG1lam9yZXM= 52195\nbG9pZA== 52196\ncml0ZWxu 52197\nZ2lz 52198\nYWRkb24= 52199\nICgoKCg= 52200\nYXBwb2ludG1lbnQ= 52201\ncmVzZXJ2ZWQ= 52202\nCWZyaWVuZA== 52203\nX2F2YXRhcg== 52204\nQk9PTEU= 52205\nYWhp 52206\nLUVORA== 52207\nIGlmZg== 52208\nw7Ni 52209\nIEJydW5v 52210\ncm93c2FibGU= 52211\nIFBvaXNvbg== 52212\nKGZsYWdz 52213\ndXJ0bGVz 52214\nIEFuaW1l 52215\nIG1pZ3JhbnQ= 52216\nCXN0cmNhdA== 52217\nKHJlcGx5 52218\nIFJlZnVnZQ== 52219\nIEJX 52220\nZWZ1bA== 52221\nJHZhbHVl 52222\nZmVk 52223\nICAgICAgICAgICAgICAgICAgICAgICAK 52224\n6LWE 52225\nKGNt 52226\nIHZ1bG5lcmFiaWxpdGllcw== 52227\nIFsoJw== 52228\nIHVuYmVsaWV2YWJsZQ== 52229\nc3RyaWN0aW9u 52230\nZW50aWV0aA== 52231\nIHByYXlpbmc= 52232\nQ2xhaW1z 52233\nIGthdWZlbg== 52234\nbsOp 52235\nIHBvaXNvbmluZw== 52236\nY29sbGVjdGlvbnM= 52237\nIGluaXRTdGF0ZQ== 52238\nIFNldmVyaXR5 52239\nIGNvbnRlbnRpb24= 52240\nIAoJCg== 52241\nLmNvbnRyb2xsZXJz 52242\nc3RydWN0dXJlZA== 52243\naWN0aW0= 52244\nIE9iZXI= 52245\nIC8qI19f 52246\nX09U 52247\nIEFtZXJpY2Fz 52248\nIEFkYQ== 52249\nUHJvZHV0bw== 52250\nLm11bHRp 52251\nIGdyYXBl 52252\nYmVn 52253\n5p+l6K+i 52254\nIHF1YXJ0eg== 52255\nIFJvbWFuY2U= 52256\nIE1pZHdlc3Q= 52257\nIGhvdXNlZA== 52258\nIGZ1cm5pc2g= 52259\naWNvbnQ= 52260\nLnVuc2hpZnQ= 52261\nb3RyZQ== 52262\nIMO6bg== 52263\naXBwbGU= 52264\nIHN1YnVyYg== 52265\ndWFsaQ== 52266\nVm9pY2U= 52267\nLklzQW55 52268\nLGNvbHVtbg== 52269\nIFByb3NlYw== 52270\nSURB 52271\nCXBvc3Q= 52272\ncHRvbXM= 52273\ndsOp 52274\nIEluZ3JlZGllbnRz 52275\nw7ZmZg== 52276\nLm9wZXJhdG9y 52277\nIDw8PQ== 52278\nbGFzdGlj 52279\nIHJlc2VtYmxl 52280\nVW5hdXRob3JpemVk 52281\nIHR1dHRv 52282\nX1NXSVRDSA== 52283\nX1JFQURZ 52284\nfT0= 52285\nbm93bGVkZ2U= 52286\nIGFwcGVuZGVk 52287\ndW5nYW4= 52288\n4oCZZW4= 52289\nIExvcmVu 52290\ncHVibGlzaGVy 52291\nIE1H 52292\nfSwi 52293\nIFdhbHNo 52294\nVGVtcGxhdGVz 52295\nX3NvY2lhbA== 52296\nIHBhcmlzaA== 52297\nIFNwbA== 52298\nbWluYXRlZA== 52299\nKEZBTFNF 52300\nIGZvcmVmcm9udA== 52301\nbW9kaXR5 52302\nIGJpbGF0ZXJhbA== 52303\nIGNvbXBldGl0 52304\nIGNhbmRsZXM= 52305\nLmRw 52306\nIGNvbGxlY3Rz 52307\ndGVsZWZvbm8= 52308\nIGF0dGVudA== 52309\nIExlbW9u 52310\naXphZGE= 52311\nIHRoZXJhcGllcw== 52312\nIHBhcmFkb3g= 52313\nIHRhcw== 52314\nLXN1Ym1pdA== 52315\nZWtlcg== 52316\nSU5hdmlnYXRpb25Db250cm9sbGVy 52317\nIG1ldGF2YXI= 52318\nIHNld2luZw== 52319\nIFppbWJhYndl 52320\nIGxhd2Z1bA== 52321\nIGxvcmU= 52322\nIExvYWRz 52323\nINGB0L7Qt9C0 52324\nLnByb21pc2U= 52325\nIEZhY2Vz 52326\nLlBsYXRmb3Jt 52327\nLmdldExvY2F0aW9u 52328\nIHRyb3VibGluZw== 52329\nIHbDrWRlbw== 52330\nIEZlYXR1cmluZw== 52331\n5Lqn 52332\ncWVk 52333\nIG9uQmluZA== 52334\nIHRvZGRsZXI= 52335\nQ2xv 52336\nRGl2aXNpb24= 52337\nLWdhbGxlcnk= 52338\nIEdlbGQ= 52339\nc3BlY2lmaWM= 52340\nRmllbGROYW1l 52341\nX2V4Y2Vs 52342\nXGh0ZG9jcw== 52343\nIERW 52344\nICY6 52345\nIHR3aWc= 52346\nIENvbmNlcm4= 52347\nIHNob3RndW4= 52348\nIG5pY2tlbA== 52349\nIEx1eHVyeQ== 52350\nX0tFWVM= 52351\nLm5weQ== 52352\nxa8= 52353\nIGZvcmVoZWFk 52354\nzrI= 52355\nIGVuZGFuZ2VyZWQ= 52356\nL3RoZQ== 52357\ncGlwZWxpbmU= 52358\nxbE= 52359\nbmVv 52360\nRXhwbG9yZQ== 52361\nU3BlY1dhcm4= 52362\nIGludGVyY2hhbmdl 52363\nKHBp 52364\nYmlydGhkYXk= 52365\nRGF0YVJvdw== 52366\nIFNQUg== 52367\nIG9zdGU= 52368\nICJ+ 52369\nYXRpc2ZhY3Rpb24= 52370\nTkg= 52371\nb3Jkbw== 52372\nLWZvY3VzZWQ= 52373\nJ0E= 52374\nlok= 52375\nLmJlc3Q= 52376\nIFNwZWNpZmljYXRpb24= 52377\nLz4uCgo= 52378\nb2dlbmVzaXM= 52379\nIE9QVElPTlM= 52380\ndXB0b29scw== 52381\nIG1pbGl0YW50 52382\nIGV4aXRlZA== 52383\naWdhcg== 52384\nIENPTU0= 52385\nIERpc3Bvc2FibGU= 52386\nYXljYXN0 52387\nIHJvd3NwYW4= 52388\nIHN5bnRoZXM= 52389\nIHNvbmRlcm4= 52390\nIDwhLS08 52391\nIEVuZGU= 52392\nLnZhcmlhYmxlcw== 52393\nIGNvbnNlcXVlbnRseQ== 52394\nc2Rr 52395\nU3VwcGx5 52396\ncmVzcG9uc2l2ZQ== 52397\nT3BlbmluZw== 52398\ncGhvdA== 52399\nIH1c 52400\nIGJ1bGxzaGl0 52401\nIGJlYWNvbg== 52402\nX3NhdA== 52403\nIHNuYXBz 52404\nIEdIeg== 52405\nTE9ORw== 52406\nPHBhaXI= 52407\nIFsKCg== 52408\nIFZlcmc= 52409\nIEVpbmU= 52410\nL3Bvc3Rz 52411\nIGFyYWI= 52412\nIHN1bWE= 52413\n44Oz44OI 52414\nIHNjYXJj 52415\nIG9sZWg= 52416\nID8/Pw== 52417\nIE9mZmVycw== 52418\neGVk 52419\nIGZ1bGxXaWR0aA== 52420\nLWFjdGlvbnM= 52421\nT3V0ZXI= 52422\nIEV4cG8= 52423\nw6lyZXI= 52424\nLkhl 52425\nREg= 52426\nIGhpbA== 52427\nIE1pbGxlbm4= 52428\n0LXQvdGM 52429\nSWNl 52430\nX2dyYXk= 52431\nINC/0L7Qu9GD0Yc= 52432\nIFB1bms= 52433\nIHRpbWV2YWw= 52434\nIGlzYQ== 52435\nIENIdG1s 52436\nLkRhdGFQcm9wZXJ0eU5hbWU= 52437\nIGRpeQ== 52438\ndG91cg== 52439\nIGpUZXh0RmllbGQ= 52440\nIGplbGx5 52441\nIGFra2E= 52442\nLWVyYQ== 52443\nRGVwcmVjYXRlZA== 52444\nX0lNUEw= 52445\nIE1vbnRocw== 52446\nX0lURVI= 52447\nIGFydGU= 52448\nIEhlYWRpbmc= 52449\nIEJvaA== 52450\nIHByYWc= 52451\nIGRvd25zdHJlYW0= 52452\nIEJPQVJE 52453\nX2tleXdvcmRz 52454\nIE1ldHJvRnJhbWV3b3Jr 52455\nKS0o 52456\nPEV2ZW50 52457\n4bqldA== 52458\nIFByZWNpc2lvbg== 52459\nIE1SSQ== 52460\naGVyZW5jZQ== 52461\naXhv 52462\nKSkpewo= 52463\nKCk/Pg== 52464\nIHNhYXQ= 52465\nIFdhcmVob3VzZQ== 52466\nX2F0b21pYw== 52467\nIHZvaWNlZA== 52468\nSXRlbUNsaWNr 52469\nICAgICAgCQ== 52470\nLlJlc3VsdFNldA== 52471\nL3BsdWdpbg== 52472\nIGhhbGxz 52473\nPWZvcm0= 52474\nIFdhZ25lcg== 52475\nZW1haWxz 52476\nJSUK 52477\nVU5LTk9XTg== 52478\nIFJpbQ== 52479\ndWludHB0cg== 52480\nIExpYmVyYWxz 52481\nIHRlcnJpdG9yaWFs 52482\nIE11cmRlcg== 52483\nIExhZGVu 52484\nIHByZXNpZGVudGU= 52485\nKGNhcA== 52486\nIH0sewo= 52487\nYXZvdXJpdGU= 52488\nZmluZEFsbA== 52489\nIGFwcGxhdWQ= 52490\nIOuplA== 52491\nL3Bob3Rv 52492\nX3N5bg== 52493\nLndhbGs= 52494\nIHN1bnNoaW5l 52495\nIHN0dWJib3Ju 52496\nIGRvd25zaWRl 52497\nIExURQ== 52498\nLWJ1aWxkaW5n 52499\nUXVlcnlCdWlsZGVy 52500\nX2Rpc2FibGVk 52501\nVGVycg== 52502\nYWtyYQ== 52503\nUmVmcmVzaGluZw== 52504\nX3Byb2Jz 52505\nIGZvbGw= 52506\nPmI= 52507\nIGNvbGxhdGVyYWw= 52508\nJGVycm9y 52509\nIGFjb21wYW4= 52510\nX2l2 52511\nK2Q= 52512\nYWp1 52513\nIOKd 52514\nc3VybmFtZQ== 52515\nLmFydGljbGU= 52516\nIGJpY3k= 52517\nIjoKCg== 52518\nPjw/PSQ= 52519\n0LrQu9GO0Yc= 52520\nZWNvbWU= 52521\nRmluZGluZw== 52522\nKHBk 52523\nIHJlY3Rhbmd1bGFy 52524\nZXN0bw== 52525\naWhpbA== 52526\nPScnKQo= 52527\nIG1hbnNpb24= 52528\nX2ZpbHRlcmVk 52529\nYW5lZA== 52530\nUFJPRFVDVA== 52531\nTE9HWQ== 52532\nX2ly 52533\nLlJlbW90ZQ== 52534\nIGV4ZWN1dGVz 52535\nb3RlY2hub2xvZ3k= 52536\nIFBST0NFU1M= 52537\nIHJvd0luZGV4 52538\nZ2V0WA== 52539\nTXV0 52540\naW5za3k= 52541\nKHN0cmluZ3M= 52542\nIE1veg== 52543\nRmxvb3I= 52544\nLlN0cnVjdA== 52545\nX3ByZWRpY3Rpb24= 52546\nIGNhcnJpYWdl 52547\nIGNvbGxlY3RvcnM= 52548\nIFdoZWVscw== 52549\nIGJ1bmRsZWQ= 52550\nYXhlZA== 52551\na29s 52552\nX2Nyb3A= 52553\nIGJsb29t 52554\nQmVzaWRlcw== 52555\nIG92ZXJyaWRkZW4= 52556\nIHN1Ym5ldA== 52557\naWVuaWE= 52558\nKj46Og== 52559\nIFByaW1pdGl2ZQ== 52560\nIOag 52561\nLkNoYXJhY3Rlcg== 52562\n6KGo56S6 52563\nIEFESEQ= 52564\nUk9Z 52565\nSmFwYW5lc2U= 52566\nT1VT 52567\nOlVJQ29udHJvbEV2ZW50 52568\nIFBBTA== 52569\naXphY2lvbg== 52570\nIGNoZXJjaGU= 52571\nb3J0aW5n 52572\nIG9yZ2Fz 52573\nLlV0Yw== 52574\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52575\nXERvbWFpbg== 52576\nT1JB 52577\nIHRlcnJhY2U= 52578\nIHByaXM= 52579\nCQkJCQkJCQkJCg== 52580\nIHJhaWRz 52581\nX2luY3JlbWVudA== 52582\nIHVuanVzdA== 52583\nJG9wdGlvbnM= 52584\nb25DaGFuZ2U= 52585\nQmxvb2Q= 52586\nRmlsbQ== 52587\nIGhhbmRpbmc= 52588\nIG11Zw== 52589\nU09MRQ== 52590\n44OV 52591\naWNvbmR1Y3Rvcg== 52592\nIElzbGFtaXN0 52593\nICIiKTsNCg== 52594\nLW92ZXJsYXk= 52595\nLGNvbA== 52596\n6Zw= 52597\nYXJyaW5ncw== 52598\nX2NvbnRyYWN0 52599\nCWxs 52600\ncGlw 52601\nX2VtYmVkZGluZw== 52602\nIHBlcm1pdGU= 52603\nIG1vZGVt 52604\nIHRyaWdnZXJpbmc= 52605\nKGh3bmQ= 52606\nLiIpXQo= 52607\nIHNhbnQ= 52608\nIGV4dGluY3Rpb24= 52609\nIGNsYXNoZXM= 52610\nLkF1ZGlv 52611\nIHN1bw== 52612\nLm11bHQ= 52613\nIHNlYXNvbmVk 52614\nLlZhckNoYXI= 52615\ncG93ZXJlZA== 52616\nImNvbnRleHQ= 52617\nIG1lbmM= 52618\nKEdyYXBoaWNz 52619\nJHdoZXJl 52620\nIHJlY3VwZXI= 52621\nYWNrbGU= 52622\nIG5ld0RhdGE= 52623\nIEJyZWFraW5n 52624\nZXJnZWQ= 52625\nIENQUFVOSVQ= 52626\nIE11bGw= 52627\nIGtvbW10 52628\nIExlZWRz 52629\nJywnPQ== 52630\nLm5leHRUb2tlbg== 52631\nIFJpZw== 52632\nUkVUVVJO 52633\nCXRpbWVy 52634\nfV97 52635\nIE1hcmluYQ== 52636\nIHNsb2dhbg== 52637\nSVpFRA== 52638\nT3BlbkdM 52639\nX1BhZ2U= 52640\nYXRpdmFz 52641\nIGhhemFyZHM= 52642\nJ3ZhbHVl 52643\nIGNvcnBzZQ== 52644\nIEZsb3dlcnM= 52645\nX29ubGluZQ== 52646\nZGFs 52647\nIENvbGxpc2lvbg== 52648\nw6BuZw== 52649\nIGZlcnJ5 52650\nIHBva2U= 52651\nIFRvdXJpc20= 52652\naW5lcmFyeQ== 52653\nL1NldA== 52654\nLkVtcGxveWVl 52655\nPkA= 52656\nLHZhbA== 52657\nIE1pbGY= 52658\nYXZleg== 52659\nUmV0cnk= 52660\nLiIv 52661\nIHJvdW5kaW5n 52662\nLXBsYWNlbWVudA== 52663\nIGNlcnY= 52664\nTWV4 52665\nIE1zZ0JveA== 52666\nX3Npbms= 52667\nbWFuaWE= 52668\nX2NyZWRpdA== 52669\nR3VhcmRhcg== 52670\nIHZhbml0eQ== 52671\nIGltbXV0YWJsZQ== 52672\nIGNvbnRhbWluYXRlZA== 52673\n0LrQsNC3 52674\n5Liy 52675\nYWNoYQ== 52676\nIGhhdGg= 52677\nIGVudW1lcmF0aW9u 52678\nLmdldEJ5 52679\n4bq/dA== 52680\nIERhbw== 52681\nb2JpZXJubw== 52682\nIEd1dA== 52683\nX1BJUEU= 52684\nLmFkdg== 52685\nIEd1dGVuYmVyZw== 52686\nYWRo 52687\n66y4 52688\nZnVzYw== 52689\nLlZL 52690\ncHRh 52691\nIEVNUA== 52692\nLkZpcnN0TmFtZQ== 52693\nIHJlYWxpemVz 52694\nLmNn 52695\nIHVuaXRl 52696\nUExJVA== 52697\nIEFiZHVs 52698\nIE1FRA== 52699\nUkFJTlQ= 52700\nIHF1ZXN0YQ== 52701\nc3RkaW4= 52702\nIGNhbG9yaWU= 52703\nCWdsQmluZA== 52704\nIGFybWE= 52705\neWxsYW5k 52706\nT01Q 52707\nLXE= 52708\nIEtoYWw= 52709\nc2FsYXJ5 52710\nCUFORA== 52711\nc2dp 52712\nX3RoYW4= 52713\nLWJ1aWx0 52714\nICsvLQ== 52715\nIG5hcmdz 52716\nX2xhdW5jaA== 52717\nIFNR 52718\nem9u 52719\nIEJlbmVk 52720\nX3VuaW9u 52721\nPigpOw0KDQo= 52722\nIFNpbXM= 52723\nIERhdGVz 52724\nCUNvbm5lY3Rpb24= 52725\nIFBlcmM= 52726\nZ3JhbnQ= 52727\nYW1waWw= 52728\nIGFnZ3JlZ2F0aW9u 52729\nZXNlbGVjdA== 52730\nX1NVUA== 52731\nKHsKCg== 52732\nLm9t 52733\nIHdt 52734\nLmNvbnRyYWN0 52735\nLU9yaWdpbg== 52736\nIGdlbWU= 52737\nZnJlZXpl 52738\nTlVNQkVS 52739\nLmN1cnI= 52740\nIEdsYWQ= 52741\nc2xh 52742\nIFJlYg== 52743\n0LXRgdGC0LLQvg== 52744\nYXJib24= 52745\nL2NvbnRyb2xsZXJz 52746\nU2xvdHM= 52747\nLmRlZXBjb3B5 52748\nRlVMTA== 52749\ndWlyZQ== 52750\nQHN0dWRlbnQ= 52751\n4LmJ4Lit 52752\nVHJhbnNsYXRvcg== 52753\nIHByZWZlcmFibHk= 52754\nY2hlbWlzdHJ5 52755\nIEphY29icw== 52756\nbmFy 52757\nICgiXA== 52758\nbmVhcg== 52759\naWZpcXVl 52760\nCWNvbHVtbg== 52761\nIG1pbnV0b3M= 52762\naWdlcw== 52763\nIGVzdGFibGU= 52764\nLWRpc2M= 52765\nKENoYXI= 52766\na292 52767\nZXhhbXBsZXM= 52768\nX18oIg== 52769\nINC60LDQug== 52770\nIEJvcmlz 52771\nKGR4 52772\nc3By 52773\nIG92ZXJoYXVs 52774\nYXRvb24= 52775\nIEhhcmxleQ== 52776\naWNhbWVudGU= 52777\n4paI4paI4paI4paI 52778\nZXZpdHk= 52779\ndXNoZXI= 52780\nLlZpc3VhbFN0dWRpbw== 52781\nV2F2ZQ== 52782\nIE5vcm1hbGx5 52783\nc3Rvb2Q= 52784\nb3JuaW5ncw== 52785\nIGhhbmRtYWRl 52786\nKGxvZ2dpbmc= 52787\nIGNhcmNpbg== 52788\nYWNqYQ== 52789\nIHN1cGVycw== 52790\nIHNpZWdl 52791\nCUlm 52792\nIElMb2dnZXI= 52793\nVUFSVA== 52794\nQW5pbWF0aW9uRnJhbWU= 52795\nIHRhcGVz 52796\nIGFpZHM= 52797\nIENvbG9uZWw= 52798\ndmVlZG9y 52799\nIG1kbA== 52800\ncGhvbg== 52801\nRGlzbWlzcw== 52802\nQXZhaWxhYmlsaXR5 52803\nVW5pZm9ybUxvY2F0aW9u 52804\nIGlkZWFscw== 52805\ncXVldHRl 52806\na2VpdGVu 52807\nIEVNQUlM 52808\nIE5lYg== 52809\nIHN1bW1vbmVk 52810\nIGdvdmVybm1lbnRhbA== 52811\nIEhvcnJvcg== 52812\nY2hhbmdpbmc= 52813\nIEFjdGl2YXRl 52814\nSWxs 52815\nPHRib2R5 52816\nY3JlYXRpdmU= 52817\nIEJMRQ== 52818\nIG1hZG5lc3M= 52819\nT3JOaWw= 52820\nIGhpbg== 52821\nxZM= 52822\nLkdldEtleQ== 52823\nX2NvbnNvbGU= 52824\nIk91cg== 52825\nIGd1aW50 52826\nIGFtaQ== 52827\nIHJlZmxlY3RpdmU= 52828\nIGNyYWNraW5n 52829\nIFJp 52830\nUkFM 52831\ndXJzZWQ= 52832\ncHVyZQ== 52833\nIHJlcGFpcmVk 52834\nIHRpZ2Vy 52835\nIE5pY29sYXM= 52836\nVnM= 52837\nbnRo 52838\nLmV4cHJlc3Npb24= 52839\nIHNlYXM= 52840\nX0FDQ0VQVA== 52841\nIGZvcmM= 52842\nIEZyYXU= 52843\nIHRocmVzaA== 52844\nIM+A 52845\nKEJBU0U= 52846\nX09wZW4= 52847\nV3VudXNlZA== 52848\nIERvbWVzdGlj 52849\nKHByaXY= 52850\nZ3Vlc3M= 52851\nLy8hCg== 52852\nZ2V0SXRlbQ== 52853\nKCkpCgoK 52854\nbXV0YXRpb25z 52855\nIHN0cw== 52856\nIGRlbWVudGlh 52857\nc3Bva2Vu 52858\nJHBhcmFtcw== 52859\nIHBhdHJvbnM= 52860\nIHJ1bndheQ== 52861\nIEJVWQ== 52862\nLldhcm5pbmc= 52863\nIG5ldXRyYWxpdHk= 52864\nemhvdQ== 52865\n0YDQsNGJ 52866\nYWt0ZXI= 52867\nIENvbnN0cnVjdG9ycw== 52868\nw5NO 52869\nIFByb2dyZXNzaXZl 52870\nIEJ1cmdlcg== 52871\nIGluY3VycmVk 52872\nIGltcGxpY2l0bHk= 52873\nX2Vudmlyb25tZW50 52874\nIGV4YWNlcmI= 52875\nIGVuZHVyaW5n 52876\nc2lj 52877\nIFBhcnRpY2lwYW50cw== 52878\nX0Jsb2Nr 52879\nIGVucm9sbA== 52880\nX2VtcGxveWVl 52881\nIFBlcHBlcg== 52882\nbGF1Z2h0ZXI= 52883\n44OW 52884\nJ107Pz4= 52885\nPScu 52886\nKHJlbmFtZQ== 52887\nIHNoZWx0ZXJz 52888\nIEFNQQ== 52889\nX2dhcA== 52890\nIFJFVVRFUlM= 52891\neGFtcHA= 52892\nT01JQw== 52893\nIHBlZGlkbw== 52894\nIGTDqXZlbG9w 52895\nX18oLyoh 52896\nX29k 52897\nd2VyZQ== 52898\nX051bWJlcg== 52899\nX211bHRpcGxpZXI= 52900\nS0VFUA== 52901\nIHNob3dlcnM= 52902\nIG1hZ2U= 52903\nIHNpbm8= 52904\nY3Jvdw== 52905\nLmlkeA== 52906\nX25vdGljZQ== 52907\ndWVpbA== 52908\nIG15cmlhZA== 52909\nIEF2YWlsYWJpbGl0eQ== 52910\nY2VudHJhbA== 52911\nIEFCT1VU 52912\nIGluY29ycG9yYXRpbmc= 52913\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 52914\nX3dpZGdldHM= 52915\nIHN5c3RlbUZvbnRPZlNpemU= 52916\nw7ZydA== 52917\nL2pwZWc= 52918\nIFNNVFA= 52919\nKGJyb3dzZXI= 52920\nZ3Vucw== 52921\nc2V0dw== 52922\nX0FWQUlMQUJMRQ== 52923\nIGluY29ycG9yYXRlcw== 52924\nL2FuZHJvaWQ= 52925\neXg= 52926\n5biD 52927\nX2xhYg== 52928\nIGxlYWtpbmc= 52929\nIEhpbnQ= 52930\nw7xuY2hlbg== 52931\nLlNjYWxl 52932\nIGZpcmV3b3Jrcw== 52933\nIGxQYXJhbQ== 52934\nYnNk 52935\nYXhvbg== 52936\nKHByZWRpY3Q= 52937\nQ29uZ3JhdHVsYXRpb25z 52938\nIFNwZWN0cnVt 52939\nSVJD 52940\nIEFkbWluaXN0cmF0aXZl 52941\nIGltcHJpc29uZWQ= 52942\nUlNwZWM= 52943\nIHJldGFpbnM= 52944\nIHNldHRsaW5n 52945\nIGNpdGF0aW9ucw== 52946\nIFdvcmxkcw== 52947\nc3RyY29udg== 52948\nb3VzYW5k 52949\nIEJlZ2lubmluZw== 52950\nIEFuZHJld3M= 52951\nIFNoYXJvbg== 52952\nRXhlY3V0aW5n 52953\nZ3JvdXBJZA== 52954\nYWRkRmllbGQ= 52955\nIGV4cGFuZHM= 52956\nIGtpbG9tZXRyZXM= 52957\nbGlua3k= 52958\nIGdycA== 52959\nSU5BVElPTg== 52960\nQnJpdGlzaA== 52961\nIGNvbXBvcnQ= 52962\nLkRhdGFHcmlkVmlld0NvbHVtbg== 52963\nIFByb2R1Y3Rpb25z 52964\naWxkZW4= 52965\nIHVuaXg= 52966\nX2dhbGxlcnk= 52967\nX1BST1ZJRA== 52968\nb3JkZXJpbmc= 52969\nX2Fubg== 52970\nYmg= 52971\nLkRlc2lnbg== 52972\nIHRyZWZmZW4= 52973\nIHVuZGVybGluZQ== 52974\nX251bXM= 52975\n7ZWc64uk 52976\nKXY= 52977\ndXNpemU= 52978\nIGRpc2FwcGVhcmFuY2U= 52979\nVG9Cb3VuZHM= 52980\nIHBjbA== 52981\nIFdpbm5pcGVn 52982\nIFNoZXJtYW4= 52983\nX2xhbWJkYQ== 52984\nbmFudA== 52985\nIHJvb3RWaWV3 52986\nLkZsYWdz 52987\nIGNlbnNvcnNoaXA= 52988\nc2VudGVuY2U= 52989\nLnJlYWRJbnQ= 52990\nX2Fzc2lnbm1lbnQ= 52991\nIHZlcnNjaGllZA== 52992\nIEZyYWN0aW9u 52993\nIG5hdGlvbmFsaXN0 52994\nIGp1ZWdv 52995\nIERlYWxlcg== 52996\nIHByZWRpY3Rpbmc= 52997\nYXVwdA== 52998\naGVsbQ== 52999\nX1BSSUNF 53000\nX0RT 53001\nKCIjew== 53002\nbGlmdGluZw== 53003\nIHBvc2luZw== 53004\nIE5TTXV0YWJsZURpY3Rpb25hcnk= 53005\nIHNtYXNo 53006\nIGFraW4= 53007\nIGNhbXB1c2Vz 53008\nIE91dGxpbmU= 53009\nIEVsYXN0aWM= 53010\nX0NoZWNrZWRDaGFuZ2Vk 53011\nKElFbnVtZXJhYmxl 53012\nc3F1ZWV6ZQ== 53013\ncHR1bmU= 53014\nX0ZST05U 53015\nbWg= 53016\nIOyDneyEsQ== 53017\nUnVuV2l0aA== 53018\nIHR1cm5vdXQ= 53019\nc2libGluZ3M= 53020\nKWU= 53021\nX0FSR1VNRU5U 53022\nIEdyaWRCYWdDb25zdHJhaW50cw== 53023\nX1BPT0w= 53024\nLlJJR0hU 53025\naWdnaW5z 53026\ndGVsZXBob25l 53027\nXEV4dGVuc2lvbg== 53028\nIEFyaXN0 53029\naXR1cg== 53030\nIGZyaWVz 53031\nX2R1cA== 53032\nRXhwYW5kZWQ= 53033\nLXJv 53034\nIFdvcmxkd2lkZQ== 53035\nIENvcms= 53036\nw7Ns 53037\nTGlt 53038\nIGRlbm4= 53039\nUHJldHR5 53040\nIGZ5 53041\nVHJpYW5nbGU= 53042\nRmVhdHVyZWQ= 53043\nKENvbW1vbg== 53044\nX2VmZg== 53045\nICIiDQo= 53046\n4bubaQ== 53047\nX0xJTkVBUg== 53048\nIFJpY2E= 53049\nIGNhZsOp 53050\nIGFwcGVsbA== 53051\nIG5pdmVhdQ== 53052\nICYs 53053\nIGZhYnJpY3M= 53054\nX1BsYXllcg== 53055\nIGh5Z2llbmU= 53056\nIGRpc2FzdHJvdXM= 53057\nIHNoYXJlZEluc3RhbmNl 53058\nX3BpdGNo 53059\ncno= 53060\nZW5tZW50 53061\nTmVhcg== 53062\nX1NUQVRT 53063\nIHN0YWlu 53064\nIEROQw== 53065\nIGlzc3U= 53066\nXks= 53067\nCXRyZWU= 53068\nX2Jsaw== 53069\nc2V6 53070\nbGFpbg== 53071\nYW11 53072\nX293bmVk 53073\nVVNBUlQ= 53074\nLmhhc0NsYXNz 53075\nSVNPTg== 53076\nIGZvZQ== 53077\ndXNoZWQ= 53078\nX1VOU0lHTkVE 53079\nIGluZGV4aW5n 53080\nIEZpcmViYXNlQXV0aA== 53081\nIGxpdGVyYWN5 53082\nIFNVUg== 53083\nIENvbHRz 53084\nYmVjdWU= 53085\nIEludHJv 53086\nIGNoYW90aWM= 53087\nIGFuaQ== 53088\nIEFubmll 53089\nxrDhu50= 53090\nLmR4 53091\nZGlzY29ubmVjdA== 53092\nIGFyY2hpdmVk 53093\nW0xpc3Q= 53094\nPU4= 53095\nLnByZXNlbnRhdGlvbg== 53096\nUmVzdGF1cmFudA== 53097\nIHJvY2tldHM= 53098\nPWh0dHBz 53099\nL29w 53100\nIHB1cnNl 53101\nIEtyaXM= 53102\nIGNvcmFs 53103\nc2V0UGFyYW1ldGVy 53104\nIGlycmln 53105\nUXVlZW4= 53106\nTlNEYXRh 53107\nIHZhc3RseQ== 53108\nLkZpbGVz 53109\nIGZlbWluaXNt 53110\nKFN0cmVhbQ== 53111\nIGF0cmli 53112\nIGxpcXVpZGl0eQ== 53113\nPEZpbGU= 53114\ndHJhZw== 53115\nW2NvbnRhaW5z 53116\nIGhpbmRp 53117\nCWNw 53118\naG9tZXBhZ2U= 53119\nIHN1cnBhc3M= 53120\nIGRheWxpZ2h0 53121\nYXV0aG9yaXpl 53122\nIENvbnNlcXVlbnRseQ== 53123\nQXN5bmNSZXN1bHQ= 53124\nIERpYXJ5 53125\nLlBhdHRlcm4= 53126\nLiovCg== 53127\nZW5zY2hhZnQ= 53128\nIEp1ZGljaWFyeQ== 53129\nQWR1bHQ= 53130\nKCY6 53131\nIGplb3BhcmQ= 53132\nIEJsaXp6YXJk 53133\nIGdn 53134\nIjsvLw== 53135\nWEhS 53136\nIHBhc3N3ZA== 53137\nPn0= 53138\nJyksJw== 53139\nIGNvbXBhcmF0b3I= 53140\nLmNoYWlu 53141\nIGluc3VyZWQ= 53142\nX0VER0U= 53143\nIHR5bGtv 53144\nX01BSk9S 53145\nd2F2 53146\nXEZpbGU= 53147\nRW50cg== 53148\nJ2FwcA== 53149\nIGZvcmdpdmVuZXNz 53150\nCWRzdA== 53151\nIjot 53152\nLm1vbg== 53153\nICgKCg== 53154\nIGNhcGl0YQ== 53155\nIGluaXRDb21wb25lbnRz 53156\nIHN3b3Jkcw== 53157\nIE91dHB1dFN0cmVhbQ== 53158\nIGhlYXJz 53159\nIFNQQUNF 53160\nLWluc3BpcmVk 53161\nX2Jvb3Q= 53162\nLm5vbmU= 53163\nLmdldElucHV0U3RyZWFt 53164\nIGRldmlzZQ== 53165\nIHBlZGlhdHJpYw== 53166\nYW5zaQ== 53167\nX3BhcnRpYWw= 53168\nIHNoYXJk 53169\nIGZ1cmlvdXM= 53170\nIGRyYXdhYmxl 53171\nJSku 53172\nKGVt 53173\nIEJha2U= 53174\nCXBlcnJvcg== 53175\nIFJlbGlnaW91cw== 53176\nLSIr 53177\nCQkJICAgICAgICAgICA= 53178\nIFNlY3JldHM= 53179\nKG5vcm1hbA== 53180\nQUNFUw== 53181\nIFN0b2NraG9sbQ== 53182\nLW5vcm1hbA== 53183\nIGFjY3VzdG9tZWQ= 53184\nIGJvdXRpcXVl 53185\nIFN3aW5n 53186\nIGZpbQ== 53187\nIFBV 53188\nLlNvY2tldA== 53189\nICciJw== 53190\nYW5q 53191\nTWFudWFs 53192\nIG11amVy 53193\nIHBoeXNpb2xvZ2ljYWw= 53194\nY29udGFpbg== 53195\nTWVyZ2U= 53196\nIHN1YXM= 53197\nICd7Ig== 53198\nbmVnbw== 53199\nIHN1YnNjcmliZWQ= 53200\ndG9hc3Q= 53201\nX1ZFUkJPU0U= 53202\nIGtuaXQ= 53203\nIEFydGlzdHM= 53204\nIGhlYXJ0YmVhdA== 53205\nIGZpcmVmaWdodGVycw== 53206\nc3Nh 53207\nW3s= 53208\nIHVuZGVyc2NvcmU= 53209\nIGhpc3Rvcmllcw== 53210\naWdtb2lk 53211\nRmllbGRWYWx1ZQ== 53212\nVG9BZGQ= 53213\nLkNv 53214\nIEhhcm9sZA== 53215\nQXZvaWQ= 53216\naWdoYm91cnM= 53217\nb3JkZQ== 53218\nIHRydXRocw== 53219\nL2Fs 53220\nIHdpcmVk 53221\nIEl0YWxpYQ== 53222\nIHNlcnZpY2lvcw== 53223\nIEFVRElP 53224\nICciKw== 53225\nIHB1bXBpbmc= 53226\nIENsZW1lbnQ= 53227\nw4NP 53228\n5Y6f 53229\nPm4= 53230\nIHN0clNxbA== 53231\namRiYw== 53232\n4oE= 53233\nCVNFVA== 53234\nIEJVRkZFUg== 53235\nOi8vIg== 53236\nIGNpcmN1bXN0YW5jZQ== 53237\nVUlUYWJsZVZpZXdDZWxs 53238\nLnZlcnRpY2Fs 53239\nIEpvaG5z 53240\ndG9saXN0 53241\nIGRyaXZld2F5 53242\nIGxlYXJuZXJz 53243\ndG9iZXI= 53244\nd2lubmVy 53245\nLXlvdXI= 53246\nLnN0YXRlcw== 53247\nSE0= 53248\nIGdyYWRpZW50cw== 53249\nIHNlaXp1cmU= 53250\nIG1hdGVy 53251\nIGRldGFs 53252\nIFJlZHVjZQ== 53253\nKG1vdXNl 53254\nIFJlU2hhcnBlcg== 53255\nLXJvdXRpbmc= 53256\nINi0 53257\nIGpvaW50bHk= 53258\nIEZhbWls 53259\nPE1lc3NhZ2U= 53260\nZXhwaXJl 53261\nX3RyYWRl 53262\n4oCmLi4= 53263\nIEZVTkNUSU9OUw== 53264\nIHhlbg== 53265\nIHt9Ow== 53266\nRmFi 53267\nIGZlYXN0 53268\nKERi 53269\nRmlyc3RSZXNwb25kZXI= 53270\nxLFsxLE= 53271\nIG1heFZhbHVl 53272\nIC06 53273\nYXB0aWM= 53274\nLkdzb24= 53275\nIFJvdmVy 53276\nX2Nu 53277\nbG91ZA== 53278\nIGNoYW1iZXJz 53279\nINC30LDQtA== 53280\nLmZvcmVhY2g= 53281\nLmdldEVtYWls 53282\n55+l 53283\nLk5vZGVz 53284\nIFZX 53285\nIFdhaXRpbmc= 53286\nKFF0Q29yZQ== 53287\nIHPDs2xv 53288\ncnE= 53289\nYW5ndWFyZA== 53290\nIHJlc2VtYmxlcw== 53291\nOltb 53292\nIGdlZA== 53293\nX0VQ 53294\nKEFjdGl2aXR5 53295\nIElzbg== 53296\nIENydXNoZXJz 53297\nX1JVTlRJTUU= 53298\nCW9wZW4= 53299\nIEhpZ2hsaWdodHM= 53300\nw6lyYXRpb24= 53301\nIHllbGxpbmc= 53302\nIExJR0hU 53303\nUGhvdA== 53304\ndmVuZ2U= 53305\nIFN1c3A= 53306\nIENocg== 53307\nLkRpc3RhbmNl 53308\nYXJzaW1w 53309\nbGljYXM= 53310\nLk1vbg== 53311\nIHN1Y2tlZA== 53312\ncHJpbnRlZA== 53313\nbXV0ZQ== 53314\nIHNldEVycm9y 53315\nLk9wdGlvbg== 53316\nIGltcGFpcm1lbnQ= 53317\nbm9pc2U= 53318\nIHBhcnRuZXJlZA== 53319\nw40= 53320\nZGVucw== 53321\naWN6 53322\nIHdhaXRGb3I= 53323\nIG92ZXJsb29raW5n 53324\nIEZPUk1BVA== 53325\nIFRTdHJpbmc= 53326\nIHJlbnRpbmc= 53327\nCWNvbXBvbmVudA== 53328\nLkZyZWU= 53329\nIExhdW5jaGVy 53330\nPWRhdGU= 53331\nIFBvZHM= 53332\nQUdNRU5U 53333\nQ29kaWdv 53334\nQml0RmllbGRz 53335\nIHViaXF1 53336\nLWNhcm91c2Vs 53337\nIFNpbXVsYXRvcg== 53338\naW5vZGU= 53339\nJ10pewo= 53340\nIEJhZ2hk 53341\nIG5vcnRod2VzdA== 53342\naHRha2luZw== 53343\nPCY= 53344\nIHRyYW0= 53345\nIGZvcndhcmRlZA== 53346\nIGVycm9yTXNn 53347\nX0FTU0lHTg== 53348\nIEVudGl0aWVz 53349\nLlBhcnQ= 53350\ncmVhdHVyZQ== 53351\nKFVyaQ== 53352\nIERyaXZpbmc= 53353\nIGludmFzaXZl 53354\naWdyYXRpb25CdWlsZGVy 53355\nb3NhdXJz 53356\nCXBvcnQ= 53357\nIGJyYW4= 53358\naXR0aW5ncw== 53359\nRG9vcg== 53360\nIHsl 53361\nKGxpbWl0 53362\nIHNxdWFyZWQ= 53363\nIERJU1BMQVk= 53364\nLkFjY2VwdA== 53365\nLmJhc2VVcmw= 53366\nLkVudGVy 53367\nIC4uLikK 53368\nIG93bA== 53369\nIHNsYXRlZA== 53370\nLmZlY2hh 53371\nX1NFRw== 53372\nPXsk 53373\nIE9OTElORQ== 53374\nT05Z 53375\nINC00LDQvdC90YvRhQ== 53376\nb250ZQ== 53377\nX0NMSUNL 53378\nU2E= 53379\nSW1wb3J0YW50 53380\nIGNhcm91c2Vs 53381\nIGFwcGVhbGVk 53382\nIE5pZQ== 53383\nL2Jvb2s= 53384\nW10+KA== 53385\nIHhtYXg= 53386\nIGxhbmdl 53387\nLlN1cHByZXNz 53388\nIFRoaW5raW5n 53389\nQWRkcmVzc2Vz 53390\nIFNhbGx5 53391\nLVRW 53392\nIENoYXJsZXN0b24= 53393\nKSIKCg== 53394\nIHRhbGx5 53395\nIHVsbA== 53396\nIGxvY2FsZXM= 53397\nZXdhbg== 53398\nIGluY3JlbWVudGFs 53399\n65Cc 53400\nIGNhcmV0 53401\nanVyZQ== 53402\nIGRvcg== 53403\nIGxvY2FsaXphdGlvbg== 53404\nIHNlYWZvb2Q= 53405\nIFJ1YmJlcg== 53406\nLlRoZXJl 53407\nIEZpc2hpbmc= 53408\nWVlZ 53409\nbWFnZQ== 53410\nIEZsZXhpYmxl 53411\nIEdFTkVSQUw= 53412\nZWth 53413\nIHRocml2aW5n 53414\nIHNpcw== 53415\nIGJvdXJnZW9pcw== 53416\nRmFrZQ== 53417\nLFwi 53418\nINC+0LQ= 53419\nQ09S 53420\nLWVmZmVjdGl2ZQ== 53421\nIHNrdQ== 53422\nZWRseQ== 53423\nIyMKCg== 53424\nIEhvbGx5 53425\nIEZMQVNI 53426\nL1RS 53427\nLm5z 53428\ncHJvYmU= 53429\nZ2lmdA== 53430\nb3dpdHo= 53431\nLW5hdmJhcg== 53432\nIHNhY2s= 53433\n57qn 53434\nIFRocmVhdA== 53435\nWkE= 53436\nWE0= 53437\nJyksCgo= 53438\nIExMVk0= 53439\nYXN6 53440\nRWRpdGVk 53441\nV2l0aFN0cmluZw== 53442\nU2lsdmVy 53443\neW5h 53444\nX3JlbmRlcmVy 53445\nCURFQlVH 53446\nKG9wZXJhdGlvbg== 53447\nIFNsb3Rz 53448\nIEF1YnVybg== 53449\neGVj 53450\nIGhvbW9zZXh1YWxpdHk= 53451\nLlJlc3RDb250cm9sbGVy 53452\nZXJzaXZl 53453\nIHByb2ZpbA== 53454\nIE15YW5tYXI= 53455\ncm9zc2U= 53456\nX0lSUW4= 53457\nIHNlbmRNZXNzYWdl 53458\nIHRlY2huaWNpYW5z 53459\nIG1hbmU= 53460\nY29tbW9ucw== 53461\nIHNocmVkZA== 53462\nQm9vc3Q= 53463\nIHN5bXBhdGhldGlj 53464\nLWVmZg== 53465\nIENlcnRhaW5seQ== 53466\nIHfDpGg= 53467\nIFJvY2hlc3Rlcg== 53468\ndWNjaQ== 53469\ndXJt 53470\nZW1wb3I= 53471\nICIiOgo= 53472\nLXNwYWNpbmc= 53473\nIHNpeHR5 53474\nIOKckw== 53475\nX3JlcG9ydGluZw== 53476\nV2ls 53477\nb3lv 53478\nIGRpZFNlbGVjdA== 53479\nLmdldExvbmc= 53480\nLnNldEVycm9y 53481\nX25j 53482\nIERvbmc= 53483\nCWFzeW5j 53484\nIEhpZ2hseQ== 53485\nXToNCg== 53486\nTGVha3M= 53487\nLC4uLgo= 53488\ndmFsdWF0b3I= 53489\nZGljdGlvbnM= 53490\nb3hlbA== 53491\nIGdlc3R1cmVz 53492\nPSI/ 53493\nYmFncw== 53494\nIFJlbGllZg== 53495\nc3Vic2V0ZXE= 53496\nKG5hbWVzcGFjZQ== 53497\nfXw= 53498\nIG1pY3JvYmk= 53499\nIHB1cml0eQ== 53500\nY2hpbw== 53501\nfT8= 53502\nX01VVA== 53503\nX2FjdGl2YXRpb24= 53504\nIFBpcmF0ZXM= 53505\nICUj 53506\naWZpY2FjacOzbg== 53507\n5Ys= 53508\nIE5SQQ== 53509\nw6dvbg== 53510\nfSkoKTsK 53511\nIENoZXN0ZXI= 53512\n4oCT4oCT 53513\nZ2V0Q29ubmVjdGlvbg== 53514\nLmFyZ3VtZW50cw== 53515\nRmV0Y2hpbmc= 53516\nIEZyeQ== 53517\nIERpdA== 53518\nIHppY2g= 53519\ncGFzdA== 53520\nLWxpYnJhcnk= 53521\nIEhheWVz 53522\nIGJvdW50eQ== 53523\nIFNwcmluZ2ZpZWxk 53524\nUE9S 53525\nIEFQUg== 53526\nIEVtYmFzc3k= 53527\nUVVFU1RJT04= 53528\nIFNvbGRpZXI= 53529\nZXJ0YXM= 53530\nIE5PUk1BTA== 53531\nIGR1cw== 53532\nYm9sdA== 53533\nIGRvcnQ= 53534\nIExpZnQ= 53535\nIGdldFJhbmRvbQ== 53536\nLlJ1bldpdGg= 53537\nLCksCg== 53538\nIHZhcmFyZ2lu 53539\nIGhhbmRsZUNsaWNr 53540\nXEh0bWw= 53541\nIGhvbW1lcw== 53542\nY2lkYWRl 53543\nKGVw 53544\nSmE= 53545\nL2RpYWxvZw== 53546\nLnJhdGU= 53547\nIFdlaQ== 53548\nZnVsbHNjcmVlbg== 53549\nIE5Vbml0 53550\nLm1lYXN1cmU= 53551\nVmFscw== 53552\nIFNpZ25lZA== 53553\nIHJ1cw== 53554\nIHJhZnQ= 53555\nIEJsb25kZQ== 53556\nIG5ldHM= 53557\nIE1ldHJpYw== 53558\naWNoVGV4dEJveA== 53559\nIHVyZQ== 53560\nIGludGVycmFjaWFs 53561\nICd9Cg== 53562\nKHN0b3JhZ2U= 53563\nSW50ZWdyYXRpb24= 53564\nIGJhbmNv 53565\nQVNZ 53566\nIGppbnQ= 53567\nIGRlZ3JhZGF0aW9u 53568\nIEhBTkQ= 53569\ndWVyZG8= 53570\nPScn 53571\nIHN0cm9rZXM= 53572\ncmV3cml0ZQ== 53573\nKFNldA== 53574\nIE1hdERpYWxvZw== 53575\nIGRvc3NpZXI= 53576\nCWFuZA== 53577\nQURESU5H 53578\nIG11dHVhbGx5 53579\nIHByZWNlZGVk 53580\nfX07Cg== 53581\nIHN1YnR5cGU= 53582\nIHJlc29sdmluZw== 53583\nIGdlb21ldHJpYw== 53584\nW2NvbHVtbg== 53585\nIENUUkw= 53586\nIEhM 53587\nIGRhaA== 53588\nICg7Ow== 53589\nUmFpbHM= 53590\nw5w= 53591\nIEdlbmVyYXRlcw== 53592\nLUxlbmd0aA== 53593\ncGVkbw== 53594\nb2dlbm91cw== 53595\nIFJvYmVydHNvbg== 53596\nLkJvb2w= 53597\nb2RlcnM= 53598\nX0FHRU5U 53599\ncGFzc3dk 53600\nIE5vZGVz 53601\nLmJp 53602\nIFdC 53603\nIHByb3BoZXQ= 53604\nc2xhdmU= 53605\nIOW8 53606\nIHdlaWw= 53607\nJTwv 53608\nIGNhcmJz 53609\n5rC0 53610\nIGV4cHJlc3NseQ== 53611\nXHhk 53612\nLWV5ZWQ= 53613\nIENyZWF0dXJl 53614\nY29udGFpbmVk 53615\nKFNJRw== 53616\nIEVuaGFuY2VtZW50 53617\nIENvcnM= 53618\nR2Fs 53619\nX1NJR05BTA== 53620\ncmVpbnRlcnByZXQ= 53621\nIFFQdXNoQnV0dG9u 53622\nX05vbmU= 53623\nIGdlbm9jaWRl 53624\nIFNlYWw= 53625\n5LiK5Lyg 53626\nKHBlcg== 53627\n0LvRjNGC 53628\nIMOgcw== 53629\nLlRlbXBsYXRl 53630\nICkNCg0K 53631\nLnNpbmdsZXRvbg== 53632\nCXNsZWVw 53633\nIHNwYXduZWQ= 53634\nIHBvc3Nlc3Npb25z 53635\nZ2V0Q29uZmln 53636\nIHRhaQ== 53637\nbHVkZQ== 53638\nIE1ldGVy 53639\nIGJpYmxpY2Fs 53640\nbWFyc2hhbGxlcg== 53641\nLlRvb2xraXQ= 53642\nIExlc2JpYW4= 53643\nLnNtYXJ0 53644\nIGJveWNvdHQ= 53645\nIGZyeQ== 53646\nLWRlc2M= 53647\nX1NlcnZpY2U= 53648\nIG1hY2h0 53649\nIENhaXJv 53650\nw6Bp 53651\nX3ByZXZpb3Vz 53652\nLnRyYW5zcG9ydA== 53653\nTWVkaWNhbA== 53654\nQ0dQb2ludA== 53655\nUVVBUkU= 53656\nIGJyaWdodGVy 53657\nIGNoZWNrQm94 53658\nIEZPVU5E 53659\nLmJyYW5jaA== 53660\nIGJsYWg= 53661\nIFByZWx1ZGU= 53662\nT2ZmbGluZQ== 53663\nTGlzdGluZw== 53664\nLyoqLyou 53665\nIEpS 53666\ncGhhbnRz 53667\nZ2V0WQ== 53668\nLkZpbmRDb250cm9s 53669\nIi4uLg== 53670\n0LrQtQ== 53671\nSFJFU1VMVA== 53672\nIGNoZWNrbGlzdA== 53673\nKGFzdA== 53674\nIGJvcnJvd2luZw== 53675\n4oCmYW5k 53676\nINCX 53677\nIHByb2N1cmVtZW50 53678\nLXRhc2s= 53679\nX2hhbA== 53680\nUGxheWxpc3Q= 53681\nLnN0YXI= 53682\nX1NVUFBPUlRFRA== 53683\nQVNN 53684\nJUE= 53685\ncmVzdHJpYWw= 53686\nINC40YHQvw== 53687\nIHBhZ2Vy 53688\nIERpYWJldGVz 53689\nIE1haGFy 53690\ndGFu 53691\nQWN0dWFsbHk= 53692\nPi8v 53693\nIFhW 53694\n4KeN 53695\nIHNlamE= 53696\nLnZpc3VhbA== 53697\na2tlcg== 53698\nXTsKCgo= 53699\nIHR5cGVOYW1l 53700\nLkJ1dA== 53701\nQ2xpZW50UmVjdA== 53702\naWNhbHM= 53703\nIERqYW5nbw== 53704\nIFJhcGU= 53705\nIHBheWRheQ== 53706\nKHJlc291cmNlcw== 53707\nLmJpeg== 53708\ndG9p 53709\nKFJ1bnRpbWU= 53710\nIER5bmFtaWNz 53711\nIEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24= 53712\nKHR5cGVz 53713\nIFRhYnM= 53714\nLk1pZGRsZUxlZnQ= 53715\neGFi 53716\nIF8o 53717\nIERyZWFtcw== 53718\nX0dyb3Vw 53719\nKGNvcg== 53720\nTGVhZGVy 53721\nIGdyYWR1YWw= 53722\nKEJpZ0RlY2ltYWw= 53723\nIHRleHRhcmVh 53724\nbGV0aW9u 53725\nIEZpbmlzaGVk 53726\nIFBvbGU= 53727\nIHRhcHBpbmc= 53728\nJig= 53729\nIGZsaXJ0 53730\nIHRlcnJpZmllZA== 53731\nIHBhZHk= 53732\nZXJlZw== 53733\nZWxkb20= 53734\nIHN0YXRpb25hcnk= 53735\nIHBvbnk= 53736\nIFJFR0lTVEVS 53737\nX2FjY2Vs 53738\nIEhlcno= 53739\nIG1hdHJpeg== 53740\nIENhZg== 53741\neGFj 53742\nYXNjdXM= 53743\nIGVubGFyZ2U= 53744\nQUNIRUQ= 53745\neXl2YWw= 53746\nIHNpYw== 53747\nIENhbmFs 53748\nOnY= 53749\nPT8s 53750\nIEltcHJvdmVtZW50 53751\nP30iLA== 53752\nTlNPYmplY3Q= 53753\nIGVzY2FwaW5n 53754\nIE51bGxhYmxl 53755\nIGjDpA== 53756\nd2FudA== 53757\nRWxpbWluYXI= 53758\nIENMTG9jYXRpb24= 53759\nIHJldXNlSWRlbnRpZmllcg== 53760\nQnVmZmVyU2l6ZQ== 53761\nw59lcg== 53762\nIEFza2Vk 53763\nJ11dLAo= 53764\nIHNoaWVsZHM= 53765\nZ3JhbmQ= 53766\nIFRvd25zaGlw 53767\nIFB1Yk1lZA== 53768\nZWN0bA== 53769\nZml2ZQ== 53770\nIFJlYWN0aXZlRm9ybXNNb2R1bGU= 53771\nIEdMZW51bQ== 53772\nRGFy 53773\naWZhY2U= 53774\nLWluZGVudA== 53775\nRm9ybXVsYQ== 53776\nLnNuYXBzaG90 53777\nQ09NUEFSRQ== 53778\nIGJlbHRz 53779\nCWNhY2hl 53780\nbGRhdGE= 53781\nIGVkYWQ= 53782\nIEJPWA== 53783\nKGNhcnQ= 53784\nX0xBWU9VVA== 53785\nIGZmbHVzaA== 53786\nIExPUw== 53787\nIFNvcnRlZA== 53788\nLnNsaWRl 53789\nIHRpamQ= 53790\nIFRleGFucw== 53791\nIFB1cmNo 53792\nIExldmVscw== 53793\nIHNlbWFudGljcw== 53794\nIFRlaHJhbg== 53795\nYm1w 53796\nLnVybGVuY29kZWQ= 53797\nX3hsYWJlbA== 53798\nKGd1bHA= 53799\nIEJ1dHRvbnM= 53800\nIEJyb2tlcg== 53801\n55uR5ZCs 53802\nJGVtYWls 53803\n2ZA= 53804\nIGNsYXNzaWNz 53805\nY29tcG9zZQ== 53806\nKGJz 53807\nIHVuaGVhbHRoeQ== 53808\nRXhlcmNpc2U= 53809\nY3JldHM= 53810\nIFBhcnM= 53811\nIERldGVybWluZXM= 53812\nYWZvcnQ= 53813\nKG9icw== 53814\nIG5hc3Q= 53815\nIGlocmVu 53816\nIHJveWFsdHk= 53817\nc2VyaWFsaXplcg== 53818\naWV1eA== 53819\nICAgICAgICAgICAgICAgICAgICAgIAo= 53820\nZXhlY3V0aW9u 53821\nIHZpZXdDb250cm9sbGVy 53822\nIHJlcHJv 53823\nLnBl 53824\nIGNhcGl0YWxpemU= 53825\n5Ye7 53826\nIHR1bm5lbHM= 53827\nLkRBVEE= 53828\ncGlyaXQ= 53829\nQ29sbGVjdGlvbnM= 53830\nKX19 53831\nIE9E 53832\nIGZ1enp5 53833\nSW1tZWRpYXRl 53834\nbGo= 53835\nOz8+Ig== 53836\nW3Zhcg== 53837\nIHZvbGF0aWxpdHk= 53838\ncmVnbG8= 53839\nIHByb2xpZmVyYXRpb24= 53840\nIG9yYWNsZQ== 53841\nIEN2 53842\nIG51bmNh 53843\nUFJJTlRG 53844\nIGJyZWFrcG9pbnQ= 53845\nLkVO 53846\nIGJlc3Rlbg== 53847\nIHJlYmVsbGlvbg== 53848\nUGF1c2Vk 53849\nIGZsb3du 53850\nIHZpY2luaXR5 53851\nd3JpZ2h0 53852\nLGNw 53853\naXNjaW5n 53854\nb3VjaGVycw== 53855\nQXNo 53856\neWFy 53857\nIEVq 53858\ncmVwcmVzZW50ZWQ= 53859\nb2RpYw== 53860\nLmNyb3Nz 53861\nIGNyZWF0aW9ucw== 53862\nIFBhYmxv 53863\nZmVzdA== 53864\nIEhpbHRvbg== 53865\nUmVwb3J0ZXI= 53866\nIERpbA== 53867\naWxlbmFtZXM= 53868\nIGV4cGVuZGl0dXJlcw== 53869\nX0VESVRPUg== 53870\nIEFyaWFs 53871\nIHBsdW5n 53872\nIHVubmFtZWQ= 53873\nT3JFbHNl 53874\nIHJlY3JlYXRl 53875\nIEhlYXJ0cw== 53876\nPmFsZXJ0 53877\nLmdldFBhc3N3b3Jk 53878\nIE11c3Rhbmc= 53879\nVks= 53880\nIGFjY29tcGxpc2htZW50cw== 53881\nQXBwZW5kaW5n 53882\nIENheQ== 53883\nIFVzZXJNb2RlbA== 53884\nIHN1YnN5c3RlbQ== 53885\nTGVnYWw= 53886\neW5jaHJvbml6ZQ== 53887\nX1BFUk1JU1NJT04= 53888\nIEFwYXJ0bWVudA== 53889\nbGlnZQ== 53890\nIGFmZmlsaWF0aW9u 53891\nKERFQlVH 53892\nVHM= 53893\nIENvbG9yaW5n 53894\nIFdvaG4= 53895\nbmljZQ== 53896\nKGxpc3Rh 53897\n4LE= 53898\ncGxveW1lbnQ= 53899\n44G+44Gf 53900\n5aW9 53901\nc3Vic3Q= 53902\nJ11dWyc= 53903\nYWJvbA== 53904\nPSdf 53905\n4KeN4KY= 53906\nb3JwaGlzbQ== 53907\nLmxpdGVyYWw= 53908\nIFBsdWc= 53909\nIG13 53910\nb21hbA== 53911\nICInIiw= 53912\ndXNp 53913\nIHNpZ2hlZA== 53914\naWN1bHR1cmFs 53915\nLios 53916\nIFByb3N0aXQ= 53917\nKGNvbnNvbGU= 53918\nSVBMRQ== 53919\nIFRyYXA= 53920\nWFI= 53921\nIEVkaXRvckdVSUxheW91dA== 53922\nX3ZvY2Fi 53923\nIGluY29tcGF0aWJsZQ== 53924\nIHVuY29uc3RpdHV0aW9uYWw= 53925\nLWxh 53926\nIGVyb3RpcXVl 53927\nIGRlcHV0aWVz 53928\ncXVpc2l0aW9ucw== 53929\nbmV3VmFsdWU= 53930\nYWRpYQ== 53931\nIGh3bmQ= 53932\nZ2luZ3M= 53933\nIFZhcw== 53934\nIEluY3JlbWVudA== 53935\nIEZsaW50 53936\nYW1iaWE= 53937\nX1BvaW50 53938\nLWRpc3BsYXk= 53939\nIEZ1bm55 53940\nLnRvYXN0 53941\nLmRhcms= 53942\nQmluZGluZ3M= 53943\nIGRlc2NyaXB0aXZl 53944\nYXJlbmQ= 53945\nLlJldA== 53946\nIHJlY3Vyc2l2ZWx5 53947\nIE1r 53948\nIFRJTEU= 53949\nLmNyZWF0ZVRleHROb2Rl 53950\nIFJBVw== 53951\nIGluZmx1eA== 53952\n54mp 53953\nVG9r 53954\nLWJvYXJk 53955\nUmVjb3JkaW5n 53956\nU3RyZW5ndGg= 53957\nIHJhaW5mYWxs 53958\nKGRk 53959\nLmZ4bWw= 53960\nbmV0cw== 53961\nLkltYWdpbmc= 53962\nIEJJT1M= 53963\nXSsi 53964\nT0U= 53965\nIHJlc2lkZW5jeQ== 53966\nWkU= 53967\nV0I= 53968\nLnNwYW4= 53969\nX2RlZmluZWQ= 53970\nQk9U 53971\nPm51bGw= 53972\nZm9ybURhdGE= 53973\nQ3BwTWV0aG9kSW5pdGlhbGl6ZWQ= 53974\nX1VTRVJT 53975\nIE5vdmVs 53976\naW5za2k= 53977\nPntA 53978\nZXR0bw== 53979\nbmF0dXJhbA== 53980\nIFN0cmljdA== 53981\nOnc= 53982\nLnNhZmU= 53983\nIHRvd2Vscw== 53984\n4bqtdA== 53985\nLmdzdWI= 53986\n66M= 53987\naW5xdQ== 53988\nIGFpZGVz 53989\nIGluY29t 53990\nZ2V0dGVy 53991\nIHdhc2hlcg== 53992\nYWN0b3JpZXM= 53993\nIGdldHRlcnM= 53994\nbWl0ZQ== 53995\nX3NvdXJjZXM= 53996\nIGhhcm1sZXNz 53997\nIHVub3M= 53998\ncHJlaGVuc2l2ZQ== 53999\nIG5vZG8= 54000\nIGdlb2dyYXBoaWNhbA== 54001\nIFNlbGVjdExpc3Q= 54002\nLlNjcmlwdA== 54003\nLkVudW1z 54004\nIEVOVEVS 54005\nd2FsZA== 54006\nIEJhcm9u 54007\nIHBhcnRpY3Vs 54008\nLmN1cnJlbnRQYWdl 54009\nQFRyYW5zYWN0aW9uYWw= 54010\nW2xpbmU= 54011\nCWRlcw== 54012\nSmFzb24= 54013\nLmdldENvdW50 54014\nIFBlbm55 54015\nIFBheWxvYWQ= 54016\nc2hhcnA= 54017\nW3JpZ2h0 54018\ndmVudGE= 54019\nIGFwbA== 54020\nIHByb2R1aXRz 54021\nIG90dA== 54022\nVHJhY2tz 54023\nLkFuZHJvaWQ= 54024\nIHNpbGljb25l 54025\nIEVMU0U= 54026\nYW5pbWF0aW9ucw== 54027\ndWx0dXJlSW5mbw== 54028\nIGJsdWVwcmludA== 54029\nb2ZzdHJlYW0= 54030\nIFtdW10= 54031\nIFNlcnZl 54032\nIHRyaWc= 54033\nCXNlcnZpY2U= 54034\nIFN0cmF0 54035\nIFNhdmFnZQ== 54036\nIG9ianM= 54037\nIE5vdGlmaWNhdGlvbnM= 54038\nLHBvcw== 54039\nVGhpbmc= 54040\nIFJCSQ== 54041\nb3BhdGh5 54042\nIG5hdWdodHk= 54043\nbGJz 54044\nZXByb20= 54045\nPiIu 54046\nIHBpb25lZXI= 54047\nIGphcGFuZXNl 54048\nQXVk 54049\nIGFsbGV5 54050\nIFBldHNj 54051\nJ10/Pg== 54052\nIEtpbGxlcg== 54053\nLmdldEFic29sdXRlUGF0aA== 54054\nX2NhcHM= 54055\nxas= 54056\nIHN1YnN0cmF0ZQ== 54057\nLmFzc2VydElu 54058\n7JWE 54059\nIHRoeXJvaWQ= 54060\nIERlbHV4ZQ== 54061\nIGZhY3RvcmlhbA== 54062\nIHByZXNzZXM= 54063\nIEFjY29t 54064\nPW9wZW4= 54065\nLmdldFM= 54066\nIGV4cGxvcmVy 54067\nIHJlc2lkZXM= 54068\nQXNzb2NpYXRlZA== 54069\nIHRyYW5zZm9ybWF0aW9ucw== 54070\nVHU= 54071\nIFJpY2hhcmRz 54072\nX2JpcnRo 54073\nPSN7 54074\nLXNwZQ== 54075\nKG5k 54076\nIHZpc3VhbHM= 54077\nX3N0YW1w 54078\nIHRlcm1pbmFscw== 54079\ncm91dGluZQ== 54080\nKioqLwo= 54081\nIEphYg== 54082\nS0w= 54083\nQ29udHJpYg== 54084\nIHNvdXRod2VzdA== 54085\nIFBlcA== 54086\nCWVudGl0eQ== 54087\nIGxpbmVy 54088\nLlN0YXR1c09L 54089\nIFNjaHVs 54090\nKENM 54091\nIG1pam4= 54092\nYXN0b3M= 54093\nX2RpZ2VzdA== 54094\nIHBlcnNpc3RlZA== 54095\nLWNvbnRhY3Q= 54096\nIG9kb3I= 54097\nIGRpc2NvdmVyaWVz 54098\nX0ZJRUxEUw== 54099\nRmx5 54100\nIHJ6 54101\nIExpc3Rh 54102\nUmVzZXJ2ZWQ= 54103\ndGF4b25vbXk= 54104\nKXNlY3Rpb24= 54105\nLyIpCg== 54106\nL3JlcXVlc3Q= 54107\nIHNvbWVkYXk= 54108\nY2l0aWVz 54109\nL2ZpcmU= 54110\nIG9iamVjdGlvbnM= 54111\nCURFQ0xBUkU= 54112\nLm5hdmlnYXRpb25JdGVt 54113\nLnNldGRlZmF1bHQ= 54114\ncmV0dXJuVmFsdWU= 54115\nVUNDRUVERUQ= 54116\nIG9ibGlnZWQ= 54117\nIFFhZWRh 54118\nIGh5c3Rlcg== 54119\nZXN0aGVz 54120\nZGlzdGluY3Q= 54121\nw6B5 54122\nIENvbWJv 54123\nCXNm 54124\nIOKK 54125\nIGRpc2NyZXBhbg== 54126\nIGluc2lnbg== 54127\nIFJFU1VMVFM= 54128\nIFZhbGlkYXRpb25FcnJvcg== 54129\nIEh0dHBSZXNwb25zZVJlZGlyZWN0 54130\nCVFTdHJpbmc= 54131\nIGF1dG9mb2N1cw== 54132\nRHVy 54133\nIFJFTEVBU0U= 54134\nLWRvbGxhcg== 54135\nLkNvbW1pdA== 54136\nIGtow7RuZw== 54137\nIGxhdW5kZXI= 54138\nLj0i 54139\nIOaWhw== 54140\nIGJ5ZQ== 54141\nLkdldEtleURvd24= 54142\nIGdpbw== 54143\nX3NpZA== 54144\nIGdxbA== 54145\nLmNt 54146\nX1NMT1Q= 54147\nLkdldEluc3RhbmNl 54148\ncmV1c2U= 54149\nLnNodXRkb3du 54150\nIGplcnNleXM= 54151\nX01Q 54152\ncGF0aWJpbGl0eQ== 54153\nIOiuvue9rg== 54154\nIHJlcGxhY2VtZW50cw== 54155\nIHByZWNlZGVuY2U= 54156\nIGJ1ZmZlcmVk 54157\nLmJz 54158\nX0dSRUVO 54159\nYnJhaW4= 54160\nw6FjaA== 54161\nYXZhaWxhYmlsaXR5 54162\nIEVURg== 54163\nIGZyZXQ= 54164\naXN0aW5l 54165\nIGxpZnRz 54166\nRXhpc3Rpbmc= 54167\nIHN0ZXJlb3R5cGVz 54168\nIGVtcHQ= 54169\nbW9uZ28= 54170\nLnRyYWluaW5n 54171\nYWxpc3Q= 54172\nLklzRW5hYmxlZA== 54173\nICIh 54174\nPD8K 54175\ndWlkbw== 54176\nIGludFZhbHVl 54177\nLmVsYXN0aWNzZWFyY2g= 54178\nTE9HSU4= 54179\nIHJlbGlhbmNl 54180\nIHZpZXdUeXBl 54181\nIGRpbWluaXNoZWQ= 54182\nU2FyYWg= 54183\nIEFwcHJvYWNo 54184\nX1dFQg== 54185\nIGRybQ== 54186\nIGNvbHVtbmlzdA== 54187\nTWFya3Vw 54188\nIGFxdcOt 54189\nIERpYW5l 54190\nIGN3 54191\nIFRpY2s= 54192\nLm9ic2VydmU= 54193\nSVJPTg== 54194\nSW5CYWNrZ3JvdW5k 54195\nIGVib255 54196\nIENvdXJ0ZXN5 54197\nOm51bGw= 54198\nKioqKioqKi8KCg== 54199\nL3Jlc291cmNl 54200\nSXRlcmF0aW9u 54201\nZGVmYXVsdFZhbHVl 54202\nYXR0ZW50aW9u 54203\nINGA0LDQsdC+0YI= 54204\nIHdhaXZlcg== 54205\nIHByb2R1aXQ= 54206\nIEdyYWRpZW50 54207\nIHBlcmNlbnRhZ2Vz 54208\nIFNBTA== 54209\nIE1k 54210\nKHNuYXBzaG90 54211\nCWlv 54212\naWtlcnM= 54213\nV2VicGFjaw== 54214\nIHNldFBhc3N3b3Jk 54215\nIGRlZmVhdGluZw== 54216\nIEplZw== 54217\nZWxhcHNlZA== 54218\naG9sZHM= 54219\nX3NoYWRvdw== 54220\nIG9mZmVuZGVk 54221\nIFBhbnQ= 54222\nIENhbGxhYmxl 54223\nX0lORk9STUFUSU9O 54224\nZmZlZQ== 54225\nKGVtcGxveWVl 54226\nIFlBTUw= 54227\ncG9zc2libHk= 54228\nIG1heGltYWw= 54229\nZWxsdWxhcg== 54230\nIFNueWRlcg== 54231\nZGVzY3JpcHRvcg== 54232\nIFBMRUFTRQ== 54233\nRGxnSXRlbQ== 54234\nIGFydGlsbGVyeQ== 54235\nYH0K 54236\ncG9zaXVt 54237\nIGxlZXI= 54238\nJWM= 54239\nIGRpc3Bvcw== 54240\nLm11bA== 54241\nIGdlb2dyYXBoeQ== 54242\nIGdyYXBoaWNhbA== 54243\nIGRyYW5r 54244\nIG1vdGlvbnM= 54245\nIHJ1dGg= 54246\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 54247\nIHByb2R1Y3Rpb25z 54248\nIGNyZWF0ZVRpbWU= 54249\nIFNjcmlwdHVyZQ== 54250\nYmJi 54251\ndWNocw== 54252\n5LiN6IO9 54253\nLkJpZ0RlY2ltYWw= 54254\nc2l6ZXM= 54255\nX3NvbHZlcg== 54256\nX0Zyb20= 54257\nX2pvaW50 54258\nIHBhdGhsaWI= 54259\nIGdlYXJz 54260\nINGE0L7RgNC8 54261\nIGNvbmNlYWw= 54262\nIGRpZmZlcmVudGlhdGU= 54263\nPEdhbWVPYmplY3Q= 54264\nIGplZGVu 54265\nIGFsbw== 54266\nZ2xvYmFscw== 54267\nZXJ2YXRpdmU= 54268\nIHBhZGQ= 54269\nIFBseQ== 54270\nX3R5 54271\nIHByZXNlbnRl 54272\nIHByb3ByaWV0 54273\nX2xz 54274\nIFB1bmNo 54275\nIENyYXdmb3Jk 54276\nYmVsb3c= 54277\nQ3BwR2VuZXJpYw== 54278\nIENPTlRST0w= 54279\nIG9jZWFucw== 54280\nIFJPVVQ= 54281\nIHJhbmRpbnQ= 54282\nCWFkZHI= 54283\nIEhvbmVzdA== 54284\nIGVudmVsb3A= 54285\nIHRyYXVtYXRpYw== 54286\nIExBVA== 54287\nIHRn 54288\n7Iqk7Yq4 54289\nRXh0ZW5kZWQ= 54290\nIHVuY2hlY2tlZA== 54291\nIG9ic3RydWN0 54292\nX3RpbWV6b25l 54293\nUGVyc2lzdGVudA== 54294\nIGxsZXY= 54295\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 54296\nIEZsYQ== 54297\nLnBoeXNpY3M= 54298\nIGZvcmdlZA== 54299\nIExhdXI= 54300\nIG1vbm9wb2x5 54301\nIGNocmlzdG1hcw== 54302\nZ292 54303\nIFNtb2tl 54304\nW2Rm 54305\nIGJpc2hvcA== 54306\nbG9jYWxPYmplY3Q= 54307\nb3JyaA== 54308\nb250dmFuZ3N0 54309\nZHJ5 54310\nIGVyZm9s 54311\nLWNl 54312\nIE9yZGVyZWREaWN0 54313\nIGh4 54314\nIFJFU0VU 54315\nU3Vj 54316\nIHJlY2tsZXNz 54317\nYWxhbWF0 54318\nQmlnSW50ZWdlcg== 54319\nIGJ1bGJz 54320\nIG11dGU= 54321\n5pS+ 54322\nLlVsdHJh 54323\nTG9u 54324\nIGNsZWFyVGltZW91dA== 54325\nPFJpZ2lkYm9keQ== 54326\nc3dpcGVy 54327\nIENvbWVz 54328\nXGRi 54329\nCW1w 54330\nIHJlc3Rz 54331\nTW92ZWQ= 54332\nIExvcmU= 54333\nLkRpbWVuc2lvbg== 54334\nIE1hbml0 54335\nLmh4eA== 54336\nPT09PT09PQ== 54337\ncGl0Y2g= 54338\nZmZpZWxk 54339\nc2tpbGxz 54340\nX2FsYnVt 54341\ndHJhbnNsYXRlZA== 54342\nIFhJ 54343\nIHZlaW4= 54344\nIERhdmlkc29u 54345\nIEF1Y2tsYW5k 54346\neXNzZXk= 54347\nIGF1dGhlbnRpY2l0eQ== 54348\nIEFzc2lzdA== 54349\nIGNvbXByaXNl 54350\nQ3JlYXRlVGltZQ== 54351\nIHRyZW5jaA== 54352\nLndlZWs= 54353\nLS07 54354\nIFVJQWxlcnRDb250cm9sbGVy 54355\nX3JlbGF0ZWQ= 54356\nQ01T 54357\ncmVtZWx5 54358\nIGxleGVy 54359\naXJtd2FyZQ== 54360\nRWxlbWVudHNCeQ== 54361\nLXVwcGVy 54362\nIHN0YWdu 54363\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 54364\nX3NuYXBzaG90 54365\nL1hNTFNjaGVtYQ== 54366\nX09yZGVy 54367\nIGFubmV4 54368\nX0VOQ09E 54369\nIEFsdG8= 54370\nYXJpb3Vz 54371\nREo= 54372\nIGFib3J0aW9ucw== 54373\nQ29tYmF0 54374\nIExpY2VuY2U= 54375\ndWdnZXN0ZWQ= 54376\nW0s= 54377\nLCkpCg== 54378\nKCcvLw== 54379\nLkNhbg== 54380\nc2Vjcw== 54381\ncXVvdGVz 54382\nX3RyeQ== 54383\nIFNhZ2U= 54384\nIE1vdg== 54385\nJ29u 54386\ncmVnaXN0 54387\nIFdyaXRlcw== 54388\nIERpZ2VzdA== 54389\nCWNvbnRhaW5lcg== 54390\nLXByb2dyZXNz 54391\nIGdvYXQ= 54392\nX3NjaGVtZQ== 54393\nLkdldENoaWxk 54394\nIGFzeW0= 54395\nLm15YmF0aXNwbHVz 54396\nYXRpY2E= 54397\ncGdzcWw= 54398\nX2Fzc2V0cw== 54399\nPks= 54400\nIGFmaW4= 54401\nTlNT 54402\nIE5BVg== 54403\nKCcuJyw= 54404\nIGAi 54405\nIGF1ZGl0b3I= 54406\nX01PVVNF 54407\nIHdhbGxldHM= 54408\nIG1vdQ== 54409\ncnVucw== 54410\nZXRlcmFuZ2Fu 54411\nIFJlc2VydmF0aW9u 54412\nIGV4cGVyaWVuY2lh 54413\nCXByb2Nlc3M= 54414\nLWltcG9ydA== 54415\nX1JldHVybg== 54416\nIE1hY3Jv 54417\nIFBlbmlz 54418\ncGl4ZWxz 54419\nIHNldEVtYWls 54420\nKE1pZ3JhdGlvbkJ1aWxkZXI= 54421\nKHhz 54422\nIEVzdG9u 54423\nIEJ1YmJsZQ== 54424\nQUxMT1c= 54425\nCWhhbmRsZXI= 54426\nJHJldA== 54427\nIGNvbXBsaW1lbnRhcnk= 54428\nLWNpdHk= 54429\nIGVsbG9z 54430\nIFNPVVJDRQ== 54431\nIEFkdmlzb3I= 54432\nb2xvZ8OtYQ== 54433\nIGZhZGVk 54434\nLnBj 54435\nX1JHQkE= 54436\nQUZY 54437\nIHJlcGF5 54438\nIEZhbGNvbnM= 54439\nX2lzc3Vl 54440\nb21pZG91 54441\nLmJhb21pZG91 54442\nIGluZnJpbmdlbWVudA== 54443\ndXJuaW5n 54444\nL3N0b3JhZ2U= 54445\nX3F1YW50 54446\nIFF0Q29yZQ== 54447\nIG1lbGw= 54448\nX2RlbnNpdHk= 54449\nIEtub3g= 54450\nIFN1cnZpdmFs 54451\nLmdldFVzZXJuYW1l 54452\nIGNvbW1lcmNpYWxseQ== 54453\nZ3Jhc3M= 54454\nIG1laXM= 54455\n5Lq/ 54456\nIFBlcm1pc3Npb25z 54457\nX1FVT1RFUw== 54458\naXBob25l 54459\nIExPVA== 54460\nIHRocmlsbGVy 54461\nIENoYXBlbA== 54462\nIFJpcw== 54463\nPmk= 54464\nLUlE 54465\nIHJpZ2h0bHk= 54466\nQ3J5cHQ= 54467\nIElzdGFuYnVs 54468\ncmVkcw== 54469\nX3Jlc2l6ZQ== 54470\nUG9wdWxhdGlvbg== 54471\nKGZldGNo 54472\nIEhPVA== 54473\nOmZpcnN0 54474\nIGdhZGdldHM= 54475\nUHlPYmplY3Q= 54476\nIG1lcmdpbmc= 54477\nZHVjZWQ= 54478\nbGVnYXRlcw== 54479\ndWJlY3Rs 54480\nJS8= 54481\nYWxsZWU= 54482\nIHp1c2FtbWVu 54483\nLlByb3BUeXBlcw== 54484\nYXN0bw== 54485\nOio= 54486\ncmVjZQ== 54487\nUmVzcG9uc2VUeXBl 54488\nL2dyb3Vw 54489\nIGJhcmJhcg== 54490\nIENhcm9saW5l 54491\nb3VyY2Vk 54492\n57uP 54493\nIGx1YnJpYw== 54494\naW5zcGVjdGlvbg== 54495\nYW1tYWQ= 54496\nCUltYWdl 54497\nIGllcnI= 54498\nIGN1cnRhaW5z 54499\nX0FSQg== 54500\nIE9yYWw= 54501\nIGFsbGllZA== 54502\nIFN0YXR1c0NvZGU= 54503\nIENsZWFybHk= 54504\nUHJlZmVycmVkU2l6ZQ== 54505\ncXVpbmE= 54506\nIHNwb3M= 54507\nIG9wdGltaXNt 54508\nIGNvbXByYXI= 54509\nIGx1Zw== 54510\nIEJvb20= 54511\nY29uZmlybWF0aW9u 54512\nX0RVUkFUSU9O 54513\nX2Jyb3dzZXI= 54514\nIHJlcGV0aXRpb24= 54515\nIGtlZXBlcg== 54516\nIGFkZFRv 54517\nKGpz 54518\nLlN0YXQ= 54519\nLkNvbmQ= 54520\nIEhlcm5hbmRleg== 54521\ncGFxdWU= 54522\nIHZvbHVudGFyaWx5 54523\nIGplcms= 54524\nIExleQ== 54525\nIGRvY3VtZW50bw== 54526\nX2RlYWQ= 54527\nIFRFQ0g= 54528\nIGluY2VwdGlvbg== 54529\nKCJ7fQ== 54530\nIG9uTG9hZA== 54531\neGRk 54532\nIElTUA== 54533\nc3BlY2lmaWVk 54534\nIOusuA== 54535\nUFJPQ0VTUw== 54536\nKGFsZXJ0 54537\nLk1N 54538\nIGNyZWF0ZVN0b3Jl 54539\nKHVuaXF1ZQ== 54540\nLmdldEJsb2Nr 54541\n656Y 54542\ndW5vcw== 54543\nIHRyb3BoaWVz 54544\nX2hvdmVy 54545\nIERhZGR5 54546\nLk1l 54547\nIENPVVI= 54548\nT0JK 54549\nYXRlbWFsYQ== 54550\nIFBzaQ== 54551\nIG5vcm1hbHM= 54552\nYWNpZXI= 54553\nIE1CQQ== 54554\nIHBhd24= 54555\nz4U= 54556\nIHNwb250YW5lb3Vz 54557\nIGF1eGlsaWFyeQ== 54558\nIGluYXVndXJhbA== 54559\nIGZhc3Rpbmc= 54560\nIEZpbGVTeXN0ZW0= 54561\nIHplbg== 54562\nX0JMVUU= 54563\nIHN1YnRyZWU= 54564\nIHByZXByb2Nlc3M= 54565\nLXRyYWNr 54566\nQ2hhcmxlcw== 54567\nIGRlcG9zaXRlZA== 54568\nIHF1ZXJ5UGFyYW1z 54569\n0L7Qu9GM0LrQvg== 54570\naWVtYnJl 54571\nIHByYXc= 54572\neEZD 54573\nIHBhbmM= 54574\nX25vbQ== 54575\naGVyb2Vz 54576\nLmphdg== 54577\nOjokXw== 54578\nINin2YTZhQ== 54579\nU0dsb2JhbA== 54580\n5o+P6L+w 54581\nPXRlbXA= 54582\nZXN0aQ== 54583\nIGNvbnN0cnVjdGl2ZQ== 54584\nIFNoaW0= 54585\nIERpcmVjdGlvbnM= 54586\nIEJpbmc= 54587\nZGlydHk= 54588\nLXJ1bm5pbmc= 54589\nX2ZpbGVwYXRo 54590\nb3JkZXJJZA== 54591\nZ2FyZA== 54592\nX29yaWVudA== 54593\nIHNjb3V0 54594\nIHBzeWNob2xvZ2lzdA== 54595\n7LY= 54596\nIOWt 54597\nZGVxdWU= 54598\nIEhlcm1pb25l 54599\nIFBvd2VyUG9pbnQ= 54600\nIGVsbGE= 54601\nIFVJQmFyQnV0dG9uSXRlbQ== 54602\nU3Vidmlld3M= 54603\nQFJlcG9zaXRvcnk= 54604\nIiIiCgoK 54605\nIHJldG91cg== 54606\nIGNpcmNh 54607\nR3JhcGhpYw== 54608\nIEdyYXR1aXQ= 54609\nZGR5 54610\nIHRlY2huaWNpYW4= 54611\nIENsZWFudXA= 54612\nIHBlcnNvbm5l 54613\nIHJlc2lu 54614\nLk11bHQ= 54615\nJG0= 54616\nIE9yY2hlc3RyYQ== 54617\nIHdoZWVsY2hhaXI= 54618\nLlND 54619\nCUdhbWVPYmplY3Q= 54620\nIG1vxbxl 54621\nT3BlbmVk 54622\nIGNoaWNrZW5z 54623\nb3Rhcw== 54624\nX3RlbXBlcmF0dXJl 54625\nIGRldGVjdGluZw== 54626\nIGFjcXVhaW50 54627\nIDw/PSQ= 54628\nPl0= 54629\nIG1lbnN0cg== 54630\nIGR5ZQ== 54631\nUm9ib3Rv 54632\nLnVuaXRz 54633\nIFZpbnls 54634\nY3VyYQ== 54635\ncnlwdG9u 54636\nZWRk 54637\nPXRlc3Q= 54638\nIHRyb3Y= 54639\nQ29uZmlybWF0aW9u 54640\nIHRoZW9sb2d5 54641\nIEhvbGRpbmdz 54642\ndWF0aW5n 54643\nUHJlZGljdA== 54644\nW3VzZXI= 54645\nIDon 54646\nIFNlc3Nv 54647\ncGFyZW50SWQ= 54648\nQ29kZUF0 54649\nYWJibw== 54650\nIFRyZXZvcg== 54651\nIFF1aXQ= 54652\nX3NoaXBwaW5n 54653\nX1JB 54654\nIGtsZWluZQ== 54655\n56Y= 54656\nX0xhYmVs 54657\nIE9tYXI= 54658\nIEdSRUVO 54659\nLykK 54660\ncm9r 54661\nIHJvYXN0ZWQ= 54662\nX1JU 54663\nIOKAjg== 54664\nQFJ1bldpdGg= 54665\nPk5O 54666\nIHRhbmQ= 54667\nKycu 54668\nY3J1ZA== 54669\nLmtleWJvYXJk 54670\nYXN0ZXJ5 54671\nQkFE 54672\nIENvbHVtbnM= 54673\nLkNvbXBhbnk= 54674\nIHNlbWluYXI= 54675\nIGdldENvbnRlbnRQYW5l 54676\nIGNhdGFzdHJvcGhpYw== 54677\nIGVtYnJvaWQ= 54678\naWF0aXZl 54679\nIGNydWVsdHk= 54680\nYmlz 54681\nIGluc2U= 54682\nIEJyb2tlbg== 54683\nCWZz 54684\nIG1WaWV3 54685\n0LDRhtC40Lg= 54686\nLWZhY2Vib29r 54687\nIGNhY2hlcw== 54688\n44CC44CCCgo= 54689\nIE9STQ== 54690\nIERpc3RyaWI= 54691\nIFNjZW5lTWFuYWdlcg== 54692\nX3RyYW5zaXRpb24= 54693\nb21leg== 54694\nIFNIRQ== 54695\nIHdvcmtsb2Fk 54696\nU3VwcG9ydGVkRXhjZXB0aW9u 54697\nIHJpZXM= 54698\nIOWc 54699\nKGNhdA== 54700\nSGFzTWF4TGVuZ3Ro 54701\nQXBwcw== 54702\nLlRBQkxF 54703\nIEtleVZhbHVlUGFpcg== 54704\nZWRpZG8= 54705\nLlJlbmRlcmluZw== 54706\nIGVsZWN0cm9t 54707\nIGFyYml0cmF0aW9u 54708\nIHZhcmlhYmlsaXR5 54709\nYXBvbGxv 54710\nIHV0bW9zdA== 54711\nb3BlbnNzbA== 54712\nIGjDpQ== 54713\nKCcm 54714\nLlN0YW5kYXJk 54715\nIGRpc3RyYWN0aW9u 54716\naWZheA== 54717\nIOuVjA== 54718\ndGhvc2U= 54719\naXNwZW5z 54720\ndmFr 54721\nIFNVUA== 54722\nIElzUGxhaW5PbGREYXRh 54723\nLGtleQ== 54724\nZnJhZ2lzdGljcw== 54725\nIEpveWNl 54726\nIEZpYmVy 54727\nLlNlcnZsZXRFeGNlcHRpb24= 54728\nX0FsbA== 54729\nIGJhY2tlcnM= 54730\nIEF0dHJpYnV0ZUVycm9y 54731\newoKCg== 54732\nQHlhaG9v 54733\nLWRpcmVjdG9yeQ== 54734\nIHVuaW5zdGFsbA== 54735\nIGZsdW9y 54736\nbGlxdWlk 54737\nIGzDoQ== 54738\nIGZyaWdodGVuaW5n 54739\nYWRhbg== 54740\nIEFVVA== 54741\nIHRhdHRvb3M= 54742\nIHByb3BhZ2F0aW9u 54743\nLnRyYW5zbGF0aW9u 54744\n0J/RgA== 54745\nX3NjaGVkdWxlcg== 54746\n44CC4oCc 54747\nIGNhaXJv 54748\nIEh0dHBDbGllbnRNb2R1bGU= 54749\nIE5EUA== 54750\nIEhpdHM= 54751\nIFRyYW5zZm9ybWF0aW9u 54752\nIENhZXNhcg== 54753\nc3RpbQ== 54754\nIEJ1cnRvbg== 54755\nd3lu 54756\nIGNvbW1hbmRlZA== 54757\nIENsb3RoaW5n 54758\nIFJ1bnRpbWVPYmplY3Q= 54759\ncmVhbGx5 54760\nY2xh 54761\nLnNh 54762\nIFNoYW5ub24= 54763\nIGNvbW1pc3Npb25z 54764\nIEphbmV0 54765\nIGRpc2d1c3Rpbmc= 54766\nIG9wdGltdW0= 54767\nX3NvbA== 54768\ndXJvbnM= 54769\nIFNIQVJF 54770\nQXR0cnM= 54771\nIFNjaGU= 54772\nIEJpZ051bWJlcg== 54773\nIGNpZ2Fy 54774\nKGRlcHRo 54775\nIGZyYWM= 54776\nIEN1cnZl 54777\nTEFTVA== 54778\nIFNDUklQVA== 54779\n6rO8 54780\nTWFsbG9j 54781\nLmdyb3VwYnk= 54782\nIExlc2xpZQ== 54783\nIHdoaWNoZXZlcg== 54784\nU21hcnR5 54785\nL3dl 54786\nIEFtcA== 54787\nLGlu 54788\nbG9wcw== 54789\nZGVwZW5kZW5jeQ== 54790\nY2VkdXJlcw== 54791\nIGB7 54792\neGljbw== 54793\nQ29sbGVjdG9y 54794\nIGhhYw== 54795\nIERhcmtuZXNz 54796\nZmZmZmZmZmY= 54797\nJz0+Ig== 54798\nIHBsZWFzaW5n 54799\nY29ubmVjdG9y 54800\nem9z 54801\nUENJ 54802\ndmFj 54803\nIEluY29ycG9y 54804\nIG5lZA== 54805\nX0ZBQ1RPUg== 54806\nLmZi 54807\nIG91bmNl 54808\nX3NhdmVk 54809\nINix 54810\nIGRlZWRz 54811\nIERvbHBoaW5z 54812\nIGJ1ZW4= 54813\nRVND 54814\nLHRpbWU= 54815\nX0FVVA== 54816\nZWNz 54817\nIFNlbmF0b3Jz 54818\nLm91dGVy 54819\nIFNlbGxpbmc= 54820\nIHJpbg== 54821\nPmAK 54822\nLm9ic2VydmFibGU= 54823\nIGNvc3Rpbmc= 54824\nREc= 54825\nIHdpbmRpbmc= 54826\nIHNrYQ== 54827\nIGNpcmN1bGF0aW5n 54828\nIGZvcm1pZGFibGU= 54829\nYW1wbw== 54830\nIFJhaXNlZA== 54831\nIHZlZ2V0YXRpb24= 54832\nVUZGSVg= 54833\nS2lsbA== 54834\ncHRpdmU= 54835\nKHJ2 54836\nIENvdW50cmllcw== 54837\nIE5ha2Vk 54838\nIEpB 54839\nKSkiCg== 54840\ndWRhcw== 54841\nIGJhcms= 54842\nCWxldmVs 54843\nIGZvZXM= 54844\nPkFkZA== 54845\nWW91VHViZQ== 54846\nO3Q= 54847\nTkNZ 54848\nQ2x1Yg== 54849\nRWlu 54850\nLS0NCg== 54851\nIGNvbnN0cmFpbmVk 54852\nRVR3aXR0ZXI= 54853\nWUc= 54854\nRGVzY3JpcGNpb24= 54855\nVU5DSA== 54856\nIGVucXVldWU= 54857\nIGRpc2tz 54858\nIFdlbnQ= 54859\nIG11aXQ= 54860\nCWxvY2F0aW9u 54861\nIHJldmlzaW9ucw== 54862\nIEFDSw== 54863\nLWZpeGVk 54864\ndHJhc291bmQ= 54865\nXFRlc3Q= 54866\nU3RhcnRQb3NpdGlvbg== 54867\nLWh0bWw= 54868\nIHByb2JsZW1hcw== 54869\nX0lOVEVSUlVQVA== 54870\nIFNUT1JF 54871\n5qih 54872\naWxpYXRlZA== 54873\nIFJQTQ== 54874\nW3RlbXA= 54875\nYWNodGVu 54876\nIGNpYw== 54877\nIEF1dG9tYXRpb24= 54878\nIGhpZ2hz 54879\nLyg/ 54880\nOicpCg== 54881\nc3Bhcms= 54882\ncmVscw== 54883\nCW1vdg== 54884\nVVRFUw== 54885\nLkF1dGhvcml6YXRpb24= 54886\nIFNjaG5laWRlcg== 54887\nIGNoZWVrcw== 54888\nYWRkcmVzc2Vz 54889\nYXJkaW4= 54890\nIHJlbW92YWJsZQ== 54891\nLkJhZFJlcXVlc3Q= 54892\naWNpb25hcg== 54893\nIERpZXNlbA== 54894\ndGhhbg== 54895\nL34= 54896\nIGRhenU= 54897\nUmVnaXN0cm8= 54898\nZmZp 54899\nX0RMTA== 54900\nIG5pZXU= 54901\nIG1vaXN0dXI= 54902\nLWV2ZW50cw== 54903\nIHRocmlsbA== 54904\nLmdldEVudGl0eQ== 54905\nIHRvZ2c= 54906\nIHdhdg== 54907\nKWRpZA== 54908\nYXRr 54909\nKHN1YnN0cg== 54910\nIEluamVjdGlvbg== 54911\nX21i 54912\nLkRpdg== 54913\nIGVuZGVhdm9y 54914\nICjCow== 54915\nIGNsdXR0ZXI= 54916\nIHVyZ2VuY3k= 54917\nIGluc3RydWN0b3Jz 54918\nLScs 54919\nLXN0YW5kYXJk 54920\nY2Vt 54921\nCWhhbmRsZQ== 54922\nLmZ0 54923\nU3RlcGhlbg== 54924\nUm9u 54925\n44GZ44KL 54926\nc2Np 54927\nIEF0bW9z 54928\nIGNhdGVyaW5n 54929\nIGZpYXQ= 54930\nLlBlcmNlbnQ= 54931\nIENvbmdv 54932\neGRm 54933\nLm1vemlsbGE= 54934\nIHNlaGVu 54935\nLnNob3dUb2FzdA== 54936\nT09U 54937\nLXJlc3VsdA== 54938\nzIE= 54939\nIGdob3N0cw== 54940\nIEJ1ZW4= 54941\nIFJpZGVy 54942\nIERvY3RvcnM= 54943\nIHVyYW5pdW0= 54944\nIGxvdWRseQ== 54945\nIHBvaXNlZA== 54946\nIGZhdm9ycw== 54947\nKEFQ 54948\nTEVZ 54949\nIHNpY2tuZXNz 54950\nIGNoYXR0ZQ== 54951\nIGludGVncmF0aW5n 54952\nIFl1cA== 54953\nQ2xvc3VyZQ== 54954\nIFRhbGVz 54955\nIGxpbmVh 54956\nIGV5ZWw= 54957\nLkNyeXB0b2dyYXBoeQ== 54958\ndW5leHBlY3RlZA== 54959\nYWxlbWVudA== 54960\nY2l0 54961\nZXRBZGRyZXNz 54962\nTGVhZA== 54963\neGNk 54964\nX25lZ2F0aXZl 54965\nX2NvcnI= 54966\naWdyYXBo 54967\nLWNoYW5uZWw= 54968\nIGRpc2Nv 54969\nU2VlZGVy 54970\nYmVhbQ== 54971\nX2Rw 54972\nQ0ND 54973\nIFByb3ZpZGVk 54974\nIGpzb25EYXRh 54975\nX1dI 54976\nRklORQ== 54977\nQlg= 54978\nLkRhdGFBY2Nlc3M= 54979\nIHRlbXB0ZWQ= 54980\nIGZpbmVk 54981\naXNDaGVja2Vk 54982\nIGZyYXVkdWxlbnQ= 54983\nRnJp 54984\nIGRvbWlj 54985\nUXVpeg== 54986\nIFVuZGVyZ3JvdW5k 54987\nYWJyYXM= 54988\nIElEaXNwb3NhYmxl 54989\nIFBlcnNvbmE= 54990\nIHJvZ3Vl 54991\nIEJleQ== 54992\nZ2V0Q2xpZW50 54993\nZWtlbg== 54994\nICcnJw0K 54995\nV2lraQ== 54996\nKEh0dHBTdGF0dXM= 54997\nU3RyZXRjaA== 54998\nIEdlc3Q= 54999\nIO2VmA== 55000\nIGVudGl0bGVtZW50 55001\nIGRvZW4= 55002\nYmxvZ3M= 55003\nIHZpdHJv 55004\nIk9o 55005\nIFN1bW1vbg== 55006\nIEJhY2tib25l 55007\nIGfDvA== 55008\nZ2V0Q29sdW1u 55009\nIFdJTkFQSQ== 55010\nCXZh 55011\nX1JFUVVJUkVE 55012\nLnRocm93 55013\nIHNldEN1cnJlbnQ= 55014\nZHVjdGVk 55015\nKEZ1bmN0aW9u 55016\nZWxzaW5raQ== 55017\nX1Blcg== 55018\nZmxpZXM= 55019\nIGluY29tcGV0 55020\nIGp1xbw= 55021\nKCkl 55022\nIC0tLQo= 55023\ndW1hcw== 55024\nIE9sZGVy 55025\nIGRpc3B1dGVk 55026\nX1JFUVVJUkU= 55027\nLm1hdG11bA== 55028\ndW5rZW4= 55029\n5LmL 55030\n44GL44KJ 55031\nIHR0bA== 55032\ndW5kZXJzY29yZQ== 55033\nIFBhdHJpY2lh 55034\nIHRhcGVy 55035\nIHNlaW5lcg== 55036\nIHNheWE= 55037\n5Y+w 55038\naWVyaQ== 55039\nLnNlY3JldA== 55040\nIHhvcg== 55041\nIG1pdG9jaG9uZA== 55042\nIGNhcmRib2FyZA== 55043\nfWB9 55044\nLUJFR0lO 55045\nIGRhdmlk 55046\nb3Vsb3M= 55047\nIFBldGVyc2J1cmc= 55048\nICIiLA0K 55049\nc2hlbGY= 55050\nLXdhdGVy 55051\nLWJ5dGU= 55052\nINC+0LHRitC10LrRgg== 55053\nIHN0aXJyaW5n 55054\n7Je0 55055\nIGNvbXB0 55056\nIFBvdGVudGlhbA== 55057\nUkFGVA== 55058\nIGVhcHBseQ== 55059\nIHN3aW5naW5n 55060\nIGZlYw== 55061\nQVJB 55062\nIHdhbmRlcmluZw== 55063\nIHByZWZlcnM= 55064\nSmVzdXM= 55065\nIHBpcmF0ZQ== 55066\nIElzaXM= 55067\nLk1pbmltdW0= 55068\nIFZhbGU= 55069\nX0JU 55070\ncmVuY2hlZA== 55071\nY29ycw== 55072\nKGl0ZW1WaWV3 55073\nIGfDpQ== 55074\nLkNvbnRhY3Q= 55075\nVmlld0NoaWxk 55076\naW5kc2F5 55077\nY29uZmlncw== 55078\nRHVwbGljYXRl 55079\n4oCmSQ== 55080\nenlzdA== 55081\nKHRvZG8= 55082\nLlJlbW92ZUF0 55083\nX0RJRkY= 55084\nIEJvdHRsZQ== 55085\nIHZvbHRh 55086\ndHJhZmZpYw== 55087\nTGVl 55088\nIOyk 55089\nIHR1bmVz 55090\nIEVjdWFkb3I= 55091\nIFl1bg== 55092\nIHVuZGVyd2VudA== 55093\naWNvbQ== 55094\nICcnKXsK 55095\nLXBvbA== 55096\nZmxhbW1hdG9yeQ== 55097\nTXV0YXRpb24= 55098\nIHJlY2Fw 55099\nX3ZlcnQ= 55100\nT1RJT04= 55101\nQ0RBVEE= 55102\naWNpbmU= 55103\nX2JvdW5kYXJ5 55104\nU2NhbGFycw== 55105\nIFVsdGltYXRlbHk= 55106\nRVE= 55107\nbWV0YWw= 55108\na3Nlcw== 55109\nbXBs 55110\nIGNvbnRlbg== 55111\nU29sZA== 55112\nRVNTQUdFUw== 55113\nIGJpbmRlcg== 55114\nIGxpbmVu 55115\nIE15QXBw 55116\nLW1ldGE= 55117\nCXJhaXNl 55118\nb3VsdHJ5 55119\nCW1vZHVsZQ== 55120\n5pi+56S6 55121\nbsOt 55122\nIHlycw== 55123\nIHBoeXNpYw== 55124\nLXBsYXRmb3Jt 55125\nIHN3aW5nZXJz 55126\nKGhlYWRlcnM= 55127\nLicp 55128\nIEJV 55129\nIEluY29udHJp 55130\nU2NlbmFyaW8= 55131\nQW1i 55132\nIHByZW1pw6hyZQ== 55133\nL2FydGljbGVz 55134\nIE1ham9yaXR5 55135\nQ0xVU0lWRQ== 55136\nb25vcg== 55137\nIGhhYsOtYQ== 55138\n5bee 55139\nIG1pZGk= 55140\nIExhYw== 55141\nLmZpbmRJbmRleA== 55142\nIFBhaW50aW5n 55143\nLmJvcmRlckNvbG9y 55144\nKmo= 55145\nIGNvbmdlc3Rpb24= 55146\nX0RJQ1Q= 55147\nb2xsZQ== 55148\nYXJuYXRpb24= 55149\nKHRleHR1cmU= 55150\nIHVm 55151\nIEVpbnN0ZWlu 55152\nKFRocmVhZA== 55153\nIGluZG9vcnM= 55154\nc2NyYXRjaA== 55155\nIG1ha2Vu 55156\nLlNUQVJU 55157\nIEp1ZHk= 55158\nZm9ydW1z 55159\nCgoKCgoKCgoK 55160\nQklMRQ== 55161\nIHZvdQ== 55162\nTVlTUUw= 55163\nIGdlcm5l 55164\nIEltcG9ydEVycm9y 55165\nIFN1cnJl 55166\nPG5hdg== 55167\nIERpZXNl 55168\nZXdhcmU= 55169\nIOuqqA== 55170\naW1wbGVtZW50ZWQ= 55171\nU0lHTg== 55172\nICd7QA== 55173\ncnpl 55174\nLm1pbmVjcmFmdGZvcmdl 55175\nLmlubmVySGVpZ2h0 55176\nYmVjaw== 55177\nIGN1cnJ5 55178\nIGZvcm11bGFz 55179\nYWdvZw== 55180\nZW5kZXQ= 55181\nIFBhaWQ= 55182\nIFJvYmVydG8= 55183\nIHVucGFpZA== 55184\nPWhlYWRlcnM= 55185\nLlBvd2Vy 55186\nIGJyZWQ= 55187\nb3JFbHNl 55188\nb3hpZGU= 55189\nIGZpbmFsaXpl 55190\nc2V0Q29sb3I= 55191\nIFN0YWR0 55192\nKCdcXA== 55193\naXNtaWM= 55194\nIGhlbGU= 55195\nLlByb3RvY29s 55196\nLkhvc3Rpbmc= 55197\nX01lbnU= 55198\nX2NvbmRpdGlvbnM= 55199\nIHB1cmdl 55200\nLnhhbWw= 55201\nYmFyZQ== 55202\nRlJBTUU= 55203\nIGN1YmVz 55204\nIEpvaGFubmVz 55205\nb2NyYXRz 55206\nLkRpcmVjdG9yeQ== 55207\nKWE= 55208\nPyk6 55209\nX0xJQlJBUlk= 55210\nIGdldFRva2Vu 55211\nIGVjaG9lZA== 55212\nPWg= 55213\nX3NvYw== 55214\nIEV2YWx1YXRl 55215\nIOq4sA== 55216\nIERlbGV0ZWQ= 55217\nRXU= 55218\nIGNsb25lZA== 55219\nc3RhdGlzdGljcw== 55220\nLkNhbnZhcw== 55221\nIGhhY2tlcg== 55222\nIGdhbmdz 55223\nLnJlc3VtZQ== 55224\ncGVhY2U= 55225\n0JLQstC10LTQuNGC0LU= 55226\nIFByb2NlZWRpbmdz 55227\n56U= 55228\nIGphcGFu 55229\nID8+Pgo= 55230\nICR7KHs= 55231\nLnJlY3RhbmdsZQ== 55232\nZ3c= 55233\nIE9yaWVudGF0aW9u 55234\nJW0= 55235\nLiIpKTsK 55236\nIExpZXV0ZW5hbnQ= 55237\nLnRydWU= 55238\nIGVsdA== 55239\nIERJUkVDVE9SWQ== 55240\nzq8= 55241\nLmRheXM= 55242\ndXR0Z2FydA== 55243\nIHVuZGVyd2Vhcg== 55244\nLCkK 55245\nQ0lE 55246\naW1lbGluZQ== 55247\nIEJsZW5k 55248\ncGhhc2lz 55249\nIHBlcnNl 55250\nIGdsaXR0ZXI= 55251\nIHVuaXE= 55252\nIENvbWJvQm94 55253\nIHNlc3Npb25JZA== 55254\ndXN0ZXJpdHk= 55255\nSURHRQ== 55256\n0L7QsdGJ 55257\n0KQ= 55258\ncmVuZGVycw== 55259\nX3Bvc2l0aXZl 55260\nX3Nsb3Rz 55261\nYnJvYWRjYXN0 55262\nIE1vbGQ= 55263\nL0NvcmU= 55264\nIEJhbm5vbg== 55265\nVG9vbEJhcg== 55266\nYWJlbGxl 55267\nX2F3 55268\nb2xlY3VsZQ== 55269\nIGRlbGV0ZXM= 55270\nIMOhcmVh 55271\nIHByb3BvcnRpb25hbA== 55272\nTVc= 55273\nIHdhcnk= 55274\nIGludGVybWVkaQ== 55275\nICoqKioqKioqKioqKioqKioqKioqKioqKg== 55276\nLlNUQVRVUw== 55277\nX3R3 55278\nIGFyb21h 55279\nIGFjdGl2aXNt 55280\nLklzTm90TnVsbA== 55281\ndWF0 55282\nIHBvc3REYXRh 55283\nIHBlbQ== 55284\nX2N0b3I= 55285\nIFJhcGlkcw== 55286\nLW9mZnNldG9m 55287\nIGluZWZmZWN0aXZl 55288\nIG9uRGVzdHJveQ== 55289\nIE1ldHJpY3M= 55290\nIHBhZGRpbmdMZWZ0 55291\nLWVuYWJsZWQ= 55292\nIEdvYWxz 55293\neW5jaHJvbm91c2x5 55294\nIHllcg== 55295\nSXRlbUF0 55296\nIE1ZU1FM 55297\nY2Vzbw== 55298\nLktpbmQ= 55299\ndGVj 55300\nKGJ1bmRsZQ== 55301\nIHJlZmVyZWU= 55302\nLiI7DQo= 55303\nIGNvbmV4 55304\nIGJpa2luaQ== 55305\nX0FQUExJQ0FUSU9O 55306\nIHN3ZWxsaW5n 55307\nIGJlYWRz 55308\nIGJhcmdhaW5pbmc= 55309\nLS0tLS0tLS0tLS0KCg== 55310\nIGtpdGE= 55311\nKmZ0 55312\nTWluaQ== 55313\nIFRvbmlnaHQ= 55314\nIG1hbmlwdWxhdGVk 55315\nTWlycm9y 55316\nIFBvc3RhbA== 55317\nIG1hcmU= 55318\nRFc= 55319\nIGNvbXBpbGluZw== 55320\nIGZvcmVuc2lj 55321\nLmdldFZpZXc= 55322\nZXBpbmc= 55323\nQ29z 55324\nIGFjY3JlZGl0ZWQ= 55325\nIG9iamV0aXZv 55326\nY2FyZXQ= 55327\nUGFpcnM= 55328\nKT4+ 55329\nIHNlw7E= 55330\nIHF1b3RhdGlvbg== 55331\nIEJyYW5kcw== 55332\ndWJp 55333\neXB5 55334\nIElubGluZQ== 55335\naW1ldGVycw== 55336\nV2ludmFsaWQ= 55337\nCWxpbms= 55338\nIEJlbGZhc3Q= 55339\nIE1lYXN1cmVtZW50 55340\nX05PVElGSUNBVElPTg== 55341\nIHJveQ== 55342\nIENHQ29udGV4dA== 55343\nIHdlZGRpbmdz 55344\nVVJOUw== 55345\nIHBvZGNhc3Rz 55346\nIFNlcmc= 55347\nIOuNsOydtO2EsA== 55348\nIGVhcm5lc3Q= 55349\nY292ZXJhZ2U= 55350\naXRlRGF0YWJhc2U= 55351\nRW1wbG95ZWVz 55352\nIERlbWFuZA== 55353\nIGNvbnRlbmlkbw== 55354\nIFFWZWN0b3I= 55355\nIiwiXA== 55356\nIEdlcmFsZA== 55357\nKClg 55358\nIGdyaWRCYWdDb25zdHJhaW50cw== 55359\nUkVTT1VSQ0U= 55360\nIFNhZw== 55361\nYWJpbGlkYWQ= 55362\nIGNvZXJj 55363\nb3VuY2VtZW50cw== 55364\nIElzbGU= 55365\nLmVkZ2U= 55366\nIGV4dGVy 55367\nKV1b 55368\nIFBsYXlsaXN0 55369\nIEJsaW5k 55370\nIFZpdGFs 55371\nIGxhdHRpY2U= 55372\ncmF0ZWQ= 55373\nZGVwZW5kZW5jaWVz 55374\nIGBgYA== 55375\nIEthbmc= 55376\nbWFjaA== 55377\nLmZhZGU= 55378\nIEd1ZXNz 55379\nKls= 55380\nTmF0dXJhbA== 55381\nLk9r 55382\nIFJlbmFpc3NhbmNl 55383\nIHRodWlz 55384\nIGxpa2Vu 55385\nKmg= 55386\nXCcs 55387\nLWNsb2Nr 55388\nIE9iamVjdGl2ZQ== 55389\nZmluZE9yRmFpbA== 55390\nIERpcnR5 55391\nIHNjYW5k 55392\nIFZBUklBQkxF 55393\nIGNvbXBhcmF0aXZl 55394\neXBhZA== 55395\nKFNvdXJjZQ== 55396\nZWNv 55397\nIGp1c3F1 55398\nCWFwaQ== 55399\nQnVpbHQ= 55400\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 55401\nIGxhYmVsaW5n 55402\nIGhlYWRhY2hlcw== 55403\nIG11ZmY= 55404\nIE9yY2g= 55405\nIGhhdGVz 55406\nLWJyZWFraW5n 55407\nL2J1dHRvbg== 55408\nIEJ1eWluZw== 55409\nTWV0cmlj 55410\nIHVuc3BlY2lmaWVk 55411\nL2hlYWQ= 55412\nIHN0aW5n 55413\nIHJlaW5mb3JjZQ== 55414\nIENvbVZpc2libGU= 55415\nYmxpbms= 55416\nIEFobWFk 55417\nZGJn 55418\nX2xibA== 55419\nIGh0dA== 55420\n7JuQ 55421\ncm9wb2xpcw== 55422\nICgoX18= 55423\nIHBlcm1l 55424\nIGFwcGFyZWw= 55425\nU1RSRUFN 55426\nY2h0cw== 55427\nIHNlaW5z 55428\nZmlsbFR5cGU= 55429\n7KO8 55430\nUk9XU0VS 55431\ndW1waW5n 55432\nIE5pZ2VyaWFu 55433\n4oCUaXM= 55434\nX2xvZ2lj 55435\nLk9yZGluYWw= 55436\nbG9zdA== 55437\nL3Vzcg== 55438\nQWY= 55439\nIEl0ZXJhdGU= 55440\naWJz 55441\nYWFs 55442\nIHN5bW1ldHJpYw== 55443\nLGlucHV0 55444\nIFBMTA== 55445\ndXppb25l 55446\nY2FwdGNoYQ== 55447\nIFRhbGU= 55448\nRXhwaXJlZA== 55449\nIE9iamVjdE1hcHBlcg== 55450\nY2lkbw== 55451\nLmdldE5leHQ= 55452\nIG1lbmphZGk= 55453\nOnNlbGVjdGVk 55454\nIHJpZW4= 55455\nX3NlbmRlcg== 55456\nUHdk 55457\nIEZsaWNrcg== 55458\nLkphdmE= 55459\nX3ZvdGU= 55460\nX01vZGU= 55461\nLiR7 55462\nIGZ1Y2tz 55463\nIEFsaWJhYmE= 55464\nIGluc2lkZXI= 55465\nYWNpbWllbnRv 55466\nIGZyYW7Dp2Fpcw== 55467\nSlNPTkV4Y2VwdGlvbg== 55468\nIEp3dA== 55469\nTWl0 55470\nbGVpY2g= 55471\nIHByYWN0aXRpb25lcg== 55472\nL3NvdXJjZQ== 55473\nIG9nbmk= 55474\nIHBoaWxvc29waGVy 55475\nU25hY2tCYXI= 55476\nc3RlbGx1bmc= 55477\nKGJpdG1hcA== 55478\nIGFzdGVyb2lk 55479\nIG1hcGxl 55480\ndWNoYQ== 55481\naXRlbUlk 55482\nIHN0ZWh0 55483\nT3JkZXJlZA== 55484\nZW5idXJn 55485\nL3Rva2Vu 55486\n6YWN 55487\nIFdlYmI= 55488\nb3dhbmll 55489\nIFdBSVQ= 55490\nIEhEUg== 55491\nIEV2YQ== 55492\nQVRUTEU= 55493\nKG1hc3Rlcg== 55494\nIGVycw== 55495\nYWxvYWQ= 55496\nIHNtdHA= 55497\ndW5pcQ== 55498\nIGd1aXQ= 55499\nIFJhZmFlbA== 55500\nImlu 55501\nKFVJ 55502\nKExheW91dEluZmxhdGVy 55503\nb3Jhbg== 55504\nIHNlcnZp 55505\nbmV6 55506\nIFRvcnJlcw== 55507\nLk1pZGRsZUNlbnRlcg== 55508\nIG1vbGw= 55509\nIFRleHRBbGlnbg== 55510\nX3VwbG9hZGVk 55511\nIE1laHI= 55512\nIGhvbW8= 55513\nLWxpbmtlZA== 55514\ndW5uZXI= 55515\nX2xlbmd0aHM= 55516\nIGRpZmZ1c2U= 55517\nIEF1dG9tb3RpdmU= 55518\nWWVhcnM= 55519\nIGxpZW4= 55520\nW2NvdW50ZXI= 55521\na2xhc3M= 55522\n0YHRgtC4 55523\nLkVuZ2luZQ== 55524\nIG1lbnk= 55525\ndWx0eg== 55526\nIGluZmFudHJ5 55527\nVmlh 55528\nc2VjdHM= 55529\nLmRhc2hib2FyZA== 55530\nIHNwb25zb3JzaGlw 55531\nLk1vZGlmaWVk 55532\nOy0= 55533\nIFZlbG9jaXR5 55534\ndHJhY3RlZA== 55535\nKG1ldGFkYXRh 55536\nIHBsYWd1ZQ== 55537\nTlNVc2VyRGVmYXVsdHM= 55538\nYXBwcm92YWw= 55539\ncHJvYmFibHk= 55540\nLXNpeA== 55541\nX1ZJUw== 55542\nOicnLAo= 55543\nLmVuYw== 55544\nLk1lc3NhZ2Vz 55545\nX1BST0dSRVNT 55546\nIG5lY2tsYWNl 55547\nIFRlbXBvcmFyeQ== 55548\nX21hcmt1cA== 55549\nIEZ1bmN0aW9uYWw= 55550\nIEpp 55551\nIHRlc3RDYXNl 55552\nICgpOw0K 55553\nX0NlbGw= 55554\nIFJlc2lkZW50aWFs 55555\nIFJhaWx3YXk= 55556\nKCgmX19f 55557\nIGRlZmF1bHRzdGF0ZQ== 55558\nIGVpbm1hbA== 55559\nLmZhYw== 55560\nKmY= 55561\nIHBpY25pYw== 55562\nKGV2YWw= 55563\nIGZ1cm5hY2U= 55564\nYXNzb2NpYXRpb24= 55565\neyEh 55566\nIENvbXBpbGU= 55567\neGVi 55568\nRXZhbA== 55569\ngOyepQ== 55570\nKGNhbA== 55571\nIG1hcmtldGVycw== 55572\nX2hlbHBlcnM= 55573\nbG9jYWxjdHg= 55574\nIHlvZ3VydA== 55575\nIHZpdGE= 55576\nLGxlbmd0aA== 55577\nIElucHV0RGVjb3JhdGlvbg== 55578\nIGludGVydmVuZQ== 55579\nIGNvbXB1dGF0aW9uYWw= 55580\nRGVuaWVk 55581\nL2Vudmlyb25tZW50 55582\naWlk 55583\nLkJveA== 55584\nLVRpbWU= 55585\nIGV4Y3VzZXM= 55586\ndHJhbnNwb3Nl 55587\nIG91dHJhZ2VvdXM= 55588\nKFNlcnZlcg== 55589\nZGltcw== 55590\nIl0pOw0K 55591\nkJw= 55592\nIEVpc2Vu 55593\nKE9w 55594\nIGhhc2hsaWI= 55595\nKGxp 55596\nfiw= 55597\nxLFuZA== 55598\nIFNwaGVyZQ== 55599\nIEJlbGxh 55600\nLXRyYW5zaXRpb24= 55601\nLnJlYWRTdHJpbmc= 55602\naGVhcmQ= 55603\nIFp1Y2tlcg== 55604\nIHdhbm4= 55605\nIGphaWxlZA== 55606\nIFRhbGVudA== 55607\nb3Bob2JpYQ== 55608\nwrY= 55609\nIG9wZXJhbmRz 55610\nU29tZW9uZQ== 55611\nIExpYnJhcmllcw== 55612\ncHJpbWFyeUtleQ== 55613\n16o= 55614\nVXI= 55615\nIG1hdGVz 55616\nINGI 55617\nLWR1dHk= 55618\ncG91cg== 55619\nPEVudGl0eQ== 55620\nPllvdQ== 55621\nQ3JlYXRvcnM= 55622\nV2l0aE5hbWU= 55623\nJ2ludA== 55624\nIFJhdGlvbmFs 55625\nPUI= 55626\nLkF1dG9GaWVsZA== 55627\nIEZvdW5kZXI= 55628\nIE1lZ2Fu 55629\nLmltYWdlVmlldw== 55630\nYm93cw== 55631\nIHdpdGhSb3V0ZXI= 55632\nIGxpYmVyYXRpb24= 55633\nIGZvcmFt 55634\nIGNpdGFz 55635\nb2NoZW4= 55636\nLnN3YXA= 55637\nIC4uCg== 55638\nLmN2dENvbG9y 55639\nIEF3YXJl 55640\nIHF1ZWVy 55641\n5aSE55CG 55642\nIEluZmluaXRl 55643\nL3N0cmluZw== 55644\nIGJsZW5kZWQ= 55645\nLUNvbA== 55646\nIHd5cw== 55647\nIHNpY2hlcg== 55648\nLkxhc3ROYW1l 55649\nX3dhdGVy 55650\nX1JlbQ== 55651\nIGFydGhyaXRpcw== 55652\nLkFQUA== 55653\nIEV4cGFuc2lvbg== 55654\neGRi 55655\nZXN0cm8= 55656\nZmF2aWNvbg== 55657\nVmVyaWZpZWQ= 55658\nIGRlbGl2ZXJpZXM= 55659\nYXJrZXQ= 55660\nIGdldEltYWdl 55661\nIEpQRUc= 55662\nIFRSSQ== 55663\nIEVsZXY= 55664\nZnVzaW9u 55665\nIGpwZWc= 55666\nY29sbGlzaW9u 55667\nIGRlc2NlbmQ= 55668\nLmZvcmU= 55669\nIExvZ3M= 55670\nIHBvbGljaW5n 55671\ndW50YXM= 55672\nLmhvc3RuYW1l 55673\nYWNjZXB0ZWQ= 55674\n4KWL 55675\nIFdlbmR5 55676\nLnJlYWRGaWxl 55677\nIFNhbnRpYWdv 55678\nIEdvbA== 55679\ncmliYm9u 55680\nc3RyYXRpb24= 55681\nIHB1ZGQ= 55682\nIC8vXw== 55683\naXNMb2FkaW5n 55684\nX1NFUklBTA== 55685\nIGluc3RhbnRpYXRlZA== 55686\nIHBvZHM= 55687\nIHdhcnJhbnRz 55688\nIGFkbWl0dGluZw== 55689\nCWNvbm5lY3Rpb24= 55690\nX2J1ZmZlcnM= 55691\nIEluY2g= 55692\nIFpFUk8= 55693\nd2VydA== 55694\nIENsYW4= 55695\nCWls 55696\nKHNoYWRlcg== 55697\nIHBpbGdy 55698\nIOWK 55699\nRHN0 55700\nX2JhcmFuZw== 55701\nOicj 55702\nQnV0dG9uVGV4dA== 55703\ndGVyZQ== 55704\nX2FtdA== 55705\nIEZvcmV2ZXI= 55706\nLkxpbmtlZExpc3Q= 55707\ndWFyZHM= 55708\ndXJvdXM= 55709\nIFNlbmRlcg== 55710\ndmFyaWFudHM= 55711\nX21hZ2lj 55712\nIGFjY29tbW9kYXRpb25z 55713\nYXBHZXN0dXJlUmVjb2duaXplcg== 55714\nUHJvbXB0 55715\nID8+DQoNCg== 55716\nIHJlcHJvZHVjZWQ= 55717\nX3ByZWNpc2lvbg== 55718\nIHJ1dA== 55719\nbW9uZHM= 55720\nO3g= 55721\nIH0sDQoNCg== 55722\n55S7 55723\nIFZpdGE= 55724\nIHByb3Bvc2Vz 55725\nIFBhcnRpdGlvbg== 55726\nSElORw== 55727\nICN7QA== 55728\nIGVzc2E= 55729\nKGJhcg== 55730\nIFplbGRh 55731\nLmNhdGNo 55732\nX2V4Y2VwdA== 55733\nIG92ZXJ3aGVsbWluZ2x5 55734\nCVRFU1Q= 55735\nX0NPTlRBQ1Q= 55736\nX187 55737\nIFNlbWk= 55738\nIHRyYWJhbGhv 55739\ncmFkb3Vybw== 55740\nX3NxdWFyZWQ= 55741\n4LY= 55742\nJUQ= 55743\nIHByYXQ= 55744\naXRleg== 55745\nKGVsZW1lbnRz 55746\nUGxhbnQ= 55747\nYWd1YQ== 55748\nIGlocmVy 55749\nLkNvbA== 55750\nIE1jTg== 55751\nIENvcmV5 55752\nT05FWQ== 55753\nQ2VsZQ== 55754\ncmVtZW50 55755\nIG1hbHQ= 55756\nIEx1aw== 55757\n57uf 55758\nUE1FTlQ= 55759\nIGFuYWx5emVy 55760\nIEhhbms= 55761\nX3VuaWNvZGU= 55762\nIGJ1cmlhbA== 55763\nIENlbHRpYw== 55764\nRUZG 55765\nTG90 55766\nd29u 55767\nIE51ZGU= 55768\nIE5hdGU= 55769\nIFNpbmdlcg== 55770\nIFNJVEU= 55771\nKGJpdA== 55772\nYml6 55773\nIGRldG9u 55774\nUkVBRE1F 55775\nOkFkZA== 55776\nIEhvbGRpbmc= 55777\ne3JldHVybg== 55778\nbmNpYXM= 55779\nPg0KDQoNCg== 55780\ncnVwdGlvbnM= 55781\nLnJlYWN0 55782\ndXJzYWw= 55783\n4Lib 55784\nIERPTkU= 55785\naXZhdGVk 55786\nLm5vdGVz 55787\nIHN0cmlwZXM= 55788\ncmlwcA== 55789\naXJhbg== 55790\nIHNsYWI= 55791\nIEJ1cm5pbmc= 55792\nKGVudA== 55793\nLnNlYw== 55794\nR1U= 55795\nX2dvbGQ= 55796\nXSkpLg== 55797\nZWxpbmVzcw== 55798\n0L7QsdGA0LDQ 55799\nIOKIgA== 55800\nIGNvc21pYw== 55801\nJ10pOgo= 55802\nY2Npb25lcw== 55803\nY2lzaW9u 55804\nY29tcGFyaXNvbg== 55805\nIEV2YW5nZWw= 55806\nIFNoaXJ0 55807\nbGFnZW4= 55808\nIGnFnw== 55809\nIGZpbGxlcg== 55810\nLnByb2Q= 55811\nIAkJCQkJ 55812\nINGE0YPQvdC60YbQuA== 55813\nIFplcm9Db25zdHJ1Y3Rvcg== 55814\nQXRB 55815\nXSkNCg0K 55816\nIGNvbnN0cnVjdG9ycw== 55817\nX1NIQVJFRA== 55818\nCWRldmljZQ== 55819\nIEFkdmljZQ== 55820\nOkAiJUA= 55821\nPn0n 55822\nLklzRW1wdHk= 55823\nIGludHM= 55824\nbW9zdGF0 55825\nIFNpZ251cA== 55826\nZ2Vhcg== 55827\nKHBhdGhz 55828\nLHsi 55829\nL0RvY3VtZW50cw== 55830\nPENhdGVnb3J5 55831\nVUVTVA== 55832\nIGdldERlc2NyaXB0aW9u 55833\nICJ7XCI= 55834\nIEpvZXk= 55835\nb2Rlbg== 55836\nX2d1ZXNz 55837\nRVVS 55838\nIGhlcnI= 55839\nIHNlZGFu 55840\nIHJlYWN0ZWQ= 55841\nX2Nsb25l 55842\nIFJldmVs 55843\nIGZvcmI= 55844\nUmVtYWluaW5n 55845\nXFNlcnZpY2Vz 55846\nIGF2aXM= 55847\nYmF0aW0= 55848\nemVwdA== 55849\nIERCTnVsbA== 55850\nQ29ubmVjdGlvbnM= 55851\nIGRpc3BvbmlibGU= 55852\ncGhpbg== 55853\nIHN0dQ== 55854\nIHNjaG9sYXJzaGlwcw== 55855\nLXNoYXJpbmc= 55856\nZm9ybWluZw== 55857\nIEJyaQ== 55858\nVmFySW5zbg== 55859\nL3Nlc3Npb24= 55860\nIGFtYmlndW91cw== 55861\nIGFwcmVzZW50 55862\nX3Jk 55863\nc2l0ZXM= 55864\nL2FjdGlvbg== 55865\ndHJhY3Rvcg== 55866\nIGRpbGVtbWE= 55867\nIFNY 55868\nXS0tPgo= 55869\nIEphY2tldA== 55870\nUkFUSU9O 55871\nLmdldFNlbGVjdGVkSXRlbQ== 55872\nLWluaXQ= 55873\nIFJlZ2lzdGVycw== 55874\nX3NlcA== 55875\nIFRvb2xraXQ= 55876\nLmRpY3Q= 55877\nIHhsYWJlbA== 55878\nXFRhYmxl 55879\ndG9j 55880\nX2NvbWJv 55881\nIENvbXBhY3Q= 55882\nIHJ1Z2dlZA== 55883\n4KWH4KQ= 55884\nLW1hbmFnZW1lbnQ= 55885\nJyl9fSI+Cg== 55886\nIFN0YW1w 55887\nxLFs 55888\ncm94 55889\nIGxhbmRzY2FwZXM= 55890\nX05PVEU= 55891\nbW9uYXJ5 55892\nY2Fi 55893\nIG1vZXQ= 55894\neGFm 55895\ncmNvZGU= 55896\nLWNsaQ== 55897\nX2dhdGU= 55898\nW2V2ZW50 55899\nU1BPUlQ= 55900\nZ2lh 55901\nIFNVUEVS 55902\nL0xvZ2lu 55903\nX3NodXRkb3du 55904\naW50ZXJydXB0 55905\nIHByZXRlbmRpbmc= 55906\nIGZyaW5nZQ== 55907\nIFJlZHM= 55908\nIENVREE= 55909\nIFVOSVg= 55910\ndml0 55911\nIGJyaWc= 55912\nZHJ2 55913\nIENvbm5lY3Rvcg== 55914\nVGhlcmVmb3Jl 55915\nIGxpYQ== 55916\nRGV0ZWN0aW9u 55917\nX2FjdG9y 55918\nIHRlbXBmaWxl 55919\nIGVjY2VudHJpYw== 55920\nLXJvbGU= 55921\nIHBhZHg= 55922\nZGVudA== 55923\nV2VzdGVybg== 55924\nIOq3uA== 55925\nIEFwcGxpY2F0aW9uUmVjb3Jk 55926\nIGNhbXBhaWduaW5n 55927\nX3J1bm5lcg== 55928\nIENpdmlj 55929\nYWxlaWdo 55930\nIGRpcmVrdA== 55931\nLnN1bA== 55932\nICAJCQk= 55933\nYW50ZW4= 55934\nIGlzc3Vlcg== 55935\nIGFzc2VydGlvbnM= 55936\nKG9yaWc= 55937\nQVRJTw== 55938\nIGxlYW5lZA== 55939\nw6Rz 55940\nLkRUTw== 55941\nZXhwbG9kZQ== 55942\nLk9ic2VydmFibGU= 55943\nIHN0YWdnZXJpbmc= 55944\nIGtpZG5hcHBlZA== 55945\nIHByb2dyYW1tZXJz 55946\nIElubm92 55947\nLnBhcmFtZXRlcg== 55948\nIGRvbWluYXRpb24= 55949\nIHNrZXB0aWM= 55950\nIOaYrw== 55951\nIGF2b2lkcw== 55952\nLlZlcmlmeQ== 55953\ndWJieQ== 55954\nIEFTTg== 55955\nIGZvcm1hdG8= 55956\nIEJlYXRsZXM= 55957\nX2JyYW5k 55958\nIGluc2V0 55959\neW91dHU= 55960\nIHRvYw== 55961\nLWZpbmFs 55962\nU2hvd2luZw== 55963\nIERvdWI= 55964\nIE1lc2E= 55965\nQWRq 55966\nX21lZGl1bQ== 55967\nQ3JlYXRlcw== 55968\nKGVuZHBvaW50 55969\nCVVQ 55970\nYmJpZQ== 55971\nIHN0YWxr 55972\nLmRhdGFiaW5k 55973\nLlNjYW4= 55974\nYWdlbnRz 55975\nJCw= 55976\naW5kaXZpZHVhbA== 55977\nKykv 55978\nCXZt 55979\nKG5vdGlmaWNhdGlvbg== 55980\nIGluZXg= 55981\nIENsYXNzaWZpY2F0aW9u 55982\ncmVubw== 55983\nIG9saWc= 55984\nLXJhdGVk 55985\nIGZvcm11bGF0aW9u 55986\nJyx7 55987\nIGFjZXB0 55988\nX3VucGFjaw== 55989\nX0NB 55990\nLlBvdw== 55991\nCWlt 55992\nIGFsdW1pbml1bQ== 55993\nQU5P 55994\nIHhu 55995\nIGPDs21v 55996\nIEluZ3JlZGllbnQ= 55997\nIHNlaXp1cmVz 55998\n5YWx 55999\naWZpY2Fkb3I= 56000\nIHNpZ3VpZW50ZQ== 56001\nIEluZnJhZ2lzdGljcw== 56002\nIGR1cGxpY2F0ZWQ= 56003\nIERlZQ== 56004\nIG7DuA== 56005\nIEFDQ0VQVA== 56006\nKGNyYXRl 56007\n0LjRgtC10LvRjA== 56008\nLWxlc3M= 56009\nIGluZmluaXR5 56010\nQW5hbHl6ZXI= 56011\nLURheQ== 56012\ncml0dA== 56013\nKGNpbg== 56014\nIEd5 56015\nIG11bHRpcGxpZWQ= 56016\ndWNoaQ== 56017\nIEJhbGR3aW4= 56018\nL2lw 56019\nIHNob3J0Y3V0cw== 56020\nLkFERA== 56021\nIHZpZ29y 56022\nX2luc3RydWN0aW9u 56023\nKDs= 56024\nX2V0YQ== 56025\n6L+e 56026\ndXRvcmlhbHM= 56027\nIGJvb3N0aW5n 56028\nYnY= 56029\nIGFja25vd2xlZGdlcw== 56030\nTGlzdGVuaW5n 56031\nRkFR 56032\nO2I= 56033\nKCgt 56034\nIGFyY2hpdGVjdHM= 56035\nIHp3ZQ== 56036\nIHB1bHM= 56037\nIGdldENvdW50 56038\ndmVyYnM= 56039\n44Cc 56040\nKENvbGxlY3Rpb24= 56041\na3Jl 56042\nIGp1cmlzZGljdGlvbnM= 56043\nX2JyaWRnZQ== 56044\nIENyYWNr 56045\nIERpZmZpY3VsdHk= 56046\nS08= 56047\nUmVzZXJ2YXRpb24= 56048\nX3JlcXVpcmVz 56049\nVG91cg== 56050\n44GX44Gf 56051\nLnNldEN1cnJlbnQ= 56052\nIGt5 56053\nIEFsYmFueQ== 56054\nIOin 56055\nbGxlcg== 56056\nYWduYQ== 56057\nd29ya2Vycw== 56058\nLmJsYW5r 56059\nIFByYXllcg== 56060\nTUlD 56061\nIHJlc2lsaWVuY2U= 56062\nVGVY 56063\nIExhbmd1YWdlcw== 56064\nc3R1ZHk= 56065\nCWN1cnI= 56066\nIGVuenltZXM= 56067\nU2x1Zw== 56068\nIO2MjA== 56069\nc3RyYWw= 56070\nIHR1bW9ycw== 56071\nIHNlZ3VuZGE= 56072\nPSd7 56073\naW5zdHJ1Y3Rpb24= 56074\nIExpc3A= 56075\nL2luZm8= 56076\nICJ7JA== 56077\nLDopLA== 56078\nIGd2 56079\nKEVycm9yTWVzc2FnZQ== 56080\nICc9 56081\nfS0kew== 56082\nLkRvY3VtZW50cw== 56083\nIldlbGw= 56084\nIHJlbWluaXNjZW50 56085\nIGdheg== 56086\naXJvcHI= 56087\nZWhy 56088\nIHN1cHByZXNzZWQ= 56089\nZXJzaA== 56090\nLnNjcm9sbFRv 56091\nIGNhZGVuYQ== 56092\nIGdhbWVTdGF0ZQ== 56093\nw61t 56094\nKGNvbnY= 56095\nIFRvbW9ycm93 56096\nIENDVA== 56097\nTW9uZ28= 56098\ndWxn 56099\nLkNhbWVyYQ== 56100\nLmhhbmRsZXJz 56101\nbXBo 56102\nIHN0aw== 56103\nIGdlbmV0aWNz 56104\nQUNJTkc= 56105\nVHJpdmlh 56106\nIEJhbQ== 56107\nKG1hcmtlcg== 56108\nLlN0cmV0Y2g= 56109\nIFN1bm5p 56110\nIEJldHR5 56111\nLnRvbGlzdA== 56112\ndW5saWtlbHk= 56113\nLlJlY3RhbmdsZQ== 56114\nb2Jzb2xldGU= 56115\nSUxPTg== 56116\naW5uZXJUZXh0 56117\nZW1ib3VyZw== 56118\nYU4= 56119\nIFZlaGljbGVz 56120\ndW5sb2Nr 56121\nOnV0Zg== 56122\nbm9i 56123\nIFNlZWluZw== 56124\nIE5FVkVS 56125\nIHRscw== 56126\nIGZpbGxlcw== 56127\nIGJlbmVmaXRlZA== 56128\nIENsaW50 56129\nKi8pLA== 56130\nLmZvbGQ= 56131\nIHBvc2libGU= 56132\nQURFRA== 56133\ndGhvdXNl 56134\nLkRBTA== 56135\nIE9kZA== 56136\ncm9rZXM= 56137\nIFN1bm55 56138\nIFBhcnRpYWxFcQ== 56139\nX0J1ZmZlcg== 56140\nIExldmk= 56141\nbG9uZ3JpZ2h0YXJyb3c= 56142\nZWxkb24= 56143\nZ2FnZXM= 56144\nX3dhcm4= 56145\nLkNyZWF0ZVRhYmxl 56146\nIERpcA== 56147\nX3F1ZXN0aW9ucw== 56148\nLmxvZ2lj 56149\nICMi 56150\nPXsoKT0+ 56151\nIHRlcA== 56152\nIGp1aWN5 56153\n7IKs 56154\nZW5rbw== 56155\naWFsZWN0 56156\n2Yk= 56157\nIG9uYm9hcmQ= 56158\nIOaP 56159\nCXJ0 56160\nX1VURg== 56161\nIFFBY3Rpb24= 56162\n4oCe 56163\nKENvbXBvbmVudA== 56164\nKGF1ZGlv 56165\nLmhpdA== 56166\nZ3Rl 56167\nIHByb2dyYW1tZWQ= 56168\nc3RhdGVQYXJhbXM= 56169\nIHBvbHllc3Rlcg== 56170\nZmlyZXM= 56171\nYnlzcw== 56172\nXT0o 56173\nX3F1YWxpdHk= 56174\nT2ZEYXk= 56175\nIEZhaXJ5 56176\nIHllbGxlZA== 56177\nb3Bs 56178\nKHVzZXJOYW1l 56179\nIERpZmZlcmVuY2U= 56180\nIGV2YWx1YXRpb25z 56181\naWZmYW55 56182\nIGN5Y2xpc3Rz 56183\nIGNpZGFkZQ== 56184\nIHRleHRib29r 56185\nIHByb2ZpbGluZw== 56186\nX18pLA== 56187\nZGVh 56188\nLmFjdGl2YXRl 56189\nIGluZGljYXRpb25z 56190\n0JU= 56191\nVG91Y2hVcEluc2lkZQ== 56192\nIGludmFsdWFibGU= 56193\nIE1BU0s= 56194\nIGNvbnRlbmQ= 56195\nRnJlcQ== 56196\nIHJlY3J1aXRz 56197\nKGludGVydmFs 56198\nIFVzZXJQcm9maWxl 56199\nICcuLy4uLw== 56200\nZWR1 56201\nX0NhbGxiYWNr 56202\nIGFuYWxvZ3k= 56203\nIFRyb3BoeQ== 56204\nYXBwaGlyZQ== 56205\nVmlkZW9z 56206\nIENoZXI= 56207\nIEhhdg== 56208\n4oCmIg== 56209\nLnZhbGlkYXRvcg== 56210\nZ2Z4 56211\nIFVPYmplY3Q= 56212\nY2xhc3NuYW1lcw== 56213\ndHJpYW5nbGU= 56214\nIEVuY29kZXI= 56215\nLnNweQ== 56216\nIHByZWRhdG9ycw== 56217\nPXN0YXR1cw== 56218\nLXNhZmU= 56219\nOiIsCg== 56220\nIEluY2x1ZGluZw== 56221\nIHt9Ow0K 56222\nKmNvcw== 56223\nIGVuZHVyZWQ= 56224\nLnN1bGFrZQ== 56225\nIG51cnNlcnk= 56226\nIGZyYWdyYW5jZQ== 56227\nIHJlYnVpbGRpbmc= 56228\nIG50aA== 56229\nIEZyYXNlcg== 56230\nLnNldERhdGU= 56231\nIFZpbmNl 56232\nX1JFU1Q= 56233\nIHZlbnRpbGF0aW9u 56234\n5rW3 56235\nY3JpYmVz 56236\nLmFzbQ== 56237\nbHBWdGJs 56238\nIEFiZQ== 56239\ndWlzaW5l 56240\nLGFycmF5 56241\nCWNsYXNzTmFtZQ== 56242\nZXJyYWxz 56243\nICcKCg== 56244\nQ2hlY2tvdXQ= 56245\nIHNvbGljaXQ= 56246\nQXV4 56247\nX2NhcHR1cmU= 56248\nIHJpYnM= 56249\ncmFnb24= 56250\ndmlvbA== 56251\ndG9waWNz 56252\nRnVuY3Rpb25GbGFncw== 56253\nIE1hcnR5 56254\nYmlrZQ== 56255\nIFR1Y2tlcg== 56256\nKGtlcm5lbA== 56257\nIE9wcw== 56258\nQ2xvc2VPcGVyYXRpb24= 56259\nL2RlbW8= 56260\naWxkYQ== 56261\nIGzDrW5lYQ== 56262\nQVBQSU5H 56263\nIHN1aXRlcw== 56264\nLnZpc2l0VmFySW5zbg== 56265\ndXJ1cw== 56266\nIE1pbnV0ZQ== 56267\nKG1hbmFnZXI= 56268\nIGJ1dHRlcmZseQ== 56269\nIGFwYXJl 56270\nIHdvbHZlcw== 56271\nSldU 56272\nIFNhbG9u 56273\nCWRlbGF5 56274\nLWVzbGludA== 56275\naXNhdGlvbnM= 56276\nLnJwYw== 56277\nKXwo 56278\nIFNuYXBjaGF0 56279\nL21t 56280\nTU4= 56281\nY2VyaWVz 56282\nLnRleHRBbGlnbm1lbnQ= 56283\nIEZyYW5rZnVydA== 56284\nIGFkbw== 56285\nKG5ld1ZhbHVl 56286\nKGFjY2Vzcw== 56287\nKEV4cHJlc3Npb24= 56288\nIFNpZ25Jbg== 56289\nIEhhaXRp 56290\nX3Rw 56291\nLnNldFBhcmFtZXRlcg== 56292\nTWludXRl 56293\nIG1hbnVhbHM= 56294\ncmljYW5lcw== 56295\nIFBUUg== 56296\nIE91dGVy 56297\nIGdldGxpbmU= 56298\nb2NhdGlvbnM= 56299\nX0NE 56300\nIEx5b24= 56301\nL2d1aQ== 56302\nX2xpdmU= 56303\naWRhbg== 56304\nLmdlb20= 56305\nIGJvcmRlckJvdHRvbQ== 56306\naW11dGg= 56307\nX2NoZWNrcG9pbnQ= 56308\nIG1ldQ== 56309\nIElydmluZw== 56310\nIHBldXZlbnQ= 56311\nKE1BWA== 56312\nIEFSQ0g= 56313\nIHBvdg== 56314\nLnNvdXJjZWZvcmdl 56315\nIGphbWFpcw== 56316\nIGFyaw== 56317\nIEJhZ2hkYWQ= 56318\nIENMRUFS 56319\nTWVudUJhcg== 56320\nIHRyb2lz 56321\nQ0hFRFVMRQ== 56322\nICMNCg== 56323\nKENhbGw= 56324\nJG9yZGVy 56325\nKE1hdGVyaWFs 56326\nIGVuY29udHJhZG8= 56327\nJGxpc3Q= 56328\nIE1FVEhPRFM= 56329\nLmJlZ2luVHJhbnNhY3Rpb24= 56330\nX01BRw== 56331\nU3R5bGVTaGVldA== 56332\nIG1ham9ycw== 56333\nIGluZGVmaW5pdGVseQ== 56334\nY2xlYW51cA== 56335\nIGhvbWVsYW5k 56336\nKGR0bw== 56337\nRGF0ZXM= 56338\nUHJlc2VudGF0aW9u 56339\nIERL 56340\nPXtgLw== 56341\nCUtleQ== 56342\nKEJsb2Nr 56343\nX2NoZWNrYm94 56344\nbmVlZHM= 56345\nIG9uQ29tcGxldGU= 56346\ncmljbw== 56347\nIGdsZWljaA== 56348\nIHht 56349\nT09E 56350\nQmV0dGVy 56351\nIFNRTElURQ== 56352\nLkJvb2s= 56353\neGFk 56354\nIEdvbmU= 56355\nCWRw 56356\nIGRldm90aW9u 56357\nIHN0bQ== 56358\nIG9ic2Vzcw== 56359\nIEJhY2tlbmQ= 56360\nUXVlcmllcw== 56361\nSWs= 56362\nLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 56363\nIGRpdmlkZW5kcw== 56364\nLnBhcmVudEVsZW1lbnQ= 56365\nfSIpCgo= 56366\nIE1hdGVyaWFsUGFnZVJvdXRl 56367\nOm51bQ== 56368\nIGV4cGxpYw== 56369\nIE9M 56370\nbGVhc3Q= 56371\nT29wcw== 56372\naW1lbnRvcw== 56373\nIGluc3VyZXJz 56374\nIGhlcm9pYw== 56375\nCWZpZWxkcw== 56376\nLmltZ3Vy 56377\nLmJ0bkNhbmNlbA== 56378\nIERldGVjdGl2ZQ== 56379\nKHNt 56380\nIE11dGFibGVMaXZlRGF0YQ== 56381\nLmxhYg== 56382\nKChb 56383\nIGhhaXJzdA== 56384\nIFRyYW5zYWN0aW9ucw== 56385\n5byA5aeL 56386\nIHN0ZENsYXNz 56387\ndWVudG8= 56388\nR0lT 56389\nX2NvZA== 56390\nSW5zdHJ1Y3Rpb25z 56391\nQ2FsbHM= 56392\nUG9pbnRlclR5cGU= 56393\nIFJ3 56394\nIGFzc29ydG1lbnQ= 56395\nIERJRw== 56396\nK3I= 56397\nX0NFUlQ= 56398\nIGluc3RhYmlsaXR5 56399\nIHZpYg== 56400\nb25hcw== 56401\nIHJva3U= 56402\nYXBlbGxpZG8= 56403\nIGFuZ2w= 56404\ncHJlbmV1cg== 56405\nIGZsdWlkcw== 56406\naXNlYXNl 56407\nIGRlZWQ= 56408\ncXVpc3Q= 56409\nX0NPTlNUQU5U 56410\nIGVxdWlsaWJyaXVt 56411\nX2RlbGVnYXRl 56412\nIFF1YW50dW0= 56413\ncmVp 56414\nQ2FwYWJpbGl0aWVz 56415\ncmVjdGFuZ2xl 56416\nPz48 56417\nYWxpZW4= 56418\nIEp1Zw== 56419\nRE5B 56420\nVGlja2V0cw== 56421\nT2NjdXJz 56422\nIEhhd2s= 56423\nLnNldEhvcml6b250YWxHcm91cA== 56424\nXENvbGxlY3Rpb24= 56425\nZmZpdGk= 56426\nIHJlYXJy 56427\nLnNldFZlcnRpY2FsR3JvdXA= 56428\nIGNhdml0eQ== 56429\nIGFkdWx0ZQ== 56430\nRmFjYWRl 56431\nLXdo 56432\nIExPTA== 56433\n2LA= 56434\nIGdyYW5kcGFyZW50cw== 56435\nU3dpZnQ= 56436\nCXd4 56437\n5omA5pyJ 56438\naWZlbg== 56439\nZmZzZXQ= 56440\nQmV5b25k 56441\nLy99Cgo= 56442\nIHdhZ2Vy 56443\nIGJ1cnk= 56444\nIGNvbW1lbmNl 56445\ncmVnaXN0cm8= 56446\nc2NpZW50 56447\nIFBlcmNlbnQ= 56448\nINC00L7Qu9C2 56449\nKGlkZW50aWZpZXI= 56450\nLnNldE1vZGVs 56451\nIHNlbGRvbQ== 56452\nbnRvbg== 56453\nIGFwcGxpYW5jZQ== 56454\nYW11cw== 56455\ncnlzbGVy 56456\nIHBhbnRpZXM= 56457\nZW5ndWlucw== 56458\nIG1pbWlj 56459\nIG9uQ2hhbmdlZA== 56460\nIGFsY29ob2xpYw== 56461\nLnJlbG9hZERhdGE= 56462\nQ2hhcmdl 56463\nIEZheA== 56464\nIGpTY3JvbGxQYW5l 56465\nRW1wcmVzYQ== 56466\nIHNoYXR0ZXJlZA== 56467\neGJh 56468\nRm9udHM= 56469\nP3M= 56470\nIHBvc3RzZWFzb24= 56471\ncmV0YWlu 56472\nX3JhdGVz 56473\nIHJlcXVlc3RDb2Rl 56474\nLnRvZG8= 56475\nwrRz 56476\nQ0hL 56477\nIEtlZXBpbmc= 56478\nZW5nZWFuY2U= 56479\nIHZzY29kZQ== 56480\nSVBQSU5H 56481\nRGVmYXVsdENsb3NlT3BlcmF0aW9u 56482\nX3JhaXNl 56483\nIE9jdWx1cw== 56484\nb2dyYW1z 56485\ncmFq 56486\ncGNp 56487\nIGNvcnJvc2lvbg== 56488\nLmhhbmRsZVN1Ym1pdA== 56489\nQWNjZXNzaWJsZQ== 56490\nIFBpYW5v 56491\nbGl0dGxl 56492\nQUNM 56493\nxIdl 56494\nLnVud3JhcA== 56495\nIENvbnZlcnM= 56496\nIExlYmVu 56497\naW9uZWVy 56498\nIE1lcmNoYW50 56499\nIEpvcmdl 56500\nIGVtYnJhY2luZw== 56501\nIHZlbnRh 56502\nw6FzdA== 56503\nIHZpZW5l 56504\nPFFTdHJpbmc= 56505\nIGV4cGxvc2lvbnM= 56506\nIGRpc3R1cmJlZA== 56507\nLiI8 56508\nbWVtbw== 56509\nIEFib3JpZ2luYWw= 56510\nIGNvbXBsZXRv 56511\nVGV4UGFyYW1ldGVy 56512\nIHVvbWluaQ== 56513\nKGFnZW50 56514\n0YPRgA== 56515\nIFdob2xlc2FsZQ== 56516\nL2Ft 56517\nIEJvb2ttYXJr 56518\nZHJhZ29u 56519\nIGdsb3Zl 56520\nICIiKSk7Cg== 56521\naXZhcmlhdGU= 56522\nbm93cmFw 56523\nSW5DaGlsZHJlbg== 56524\nLkJy 56525\nIGNvbmV4aW9u 56526\nIGJhY2tib25l 56527\nIGVjbGlwc2U= 56528\nIHBlcnNlY3V0aW9u 56529\nJzoKCg== 56530\nL2xpbms= 56531\nIFBlcm8= 56532\nYW5kYXM= 56533\nIFRlaw== 56534\nLiIpOw== 56535\nLWFuYWx5c2lz 56536\nIGVyYWQ= 56537\nTWFyc2hhbA== 56538\nIGFuY2hvcnM= 56539\nb2dlcg== 56540\nIGNvbnZlcmdlbmNl 56541\nc3RpY2t5 56542\nIG5hdmVn 56543\naW50ZXJu 56544\nX0RFU0NSSVBUT1I= 56545\nIENvbnN1bHRhbnQ= 56546\nICAgICAgICAgICAgICAgICAgICAgCg== 56547\nIEF1Y2g= 56548\nIGVycmU= 56549\nxZtsaQ== 56550\nIEhvcml6b24= 56551\nY29sYQ== 56552\nSW5zdGFsbGF0aW9u 56553\naG90bWFpbA== 56554\nQ05O 56555\nLkNvbGxlY3RvcnM= 56556\nY2hz 56557\nKHRyYWNl 56558\nIEVuY3J5cHQ= 56559\nIC0tLS0tLQ== 56560\nIEJhc2VDb250cm9sbGVy 56561\nIGFndWE= 56562\nIHJlYWN0aXZl 56563\naWRs 56564\nIGNsYXNzTmFtZXM= 56565\nCVNlc3Npb24= 56566\nIERvZGdlcnM= 56567\nSGFk 56568\nX2x2 56569\nSXNWYWxpZA== 56570\nIEhFTFA= 56571\ndXR0bw== 56572\nIFZlcmlmaWNhdGlvbg== 56573\nIGdldGVudg== 56574\nX3Bh 56575\nLmJtcA== 56576\nOmY= 56577\nIExvdWlzZQ== 56578\nKCc7 56579\nL3NvY2tldA== 56580\nR3JhbnRlZA== 56581\nLmNhbGVuZGFy 56582\nKElQ 56583\nIFBY 56584\nLlJvb20= 56585\nIHByb2dyYW1t 56586\nZW5zaQ== 56587\nIHRhYmxlc3Bvb25z 56588\nIGxldmU= 56589\nIG1vc3Ry 56590\nLnRpcG8= 56591\nL2Fu 56592\nKGRp 56593\nIGJpb2Q= 56594\nIGRiQ29udGV4dA== 56595\nIEpTWA== 56596\nCXJlc3VsdHM= 56597\nLkVORA== 56598\naHRl 56599\nbGlmeQ== 56600\nUHJlY2lzaW9u 56601\n6IqC 56602\nQVJTRVI= 56603\nKWRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 56604\nYXR0ZW1wdA== 56605\nSVNQ 56606\nJmE= 56607\nX1BPUA== 56608\nIFRhYw== 56609\nIHByZXBhcmVkU3RhdGVtZW50 56610\nINC30LDQv9C40YE= 56611\nIG93aW5n 56612\nLHN0YXJ0 56613\nIHJldmlld2Vy 56614\nIHJzdA== 56615\nIHByb3BUeXBlcw== 56616\nIHJvY2t5 56617\nX2xvY2FsZQ== 56618\nIFN0cmF0ZWdpZXM= 56619\nIFdlYmVy 56620\nLkNhc2NhZGU= 56621\nX2VxdWFsVG8= 56622\nIGNvc2Fz 56623\nIERlbGV0ZXM= 56624\nIE1heGlt 56625\nIHNocmltcA== 56626\ncmV0cmlldmU= 56627\nLkluY2x1ZGU= 56628\nSUdJTg== 56629\nIE9F 56630\nXSk7DQoNCg== 56631\nLmVudW1lcg== 56632\nIGNvZWY= 56633\nX051bGw= 56634\nUmE= 56635\ndHlhcmQ= 56636\nIFNoYXdu 56637\na2VlcGVycw== 56638\nIHFx 56639\nX3Ni 56640\nb21lbnM= 56641\nIEV4ZWN1dGVz 56642\nIyI= 56643\nVFRZ 56644\nIFZhbHVlVHlwZQ== 56645\nKTsqLwo= 56646\nIEFic29sdXRlbHk= 56647\nIFRvdHRlbmhhbQ== 56648\nL2FydA== 56649\nIGJsZXNzaW5ncw== 56650\nIHN3aWZ0bHk= 56651\nYnVzdGVy 56652\nIGF2aWQ= 56653\nQ09NTQ== 56654\nLHRlbXA= 56655\nIH0/Pgo= 56656\nLWdyb3dpbmc= 56657\nIGRlZXBjb3B5 56658\nQWNr 56659\nZWdnaWVz 56660\nIF9fKCI= 56661\nIG5vaXI= 56662\ndGVycm9yaXNt 56663\nIGFudGhlbQ== 56664\nYWdlbmN5 56665\nX1BBQ0tBR0U= 56666\nIENsb3N1cmU= 56667\nLnJlZ2lzdHJ5 56668\nIG1hbW1hbHM= 56669\nPEw= 56670\nVUlDb2xsZWN0aW9uVmlldw== 56671\nIExFRHM= 56672\nIHZvbGxleQ== 56673\nKEJ1ZmZlcg== 56674\nX05BVElWRQ== 56675\nbGliYw== 56676\naW1wbG9kZQ== 56677\nU2Nyb2xsQmFy 56678\nIE1hcmlvbg== 56679\nLkNvbnRyYWN0cw== 56680\nX0F0 56681\nIFdlaW5zdGVpbg== 56682\nY29tcGFyZVRv 56683\nIEhvc2U= 56684\nZW5pdHk= 56685\nLmNyZWF0ZVF1ZXJ5 56686\nX3JvdXRlcg== 56687\nIHN0aW11bGk= 56688\nICsrKQ== 56689\nIENoYW1w 56690\nIEJheWVybg== 56691\nYXNzYQ== 56692\nLnZh 56693\nIGRpc3RyaWJ1dG9ycw== 56694\nIGZpbGVwcml2YXRl 56695\nIGRlcGFydGVk 56696\nY2NjYw== 56697\nQGNsaWNr 56698\nIEx1bmNo 56699\nPkw= 56700\nIGJsdWV0b290aA== 56701\nLkRlZXA= 56702\nLXN0YW5kaW5n 56703\nw6FjaWw= 56704\nIHJvb2Z0 56705\nIFBhdGhz 56706\nX2l0ZXJhdGlvbnM= 56707\nSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u 56708\nLnNwaQ== 56709\nIFVJQWxlcnRBY3Rpb24= 56710\ndXll 56711\nc2lnbmlu 56712\nLnByaW9yaXR5 56713\nIEVzc2F5cw== 56714\nPSd7JA== 56715\nIOi/lOWbng== 56716\nX3NpZ25lZA== 56717\nLnBlcnNpc3Q= 56718\nIHJlZGVzaWdu 56719\nVG9Mb3dlcg== 56720\nIE5ld21hbg== 56721\nPXN0YXJ0 56722\nIElzcmFlbGlz 56723\nYXNpc3dh 56724\nU3BlZWNo 56725\nIG51bWVyb3M= 56726\naGFuZGxlcnM= 56727\nIFdvbmc= 56728\nINC80LXRgtC+0LQ= 56729\nV2VpZ2h0cw== 56730\nIEd1amFy 56731\ndGVpbA== 56732\nIE5vbmV0aGVsZXNz 56733\nX0VGRkVDVA== 56734\nIHZlY3Q= 56735\nIE9zYw== 56736\nIGNvYXRz 56737\nIFdoZWF0 56738\nIGdlZWs= 56739\nIFBST1BFUlRZ 56740\nd29ybQ== 56741\nX2NvbnN0YW50cw== 56742\nIEJvdWxkZXI= 56743\nIFBhcm0= 56744\nY29sZQ== 56745\nIGRlZmF1bHRDZW50ZXI= 56746\nIFJvdWdl 56747\nOkE= 56748\neGNm 56749\nIFZlbmljZQ== 56750\nbWVkaWFu 56751\nIHJlZGVtcHRpb24= 56752\nRnJlc2g= 56753\nIGNvc20= 56754\nIGZpZ3Vy 56755\nIHJlZnVyYg== 56756\nQ09QRQ== 56757\nLmNk 56758\nIGNob3Jkcw== 56759\nIFNndA== 56760\nxY0= 56761\nVlBO 56762\nIFNFTkQ= 56763\nYWluZW4= 56764\nX2FjY291bnRz 56765\nIHRlbnRo 56766\nIGRpc3NvbHZlZA== 56767\nPEFwcA== 56768\nIENvdmVyYWdl 56769\ndXNlU3RhdGU= 56770\nw6lybw== 56771\nLi48 56772\nIOyjvA== 56773\nIGRyZWFtaW5n 56774\nIEZvcmVjYXN0 56775\nLkN1cnNvcnM= 56776\nIHZpc2Fz 56777\nL3NjcmlwdA== 56778\nX3N0YXJ0ZWQ= 56779\nIGdhc3Ry 56780\nKFBSTw== 56781\nXTsvLw== 56782\nLlRpbGU= 56783\nKnNpbg== 56784\nKEFkYXB0ZXI= 56785\nIFNhbmRyYQ== 56786\nX1NJRw== 56787\nYXJkYXNo 56788\nIE92YWw= 56789\nIGRlc2NyaXBjaW9u 56790\nKHNs 56791\nIERlc2NyaXB0b3I= 56792\nIGAk 56793\nL2ZyZWU= 56794\nIEtleXdvcmRz 56795\nIHR1ZG8= 56796\naW9uYWxl 56797\nKGZvdW5k 56798\nLnh5eg== 56799\nIEdlbmVyYXRpb25UeXBl 56800\nX0RJU0FCTEVE 56801\nKGFyZWE= 56802\nIGVsaXRlcw== 56803\nIGhvbWJyZQ== 56804\nKG1lc3NhZ2Vz 56805\nIFJhYw== 56806\nIGV4dGluZ3U= 56807\nIEVzdGE= 56808\nb3Bv 56809\nLnZlbA== 56810\nbW91c2VvdXQ= 56811\nIGNvbnZvbHV0aW9u 56812\nIEhhbmRsaW5n 56813\nIGNlaWxpbmdz 56814\nVGVr 56815\nIEFyZWFz 56816\nLndyaXRlcm93 56817\nPFZpZXc= 56818\nIENvcm5lbGw= 56819\nX0JJTg== 56820\nLmludmFsaWQ= 56821\nJycnDQo= 56822\naWXFvA== 56823\nX1Bvc2l0aW9u 56824\nIGtpZGRpbmc= 56825\nUENPREU= 56826\nIHdhdGNoZXI= 56827\nbG94 56828\nIOKX 56829\nRGF2ZQ== 56830\nX2FsbG93 56831\nIGJpc2V4dWFs 56832\nIHVub3JkZXJlZA== 56833\nIFNjaHdl 56834\nX3NlZ21lbnRz 56835\nIHRlYXJpbmc= 56836\nSU5MSU5F 56837\nIHVuZGVz 56838\nLmdvb2Rz 56839\nLmNhbQ== 56840\nIExX 56841\nCXdoZXJl 56842\nQ2FsY3VsYXRvcg== 56843\nLXRocmVhdA== 56844\nLWFsZXJ0 56845\nIFN1enVraQ== 56846\nIElQQQ== 56847\nIEF0dGFjaG1lbnQ= 56848\nQUNDRVNT 56849\nKGR0eXBl 56850\nT3Bw 56851\nX3N5bWJvbHM= 56852\nIGRhbnNrZQ== 56853\nbGFnZQ== 56854\nb3JnZXQ= 56855\ncmVzb2x1dGlvbg== 56856\n0LXRhw== 56857\nIFFDb2xvcg== 56858\nIEJhcnJldHQ= 56859\n0LDRhtC40Y8= 56860\nPVwn 56861\nIE5hdkNvbnRyb2xsZXI= 56862\nL3JlZg== 56863\nKGNvdW50cnk= 56864\nX0hEUg== 56865\nIHRlcnNlYnV0 56866\ncGV0aXRpb24= 56867\nIHN1Zg== 56868\nY3JlZGl0cw== 56869\n4LmM 56870\neG0= 56871\nIERhdmllcw== 56872\nLnJlZGRpdA== 56873\nIHdvdmVu 56874\nIE9ibA== 56875\nIEtN 56876\nIENvbnNpZGVyaW5n 56877\nZW5zb3JlZA== 56878\nLnBlcmlvZA== 56879\nIGRkbA== 56880\nJHdw 56881\nIGV4dHJlbWlzdA== 56882\nO1wK 56883\nIGtpbQ== 56884\nYWxlcnM= 56885\nIHNwYW5uaW5n 56886\nIGNvaGVyZW50 56887\nIGNvbnNlZ3U= 56888\nLnRleHRMYWJlbA== 56889\nLmdlbmVyYWw= 56890\nX2Rhc2hib2FyZA== 56891\n0LvQtdC90LjQtQ== 56892\na2ljaw== 56893\nX1BJRA== 56894\nIEV4dGVuc2lvbnM= 56895\ncmVnZXhw 56896\nIENsYXVzZQ== 56897\nX21vdg== 56898\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 56899\nIFJld2FyZA== 56900\nIExFR08= 56901\nQWs= 56902\nPS09LT0tPS0= 56903\nCXBhcnNlcg== 56904\nIG9uemU= 56905\n6YCA 56906\n4oCd44CC 56907\nX2JhbGw= 56908\nKHJocw== 56909\nIGNob3J1cw== 56910\nPGNvdW50 56911\nYXN1cmFibGU= 56912\nIHdpcmtsaWNo 56913\nIEVyaW4= 56914\nIE1TTkJD 56915\nIGV0dGVy 56916\nIENyb24= 56917\nX0ZMT1c= 56918\nICwNCg== 56919\nIGNhbGlkYWQ= 56920\nIEZpbGVXcml0ZXI= 56921\nCXN0bXQ= 56922\nKEJ5dGU= 56923\nX3BhdA== 56924\nIHRlbGVzY29wZQ== 56925\nIGdyZWVk 56926\nIFRvcnQ= 56927\nKHdyaXRl 56928\nXGFwcGxpY2F0aW9u 56929\nCVJUTFI= 56930\nIENvbmZpZ3VyYXRpb25NYW5hZ2Vy 56931\nVW5peA== 56932\nRW5kVGltZQ== 56933\nSW5jbHVkZXM= 56934\nIEhhcnZlc3Q= 56935\nZW5iZXJn 56936\nIEF1c3RyYWxpYW5z 56937\nIOuT 56938\nIHJu 56939\nIHJlcHV0YWJsZQ== 56940\nIGJsZW5kaW5n 56941\nVUxBVElPTg== 56942\nIEJyZW5kYW4= 56943\nZGFk 56944\nIG3DuA== 56945\nIFdvbw== 56946\nX2Rj 56947\nVW5l 56948\nIHJ1ZQ== 56949\nd2l0aGlu 56950\nYW5nZXA= 56951\nIHBvdWNo 56952\nXCIiLA== 56953\nIFNpYw== 56954\n4oCdKSw= 56955\nYWx5emU= 56956\nIEdlZg== 56957\nY292ZXJz 56958\nIGRibw== 56959\ncmVwbGFjZUFsbA== 56960\nCUxvZ2dlcg== 56961\nVHJ5aW5n 56962\nW3N0YXRl 56963\nLXBpZWNl 56964\n6ZaT 56965\nYmVoYXZpb3I= 56966\nYWxsb3dz 56967\nbHJ0 56968\nX3B5dGhvbg== 56969\nZXJ0dXJh 56970\nLWNvdW50cnk= 56971\nIFRH 56972\nLlVJTWFuYWdlcg== 56973\nYmVucw== 56974\nYWxleA== 56975\nIEJyZWl0YmFydA== 56976\nYmFj 56977\nIHByZWRpY3Rz 56978\nIGdhYg== 56979\nIGNhcmRpbmFs 56980\nLlRpbWVVbml0 56981\nIFZpc2l0b3I= 56982\nIE1pbmc= 56983\nIGxpdnJl 56984\nIHBhcmVudElk 56985\ncG9ydHVu 56986\nIGRpbWVuc2lvbmFs 56987\nIFZlc3Q= 56988\nZW5pYw== 56989\n4LM= 56990\nINmH 56991\nIEJMVUU= 56992\nIGl0ZW1Db3VudA== 56993\nIGZlYXRoZXJz 56994\nCXBzdG10 56995\nIFBvbGFy 56996\ney8v 56997\ndW5kaQ== 56998\n0YPQtg== 56999\nemFy 57000\nRXJyb3JSZXNwb25zZQ== 57001\n7IOB 57002\nUmVwcmVzZW50YXRpb24= 57003\nKl8= 57004\nK10= 57005\ncHJlcGVuZA== 57006\nICc+ 57007\nIGxlZ2l0aW1hY3k= 57008\nIG9v 57009\nU2xpbmt5 57010\nIG5hdGlvbmFscw== 57011\nLndvcmRz 57012\nO3A= 57013\ndHJhcA== 57014\nb21hbmlw 57015\nIGN1ZXM= 57016\nIGdyYWR1YXRpbmc= 57017\nIHNlbWFwaG9yZQ== 57018\nIl0pOwoK 57019\nYWNleQ== 57020\nUkVFVA== 57021\nR3JhYg== 57022\nIEZlbGl4 57023\nKElk 57024\nX25laWdoYm9ycw== 57025\nIG1lYW5pbmdsZXNz 57026\nKGRlbA== 57027\nIGplZGVy 57028\nIENvbnRlbnRWYWx1ZXM= 57029\nLmFic29sdXRl 57030\nL2Ns 57031\nIHhi 57032\nZGF0dW0= 57033\nIHRvcnR1cmVk 57034\nIHJ1YmJpbmc= 57035\nU2NvcmVz 57036\nIPCfmIk= 57037\nIGF2b25z 57038\nIGFtc3RlcmRhbQ== 57039\nRU9T 57040\nSGFs 57041\nIHRydXN0d29ydGh5 57042\nIz0= 57043\nLkVYVFJB 57044\nIG1hbm8= 57045\naXNpY2luZw== 57046\nLXN1cHBvcnQ= 57047\nCWN1cnNvcg== 57048\nIFNwbw== 57049\nYWltYXNzYWdl 57050\nTWlzc2lvbg== 57051\nW117Ig== 57052\nIHByaW50ZXJz 57053\nR1JFRU4= 57054\nIHRlZw== 57055\nIGFiZG9taW5hbA== 57056\nIQoKCgoKCg== 57057\nLlNob3J0 57058\n0LDQt9Cy 57059\nIEdpZnRz 57060\nfSIp 57061\nKGJpbmRpbmc= 57062\neGNl 57063\n4oCR 57064\naW5mb3M= 57065\nRm9ybURhdGE= 57066\nIGRhcnQ= 57067\nIGVsZW1z 57068\nKGludg== 57069\nWUw= 57070\ndGlu 57071\nR0VORVI= 57072\n4buv 57073\nIFRha2Vu 57074\ndWNrbGU= 57075\nOmU= 57076\nIHNwZWN0cmFs 57077\nLmJhaWR1 57078\nLycpOwo= 57079\nIGdyZWVkeQ== 57080\nZXNpb24= 57081\nLCwsLCwsLCw= 57082\nIC8+LAo= 57083\nSW50ZXJuYWxTZXJ2ZXJFcnJvcg== 57084\nTlNOb3RpZmljYXRpb25DZW50ZXI= 57085\nIEFp 57086\nIHNwaXQ= 57087\nIGF1Z21lbnRlZA== 57088\nIHN0YW5kYXJkVXNlckRlZmF1bHRz 57089\nRklOSVRZ 57090\nUmFjZQ== 57091\nOkM= 57092\nIFJFQ09SRA== 57093\nIEhpZ2hsaWdodA== 57094\nICdg 57095\nIGRlZmljaXRz 57096\nIG5laQ== 57097\nIHJlc2VhcmNoZWQ= 57098\nVGE= 57099\nIGNvcHA= 57100\nLkdldEhhc2hDb2Rl 57101\nKToNCg0K 57102\nT25DbGljaw== 57103\nIFdlbGxpbmd0b24= 57104\nIHJldml2YWw= 57105\n5q+U 57106\n6Zeu 57107\nIE5TUw== 57108\nIGZvcm4= 57109\nIGludMOp 57110\nIEt1d2FpdA== 57111\nX2ZsaXA= 57112\nX2Jv 57113\nX1w= 57114\nIG9jY3VycmVuY2Vz 57115\nIFNjaWVudGlzdHM= 57116\nU1JD 57117\nb2dlbnM= 57118\naWdyYW50 57119\nUkVNT1RF 57120\nIFNJRA== 57121\nLm9wdHM= 57122\ndXZl 57123\nKCldKQo= 57124\nIGxpYmVydGFyaWFu 57125\nIEdsaWRl 57126\nbGVzZW4= 57127\nIGZvcm1l 57128\nb3dhbmlh 57129\nIGFubm95ZWQ= 57130\nRGVmcw== 57131\nIEV4ZWN1dG9y 57132\nIGNhc3Rz 57133\nLnNldENoZWNrZWQ= 57134\nIFNoYXJpbmc= 57135\nLlNlcmlhbGl6ZU9iamVjdA== 57136\nIHNlbGVjdG9ycw== 57137\nX09USEVS 57138\n66+4 57139\nKHN1cGVy 57140\nKE9T 57141\nX1ZFUklGWQ== 57142\naWR1bnQ= 57143\nPGhlYWRlcg== 57144\nIC8+JzsK 57145\nIHZpZMOpbw== 57146\nIE5lZ3Jv 57147\nIExvcmRz 57148\nIFRvdXJz 57149\nIHNvZnRseQ== 57150\nLnJlY2VpdmU= 57151\nIEVSQw== 57152\nIGRhdGFTZXQ= 57153\nQmFkZ2U= 57154\nCUV2ZW50 57155\nIHBlcmw= 57156\nIHt9XA== 57157\nKHNlbnRlbmNl 57158\nT3JVcGRhdGU= 57159\nIGRpbWluaXNo 57160\nUElO 57161\nKGRyYXc= 57162\nLlRvRGF0ZVRpbWU= 57163\nLkVxdWFsVG8= 57164\nKHBpbg== 57165\nLXBlbmNpbA== 57166\nbHVlbnQ= 57167\nIENhbGxlcg== 57168\nIHBsYXlmdWw= 57169\nLScr 57170\neGNh 57171\nc3dpY2s= 57172\nKXt9Cg== 57173\nfTokew== 57174\nIE1ldGg= 57175\nLmdldENlbGw= 57176\nLmJyZWFr 57177\nIHltYXg= 57178\nPSc8Pw== 57179\nLWpzb24= 57180\nIHByaW1laXJv 57181\nIGluZGljZQ== 57182\n44Kj 57183\nIFVOSVRZ 57184\nKGFi 57185\n0YbQuNC4 57186\nX0hBVkU= 57187\nLXllYXJz 57188\nIEVyZG9nYW4= 57189\nLXN0YWNr 57190\nIGRpc2NoYXJnZWQ= 57191\nIGJyZWF0aHRha2luZw== 57192\nIGdyYXNzcm9vdHM= 57193\nIEFzaWRl 57194\naGVsbA== 57195\nIHNuYWtlcw== 57196\nL2xvZ291dA== 57197\nIG1pbldpZHRo 57198\nIEhlYXI= 57199\nIFN0b25lcw== 57200\nIFdpc2RvbQ== 57201\nIEV2ZW5pbmc= 57202\nX2JsYW5r 57203\nIFByb21vdGlvbg== 57204\nIE1NTQ== 57205\nIEJhcnM= 57206\n44K3 57207\nbmo= 57208\nX1RJ 57209\nIFNvY2lhbGlzdA== 57210\nIEVH 57211\nLW9wdA== 57212\nPVwiJA== 57213\nKGRpYWxvZw== 57214\nIGJlaG9sZA== 57215\nIGludHJpY2F0ZQ== 57216\nIGVyZWN0aWxl 57217\nRXh0cmFjdG9y 57218\nIHNjbA== 57219\nIGNsYXM= 57220\nKGhpc3Rvcnk= 57221\naWRlbnRhbGx5 57222\nIHBuZXVt 57223\nUmFuZA== 57224\nIExhcHRvcA== 57225\nY2FsbGVy 57226\nIEZsb29k 57227\nb3BlbmVk 57228\ndWRkZXI= 57229\nIEdldHRlcg== 57230\nX3dhbGs= 57231\nKHdlaWdodA== 57232\nIEFsZXhhbmRyaWE= 57233\nIHRhYmxlYXU= 57234\nVmFyaQ== 57235\nIC0tLS0tLS0t 57236\n6Iez 57237\nZXdvcnRoeQ== 57238\nU3BlY2lmaWNhdGlvbg== 57239\nIHRocmVzaG9sZHM= 57240\nKCIiKTsKCg== 57241\nX2ZvdXI= 57242\nIFNhZGx5 57243\nIChfKQ== 57244\naXNtYXRpYw== 57245\nIEphaWw= 57246\ndG9IYXZlQmVlbkNhbGxlZFdpdGg= 57247\nLm1hcg== 57248\nIHByZXZpZXdz 57249\nIHNjYWZm 57250\naW5kaWNhdG9y 57251\nIGNvZGVjcw== 57252\nIGF1dG9j 57253\nKHJ0 57254\nLmdldEhvdXJz 57255\nIFJI 57256\nIFN1cmdl 57257\naXZhbWVudGU= 57258\nIGNvbnRlbmRlcg== 57259\nQ3BwR2VuZXJpY0NsYXNz 57260\nIDs7Xg== 57261\nOjoqOwo= 57262\nLXJlY29yZA== 57263\nIG1hbWE= 57264\nIGltZ3M= 57265\nLmlzTG9hZGluZw== 57266\nIG5lZWRsZXM= 57267\nIGVuY3VlbnRyYQ== 57268\nb2RhdGE= 57269\nIEJ1ZmZlcmVkSW1hZ2U= 57270\nCWphdmE= 57271\nIFRvbWI= 57272\nVU5JVFk= 57273\nIGxpbmdlcmll 57274\nIEphbWFpY2E= 57275\nYnVncw== 57276\nKioKCg== 57277\nIE1hbw== 57278\nLmJlZ2luUGF0aA== 57279\nIHByb3N0aXR1dA== 57280\nIFBoaWxpcHBpbmU= 57281\nX3Nm 57282\nX3Bvdw== 57283\nIFNjaG8= 57284\neGRl 57285\nJ8OpdA== 57286\n4oCZYXV0 57287\nYWlzb24= 57288\nIEZpbGVJbmZv 57289\ndHVybnN0aWxl 57290\nZHJlYW0= 57291\nIGlWYXI= 57292\nc3ludGF4 57293\naWxsaXNlY29uZHM= 57294\ncHJvZmlsZXM= 57295\nX1JFR0VY 57296\nINC00L4= 57297\nIENvbW11bg== 57298\nQmV0 57299\naXB6aWc= 57300\nIE1lbW8= 57301\nLmlkcw== 57302\nIHBob3RvZ3JhcGhlZA== 57303\nIGFwcHJveGltYXRpb24= 57304\nOnZhcmlhYmxlcw== 57305\nIG1vZGlmaWNhcg== 57306\nX1NNQUxM 57307\nIEhlbXA= 57308\nIGRpc3Jlc3BlY3Q= 57309\nIGNvbnRlc3RlZA== 57310\nIGlubm9jZW5jZQ== 57311\naWxsaXM= 57312\nU3ltYm9scw== 57313\nIGluc3BpcmF0aW9uYWw= 57314\nIGRpc2NpcGxpbmFyeQ== 57315\nIFBlcm1hbmVudA== 57316\nIGRlc2Ny 57317\nIFVOREVS 57318\n0YHRiw== 57319\ncHJlc3Nvcg== 57320\nSU1FUg== 57321\nIG1vdW50cw== 57322\nIG1vcmFsbHk= 57323\nX1NFQ09ORA== 57324\nLmZpbGVOYW1l 57325\n44OX 57326\nIGNvbnN0cnVjdHM= 57327\nIFNVTg== 57328\nRVNQ 57329\nRmluYW5jaWFs 57330\nIE51cg== 57331\nw7RsZQ== 57332\ncmljdWxhcg== 57333\nIFVzZXJNYW5hZ2Vy 57334\naWJpbGlkYWQ= 57335\nIG9uUmVzcG9uc2U= 57336\nIGZpbG1tYWtlcg== 57337\nIGFsb3Q= 57338\nX1RIUkVBRFM= 57339\nIGVudmlyb25tZW50YWxseQ== 57340\nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 57341\nIHJhc2g= 57342\nIEx5cmljcw== 57343\nIGlwYWlycw== 57344\nQmFja3Vw 57345\nU2lnbnVw 57346\nIEB7Cg== 57347\nSlVuaXQ= 57348\nd29ya2Zsb3c= 57349\nIENvbXBsZXRpb24= 57350\nIGludHVpdGlvbg== 57351\n8J0= 57352\nIG1pYQ== 57353\nIFNuYWNrYmFy 57354\nIFRpbg== 57355\nCWluc3RhbmNl 57356\nIE11c2ljYWw= 57357\nIHdlbGNvbWVz 57358\nIHJlZHJhdw== 57359\nX2NvbG91cg== 57360\nX1JFQUxUWVBF 57361\nX3NpbmNl 57362\nIEJ5dGVBcnJheU91dHB1dFN0cmVhbQ== 57363\nLWRlbWFuZA== 57364\nYXJldGg= 57365\nLnBhZA== 57366\nc2Vr 57367\nJywuLi4K 57368\nLWZpcmU= 57369\nLnw= 57370\nIG51bWI= 57371\nIERPVUJMRQ== 57372\nQU1BR0U= 57373\nY2htb2Q= 57374\nLWls 57375\nIGFsYXJtaW5n 57376\nQ29w 57377\n5aSH 57378\naW52aXRl 57379\nX0lURU1T 57380\nIGxldWs= 57381\nIHJlZWw= 57382\nIGZ1bGZpbGxtZW50 57383\nUmVzdG9yZQ== 57384\nX3Jy 57385\nKGNsYXNzZXM= 57386\nIHBhZ2luZw== 57387\neW1heA== 57388\ncmFwcGVk 57389\n7ZmU 57390\nfWB9Pgo= 57391\nIEhpcm8= 57392\nKFRSVUU= 57393\nYXN1cmVy 57394\nIGN1ZXI= 57395\nVWJlcg== 57396\nLk9wZXJhdGlvbg== 57397\nIG9sYW4= 57398\nIHRocmlsbGluZw== 57399\nPFJlc3BvbnNl 57400\nIEZlbWlu 57401\nIHRyYXZlcnNhbA== 57402\nIHBvYw== 57403\nIHNldFN0YXR1cw== 57404\nZGVjbGFy 57405\nc3RkYWZ4 57406\nIGFkZGljdGl2ZQ== 57407\nIEJ0bg== 57408\nIGV4cGxvc2l2ZXM= 57409\nIENvb2tpbmc= 57410\nIFBsYWludA== 57411\nIGFjY3VtdWxhdG9y 57412\nIEFwcG9pbnRtZW50 57413\nLHBhc3N3b3Jk 57414\nIEZBUg== 57415\nbHVldA== 57416\nRnVydGhlcm1vcmU= 57417\nZGVjbHNwZWM= 57418\nX1N0YXRpY3M= 57419\nLkRpY3Rpb25hcnk= 57420\nIj4nLg== 57421\nCXZhbGlk 57422\nIiIs 57423\nSW5zdHJ1bWVudA== 57424\nPko= 57425\nIG5vc3Ry 57426\nIFJpZnQ= 57427\nX1BvcnQ= 57428\nIHZlY2Vz 57429\nW1sn 57430\nIHJhbGxpZXM= 57431\nLXNlcmllcw== 57432\nIHZ2 57433\nLnVj 57434\nIHJ0bg== 57435\nU3RhdGVDaGFuZ2Vk 57436\nKGlucw== 57437\nIENsYQ== 57438\nLS0tLS0tLS0tLS0tCg== 57439\nY3Vz 57440\nIFJlbG9hZA== 57441\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 57442\nLnNlY29uZHM= 57443\nX2Rlc3RpbmF0aW9u 57444\nIHNjcmV3ZWQ= 57445\nPmM= 57446\nVGhpY2tuZXNz 57447\nRGVzaWduZXI= 57448\nIGdyaWRz 57449\nbsSF 57450\nKGNvb2tpZQ== 57451\nVHJpcA== 57452\nLU1vYmlsZQ== 57453\nIHZvbGw= 57454\nIGdlbml0YWw= 57455\nIGNvbmZpc2M= 57456\nIENvbmZlZGVyYXRl 57457\nIHdlYlZpZXc= 57458\nIG1pc2U= 57459\nIGNsZXI= 57460\nKHNlbGVjdGlvbg== 57461\nJGRhdGU= 57462\nIHNoYXJwZW4= 57463\ncmFnZW4= 57464\nQW5kVXBkYXRl 57465\nIHJlbWl4 57466\nIGh0b25z 57467\nUlc= 57468\nTVBJ 57469\nIHJldHJpZXZhbA== 57470\nIHJpY2hlc3Q= 57471\nLkRlY29kZQ== 57472\nOmluaXRDb21wb25lbnRz 57473\nIFRWYWx1ZQ== 57474\nU2FpbnQ= 57475\nQGluY2x1ZGU= 57476\nIFBFUlNPTg== 57477\nLnNlcA== 57478\nIExEQVA= 57479\nZ2Jh 57480\nIGdyb8OfZQ== 57481\nIHJlbGlhYmx5 57482\nIERGUw== 57483\nLmdldEl0ZW1JZA== 57484\nIHByw6lzZW50 57485\nLmdldFRva2Vu 57486\nIGNoaW5lc2U= 57487\nIE1lYWw= 57488\nWU9V 57489\nIj48Pz0k 57490\nKGNob2ljZQ== 57491\nIHBoZW5vbWVuYWw= 57492\nIFN0ZWVsZQ== 57493\nwqI= 57494\nIFBhY2thZ2VNYW5hZ2Vy 57495\nIFN5bmRyb21l 57496\nRGlyZWN0b3JpZXM= 57497\naXZhcg== 57498\nLnVuc3Vic2NyaWJl 57499\nbGllw58= 57500\nbW9ubw== 57501\nX2Nvbm5lY3Rpb25z 57502\nX3ByZXNlbmNl 57503\neW55 57504\nS25pZmU= 57505\nIGdyb292ZQ== 57506\nIHNjb29w 57507\nVEVNUEw= 57508\nYXNha2k= 57509\nLmhhbWNyZXN0 57510\nIGhhcmJvcg== 57511\nY292 57512\nKno= 57513\nIFh1 57514\nIHByb3Bvc2luZw== 57515\nIEZSQU1F 57516\nQ2hpcA== 57517\nIEVlbg== 57518\nIOyghA== 57519\nIHNtYXNoZWQ= 57520\nVW5zaWduZWQ= 57521\nKC4u 57522\nX2ZpbmlzaGVk 57523\nIGdldFN0YXR1cw== 57524\nIGZpYnJl 57525\nQXhlcw== 57526\nICcvJyw= 57527\neWFyZHM= 57528\nTURC 57529\nLWJz 57530\naW50ZW50 57531\nIGJvb3N0ZXI= 57532\nLmRzdA== 57533\nLkRpYWxvZ1Jlc3VsdA== 57534\nIE1ldHM= 57535\nIGJlYXN0cw== 57536\naW5jcmVtZW50cw== 57537\nLmthZmth 57538\nVUlBbGVydEFjdGlvbg== 57539\nLWV2ZXI= 57540\nX2JhbA== 57541\nIGhlbHQ= 57542\nIGZyZW9wZW4= 57543\nIFJlY3J1aXRtZW50 57544\nbGljdHM= 57545\nZm9yZ2V0dGFibGU= 57546\nRGlzcGxheWVk 57547\nX1ZFTkRPUg== 57548\nQ29sbGVnZQ== 57549\nQVNDSUk= 57550\nIFNpbms= 57551\nIE1hY2Vk 57552\nIGN0b3I= 57553\nIGVzdMOjbw== 57554\nIFdpbmRzb3I= 57555\nX2NoZWNrZWQ= 57556\nX2RldGVjdA== 57557\nYXR0ZW5k 57558\nIHhtaW4= 57559\nIGluZGlzcGVucw== 57560\nL3BlcnNvbg== 57561\nX0RFVEFJTFM= 57562\nUkVESVQ= 57563\nSGF5 57564\nYWJvbGlj 57565\nIGZ1bmN0b29scw== 57566\naWFpcw== 57567\nRlRQ 57568\nX1JlY3Q= 57569\nIEluZHk= 57570\nLXB1YmxpYw== 57571\nb2hhbg== 57572\nX21hbmFnZQ== 57573\nQ29tcHV0ZWQ= 57574\n7JeQ7ISc 57575\nIFNsaWNl 57576\nIGdheXM= 57577\nIGFsZXg= 57578\nYWl0cw== 57579\nIHJlY2VpcHRz 57580\nU1BFQw== 57581\nIEJFRk9SRQ== 57582\nIFByZWZpeA== 57583\nX3Zpc2l0 57584\nIHNwdW4= 57585\nTEVURUQ= 57586\nIGRvdw== 57587\nIGxlZ2FsaXphdGlvbg== 57588\nYWJiYWdl 57589\nIGNsYXc= 57590\nIFRjbA== 57591\neGltYQ== 57592\nIGNvdmVydA== 57593\nTmk= 57594\nIHRoYW5rZWQ= 57595\nIGFsbGVyZ2lj 57596\nbG92ZXI= 57597\nIEJyZWFzdA== 57598\nLmlzQWN0aXZl 57599\nIGdlYmVu 57600\nVkVSU0U= 57601\nWk9ORQ== 57602\nCVJlc3VsdA== 57603\nJykuJw== 57604\nIGdlZQ== 57605\nIFNlcmlvdXNseQ== 57606\ncHVycGxl 57607\nIEVzcGHDsWE= 57608\naWZpZQ== 57609\nLXBhY2s= 57610\nUGFydGljbGVz 57611\nICcvLi4v 57612\nIG11bHRpbWVkaWE= 57613\nYXV0b2NvbXBsZXRl 57614\nIFRIUkVBRA== 57615\nIHJlZmVyZW5jaW5n 57616\ncmVldGluZ3M= 57617\nIHF1b3Rpbmc= 57618\nIGFzc2lzdGFudHM= 57619\namVuaXM= 57620\naGFwcHk= 57621\nIGxheXM= 57622\nbGliZnQ= 57623\neGRh 57624\nIGZvdQ== 57625\ncGlhcg== 57626\nUmVjb21tZW5kZWQ= 57627\nIEJpcmRz 57628\nIFdhcnJhbnR5 57629\nw7xybGljaA== 57630\nLklOVklTSUJMRQ== 57631\nX2FuY2hvcg== 57632\n4oCdOg== 57633\nRmFudA== 57634\nX2RlZnM= 57635\nIGRyZWFtZWQ= 57636\nIF9fX19fX18s 57637\ncGxh 57638\nw6RmdA== 57639\nb2RrYQ== 57640\nxLFz 57641\nIGRhZGR5 57642\nc2NoZW1hcw== 57643\nPXplcm9z 57644\nIHJhdHQ= 57645\nCQkgICAgCQ== 57646\naWVq 57647\nIGRyaWxscw== 57648\nLTw/ 57649\nQUJB 57650\nLmxpbmtz 57651\nIERlcGVuZGVuY3lQcm9wZXJ0eQ== 57652\nLmxvdw== 57653\naGVlZA== 57654\nX0JMQUNL 57655\nL0FkbWlu 57656\nIGFtaWdvcw== 57657\naW5nZWQ= 57658\nIE1pY2tleQ== 57659\nLkdldEF4aXM= 57660\nIE5lZWRlZA== 57661\nIEVuY29kZQ== 57662\nw6lyaWV1cg== 57663\nIE1hbmlsYQ== 57664\nIENvbGxlZw== 57665\nYWRhc3Rybw== 57666\nIGNoaWNhcw== 57667\n5L2g 57668\nIG9uZXNlbGY= 57669\neGVh 57670\nZHVr 57671\nIGd3 57672\ndXJnaWNhbA== 57673\nIENlbnRybw== 57674\nIGFlcw== 57675\nZmVlbA== 57676\nIHRyb3Q= 57677\nIGVsZWN0cm9ucw== 57678\nIHJpdHVhbHM= 57679\nIEJpbGRlcg== 57680\nIGRlY29yYXRl 57681\nIFRva2VuVHlwZQ== 57682\nIGx1cmU= 57683\nQXBpQ2xpZW50 57684\nZ3JwYw== 57685\nIE9yYw== 57686\nQ29udGV4dE1lbnU= 57687\nUFJFRklY 57688\nLXRoZW1lZA== 57689\nX2ZpZm8= 57690\nLklucHV0U3RyZWFtUmVhZGVy 57691\nX3NwZWNpZmlj 57692\nIERTUA== 57693\nPXN1YnByb2Nlc3M= 57694\nL3NoZQ== 57695\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 57696\nIGRhdW50aW5n 57697\nIGNsZWFycw== 57698\nIE1vdmVz 57699\nIG15c3Rlcmllcw== 57700\nLWJlc3Q= 57701\nIFZ1 57702\nb2xpYg== 57703\nIElzaA== 57704\nIGNhcmFjdA== 57705\nKExhYmVs 57706\nIERlYmlhbg== 57707\nIEV4cGVyaW1lbnRhbA== 57708\nIGNhdg== 57709\nLlRvRGVjaW1hbA== 57710\nIFJob2Rlcw== 57711\nIEhhd2tz 57712\nIGZvdW50YWlu 57713\nX1BFTkRJTkc= 57714\nX1NV 57715\nIHd4U3RyaW5n 57716\nIFBldw== 57717\nLmNsaQ== 57718\n0YTQvtGA0Lw= 57719\nLndlYmtpdA== 57720\nX0NO 57721\nIDs7PQ== 57722\nCW5hbWVzcGFjZQ== 57723\nIHdQYXJhbQ== 57724\nIHB1cHBpZXM= 57725\nIHRlcm1pbm9sb2d5 57726\nIGFkZGljdGVk 57727\nIGZvcmdl 57728\nIEdhcmRuZXI= 57729\nIHBlc3NvYQ== 57730\nCVJlc3VsdFNldA== 57731\nIGF0dGVudQ== 57732\nYW5nZW1lbnQ= 57733\nX2luZHM= 57734\nQ2hp 57735\nYXJpdGg= 57736\nRW5jb2RpbmdFeGNlcHRpb24= 57737\nbW91c2Vkb3du 57738\nIEJFVFdFRU4= 57739\nd2VpZ2g= 57740\nIkZvcg== 57741\nLmRk 57742\naXRlbA== 57743\nWU8= 57744\nIERpY2U= 57745\ndW5peA== 57746\nIE9idA== 57747\nIENlZGFy 57748\nIHNwZWNpbWVucw== 57749\ncG9ybg== 57750\nIHVub2ZmaWNpYWw= 57751\n6buR 57752\nc29tZXRpbWVz 57753\nIEJ1bGxk 57754\ndHJ1c3Q= 57755\nZ2V0UmVzdWx0 57756\nIHNtb2tlcnM= 57757\nIHNhbmR3aWNoZXM= 57758\nIGV4aA== 57759\nIEZhZGU= 57760\nX0RD 57761\nIG1hc3R1cmJhdGlvbg== 57762\nZm9ydGF3ZXNvbWU= 57763\nVEhJTkc= 57764\nX2FuZHJvaWQ= 57765\nIGRlZGlj 57766\nLXNlbnNpdGl2ZQ== 57767\nIG5hY2t0 57768\nTElCSU5U 57769\nIGFnb24= 57770\nIERJU0FCTEU= 57771\nb25lc2lh 57772\nYmllcw== 57773\nIFpJUA== 57774\nIGhhdW50ZWQ= 57775\nIGN1aWQ= 57776\nL2NhcnQ= 57777\na29z 57778\nCVJUTFU= 57779\nIGhpbmRlcg== 57780\nIGFkaXBpc2ljaW5n 57781\nSUVOQ0U= 57782\nLmJhbms= 57783\nIEN5cHJ1cw== 57784\nbWl4ZWQ= 57785\nLmN5 57786\nLXNpbmdsZQ== 57787\nPGxlbg== 57788\nQ29taW5n 57789\nIGZhdWx0cw== 57790\nIGZvcmVzZWU= 57791\nZ2V0bGluZQ== 57792\nImE= 57793\nIGJyYWc= 57794\nIGRpc2Nz 57795\nIHJpcGU= 57796\nIG7DpnI= 57797\nIEdH 57798\nU0hPVA== 57799\nZGVyYWJhZA== 57800\nKGVkaXQ= 57801\nVG9MZWZ0 57802\nW10pOwo= 57803\nIGRvR2V0 57804\ndmF0dXJl 57805\nTmVlZGVk 57806\nIENoZW5n 57807\nY2Np 57808\nRUZJ 57809\nIGZldWQ= 57810\nIGx1bmFy 57811\nLlNoYXBl 57812\nTm9ib2R5 57813\nX1RSSUdHRVI= 57814\nQ3k= 57815\nZ3JvdW5kQ29sb3I= 57816\nIFJlbW92YWw= 57817\nKGJvdHRvbQ== 57818\nJG1zZw== 57819\nU0NJSQ== 57820\ncml0eg== 57821\nIGZyZW50ZQ== 57822\nIGNvbXBvc3Q= 57823\nYW5zd2VyZWQ= 57824\nIFJvZHI= 57825\nX0hUTUw= 57826\nIHNpbGhvdWV0dGU= 57827\nIFFVRVNU 57828\nIENhdGhlZHJhbA== 57829\nLkNvbW1lbnQ= 57830\nIE1u 57831\nLW5ldHdvcms= 57832\nLmdldEZpbGU= 57833\nLmdlbmVyYXRvcg== 57834\nIENoZWNrb3V0 57835\nX3pvb20= 57836\nIGVuY29kZVVSSUNvbXBvbmVudA== 57837\nX1RD 57838\nc29t 57839\nIFNlcmll 57840\nIGJhc2VVUkw= 57841\nCXJ1bg== 57842\nIGh1aA== 57843\nLnNlbGVjdGVkSW5kZXg= 57844\nIFNUQVI= 57845\nfi1+LQ== 57846\nYWJjZGVmZ2g= 57847\nLm1hcHBpbmc= 57848\nPWRhdGV0aW1l 57849\nQ29vbA== 57850\nbmlt 57851\nIERpcmVjdGl2ZQ== 57852\nRmVkZXJhbA== 57853\nIG1lbnVJdGVt 57854\nINCQ 57855\nQW5uYQ== 57856\nIFJlY3JlYXRpb24= 57857\ncnlhbg== 57858\nLWFnZWQ= 57859\nemVyYmFp 57860\n4oCm4oCdCgo= 57861\nY2FtcG8= 57862\nIG1pbmlhdHVyZQ== 57863\nZGV0YWNo 57864\nbWVhbmluZw== 57865\nX2VtcA== 57866\nUGVhaw== 57867\nIGJjbQ== 57868\nIEh1bmdhcmlhbg== 57869\nIENhc2NhZGU= 57870\nIHNhY2tz 57871\nIHRydW5jYXRl 57872\nIOKWiOKWiA== 57873\nIHdoYWxlcw== 57874\nIHNvcnRhYmxl 57875\nIGFzc2VydHM= 57876\nIHNlYWxz 57877\nb2N5dGVz 57878\nXSkpKQo= 57879\nYWxhcm0= 57880\ncmVzc2luZw== 57881\nKHNpZ25hbA== 57882\nIGVtcGVyb3I= 57883\nCU9O 57884\nY29tbWl0dGVl 57885\nIHRyaWxvZ3k= 57886\nLlRyYW5zYWN0aW9uYWw= 57887\nR3Jvdw== 57888\nX3VhcnQ= 57889\nIHN3aW5ncw== 57890\nIHNwZWN0YWNsZQ== 57891\n4oCZYXY= 57892\nIFNlbnRpbmVs 57893\nINmE 57894\nIFRvdQ== 57895\nIHdpZG93 57896\nZ2VyYWxk 57897\nLHVpbnQ= 57898\nIHVudXN1YWxseQ== 57899\nPENhcmQ= 57900\nIFJlc3RhcnQ= 57901\nbW9y 57902\n44GC44KK 57903\naXhlZFJlYWxpdHk= 57904\nIGhhbmRndW4= 57905\n4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 57906\nIGxpdGhpdW0= 57907\nUmVzb2x2ZQ== 57908\nZ2V0Qnl0ZXM= 57909\nL2Z1bmN0aW9ucw== 57910\nIHRhY2tsaW5n 57911\nT3V0bGluZWQ= 57912\nIH08Lw== 57913\nIFNleG8= 57914\nIEFuaw== 57915\nIHJhdGlvbmFsZQ== 57916\ncmVtb3ZlQXR0cg== 57917\nIG11bmljaXBhbGl0eQ== 57918\nIGFzc2F1bHRz 57919\nQ0hPT0w= 57920\nIFJlZQ== 57921\nIGJhdWQ= 57922\npqw= 57923\nIGVuaGFuY2Vz 57924\nINC/0YDQtdC0 57925\nIGNvbmNlc3M= 57926\nLmluc3RhZ3JhbQ== 57927\nLmdldFJlc3BvbnNl 57928\nc2VnbWVudHM= 57929\nIHdlbGxiZWluZw== 57930\nfTsKCgoK 57931\naHVuZw== 57932\n44OG 57933\nIHJlbm92YXRlZA== 57934\nLmV4cGVjdGVk 57935\nIHJhZGlhbA== 57936\nIGNvbW11bmFs 57937\ndXNlck1hbmFnZXI= 57938\nK2E= 57939\nIGZ1bmRhbWVudGFscw== 57940\nLlRI 57941\n6II= 57942\nIHJhbnQ= 57943\nIFN0cmF3 57944\nIE9sZURi 57945\nYXppbw== 57946\nIGhhbWJ1cmc= 57947\nIHBhaW50cw== 57948\nIHRodW1icw== 57949\nIE51bGxQb2ludGVyRXhjZXB0aW9u 57950\nIGdyb3VwZQ== 57951\nIEhvbWVDb21wb25lbnQ= 57952\nIGJhbGxv 57953\nIElOSVRJQUw= 57954\nX2FyZQ== 57955\nIFBlcw== 57956\ndXJzZXM= 57957\nIGJhcmR6bw== 57958\nLmdldExlbmd0aA== 57959\nYW1vdG8= 57960\nLm5vdGlmeURhdGFTZXRDaGFuZ2Vk 57961\naWVuZXM= 57962\nZW56aWU= 57963\nX2VtYg== 57964\ndW1uaQ== 57965\nc21vb3Ro 57966\nIERybw== 57967\ncGFzdGU= 57968\nIE5hcnI= 57969\nLS0tLQoK 57970\nz4k= 57971\nIEF1dG9y 57972\nIG91dHJvcw== 57973\nIExBQkVM 57974\nLnBh 57975\nLlN0dWRlbnQ= 57976\nKFhtbA== 57977\nIGV0aG5pY2l0eQ== 57978\nIEl2eQ== 57979\n44KI 57980\nX2Zha2U= 57981\nPyg6 57982\ndXBsb2FkZWQ= 57983\nZ2V0TWFuYWdlcg== 57984\nLVFhZWRh 57985\nb2RpYWM= 57986\nQ29ubm9y 57987\naWhhbg== 57988\nTUFU 57989\nKG1pZA== 57990\nIEFsYmFu 57991\nIHNvaXI= 57992\nQ29tYm8= 57993\nIFB1YmxpY2F0aW9u 57994\nb3BvdWxvcw== 57995\ncGlz 57996\nIHRlbXBsZXM= 57997\nb25neWFuZw== 57998\nX2NsaWVudHM= 57999\nIHJvZHM= 58000\nIHhj 58001\naWprZW4= 58002\nIHJlYXA= 58003\nIOS4i+WNiA== 58004\nCWNvbm5lY3Q= 58005\nRm9jdXNlZA== 58006\nLGNvdW50 58007\naWV0ZXQ= 58008\nIGhhY2lh 58009\nX2FsbG9jYXRvcg== 58010\nIHRveGljaXR5 58011\nKHNlcXVlbmNl 58012\nIG51ZXN0cm9z 58013\nIFByaW5jaXBsZXM= 58014\nIGxsZQ== 58015\nYWxhcmlh 58016\nLndyaXRlU3RyaW5n 58017\nIEFGTA== 58018\naWZuZGVm 58019\nIERvcw== 58020\nxZtjaWU= 58021\nIEFnZ3JlZ2F0ZQ== 58022\nIHNhY3JpZmljZXM= 58023\nX29mZnNldHM= 58024\nbGRi 58025\nIGxhdGNo 58026\nIGZ1bGxzY3JlZW4= 58027\nbWlzc2l2ZQ== 58028\nT1BUSU9OUw== 58029\nIFRlbGVwaG9uZQ== 58030\nIGFyc2VuYWw= 58031\namVqZXI= 58032\nIEhvc3A= 58033\nIGZhdm91cml0ZXM= 58034\ncml2ZQ== 58035\nLmluY3JlbWVudA== 58036\nIGJ2 58037\nIEZhbnRhc3RpYw== 58038\nLnNheQ== 58039\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 58040\nIG1lZGljaW5hbA== 58041\nIERST1A= 58042\nIHBpdHk= 58043\nbWV0aXM= 58044\nIHdvbGxlbg== 58045\nIGJlZg== 58046\nX0Js 58047\nID4+Cgo= 58048\nYm93ZXI= 58049\nIHN3YXBwZWQ= 58050\nL2luc3RhbGw= 58051\nIHNpbmtz 58052\nZXRyaXpl 58053\nIGRlY2xpbmVz 58054\nCW15c3Fs 58055\nIENTdHJpbmc= 58056\nIE1vdGlvbkV2ZW50 58057\nLkxhbmd1YWdl 58058\nUm9hZA== 58059\n0YLQtdGA 58060\nYXNjaW1lbnRv 58061\nJykpLT4= 58062\nLmFib3V0 58063\nKGVkaXRvcg== 58064\nIFJhdGluZ3M= 58065\naW5jb21l 58066\nxaFl 58067\nLmRlcXVldWVSZXVzYWJsZUNlbGw= 58068\nIEF1c3RyaWFu 58069\nIHN1bGxh 58070\nIFRyaWJ1bmFs 58071\nIERpZG4= 58072\n0L7QstCw0YA= 58073\nIGluc3BlY3Rpb25z 58074\nQm9zcw== 58075\nIGNvY2t0YWlscw== 58076\nIGFwb2xvZ2l6ZWQ= 58077\nX3N1YnBsb3Q= 58078\nb3BhbA== 58079\nKz0o 58080\nIHJlc29uYW5jZQ== 58081\naWJ1 58082\nIOumrA== 58083\ncm9tYQ== 58084\ncmVzZXJ2ZQ== 58085\ncGxz 58086\nIFRhaA== 58087\nYXhpZXM= 58088\nT1BMRQ== 58089\nIERhcnJlbg== 58090\nIFpvbWJpZQ== 58091\nX01hcA== 58092\nIF0pCgo= 58093\nIFFp 58094\nIFNhaWw= 58095\nIHJlc3RyaWN0aXZl 58096\nIGVyb3Npb24= 58097\nLXBhcg== 58098\nV0hJVEU= 58099\nIG9sZHU= 58100\nIGFwZXJ0dXJl 58101\nIGJpdGNvaW5z 58102\ndGV4dG8= 58103\nIENvbWNhc3Q= 58104\nIHRpbWVsZXNz 58105\nZW5raW5z 58106\nIGZlZWRlcg== 58107\nL3RtcA== 58108\ncmVzZGVu 58109\nKydf 58110\nLkRlc3Ryb3k= 58111\nIMOnb2s= 58112\nIERPQ1VNRU5U 58113\nLmxuZw== 58114\nLnRhZ05hbWU= 58115\nIGt1bGxhbg== 58116\nZWdyYXRl 58117\nICgqLg== 58118\n57yW6L6R 58119\nIGhhbmRzaGFrZQ== 58120\nc29j 58121\nX2dlb21ldHJ5 58122\nIERhbWFzY3Vz 58123\nTWlub3I= 58124\nIEthZmth 58125\n7Jes 58126\nRmxvcmlkYQ== 58127\nX2NvbXB1dGU= 58128\nLmV4cHI= 58129\nIHBhcmFsbGU= 58130\nIERpYXo= 58131\nY2ly 58132\nW3RhcmdldA== 58133\nIGpva2luZw== 58134\nIGdsb3I= 58135\nKHNldHE= 58136\nX2hhbmRsZXJz 58137\nSGFuZw== 58138\nIGZlcnI= 58139\ncmltaW5hbA== 58140\nCSAgICAJCQ== 58141\nZW50aWVz 58142\nZGVmaW5lcw== 58143\nLXRheA== 58144\nanNvbnA= 58145\nIFVQUw== 58146\nbWV0cm8= 58147\nX187Cg== 58148\nIFVnYW5kYQ== 58149\nXSkpOgo= 58150\nX3Rk 58151\neGFl 58152\nbHc= 58153\nLk9T 58154\nIExvZ2dlZA== 58155\nYWNpZA== 58156\nIE1heW8= 58157\nYXNwZWN0 58158\nIHZhZ2luYWw= 58159\nIGluaXRpYWxpemluZw== 58160\nIHN0ZXJvaWRz 58161\nZmljdGlvbg== 58162\nR1JF 58163\nZ2VuZA== 58164\nIGxpYWJpbGl0aWVz 58165\nIExldHM= 58166\nTWVjaA== 58167\nKG5j 58168\nKGNoYW5nZQ== 58169\nIGNvbm5lY3RvcnM= 58170\nOms= 58171\nIHRhc3Q= 58172\nISIpOwoK 58173\ndGhpbmdz 58174\ncm9waHk= 58175\nbHVldG9vdGg= 58176\nIFNpZ25VcA== 58177\nLmN0cmw= 58178\nIHRoZXJlaW4= 58179\nb3JkYQ== 58180\nLmVzY2FwZQ== 58181\naWdhdG9y 58182\nIHBldHJvbA== 58183\nIHNwZWNpbWVu 58184\nIGRlYnV0ZWQ= 58185\nLVBybw== 58186\nIGNyaXNlcw== 58187\nLmFkZFZpZXc= 58188\n64+Z 58189\nLWRvb3I= 58190\nIG1vbmV0 58191\nIG1pbGxpcw== 58192\nIHZpZXI= 58193\nSW50ZXJuYWxFbnVtZXJhdG9y 58194\nIGFkbWlucw== 58195\nIExhaXI= 58196\nemlu 58197\nZ2V0UXVlcnk= 58198\ndW1ibGVz 58199\nTElNSVQ= 58200\nIFZpZw== 58201\nX3Nvbmc= 58202\nPENoYXJhY3Rlcg== 58203\nOjou 58204\nX2hvbQ== 58205\nX2Jw 58206\nIFN1cGVydmlzb3I= 58207\nc3VibWlzc2lvbg== 58208\nYWJpbGU= 58209\nIG5vaQ== 58210\nT3JDcmVhdGU= 58211\nIHBlZWw= 58212\nIG9uU3RhcnQ= 58213\nIHNlbnRpbWVudHM= 58214\ndmVoaWNsZXM= 58215\nIGNsYXNzcm9vbXM= 58216\nIHN6ZXI= 58217\nIGJlbmRpbmc= 58218\nIGxvbmdldml0eQ== 58219\nIGFjbA== 58220\nIEFsZXBwbw== 58221\nIFVN 58222\nIFJpY2h0 58223\nIG11bHRpcHJvY2Vzc2luZw== 58224\nRE9NQUlO 58225\nIiwiKw== 58226\nX1lFQVI= 58227\nIHNjcmFwZQ== 58228\nIHNvbGl0YXJ5 58229\nICJdIjsK 58230\nL2Vycm9ycw== 58231\n7J6s 58232\nnOugpQ== 58233\nYmV0dGVy 58234\nCW51bWJlcg== 58235\nIExG 58236\nIEFjcm9zcw== 58237\nUHViTWVk 58238\nXCIi 58239\nIEV4Y2VsbGVuY2U= 58240\nIHVzYW5kbw== 58241\nIFVJUA== 58242\nQWN0aXZpdHlJbmRpY2F0b3I= 58243\nX1ZPSUQ= 58244\nIGJyZWVkcw== 58245\n772l 58246\ndWVzdGFz 58247\nIFRyZWFzdXJl 58248\ndXN0cmFsaWFu 58249\nKGZhY2U= 58250\nIFRlbm5pcw== 58251\nCUludA== 58252\nIEhhbnNlbg== 58253\n57U= 58254\nOkk= 58255\nIOKclA== 58256\nR1JBWQ== 58257\nT1VTRQ== 58258\nIGhlcGF0 58259\noO0= 58260\nQUlS 58261\nw7PFvA== 58262\nIHF1ZXVlZA== 58263\ndmluY2lh 58264\nIENocm9taXVt 58265\nIGNvbXBldGVuY2U= 58266\ndW5nYWw= 58267\naWxsaQ== 58268\nIGdldEJ5 58269\nIEZpbmRlcg== 58270\nIGluY2FwYWJsZQ== 58271\nIHNhZGQ= 58272\nIGNpdGVz 58273\nIENodXJjaGlsbA== 58274\nU2Rr 58275\nTW9yZW92ZXI= 58276\nQXNwTmV0 58277\nKEZsb2F0 58278\nJHBhc3N3b3Jk 58279\nIENvbm5vcg== 58280\nLXNlc3Npb24= 58281\nX2Rt 58282\nKikp 58283\nIGRldXRzY2g= 58284\nIE5Y 58285\nIHBlcmtz 58286\nX1NPUlQ= 58287\nX1RPT0w= 58288\nX1ZJU0lCTEU= 58289\nLmFzcA== 58290\n5oiW 58291\nIEJyZWF0aA== 58292\nRGV0ZWN0 58293\nIER1ZWw= 58294\nLmNtYg== 58295\nW2l0 58296\nLlNldEJvb2w= 58297\nIG5hcmNpc3M= 58298\nIGFiaWRl 58299\nIGVqZW1wbG8= 58300\nIOKElQ== 58301\nIG1vcm5pbmdz 58302\nIGNvbXB1dGVz 58303\nLnNzbA== 58304\nanQ= 58305\nIG11Y2hvcw== 58306\nX1NT 58307\nW2VuZA== 58308\nIGJhc2lu 58309\nIGFsZ3Vub3M= 58310\nIENyb2F0aWE= 58311\nbGluZXdpZHRo 58312\nKHRhZ3M= 58313\nKGhpZGRlbg== 58314\nw61jaW8= 58315\nIGFwYXI= 58316\nINC2 58317\n5LiO 58318\nLmZvb2Q= 58319\nIFJ1cmFs 58320\nIGJyZWFkdGg= 58321\n5b2x 58322\nKHNlc3M= 58323\nKyIp 58324\nIFBhc3Rl 58325\nIHNlcnZpZG9y 58326\nIEJpdFNldA== 58327\nIFRyYW4= 58328\nbGF1cw== 58329\ndmV0dGU= 58330\nZXllcw== 58331\nIENMSUNL 58332\nIFZJSUk= 58333\nIFR1cm5z 58334\nIExlQnJvbg== 58335\nIE11ag== 58336\nIERlZw== 58337\nIEFkdWx0cw== 58338\nX3N1aXRl 58339\ncHJvY2Vzc2FibGU= 58340\nIFBIWQ== 58341\nZ2hlc3Q= 58342\nLkZhaWw= 58343\nIFNsYWNr 58344\nY2Vq 58345\nXENhcmJvbg== 58346\nIHN1cGVyc3Rhcg== 58347\nIGhvbGRpbmdz 58348\nKGZvcm1z 58349\nICcjJw== 58350\nTXVsdGlw 58351\nKCJbJQ== 58352\nLXNvbGlk 58353\nL3VybA== 58354\nLXRpZXI= 58355\nW2xlbmd0aA== 58356\nIFN0cmVhbVdyaXRlcg== 58357\nIE1hcmtldHBsYWNl 58358\nZ2V0dGV4dA== 58359\nX1RJQ0s= 58360\nIEZvcmdl 58361\nIGJsYWNramFjaw== 58362\nIERPRVM= 58363\nIE1hdHRlcnM= 58364\nd2F2ZXM= 58365\nIHdoaXNwZXJlZA== 58366\nIGx1c2g= 58367\n7Jik 58368\nZGlnaXRhbA== 58369\nIHdyaW5r 58370\nIEhvZ2Fu 58371\nIHJ1c3RpYw== 58372\nLkFwcGx5UmVzb3VyY2Vz 58373\nIEhhcmR5 58374\nb3NvbWVz 58375\nQVVU 58376\nLlNUQVRF 58377\nIG5hcnJhdGl2ZXM= 58378\nCXN0b3Jl 58379\nYmli 58380\nCVNjYW5uZXI= 58381\nIENvZHk= 58382\nXFJlcG9zaXRvcmllcw== 58383\nIHJldW5pb24= 58384\nYW5kdW0= 58385\n4oCZaA== 58386\nIHNuaWZm 58387\nTlNCdW5kbGU= 58388\nIGNvbXByZWhlbmQ= 58389\nX1VTQUdF 58390\nX29jYw== 58391\nVVJSRU5DWQ== 58392\nSk5J 58393\nIHNwZWNpYWxpemluZw== 58394\nIHZpc2lvbnM= 58395\nIGRvbG9yZQ== 58396\nIHbDoQ== 58397\nIENoZXZ5 58398\nIFN0eWxlZA== 58399\naW1wYWN0 58400\nYWxsZW4= 58401\nIGthcnQ= 58402\nIFRhYmxldA== 58403\nc3R1ZmY= 58404\ncmVlc29tZQ== 58405\n0LDRgtC+0YA= 58406\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 58407\nX0FkbWlu 58408\nIGNlbGxwaG9uZQ== 58409\nIGF1dG9wbGF5 58410\nIGNhbWJpbw== 58411\nIG1hcml0aW1l 58412\nX0JPT1Q= 58413\nLXF1YXJ0ZXI= 58414\nIGxhdGluYQ== 58415\nIEFKQVg= 58416\nZXF1aXY= 58417\nIEZyb250aWVy 58418\nIFhZ 58419\nfV0K 58420\nIFJvdWdo 58421\nLnByb3Rv 58422\nIGNvcnJlY3RuZXNz 58423\nIGZhY2ls 58424\nIFJlYWNoZWQ= 58425\n44Gd44Gu 58426\nVklT 58427\nLnBz 58428\nIHN0cm5jcHk= 58429\nIGRpZmZ1c2lvbg== 58430\nLnN0YXJ0QWN0aXZpdHk= 58431\n77+977+977+9 58432\nIGFjY29tcA== 58433\nQU1FU1BBQ0U= 58434\naW1vbmlhbHM= 58435\nIEJsYXN0 58436\nYWJ5cmlu 58437\nIGRvbWU= 58438\nIGV4dHJhdg== 58439\nIHllbg== 58440\nIGN1bGluYXJ5 58441\nUFJJ 58442\nIENvbW11bml0aWVz 58443\nbmlk 58444\nX29wZXJhdGlvbnM= 58445\nLmhz 58446\nIE1pbHRvbg== 58447\nIG5vaXNlcw== 58448\nQXV0b3Jlc2l6aW5nTWFzaw== 58449\nKGNpZA== 58450\nfQoKCgoKCg== 58451\nXX0sCg== 58452\nIERldGVjdGlvbg== 58453\ndGFibGE= 58454\nIGxpYmVydGllcw== 58455\nX0RZTkFNSUM= 58456\nd2dldA== 58457\nIFTDvHI= 58458\nIFBhc2NhbA== 58459\nVHJhbnNwYXJlbnQ= 58460\nRGVsYXllZA== 58461\nXSgp 58462\nIEhlcmJlcnQ= 58463\nPEFjdGlvblJlc3VsdA== 58464\nY2hhbGxlbmdl 58465\nIG11c2hyb29t 58466\nLmluc2VydEJlZm9yZQ== 58467\nIFJpbg== 58468\nIGh1bW91cg== 58469\nIGbDuA== 58470\nYXBpS2V5 58471\nYWxsb2NhdGVk 58472\nIGNvbmZlc3Npb24= 58473\nLiIsDQo= 58474\nCWFzc2VydFRoYXQ= 58475\nIFNPUlQ= 58476\nIExPUkQ= 58477\nIGV4cG9ydGVy 58478\nLnNldExldmVs 58479\ncG9rZW1vbg== 58480\nYXNodHJh 58481\nIGbDqQ== 58482\ndXJhdG9y 58483\nKE1TRw== 58484\nIHR1cA== 58485\nIEh1bGw= 58486\nIHlpZWxkZWQ= 58487\nLlN1YmplY3Q= 58488\nXFJvdXRl 58489\nIT8= 58490\nINGD0LTQsNC7 58491\nXFNlY3VyaXR5 58492\nLWFy 58493\nIGFsbGVnYXRpb24= 58494\nKFNldHRpbmdz 58495\nw6RuZGVy 58496\nIGVsbGlwc2U= 58497\nIFJldHJvZml0 58498\nIHJlZ3VsYXRpbmc= 58499\nIE1vbGx5 58500\nIExvaw== 58501\nX0N1c3RvbQ== 58502\nIFByb21v 58503\naXNpbg== 58504\nIHJlc3VtZWQ= 58505\nIG1ldHJvcG9saXRhbg== 58506\nLmVycm9yTWVzc2FnZQ== 58507\nOi0tLS0tLS0tLS0tLS08Lw== 58508\nLm1s 58509\nc2NvcGlj 58510\nLnJlZnM= 58511\nYXB0b3Jz 58512\nIEluc3RydW1lbnRz 58513\nIHByb3BhZ2F0ZQ== 58514\nfS0+ 58515\nIHBhc2Fkbw== 58516\ndGhhbms= 58517\nX0RlbGV0ZQ== 58518\nIEJyaWdodG9u 58519\nLHVuc2lnbmVk 58520\n5L2c6ICF 58521\nIGFzcGlyYXRpb25z 58522\nLWhvdw== 58523\nUm9zZQ== 58524\nPSgo 58525\nX25lZWRlZA== 58526\nX3BsdXJhbA== 58527\nPEFwcGxpY2F0aW9u 58528\nIFdFRUs= 58529\nIFVubG9jaw== 58530\nIFRFTVA= 58531\nU291 58532\nIHNjaGl6b3BocmVuaWE= 58533\nIHRyb2xs 58534\nIGNvbXBsZW1lbnRhcnk= 58535\nIE5FVFdPUks= 58536\nIGJsaXI= 58537\nIHByb2dyZXNzRGlhbG9n 58538\nIiUo 58539\nIEF0dHJpYnV0ZVNldA== 58540\nCXRz 58541\nLml0ZXJpdGVtcw== 58542\n6K+d 58543\nIGVzY3JpdA== 58544\ndm91cw== 58545\nX3BsYWNlcw== 58546\nSEs= 58547\nIHNlZ3Vpcg== 58548\nX2Z3 58549\nIFJvdW5kZWQ= 58550\nIGRpc3Bvc2l0 58551\n6KeG 58552\ncGFybQ== 58553\nd293 58554\nU1RSVUNUSU9O 58555\nLmFsbG93 58556\nIENoYXJTZXF1ZW5jZQ== 58557\nCWV4dGVybg== 58558\nIHByb3NlY3V0ZWQ= 58559\nIG1vcnRhcg== 58560\nIEp1ZGE= 58561\nLW1zZw== 58562\nIGVzdHVk 58563\nLmdldERlc2NyaXB0aW9u 58564\nIHNvdw== 58565\nYW1icmU= 58566\nIHJvbWE= 58567\nRW5o 58568\nYm9udXM= 58569\nIHNxdWF0 58570\nIGRpc3RyYQ== 58571\nZWRJbWFnZQ== 58572\nIHBlcHBlcnM= 58573\nLXBlcmZvcm1hbmNl 58574\nLAoKCg== 58575\nLGZpbGU= 58576\nIE1JTUU= 58577\nX2NvbmNhdA== 58578\nQUJT 58579\nLWZhc2hpb24= 58580\nIHVuZGVyY292ZXI= 58581\nT25lVG9NYW55 58582\nIHJlY2xhaW0= 58583\nQ09QWQ== 58584\nIGJpbmRz 58585\nIFRhcGU= 58586\nIGdvc3NpcA== 58587\nIEVxdWl0eQ== 58588\nL0NhcmQ= 58589\nLmFjdGl2 58590\nJ2Ft 58591\nIGRyYWluYWdl 58592\nPFNjYWxhcnM= 58593\nIG9uQmluZFZpZXdIb2xkZXI= 58594\nKCk/Lg== 58595\nIHNvcnJvdw== 58596\nIEli 58597\ndXB5 58598\nX1VVSUQ= 58599\nIENoYXJt 58600\nIEVsZWN0aW9ucw== 58601\nLm9uRGVzdHJveQ== 58602\nIEludGVyZXN0aW5nbHk= 58603\nb3VuZGluZ0JveA== 58604\nX2RldGVjdGlvbg== 58605\nLWhlbGQ= 58606\nX3Vua25vd24= 58607\nIHJlZnJhaW4= 58608\nIG3DqXRvZG8= 58609\nIGVCb29r 58610\nRU5PTUVN 58611\nIGRhbmc= 58612\nUHJvZmVzc2lvbmFs 58613\nIGRpY3Rpb25hcmllcw== 58614\nL215c3Fs 58615\nIFNUVUQ= 58616\nIG1hc3Nl 58617\nc2NhcGU= 58618\nIGRyZWk= 58619\nOm5hbWU= 58620\nLmxvZ28= 58621\nU2lnblVw 58622\nIHRhaHVu 58623\nKHRoZW1l 58624\nIEZlbW1l 58625\nIGJvbWJlcg== 58626\nIEphZGU= 58627\nIFRheQ== 58628\nIHN1Ym1hcmluZQ== 58629\nX2NsYXVzZQ== 58630\nenljaA== 58631\nIHNpbXVsdGFuZW91cw== 58632\nIGNhc29z 58633\nLmJvb2xlYW4= 58634\nKGxocw== 58635\nIGNvbnRpbmVudGFs 58636\nLXNhbGU= 58637\nCWVudg== 58638\nIEN1dGU= 58639\nIEZhY3RvcnlHaXJs 58640\nYWJ1cw== 58641\nL3ZhbHVl 58642\nIGphZHg= 58643\nIHN0ZXJu 58644\nPj4KCg== 58645\nIHN1cmZhY2Vk 58646\nIOyggOyepQ== 58647\ncGxhdHo= 58648\nCWVtYWls 58649\nY2VwdG9ycw== 58650\nIj4o 58651\nIGVwaWxl 58652\n6K+7 58653\nIERlYnQ= 58654\n5ZGK 58655\nTk9Q 58656\nImh0dHBz 58657\nOmo= 58658\nRm9ybUl0ZW0= 58659\nX0xJQ0VOU0U= 58660\nLmdldERvdWJsZQ== 58661\nIEFnZW5kYQ== 58662\nCWZpbmFsbHk= 58663\nKGZpbHRlcnM= 58664\nKGF2 58665\n576O 58666\nQVBFUg== 58667\nIGxhdmE= 58668\n0LXRgNC2 58669\nKSkpKQoK 58670\nIGZhdWx0eQ== 58671\nX25t 58672\nIHRyYXZh 58673\nKEJpdG1hcA== 58674\nIHNwZWVkaW5n 58675\nPicpLg== 58676\nIHNjcmVlbmVk 58677\nX3JvbGw= 58678\nIE1hY0Jvb2s= 58679\nIEFVRA== 58680\nIGRpYWdub3Nl 58681\nLkdlbmVyYXRl 58682\nIF5e 58683\nIHN0cnM= 58684\nW1Rlc3Q= 58685\nIHJhbnNvbQ== 58686\nIERIQ1A= 58687\nZWxkZW4= 58688\nIGludGVycHJldGF0aW9ucw== 58689\nKCldLg== 58690\nZmxhdE1hcA== 58691\nIGxpbmVIZWlnaHQ= 58692\nX21vdW50 58693\nIFdpemFyZHM= 58694\nIHNsdXRz 58695\nZWhsZXI= 58696\nb2RhbA== 58697\nIG1pbGl0aWE= 58698\n5bI= 58699\nZWFybmVk 58700\nIG1pc2VyeQ== 58701\naW50dmFs 58702\nZnVuZA== 58703\nIGhpZGVz 58704\nIGRpYXJy 58705\nIFdlc2xleQ== 58706\nIHhtbQ== 58707\nIHF1ZW0= 58708\nIEFyYWJz 58709\naWZ0aA== 58710\nYXRlZ29yaXplZA== 58711\nRGlzcG9zYWJsZQ== 58712\nUHVyZQ== 58713\nX05PVElGWQ== 58714\nc25pcHBldA== 58715\nIEdhcnJldHQ= 58716\nLnJ1bm5pbmc= 58717\nLndlaWdodHM= 58718\nICgtLQ== 58719\nIGludmFyaWFudA== 58720\n5LqL5Lu2 58721\nIEFsbG93ZWQ= 58722\nZGlycw== 58723\nIHBhc3Npb25z 58724\nIGxhZA== 58725\nIEZsdXNo 58726\nbWVudXM= 58727\nOmJsb2Nr 58728\nIGNvbXByYQ== 58729\nLmNob21w 58730\nYWxsb2NhdG9y 58731\nIGN1cmF0ZWQ= 58732\nIEtub3dpbmc= 58733\nIFBhdHRlcnNvbg== 58734\nIHRlbGFo 58735\nJ2V4 58736\nIGRvb21lZA== 58737\nIHBoaWxhbnRo 58738\nb3R0eQ== 58739\nLnN0eWxlcw== 58740\nT3duZWQ= 58741\nIGFsbGVyZ2llcw== 58742\nPXBhcmFtcw== 58743\nb2Nlc2U= 58744\naXRlbGlzdA== 58745\nIFNlbmRpbmc= 58746\nYmVm 58747\nb3JyYXI= 58748\nIE7Do28= 58749\nIEZhcmdv 58750\nIEx1Yg== 58751\nIENvbWJpbmVk 58752\nX2dpdmVu 58753\nCQkJCQkgICAg 58754\nIHJlY29uY2lsaWF0aW9u 58755\nUGF0dGVybnM= 58756\nYXphcmQ= 58757\nIGJpb21hc3M= 58758\nIEhvdXNlcw== 58759\ncmVzcHVlc3Rh 58760\nY2Nv 58761\nL3RvcGljcw== 58762\nIFl1aw== 58763\nIHdlYWtlbmVk 58764\nX2NhbGVuZGFy 58765\nIG11bGhlcmVz 58766\nIE1hcmw= 58767\nIHNpbmU= 58768\nIFRpbA== 58769\nIFNvdWxz 58770\nIERldXRzY2hl 58771\nIEZPTExPVw== 58772\nIHBpcGVsaW5lcw== 58773\nIEJldmVybHk= 58774\nX0RJUFNFVFRJTkc= 58775\nIiM= 58776\nIFByb3Rv 58777\nLmJpZw== 58778\nIFNhdmluZ3M= 58779\nIFRhbno= 58780\nanVu 58781\nIEdhbW1h 58782\nIFNhZGQ= 58783\nIGFkdmlzb3Jz 58784\nIHJvYXN0 58785\nIHVudGVycw== 58786\ndWRpZXM= 58787\nX2xvbg== 58788\nLXBvaW50ZXI= 58789\nIEVsZW1lbnRSZWY= 58790\nXEJ1aWxkZXI= 58791\nZXhhbXBsZUlucHV0 58792\nLndlYmRyaXZlcg== 58793\nZGF0YVR5cGU= 58794\nIFF1aXRl 58795\nIENlbHRpY3M= 58796\ndWls 58797\nLWRlZmVuc2U= 58798\nYmlzaA== 58799\nIFVJV2luZG93 58800\nIFN1ZGRlbmx5 58801\nLmhvdA== 58802\nLnJlYXNvbg== 58803\nIGfDtnI= 58804\nQU1E 58805\nLk11bHRp 58806\nYXV0aGVudGljYXRlZA== 58807\ncmVnaW9ucw== 58808\nOyg= 58809\n0LDRgNCw0Lw= 58810\nIEtpcmJ5 58811\nJHJvdXRl 58812\nUFJFQ0FURUQ= 58813\nIER1cmhhbQ== 58814\nb3dv 58815\nIFBlcmZvcm1z 58816\nIGRpc3JlZ2FyZA== 58817\nbnN0 58818\nIFBvbHM= 58819\nIGdldFA= 58820\nIl06 58821\nLWNvbG9yZWQ= 58822\nKEtleXM= 58823\nIEFsbGVn 58824\nX21vZGlmeQ== 58825\nX2xvYWRpbmc= 58826\nc3RyYWluZWQ= 58827\nIGF0cm9j 58828\nX3Bocg== 58829\nPFNwcml0ZQ== 58830\nIHNhdGlzZmFjdG9yeQ== 58831\nbWFuc2hpcA== 58832\nLnBpcGVsaW5l 58833\nVG9ueQ== 58834\nIHRoaWVm 58835\ncG9sYXRvcg== 58836\nKGxvY2s= 58837\nYnVyc3Q= 58838\nIE9wdGltaXphdGlvbg== 58839\nIHN1cmZpbmc= 58840\nIlllcw== 58841\nIGRlc2NlbmRlZA== 58842\n5pI= 58843\nX0NsZWFy 58844\nIGNyaWVz 58845\nIEZyb3plbg== 58846\nRElSRUNU 58847\nLUNvbg== 58848\nIExlaWNlc3Rlcg== 58849\n5aWz 58850\nT09N 58851\nPWRi 58852\nIGdldE1lc3NhZ2U= 58853\nPFN0dWRlbnQ= 58854\nX2JhdGNoZXM= 58855\nLk1hc2s= 58856\nX2V0aA== 58857\nXCk= 58858\nIHNvbWE= 58859\nQ2F0Y2g= 58860\nW2No 58861\nT3duZXJz 58862\naW5kbGU= 58863\nOmF1dG8= 58864\nLnZlcnQ= 58865\naXZy 58866\nLnNldExvY2F0aW9u 58867\nIGZsdWVudA== 58868\nX0VORElBTg== 58869\nIENhcmxv 58870\nY2VwdHM= 58871\nYWRkQWN0aW9u 58872\nLm9hdXRo 58873\nPFVuaXR5RW5naW5l 58874\ncmVlbWVudHM= 58875\nLlNraXA= 58876\nPykKCg== 58877\nLmRlZmF1bHRQcm9wcw== 58878\nIGNhYmU= 58879\nIFNoZW4= 58880\nZXJvc2lz 58881\nIFByb2ZpdA== 58882\nIHBvaXM= 58883\nX0NSRUFURUQ= 58884\nIHJlbW92ZUZyb20= 58885\nKHdz 58886\nP2FjdGlvbg== 58887\nKEZpZWxk 58888\nIGVycm9uZQ== 58889\nLm1pbmltdW0= 58890\nIFJldHJpZXZlZA== 58891\nIGRhZG8= 58892\nIFBSSVZBVEU= 58893\nLXNwZWM= 58894\nIGd6aXA= 58895\ncGRhdGE= 58896\nIHBvc1k= 58897\nKGxvdw== 58898\nIHF1YWxxdWVy 58899\nL2Nsb3Vk 58900\n6rKM 58901\nKGNvbW1vbg== 58902\nIEFyYmVpdA== 58903\nb3JnYW5pc2F0aW9u 58904\nIHRpZHk= 58905\nIFJvbGFuZA== 58906\nKHBo 58907\nLnpvbmU= 58908\nIGdlbnRsZW1lbg== 58909\nxrDhu6Nj 58910\n5bGx 58911\nIGVuY2xvc3VyZQ== 58912\nIE1hbmFmb3J0 58913\nCUNvbG9y 58914\nU3RlbmNpbA== 58915\nTmlj 58916\nIHRoZW9yZW0= 58917\nIFZH 58918\nIGNvbG91cmVk 58919\nVkJveExheW91dA== 58920\ndWxzaXZl 58921\nRHJhZ29u 58922\nY2Zm 58923\nZXRlc3Q= 58924\nZW5zYQ== 58925\nb2ZkYXk= 58926\nLkF6dXJl 58927\nOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZQ== 58928\nX3VwZGF0ZXM= 58929\nIHRyZW5keQ== 58930\ndWdhcw== 58931\nd2Vha1NlbGY= 58932\nIHJpZGdl 58933\naWJyaQ== 58934\nIOy2lA== 58935\nKENH 58936\nIE1vbmtleQ== 58937\nLndyaXRlSW50 58938\nLnRpbWVkZWx0YQ== 58939\nVmlld0NvbnRyb2xsZXJBbmltYXRlZA== 58940\nIFByb3ZpZGVuY2U= 58941\n44GI 58942\nIGJsZW5kcw== 58943\nL1N1YnRocmVzaG9sZA== 58944\nIEFwcGw= 58945\nIGF0YW4= 58946\nIHJlbG9hZERhdGE= 58947\ndW1ib3Ryb24= 58948\nc3TDvHQ= 58949\nT0F1dGg= 58950\nIEdpdmluZw== 58951\nIOyEpA== 58952\nIEZpbm5pc2g= 58953\nY2hlY2tpbmc= 58954\nLkVtYmVk 58955\nc2VxdWVsaXpl 58956\nIGluaXRpYWxpemVz 58957\nIE9zbG8= 58958\n2LY= 58959\nZ2V0RXh0ZW5zaW9u 58960\nX0FMVA== 58961\nKGJsYW5r 58962\nIGZhdGFsRXJyb3I= 58963\nIGRlbWlzZQ== 58964\nKioqKioK 58965\nIFhT 58966\nKEFG 58967\nIEVucw== 58968\nYW50aGE= 58969\nIFBPUg== 58970\nIG5pY2g= 58971\nLk5hbWVk 58972\nIGdpZ2FudGlj 58973\nIE9ic2VydmF0b3J5 58974\nLlJlc29sdmU= 58975\nIFBheW1lbnRz 58976\nZ3VpbGQ= 58977\nIGN1cnJlbnRTdGF0ZQ== 58978\nPT09PT09PT09PT09PT09Cg== 58979\nIFNleQ== 58980\ncERhdGE= 58981\nIGRlYWRsaW5lcw== 58982\nIGNlbnRyYWxpemVk 58983\nIFNjaG9sYXJzaGlw 58984\nX3N1cHBvcnRlZA== 58985\nLmNocm9tZQ== 58986\nKCldKTsK 58987\nIGN5YW4= 58988\nIENhZ2U= 58989\nQXV0aG9ycw== 58990\nXw0K 58991\nL29z 58992\na2lt 58993\nZGVl 58994\nLnRleA== 58995\nIHlvdXJzZWx2ZXM= 58996\nIG1ncg== 58997\nIGFsaw== 58998\nLWluc3RhbGw= 58999\nIGRyYWZ0aW5n 59000\nIHJ1bW9y 59001\nIHN0YXR1ZXM= 59002\nUG9vbGluZw== 59003\nb2xpbmE= 59004\nQUFBQUFBQUE= 59005\nLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 59006\nIGV4dHJlbWlzdHM= 59007\nQ2FsY3Vs 59008\naWdodGhvdXNl 59009\nSW5zZXQ= 59010\nKElOUFVU 59011\nIHN5bmNocm9uaXphdGlvbg== 59012\naXZpcnVz 59013\nLmF4ZXM= 59014\nIEdhcA== 59015\nLUFu 59016\nX1RlbXBsYXRl 59017\nIGdhbWVy 59018\nIENyaWNrZXQ= 59019\nIGxpbnQ= 59020\nIGF1dGhvcml0YXJpYW4= 59021\nTlNVSW50ZWdlcg== 59022\nIHJlZG8= 59023\nIGFkaXBpc2Npbmc= 59024\nX0ZFVENI 59025\nY2hlaWQ= 59026\nIEZhbmc= 59027\nLmluZGljZXM= 59028\ndG9uZQ== 59029\n0LTQtdC7 59030\nIHt7LS08 59031\nYnJhaGlt 59032\nIHNhbGE= 59033\nZ2V0Q29kZQ== 59034\nIGNvbW11bmljYXRlZA== 59035\nc3RhcnRzV2l0aA== 59036\nZXJ0eg== 59037\nUmVhZGFibGU= 59038\nSXRlbUlk 59039\nb3JlZmVycmVy 59040\nY3JlZGlibGU= 59041\nw6FyaWE= 59042\nIGNvbWJpbmVSZWR1Y2Vycw== 59043\nKiovCgo= 59044\nIGJsaXNz 59045\nIGFkb3Ju 59046\nZGVwZW5kcw== 59047\nIFJPT00= 59048\nIGZyYW1pbmc= 59049\nID8nLA== 59050\nYXV0eQ== 59051\nX3BvdA== 59052\nX3RhYnM= 59053\nRXhhY3Q= 59054\nLCIs 59055\nICd9JzsK 59056\nIGFyYml0cg== 59057\nYWhyYWlu 59058\nLmdldFN0cmluZ0V4dHJh 59059\nICRc 59060\nIG91dHB1dFN0cmVhbQ== 59061\nIGNvbW1lbmM= 59062\nYW51cw== 59063\nY2h5 59064\nPEVtcGxveWVl 59065\nIGhleGF0cmlnZXNpbWFs 59066\nIG5hY2lvbmFs 59067\nKHNlcmlhbGl6ZXJz 59068\nX3B1dGNoYXI= 59069\nX1NBRkU= 59070\nZW50aWFsQWN0aW9u 59071\nSXRlbVNlbGVjdGVkTGlzdGVuZXI= 59072\nLkRpc3BhdGNo 59073\nQ29uZmxpY3Q= 59074\nX2Fib3V0 59075\nb3NhdXI= 59076\nQm91bmRhcnk= 59077\nIGNsZWFyQ29sb3I= 59078\nKExvY2F0aW9u 59079\nIE1PTlRI 59080\nIFRhc3Rl 59081\nLUdlbmVyYWw= 59082\nIFdBUg== 59083\nIGVyaGFsdGVu 59084\nLXNhdmluZw== 59085\nIGNvdXBsaW5n 59086\nLXRyaWdnZXI= 59087\nbW90b3I= 59088\nIHl5eXk= 59089\nIFBhdGVudA== 59090\ncHRv 59091\nIG1pc2RlbWVhbm9y 59092\ndmFzaW9u 59093\nIEFkbWlyYWw= 59094\n4LmJ4Liy 59095\nX1BXUg== 59096\nIGRldmFzdGF0ZWQ= 59097\nZm9saW9z 59098\nSVRVREU= 59099\ndXJyZWN0 59100\nIHJvYm90aWM= 59101\nIFNhbmN0 59102\nIEhhd2FpaWFu 59103\nLlJvdXRl 59104\nLWNvbmRpdGlvbg== 59105\nIHJr 59106\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 59107\nY3JlYXRlRWxlbWVudA== 59108\nIEtvcA== 59109\naWduYW50 59110\nLnJvbGxiYWNr 59111\nIHNhbHVk 59112\nXycs 59113\nIEFOU0k= 59114\nRXhjZXB0 59115\nIERyYXdhYmxl 59116\nLlV0Y05vdw== 59117\nIjpbewo= 59118\nIGtvbGU= 59119\nTHVh 59120\nIEJlbGlldmU= 59121\nQ29tcHV0 59122\nIGhhbGx1Yw== 59123\nIFNpZ25z 59124\ncnN0 59125\nLmh1 59126\nIEtOT1c= 59127\nV2k= 59128\nIEJyYXNz 59129\nIFJhcw== 59130\nQGhvdG1haWw= 59131\nIHNlZGltZW50 59132\nIGFwaw== 59133\nIOyDgQ== 59134\nX3JlZ2lvbnM= 59135\nIHBvZGl1bQ== 59136\nPEJvb2s= 59137\n0LbQtQ== 59138\nIHNpeHRlZW4= 59139\nIEFsaWFz 59140\nIGluZnJhcmVk 59141\nIFZhbmRlcg== 59142\nIExlYWRpbmc= 59143\ndWNpbmc= 59144\nLDosOg== 59145\nX2hvcg== 59146\nd2F0 59147\nIGTDqWNvdQ== 59148\nX1dpZGdldA== 59149\nU291bmRz 59150\nX25hdmlnYXRpb24= 59151\nIHNjaG5lbGw= 59152\nKGdlbmVyYXRvcg== 59153\ndWNlbmU= 59154\nIHJlbWFrZQ== 59155\nSVB2 59156\nIHLDqWFs 59157\nX0lOQ1JFTUVOVA== 59158\nIGh5cG90aGV0aWNhbA== 59159\nX2FuZw== 59160\nIG9mcw== 59161\nICEK 59162\nLmNvbXBsZXRlZA== 59163\nR2V0VHlwZQ== 59164\nIGtvbW1lbg== 59165\nw6FsaWRv 59166\nYWRkT24= 59167\nIHrFgg== 59168\nVUxB 59169\nX2luZGljYXRvcg== 59170\nJ10KCgo= 59171\nYXBhY2hl 59172\nX1NlbGVjdA== 59173\nIEdyZWVuZQ== 59174\nV2hhdHM= 59175\nX2FuaW0= 59176\nIHJlcGV0aXRpdmU= 59177\nbXVjaA== 59178\nIFRocmVzaG9sZA== 59179\nIGxm 59180\nKENhdGVnb3J5 59181\nY29uZQ== 59182\nTWl4 59183\nX01FVEFEQVRB 59184\nYXlzaWE= 59185\nTmVpZ2hib3Jz 59186\nCQoJCQo= 59187\nSVBIRVI= 59188\nIEZyYWc= 59189\nIENlbGxz 59190\nIG5hbWVzcGFjZXM= 59191\nKGJhY2s= 59192\nIFJlc3RhdXJhbnRz 59193\nc3Zj 59194\nINC70Lg= 59195\nb3RlY2g= 59196\nLXNs 59197\npb8= 59198\nIFdU 59199\nIFJlZHVjdGlvbg== 59200\nIGRvdHRlZA== 59201\nCWZvdW5k 59202\nIFRFQU0= 59203\nQm9ybg== 59204\nIE11c2g= 59205\nIENvbXBhcmFibGU= 59206\nIGhpdGNo 59207\nQVRP 59208\nIG1heEhlaWdodA== 59209\nYmVnaW5UcmFuc2FjdGlvbg== 59210\nw612 59211\nX2Ju 59212\nIGhlcmQ= 59213\nIHJldmVyc2Fs 59214\nIEhvbmQ= 59215\nZGVsaW1pdGVy 59216\nIGNvbmZ1c2U= 59217\nIGhvcHM= 59218\nIGNlbnRyb2lk 59219\nIGNvdXJ0cm9vbQ== 59220\nLmRlY29yYXRvcnM= 59221\nIG1waQ== 59222\nIEltcHJvdmVk 59223\nSU5ORVI= 59224\nIEJhbmdhbG9yZQ== 59225\nIFRhbWI= 59226\nIGJvYXN0 59227\nKCkpKQ0K 59228\nIGlsbGljaXQ= 59229\nIE1vcm9jY28= 59230\nZ3JlZ2F0b3I= 59231\nX3Jlc3VtZQ== 59232\nIGNyYWNrZG93bg== 59233\nIHBvcnRyYWl0cw== 59234\nL2hpZ2g= 59235\nKFwn 59236\nIGF5dWQ= 59237\nX2ZlZWRiYWNr 59238\nIGNhdGU= 59239\nL2F2YXRhcg== 59240\nIGhlYg== 59241\nUG9pbnRDbG91ZA== 59242\nIOWSjA== 59243\nIDwhWw== 59244\nIGdldFJlc291cmNlcw== 59245\nfTp7 59246\nT3BlcmF0aW5n 59247\nIEZvZw== 59248\nCXRhYg== 59249\nIFJlc2VhcmNoZXJz 59250\nIGZhYnJpY2F0aW9u 59251\nLmRhdGFzZXRz 59252\nIENhbXBv 59253\nIEthdWY= 59254\nIGRsbA== 59255\nbGlndA== 59256\nXSkpOwoK 59257\nc3RlbGxlbg== 59258\nQUNLRVQ= 59259\nbHZs 59260\nIEdsb3J5 59261\nLmRhdGVUaW1l 59262\nIGNvbW11dGU= 59263\nIG9uQ3JlYXRlVmlld0hvbGRlcg== 59264\nIFhFbGVtZW50 59265\nIFRva2Vucw== 59266\nPHRoZWFk 59267\nX3BpY2s= 59268\n7KQ= 59269\ndm9u 59270\nZGVwYXJ0dXJl 59271\nKHJlbmRlcmVy 59272\ncGhvbmVOdW1iZXI= 59273\nKFBlcnNvbg== 59274\nZ2VuZXM= 59275\nIExhcnM= 59276\nICl7Cgo= 59277\nIEpzb25SZXN1bHQ= 59278\nIG1ldG9kbw== 59279\nVk9LRQ== 59280\nLmdldFVzZXJJZA== 59281\nQWNjZWxlcg== 59282\nCXJlcXVpcmVk 59283\nIGNoYW1waW9uc2hpcHM= 59284\nQnVpbGRDb250ZXh0 59285\nL3Rhc2s= 59286\nL3JlbGVhc2Vz 59287\nQ2F0ZWdvcmlh 59288\nX292ZXJsYXk= 59289\nIHNjYXJjZQ== 59290\nX2xpbQ== 59291\nbmdy 59292\nYWhsZW4= 59293\nIEFydGlmaWNpYWw= 59294\nc3ByZWFk 59295\nIGJvd2xpbmc= 59296\nLmFuYWx5c2lz 59297\nU01UUA== 59298\nCXBhc3N3b3Jk 59299\nIGJhdGhz 59300\nXSkpewo= 59301\nY3VycmVudGx5 59302\nYWNpZW50ZQ== 59303\nX3NlcGFyYXRvcg== 59304\nIGRlYmVy 59305\nIERpc2FibGVk 59306\nacOocmVz 59307\nIOKV 59308\nX3Byb2Nlc3Npbmc= 59309\nIHByb3Rlc3Rpbmc= 59310\nIFJPVA== 59311\nZ3JhYg== 59312\nINC30LDQug== 59313\nIHByb2FjdGl2ZQ== 59314\nd29yZHByZXNz 59315\nIFNldmVy 59316\naW5kZW4= 59317\nIHdpa2lwZWRpYQ== 59318\nKXsNCg0K 59319\nX3dpbmRvd3M= 59320\naXNsYXRpb24= 59321\nIHVucmVzdA== 59322\nIGRpc21pc3NhbA== 59323\nLk5VTQ== 59324\nX0ZBU1Q= 59325\naXNzdWVk 59326\nIEZBQ0U= 59327\nX3VuZGVy 59328\nIHBsdWdnZWQ= 59329\nIOWw 59330\nIGLEmWR6aWU= 59331\nIElDQw== 59332\nIGNvbWJ1c3Rpb24= 59333\nIGtpc3NlZA== 59334\nIHN0YXJyZWQ= 59335\nIFdhdHRz 59336\nIHNwaWVsZW4= 59337\nLXB1cnBvc2U= 59338\nIEV2YWw= 59339\nYXJnZXM= 59340\nLHJlc3VsdA== 59341\ndGVjaG5vbG9neQ== 59342\nIG5hdGlvbmFsaXR5 59343\naWN1cw== 59344\nIE51Zw== 59345\nINGC0L4= 59346\nCQkJCQkJCSAg 59347\nY29sbw== 59348\nIGdhc3Rybw== 59349\nYW50ZWVk 59350\nT0xJRA== 59351\nLmJpYXM= 59352\nX3RlbGU= 59353\nLmluc3BlY3Q= 59354\nIHZlaWw= 59355\nLmZvb3Rlcg== 59356\nIG5lZ2xpZ2VuY2U= 59357\nIGp1ZGdtZW50cw== 59358\nUm9vbXM= 59359\neW5u 59360\nCWNvdW50ZXI= 59361\nb2NjdXBhdGlvbg== 59362\nIOeUnw== 59363\ndW5hcw== 59364\nICheKSg= 59365\nTGFtYmRh 59366\nZmVs 59367\nLlBhcmFtcw== 59368\nINC00L7QsdCw0LI= 59369\nc2V0TGF5b3V0 59370\nIGRlcG9ydGF0aW9u 59371\nIGxvY2FsT2JqZWN0 59372\nIFBoYXJtYWNldXRpY2Fs 59373\nY2VwdGl2ZQ== 59374\nIE5vbWU= 59375\nRXF1aXBtZW50 59376\nRmFu 59377\nVW5pdmVyc2Fs 59378\nCXNvY2tldA== 59379\nIGdyaW4= 59380\nIGV4cG9zZXM= 59381\nIGhhYmVy 59382\nIHNpbmNlcmVseQ== 59383\nIGNhbXM= 59384\nIG3DvA== 59385\nZW5pYQ== 59386\nRW1lcg== 59387\nQ3J5cHRv 59388\nU2xvdw== 59389\nKHhocg== 59390\nIT0o 59391\nLXNlcnZpY2Vz 59392\nIFBX 59393\nIHByZW5kcmU= 59394\nIG3DpGRjaGVu 59395\nZW1vbnM= 59396\n0L7Qt9Cy0YDQsNGJ 59397\nLk1hbmFnZXI= 59398\n7Jk= 59399\nIGdyYWY= 59400\nLXJh 59401\nbWV0cmljYWw= 59402\nL2Zs 59403\nIGNlbWV0ZXJ5 59404\nZ2Vucw== 59405\nIHDFmQ== 59406\nIE15U3FsQ29tbWFuZA== 59407\nLVRv 59408\nIHbDpQ== 59409\nIGFpcnN0 59410\nb21lbnR1bQ== 59411\nIHNlcnZv 59412\nbWlsbGlvbg== 59413\nIE1pcmFuZGE= 59414\nIlNoZQ== 59415\nIGFkdm9jYXRpbmc= 59416\nLWNhcHRpb24= 59417\nIEF0dHJpYnV0aW9u 59418\nIHdlbGNoZQ== 59419\nX3ZlbmRvcg== 59420\nCVN0YXR1cw== 59421\nYXJyaXM= 59422\nIHByaW50aw== 59423\nIiwiIw== 59424\nIHJlbGF0aXY= 59425\naWZmZXJlbmNlcw== 59426\naXp6ZXM= 59427\nIGRlY2ltYWxz 59428\nIFByb3Y= 59429\nLm1heGltdW0= 59430\nQXJu 59431\nIGhlbGljb3B0ZXJz 59432\nX0JPVFRPTQ== 59433\nY2h1cmU= 59434\nb2Rpbmdz 59435\nJyg= 59436\nIikpKTsNCg== 59437\nKGJlYW4= 59438\nLmZk 59439\nRnVuZA== 59440\nIGhhbmdz 59441\nYXBwaWQ= 59442\nL2tlcm5lbA== 59443\nLnBvaQ== 59444\nLk1pblZhbHVl 59445\nLXZhbGlkYXRpb24= 59446\nTHVrZQ== 59447\nY2Rm 59448\nIEZ1bmVyYWw= 59449\nIFNhbXBsZXM= 59450\nCWRl 59451\nIHRvYXN0cg== 59452\nIHRheGFibGU= 59453\nIGNsdXN0ZXJpbmc= 59454\nICdcJw== 59455\nIHJlc3RyYWludA== 59456\nZWNlZA== 59457\nY2hhaW5z 59458\n44CC77yI 59459\nX0dSQVBI 59460\nIGZ1ZWxlZA== 59461\n6ZyA 59462\nSHA= 59463\n5aSN 59464\nVGlsZXM= 59465\nIGF1bnF1ZQ== 59466\nSkM= 59467\nIGhvc3RhZ2U= 59468\nIEVzaw== 59469\nIG1hdg== 59470\nIGdlc3Rpb24= 59471\nIGJhbm5lcnM= 59472\nfXsk 59473\nLmludFZhbHVl 59474\nLiciCgo= 59475\nX01BVFJJWA== 59476\nIGNlYXNlZA== 59477\nIEdPRA== 59478\nX0NBTUVSQQ== 59479\nLkFsbG93VXNlcg== 59480\ndHJhY2tlZA== 59481\nQ29vaw== 59482\nYmFpcnJv 59483\nKGNvbXBhbnk= 59484\nIHZpZXdwb2ludA== 59485\nLmdldFdyaXRlcg== 59486\nIE5ldHM= 59487\nd2l2ZXM= 59488\nICgpKQo= 59489\nZXhhbXBsZU1vZGFs 59490\nCWNoaWxk 59491\nIG15dGhvbG9neQ== 59492\nIC8vIg== 59493\nX2F4ZXM= 59494\naWJvbGQ= 59495\nLkRhcms= 59496\nIE1heHdlbGw= 59497\nIGdwb2ludGVy 59498\nb2xpY2l0dWQ= 59499\nQmF0 59500\ndWxuZXI= 59501\nYmFsYW5jZWQ= 59502\nbWFpbGVy 59503\nIGNvbnRlbXBvcg== 59504\n5omL5py6 59505\nKCJfXw== 59506\nICIpIg== 59507\ncmVhcg== 59508\nIEh1YW5n 59509\nXScpCg== 59510\n16k= 59511\nRlRB 59512\nIENhbGxpbmdDb252ZW50aW9u 59513\nIE91dHB1dHM= 59514\nUGs= 59515\nLlJlZmVyZW5jZQ== 59516\nbGVjdHVhbA== 59517\nICk6Cgo= 59518\nIGJyYWNlbGV0 59519\ndWdlcg== 59520\nCUVycm9y 59521\nU3dlZXQ= 59522\nKCIvIik7Cg== 59523\naHg= 59524\nIHVucmVhc29uYWJsZQ== 59525\nSW50ZXJwcmV0ZXI= 59526\nIGxvZnQ= 59527\nX3Byb2R1Y3Rv 59528\nIHNvY2lldGFs 59529\nLlBhcnNlcg== 59530\nIEFkYXB0 59531\nLmZvbw== 59532\nKHdoZXJl 59533\nLkZlYXR1cmU= 59534\nIFlhbWFoYQ== 59535\nZ2xhc3M= 59536\nRm9yZ2U= 59537\nIHByb2hpYml0cw== 59538\nIGNhcGFjaXRpZXM= 59539\nIO2VqOyImA== 59540\nIHBlcm11dGF0aW9u 59541\nIGlobQ== 59542\nRmxk 59543\nZWxpYWw= 59544\nPT09PT09PT09PT0K 59545\nQENvbmZpZ3VyYXRpb24= 59546\nIGdlYXJlZA== 59547\naW9zbw== 59548\naWVzdGE= 59549\ndHJhbnNsYXRpb25z 59550\nSW5wdXRDaGFuZ2U= 59551\nUG9wdWxhcg== 59552\nIFBMVVM= 59553\nIHZm 59554\nX0ZyZWU= 59555\nYmJveA== 59556\nIGNhdXNhbA== 59557\nUElMRQ== 59558\nIHNjaMO2 59559\nIGlyb25pYw== 59560\nTWly 59561\nLkA= 59562\n5Y2X 59563\nIOiH 59564\nUmV3 59565\ndWxlbmNl 59566\nZmxlbg== 59567\nIGNhbkFjdGl2YXRl 59568\nLXJlc3BvbnNl 59569\nIGFjY2VudHM= 59570\naWdub3JlZA== 59571\nwrBG 59572\nLkRlcGVuZGVuY3lJbmplY3Rpb24= 59573\nCXBvaW50 59574\nIGNvbnRpbmdlbnQ= 59575\nIHNxdWFzaA== 59576\nIHBhcm1z 59577\nIENlbWV0ZXJ5 59578\nIGRlbHRhVGltZQ== 59579\nIERPUw== 59580\nIHZhbmlzaGVk 59581\n0LDRgNCw0LzQtdGC 59582\nIERQUw== 59583\ndGZvb3Q= 59584\nIFp1cw== 59585\nX0lOU1RBTEw= 59586\nR0FO 59587\nIGFyYg== 59588\nIG11bmljaXBhbGl0aWVz 59589\nSW50b0NvbnN0cmFpbnRz 59590\nQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cw== 59591\nLGltYWdl 59592\nX2lnbm9yZQ== 59593\nIGRhbmdlcm91c2x5 59594\ncXVpc2E= 59595\ncGx1Y2s= 59596\nIGhhcnVz 59597\ndXBwZQ== 59598\nSHR0cEV4Y2VwdGlvbg== 59599\nQnJhY2tldA== 59600\nLicnCgo= 59601\nIFRvbA== 59602\nIFZpZXdlcg== 59603\nemJvbGxhaA== 59604\nLkNvZGVBbmFseXNpcw== 59605\nw6xuaA== 59606\nIGNvcnJlY3RhbWVudGU= 59607\nLmRh 59608\nIEFsZ2Vy 59609\n15A= 59610\nYmF1bQ== 59611\nIFBhbnRoZXI= 59612\ncGFydGljaXBhbnQ= 59613\n5b+F 59614\nLXN1cA== 59615\nIGVtdWxhdG9y 59616\nIGZhZGluZw== 59617\nIFdvbHZlcg== 59618\nY3JlYXRlcw== 59619\nIGJvb2tpbmdz 59620\nLlF1ZXN0aW9u 59621\np+ihjA== 59622\nIHN0cmVzc2Vz 59623\nIHJld3JpdHRlbg== 59624\nLlBJUEU= 59625\nZWRlcw== 59626\nIGNiZA== 59627\nIjoiLw== 59628\nIGVuaGFuY2VtZW50cw== 59629\nX3N5 59630\nQklO 59631\nIFNsaXA= 59632\nSW5zcGVjdA== 59633\nIFdlZw== 59634\nIGNvbmdyZWdhdGlvbg== 59635\nIF86 59636\nX3Jt 59637\nRnJhbWVidWZmZXI= 59638\nICcmIw== 59639\nIEZhbGxvdXQ= 59640\nSXNSZXF1aXJlZA== 59641\nIFBlYXJzb24= 59642\nIEZBQ1Q= 59643\nIHJlbGll 59644\nCWJveA== 59645\nIFNoZXBoZXJk 59646\nIFdpa2lMZWFrcw== 59647\nIENvbGxlY3Rvcg== 59648\nIHJlc2l6ZWQ= 59649\nbWV0aG9kTmFtZQ== 59650\nIGV2ZW50VHlwZQ== 59651\nIEF0aGVu 59652\nRGVzY3JpcHRvcnM= 59653\nIGJlcnM= 59654\nLW9wZXI= 59655\nIEluaXRpYWxseQ== 59656\n5aE= 59657\nX0JUTg== 59658\nICAgICAgICAgDQo= 59659\nw6Fi 59660\nX2NhbXBhaWdu 59661\nX3dhdGNo 59662\nRm9yZA== 59663\nLWRhdGVwaWNrZXI= 59664\nIHZpc2M= 59665\nIHNhdHU= 59666\nX3Ntcw== 59667\nIGNvbnRhZG9y 59668\nLXN2Zw== 59669\nIERPSQ== 59670\nJGFyZ3M= 59671\nIGtub2I= 59672\nLkJPTEQ= 59673\nIGRlYmF0ZWQ= 59674\naW1ncw== 59675\nc29ja29wdA== 59676\ndHJ1dGg= 59677\nIEZlZXM= 59678\nIGhXbmQ= 59679\nX2Zvb2Q= 59680\nIGFicmFz 59681\nIG5vdGlvbnM= 59682\nIFRvZA== 59683\nOmNyZWF0ZQ== 59684\nIENvbmZsaWN0 59685\nVXN1YXJpb3M= 59686\nT1RPUw== 59687\nIG1zbQ== 59688\nS0hUTUw= 59689\nKFso 59690\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 59691\nIH1d 59692\nd2l6YXJk 59693\nIG1pZW50cmFz 59694\nIGRhdGFMaXN0 59695\nIGVtZXJnZXM= 59696\nxINuZw== 59697\nLlJlYWRJbnQ= 59698\nUEdB 59699\nSUxMSVNF 59700\nSUVudW1lcmF0b3I= 59701\nKHR1cGxl 59702\nQ2hyaXN0bWFz 59703\nTG9va0FuZEZlZWw= 59704\nb2dlbmVyYXRlZA== 59705\nICMKCg== 59706\nY29udHJvbGxlZA== 59707\nIGV4cXVpc2l0ZQ== 59708\nIGFjZXN0 59709\nUmVhZFdyaXRl 59710\nR2Fpbg== 59711\n44CN44CM 59712\nIGNvcHlyaWdodGVk 59713\nIGRvb20= 59714\nLlRhYmxlTGF5b3V0UGFuZWw= 59715\nIERvcnQ= 59716\nIGNoaWxp 59717\nIHdlcms= 59718\nIEVWRU5UUw== 59719\nIEJlYWNvbg== 59720\nIHNoaXBtZW50cw== 59721\nIHNlYmFnYWk= 59722\ndXBvbg== 59723\ndXRvbQ== 59724\nLmNvbnZlcnRlcg== 59725\nLkRyb3BUYWJsZQ== 59726\nPXt9Cg== 59727\nZmlj 59728\nfgoK 59729\nIGxlc2JpYW5z 59730\nX25h 59731\nRm9yZWlnbg== 59732\nCXRoZW4= 59733\nL21z 59734\nIG9yaQ== 59735\nZ2V0UHJvcGVydHk= 59736\nCXNucHJpbnRm 59737\naGVzaW9u 59738\n44Gk 59739\nIn0sIg== 59740\nIGFjcnlsaWM= 59741\nUGVycw== 59742\nQEVuYWJsZQ== 59743\nSXNs 59744\nKENhcmQ= 59745\nLlN0YWNr 59746\nTGljZW5zZWQ= 59747\nX0dVSUQ= 59748\nOnRpdGxl 59749\nIGh1c3Q= 59750\nIHByaW5jaXBhbFRhYmxl 59751\nYW5pdGl6ZQ== 59752\nL2VtYmVk 59753\nIGVuc3VyZWQ= 59754\nIEVHTA== 59755\n2YjYsQ== 59756\nIOWIhg== 59757\nLywK 59758\nIGZ1bmRyYWlzZXI= 59759\nS2V5TmFtZQ== 59760\nIG1hcmNoZWQ= 59761\nX1ZBTFVFUw== 59762\nIFNjZW5hcmlv 59763\nIG1ldGlj 59764\nX2Fzc29jaQ== 59765\nIFBhc3Rvcg== 59766\nCQkJCQkJCQkJCQkJCQkJCQkJ 59767\nZXJhdGU= 59768\nIGludml0YXRpb25z 59769\ncXVvaXNl 59770\nIGJsYW1pbmc= 59771\nIGRhcmluZw== 59772\nVU1NWQ== 59773\nIHJpY2hlcg== 59774\nZW1ha2Vy 59775\nIElkZW50aWZpY2F0aW9u 59776\nIOyduA== 59777\nIEJpbmRpbmdGbGFncw== 59778\nY2hhcw== 59779\nIHJlc2lsaWVudA== 59780\nX3Bn 59781\nIHJlbGVn 59782\nIElSQQ== 59783\nU1RF 59784\nIHRyYWN0b3I= 59785\nLWxvYWRpbmc= 59786\nIFByZXZpb3VzbHk= 59787\nIFZhY2M= 59788\nL2Jl 59789\nIG7DpXI= 59790\nIHVybGVuY29kZQ== 59791\nIE5vcmZvbGs= 59792\nLlJlbGVhc2U= 59793\nIE5ldXRyYWw= 59794\n5Lit5Zu9 59795\nIEFybGluZ3Rvbg== 59796\nIGFsbGVnZXM= 59797\nIFdyaXRlcnM= 59798\nVGVzdGVy 59799\nIFJhbGx5 59800\nIGPDoQ== 59801\nCVByaW50 59802\nIOKHkg== 59803\nIFVzZXJDb250cm9sbGVy 59804\nIFNlZWtpbmc= 59805\nLlZBTA== 59806\nTGlzdE5vZGU= 59807\nX2Zm 59808\nIFBoaWxsaXA= 59809\nRkFDVA== 59810\nIGNhcmFtZWw= 59811\nIE11bHRpcA== 59812\nIENvbXBhcmVk 59813\nIFNlcmJpYQ== 59814\nn7M= 59815\nIHJldml2ZQ== 59816\nIEthbnll 59817\nIHZlcmdl 59818\nIEJ1bGdhcmlh 59819\nZ2V0Qm9keQ== 59820\nIHw+ 59821\nY2VwaA== 59822\nLkRhdGVUaW1lUGlja2Vy 59823\nLiI7Cgo= 59824\nIFRpZQ== 59825\nLGl0ZW0= 59826\nIG1lbm4= 59827\nR2Fz 59828\nb2NoYQ== 59829\nX3ZpcnR1YWw= 59830\nIG1hc3RlcnBpZWNl 59831\nX3NlcXVlbmNlcw== 59832\nTFRF 59833\nIFN1Ym1pc3Npb24= 59834\nQ2FsbGVy 59835\nJFw= 59836\nU3BvcnQ= 59837\nYWd1cw== 59838\nQ29uc3RyYWludE1ha2Vy 59839\nIGNvbG9j 59840\nIHdpZw== 59841\nINCj 59842\nCUFycmF5 59843\nTG9va3M= 59844\nIEdUQQ== 59845\nLnN0ZXBz 59846\nYXRjaGV3YW4= 59847\nX3Jhbmdlcw== 59848\nZXh0QWxpZ25tZW50 59849\nIEJyZW5uYW4= 59850\nIGFic3RyYWN0aW9u 59851\ndWxlckFuZ2xlcw== 59852\nLm1pc2M= 59853\nIGFudGlib2RpZXM= 59854\nIGV4cG9uZW50aWFs 59855\nIENIQU5ORUw= 59856\nZXhwZW5zZQ== 59857\nJ3k= 59858\nIGRldGVjdGl2ZXM= 59859\nIHB1cnBvcnRlZA== 59860\nWVNURU0= 59861\nIHJhZGlvYWN0aXZl 59862\nIExhdGluYQ== 59863\nLkVuY29kaW5n 59864\nLlRBRw== 59865\neGlu 59866\nRGVncmVl 59867\ndXJhY2lvbg== 59868\ncHJpY2Vz 59869\nIFJlZmVyZW50aWFsQWN0aW9u 59870\nIHJhcml0eQ== 59871\nIHBpbGVz 59872\nZ2VuZGU= 59873\nX3Byb2plY3Rz 59874\nX2dsb2JhbHM= 59875\nLnN0YXJ0VGltZQ== 59876\nIOq1rA== 59877\nU0VDVElPTg== 59878\nX3B1Ymxpc2g= 59879\nRmF1bHQ= 59880\nRERM 59881\nX3ByaW9y 59882\nTW9t 59883\nIHRoaWNrZXI= 59884\nIHNlcXVlbGl6ZQ== 59885\nIGVzc2VudGlhbHM= 59886\nc3RyYXM= 59887\naW50cg== 59888\nPigoKQ== 59889\nLm1hbmFnZW1lbnQ= 59890\nZWls 59891\n6Zet 59892\nQXdhcmU= 59893\nLkNpdHk= 59894\nIEFyYml0 59895\nX0RN 59896\nX2tleWJvYXJk 59897\nTE9iamVjdA== 59898\nLXdlYnBhY2s= 59899\nIE5ld3BvcnQ= 59900\nIHByaW5jaXBhbENvbHVtbg== 59901\nbGVnYW50 59902\nIHBhbGxldA== 59903\nIGZyYWN0dXJl 59904\nIGdtYWls 59905\nLk1ldGE= 59906\nQWJvdmU= 59907\nLktleUV2ZW50 59908\naml0 59909\nX21hY3Jv 59910\nX1BVU0g= 59911\n4bup 59912\nL2NvbnRyb2xsZXI= 59913\n5Yqg6L29 59914\nIHN1cGVyZmljaWFs 59915\nZXh0ZXJpdHk= 59916\nIG1lbnNhZ2Vt 59917\nV2luZA== 59918\naXN0b24= 59919\nLm9wZW5hcGk= 59920\n0LjRgNC+0LI= 59921\nIFNlcmlhbGl6ZXI= 59922\ndWN0aXZl 59923\nIHphcg== 59924\nUGxhY2Vz 59925\nLlN0YXRpYw== 59926\nQmE= 59927\nIGluYWR2ZXJ0 59928\nIEluZG9uZXNpYW4= 59929\nX0lQVg== 59930\nKGhvcml6b250YWw= 59931\nIGdldFRpdGxl 59932\naWRlcHJlc3M= 59933\nIENvbnNvbGVDb2xvcg== 59934\naXBlcnM= 59935\nJG91dA== 59936\nIGZlc3RpdmU= 59937\nIGV2ZW5pbmdz 59938\nLkdldERhdGE= 59939\ndWl0a2E= 59940\nIE1hbnVhbHM= 59941\ndXNzZWQ= 59942\nX01heA== 59943\nLkNoYXQ= 59944\nIEFpcmNyYWZ0 59945\nPWNvbQ== 59946\nRk9VTkQ= 59947\nYXBybw== 59948\nIHRyZWFzdXJlcw== 59949\nX2FsaXZl 59950\nIGdhZGdldA== 59951\nZWtpbmc= 59952\nQnV0dG9uRG93bg== 59953\nQnJvd3NhYmxl 59954\nLlBFUk1JU1NJT04= 59955\nUEFTU1dPUkQ= 59956\nIEhBU0g= 59957\nZsOp 59958\nXFRlc3RDYXNl 59959\nTE9TUw== 59960\nb3RoZXJz 59961\nLEo= 59962\nIGFzc2hvbGU= 59963\nd2Vyaw== 59964\nIG3Dow== 59965\nLmll 59966\nZXZpbA== 59967\na29udGFrdGU= 59968\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 59969\nPXN5cw== 59970\nCWxvY2s= 59971\nLS07Cgo= 59972\nX0ZVTg== 59973\nRmlsbENvbG9y 59974\nw7Nh 59975\ncHJlbmQ= 59976\nIGNvbXByZXNzb3I= 59977\nTW90aGVy 59978\nIEFyY2hlcg== 59979\nLmdvdG8= 59980\nIHfDvHJkZQ== 59981\nIGJhbWJvbw== 59982\n77yO 59983\nIFRyZWVz 59984\nIGJ1bXBlcg== 59985\nIHNhdXNhZ2U= 59986\nIEVsYXN0aWNzZWFyY2g= 59987\nIGhvcml6b250YWxseQ== 59988\nIEd1bA== 59989\nSW1tdXRhYmxl 59990\nIGxvc2Vy 59991\nIGFib3J0ZWQ= 59992\nLWRlbW8= 59993\nIEhhdGNo 59994\nIHVuZGU= 59995\nIHByb2Nlc3Nv 59996\nLWNhbGw= 59997\nSW5jb21l 59998\n5YM= 59999\nX3JldHVybnM= 60000\nJ10uIic= 60001\nKHN3 60002\nQ0JT 60003\nYW1pbGllcw== 60004\nIFlvdXJzZWxm 60005\nIEhvbHQ= 60006\nLk1PTg== 60007\n4KeH 60008\n0YjQtQ== 60009\nYW5vbg== 60010\nIEZvbnRBd2Vzb21l 60011\ncHJvZHVjZXI= 60012\nanI= 60013\nIG1hdQ== 60014\nCWludGVy 60015\nIGRpc2hvbmVzdA== 60016\nIG1hZ25h 60017\nIENvbGxlY3RpdmU= 60018\nIHZyYWltZW50 60019\nIGNob2l4 60020\nc3RheQ== 60021\nIHdlbGRpbmc= 60022\ncmlzaW5n 60023\nLG1pbg== 60024\nIEZhdGU= 60025\nZ2xvYg== 60026\nUkdCQQ== 60027\nIGRldHRl 60028\nVmVu 60029\nIGVtYmFycmFzc21lbnQ= 60030\nLkRFTEVURQ== 60031\nZ3JlZ2Fy 60032\nLXJlbmRlcg== 60033\nKGJ1Y2tldA== 60034\nIj4KCgo= 60035\nLndhaXRLZXk= 60036\nQnVzeQ== 60037\nIGRpZmZlcmVudGlhdGlvbg== 60038\nIENTVA== 60039\nLkNvbnN0YW50 60040\nIGxpbmVOdW1iZXI= 60041\nKG1hdGNoZXM= 60042\nIHdlYnNvY2tldA== 60043\nIGJhcnJlZA== 60044\nIHB1ZWRlcw== 60045\nTW9ubw== 60046\nQ09SRQ== 60047\nSUlE 60048\nICAgIA0KDQo= 60049\nIHDDumJsaWNv 60050\nbGVhbmluZw== 60051\nIGNsZWFuc2luZw== 60052\nIGNyaXM= 60053\nIERldmlscw== 60054\nX1NFVFRJTkc= 60055\ndW50YXJ5 60056\nLik7Cg== 60057\nCiAgIAo= 60058\nW2N1cnI= 60059\ndHN5 60060\nIEFsZXhpcw== 60061\ncml0ZWw= 60062\nIHBldHJvbGV1bQ== 60063\nLnByZXByb2Nlc3Npbmc= 60064\nbWF0dGVy 60065\nRm9yUmVzdWx0 60066\nLWxpY2Vuc2U= 60067\nIHRyYXZlbGxlcnM= 60068\nIERpc3BhdGNoZXI= 60069\nZW5uaWZlcg== 60070\nIGRpZ2VzdGl2ZQ== 60071\nUEVE 60072\naGliaXRpb24= 60073\nTUFTQ29uc3RyYWludE1ha2Vy 60074\nIFdhdHQ= 60075\nQmVuZWY= 60076\nLnNldFZpZXc= 60077\nZHRv 60078\nVEVF 60079\nIFBlbG9zaQ== 60080\nX0VYVFJB 60081\nIG1lZGFscw== 60082\neGhy 60083\nZm9yZWNhc3Q= 60084\nIG5hcmdpbg== 60085\nb3Vucw== 60086\nLWZpbGw= 60087\nX0NVUlNPUg== 60088\nIHN1cGVydmlzZWQ= 60089\nIHR1cmY= 60090\nIEVkZ2Fy 60091\nUE9TSVRJT04= 60092\nIGNhdGVnb3J5SWQ= 60093\n4ok= 60094\nX0VS 60095\n4bunYQ== 60096\nU2hvd24= 60097\nLmxs 60098\nX1BPTElDWQ== 60099\nKCksJw== 60100\nIFByZXY= 60101\nIFN0cmluZ0ZpZWxk 60102\nCUdsb2JhbA== 60103\nYXNzZWQ= 60104\nVGhyb3VnaG91dA== 60105\nb3N0cmluZ3N0cmVhbQ== 60106\nLmF3dGV4dHJh 60107\nIHNsb3Blcw== 60108\nIFNlcXVlbnRpYWw= 60109\nIGdpb3Ju 60110\nIHplbGY= 60111\nIHZlcnNhdGlsaXR5 60112\nbGVuZWNr 60113\nLmNnaQ== 60114\nIGRvdWJsaW5n 60115\nIEJhbmdrb2s= 60116\nIGJ1dXJ0 60117\nIHVzdcOhcmlv 60118\nc3R1ZGlv 60119\nIGpldW5lcw== 60120\nIG11dGVk 60121\nIGlwcw== 60122\nX2ZyYWN0aW9u 60123\nJiYo 60124\nIHN0dW50 60125\nJyk7Pz48Lw== 60126\nIExpZ2E= 60127\nIHF1YWxpdMOp 60128\nQXNzaWduYWJsZQ== 60129\nIHdvcmthcm91bmQ= 60130\nIHNwdXI= 60131\nIHNsZXc= 60132\nX0dF 60133\nIEFncmljdWx0dXJhbA== 60134\nIHJlbGVudGxlc3M= 60135\nKFF1ZXJ5 60136\nIFNlY3Rpb25z 60137\nIHJldmlld2Vycw== 60138\nUmFpbg== 60139\nZGxn 60140\nYXNzZXJ0RmFsc2U= 60141\nIG5vbWluZWVz 60142\nX18pLg== 60143\nLmR5bmFtaWM= 60144\nIFBCUw== 60145\nQ2hhbmdpbmc= 60146\nIHNsaWdodGVzdA== 60147\nIE1hbmc= 60148\nfT4NCg== 60149\nIGV2YXBvcg== 60150\nYmFibGU= 60151\nIFBSSUNF 60152\nIOaz 60153\nbHVjZW50 60154\nIHZhbXA= 60155\nIFRlY2huaWNpYW4= 60156\nIHVuaXF1ZW5lc3M= 60157\nTWVz 60158\ndXJiYW4= 60159\nLnBhcmFtZXRyaXpl 60160\nIFJlcGxheQ== 60161\nU2Vzc2lvbnM= 60162\nZW1icg== 60163\nLUFtZXJpY2Fucw== 60164\nX1BST1hZ 60165\nIHBpYW4= 60166\nIHRyaWU= 60167\nIERlc3RydWN0b3I= 60168\nR2FtZVN0YXRl 60169\nIElNRg== 60170\nY2hpbg== 60171\nIHBvcnRl 60172\nIFN3YWw= 60173\n5Z+O 60174\nU3Vic3RyaW5n 60175\naW1pbmc= 60176\nL0xpYnJhcnk= 60177\nIGZyaWdodGVuZWQ= 60178\nd3JpdGVz 60179\nIHJlY3Vyc29z 60180\nYXJSZXN1bHQ= 60181\nX0lOSVRJQUxJWg== 60182\nIEJhZGdl 60183\nX2NyYw== 60184\nRWlnaHQ= 60185\nIERJU1RJTkNU 60186\nIHRocm8= 60187\nQFhtbA== 60188\nIExlZ2VuZGFyeQ== 60189\nLXR3aXR0ZXI= 60190\nX2Vhc3k= 60191\nICsrKw== 60192\nKERBVEE= 60193\nLkxvY2FsZQ== 60194\nIGvDpA== 60195\nIG51cnQ= 60196\nIGNydWlz 60197\nX2lvcw== 60198\nIHNlbnNpbmc= 60199\nX0xpbmU= 60200\nCiAgICAgICAgICAgICAgICAgICAgCg== 60201\ncG9uZw== 60202\nb2xlb24= 60203\nIHdpbGRjYXJk 60204\n55So5oi35ZCN 60205\nIGJlZ2dpbmc= 60206\nUm9k 60207\nIMOO 60208\nX0NFTEw= 60209\nUmVzZWFyY2hlcnM= 60210\nLnNlbGVjdG9y 60211\nX2luZw== 60212\nIGFzcGlyaW5n 60213\nIGltbW9ydGFs 60214\nIHltaW4= 60215\nX3JvYm90 60216\nIHBsdXI= 60217\nQlRD 60218\nIERJRA== 60219\nIHBpZXJjaW5n 60220\nKnU= 60221\nX0RFRklORUQ= 60222\nIFRoaQ== 60223\naXRhaXJl 60224\nKG1lZGlh 60225\nLW9ucw== 60226\nIGNoZWZz 60227\nICIqLg== 60228\nL0FQ 60229\nIHJhem9y 60230\nIHNlYXJjaERhdGE= 60231\nID0m 60232\nIOOAgg== 60233\nIG1vdXJu 60234\ndGluZ2hhbQ== 60235\nIG9saQ== 60236\nIFZlcm5vbg== 60237\nX1JT 60238\nnuaApw== 60239\nIGbDoWNpbA== 60240\nYW5nZW4= 60241\nY2VsYWlu 60242\nIGFpbA== 60243\nbGVzdA== 60244\nIFFDT01QQVJF 60245\nZ2Fpbg== 60246\nIM61 60247\nIEtvYg== 60248\nIEZhdWx0 60249\nX2NvbmZpZ3M= 60250\n57uT5p6c 60251\nLis= 60252\nY2FsYXI= 60253\nKGNvbG9ycw== 60254\nTXVs 60255\nX0FSVA== 60256\nIGV4cGVyaW1lbnRpbmc= 60257\nZXJtZW4= 60258\nIEFuZ2xv 60259\nLkZpeGVkU2luZ2xl 60260\nU2Vh 60261\nIGN0eHQ= 60262\nLnNsaWRlcg== 60263\nQ29sbGFwc2U= 60264\nR3JleQ== 60265\nIGZsZA== 60266\nLXByb29m 60267\nLmNhcGFjaXR5 60268\nZ2V0UGFyZW50 60269\nIENvbXBsaWFuY2U= 60270\nIGJ1cmds 60271\nLXJlYw== 60272\nIG92ZXJ3cml0dGVu 60273\nTVU= 60274\nIHJvdXRlcnM= 60275\nCU1vZGVs 60276\nIGZhbnRhc2llcw== 60277\nYXZpYW4= 60278\nX3ByZWM= 60279\nIFNjYW5kaW4= 60280\nIC8vPA== 60281\nL29jdA== 60282\nIGNlcmVtb25pZXM= 60283\nTW9udGhz 60284\ndW5keQ== 60285\nIHF1ZWQ= 60286\nIE5vdQ== 60287\nIFZpYnI= 60288\nLnJnYg== 60289\nIGNpdHJ1cw== 60290\nIGJyYWNlcw== 60291\nLXVwcGVyY2FzZQ== 60292\nZ2V0VGFibGU= 60293\nIGRvcG8= 60294\nIEtlcnI= 60295\nX0NISUxE 60296\nLWNsb3Vk 60297\nCU1hdHJpeA== 60298\nIGdhcmRlbmluZw== 60299\nU2luZw== 60300\nYWxtb3N0 60301\nUmVxdWlyZW1lbnRz 60302\ndWd1YXk= 60303\nKFByb3BlcnR5 60304\nc3Vic2NyaWJlcg== 60305\nRkFTVA== 60306\ncmVhY3Rpb24= 60307\nKGxw 60308\nKX0pCg== 60309\nYCku 60310\nLndhbGxldA== 60311\nX2V4Y2hhbmdl 60312\nLk1heGltdW0= 60313\nIFZlcmI= 60314\n4pSB 60315\nKCk8 60316\n77ybCg== 60317\nUk9U 60318\nQ0FSRA== 60319\ndWJpdA== 60320\ne0A= 60321\nX2tlbA== 60322\nIFRvb2x0aXA= 60323\nTXlTUUw= 60324\nTWFpbkFjdGl2aXR5 60325\nYXJm 60326\nIG1hbGlnbg== 60327\nIHNlaW5lbg== 60328\nYXBpc3Q= 60329\nIDwl 60330\nTWV0aG9kSW1wbA== 60331\nTWls 60332\nIE1pY2s= 60333\nLmRlcGVuZA== 60334\nPElE 60335\nIHByZWRpY3RpdmU= 60336\nIEFQUExJQ0FUSU9O 60337\nbGVm 60338\nZGltZW5zaW9ucw== 60339\nIGNvbm9jZXI= 60340\nL2NvbmY= 60341\nIFRyYWN5 60342\nRm90bw== 60343\nX3JlbWFpbmluZw== 60344\nPWZpbGU= 60345\nIHBhZ2VJbmRleA== 60346\nIFBhcmlzaA== 60347\nIHRleGFz 60348\nIE1BR0lD 60349\nIEhldw== 60350\nZGlmZmVyZW5jZQ== 60351\nIGFsdHVyYQ== 60352\nY3Vt 60353\nCWRhdGFUeXBl 60354\nIGNhcmFjdGVyZXM= 60355\nYXZpb3Vycw== 60356\nIFZPSUQ= 60357\n6L+R 60358\nUFVCTElD 60359\nQmlv 60360\nIHN0cmluZ0J5QXBwZW5kaW5n 60361\nUGFyc2VFeGNlcHRpb24= 60362\nIFN1ZmY= 60363\nIE5vcnRvbg== 60364\nL2RldGFpbHM= 60365\nLm51bGw= 60366\nPj4m 60367\nCW9r 60368\nLWxvdw== 60369\nLnVzdWFyaW8= 60370\nbmVzdGVk 60371\nWEI= 60372\nT1VSUw== 60373\nLkJvcmRlckNvbG9y 60374\nIGJyb3c= 60375\nINCV 60376\nY29ycg== 60377\nIFJlZHNraW5z 60378\nLmdldFRhZw== 60379\nLmdldFRyYW5zYWN0aW9u 60380\nIHN0aWdtYQ== 60381\naGFyZHQ= 60382\nIFBsYXllclByZWZz 60383\nYWxzeQ== 60384\ndWNzb24= 60385\nTGFuZ3VhZ2Vz 60386\nIE9saXZpYQ== 60387\nIHRhYw== 60388\nIGJsaQ== 60389\nIGNhdmFs 60390\nIGNvbnNvbGlkYXRlZA== 60391\nIHBlcmls 60392\nIGRlbGU= 60393\nIGZvcm11bGF0ZWQ= 60394\nIGhpZ2h3YXlz 60395\nLnNwYXdu 60396\nPT0k 60397\nIE5pZXQ= 60398\nIHZlZ2dpZXM= 60399\neXBv 60400\nLXJ1bGU= 60401\nIFZpZQ== 60402\nL2VwbA== 60403\nIGVuZmFudHM= 60404\nc3RyaW5nTGl0ZXJhbA== 60405\nIHRvdWdoZXN0 60406\nYnV5ZXI= 60407\nIGNvdmFyaWFuY2U= 60408\nIGlsaQ== 60409\nIFNvcGhpZQ== 60410\nIEJBQg== 60411\nICIpLA== 60412\nIFVr 60413\nY3VycmVudEluZGV4 60414\nX3VzZXJkYXRh 60415\nLmNvZGVj 60416\nIFB1bmphYg== 60417\nIFNOUA== 60418\nbG9s 60419\nYWR2YW5jZQ== 60420\nIGNvbWZ5 60421\nSnNvbklnbm9yZQ== 60422\nIGZhc2hpb25hYmxl 60423\nIElDT04= 60424\nIG9yYQ== 60425\nIFByaWNpbmc= 60426\nPG51bQ== 60427\nIElSQw== 60428\nRVJW 60429\nIE1laW4= 60430\nIElEaWN0aW9uYXJ5 60431\nQURPVw== 60432\naXNOZXc= 60433\nIERldm9u 60434\nYXRs 60435\nKHJlcXVlc3RDb2Rl 60436\nCVByZXBhcmVkU3RhdGVtZW50 60437\nSU1QT1JU 60438\nIG1hcml0YWw= 60439\nX1NFTEVDVEVE 60440\nZ2V0UmVzcG9uc2U= 60441\nYXJEb3du 60442\nQlY= 60443\naWJOYW1l 60444\nIFBBVENI 60445\nw6TDpG4= 60446\nIGRhYXI= 60447\nIEZpbGVNb2Rl 60448\nIG1hcnR5 60449\nLlNwcmluZ0FwcGxpY2F0aW9u 60450\nY2VuZQ== 60451\nYW1wb2xpbmU= 60452\nZ2V0U2l6ZQ== 60453\nUmVzdGFydA== 60454\n5pWI 60455\nLnByb2plY3Rz 60456\nIEV0aGlvcGlh 60457\nIHN0YXR1c2Vz 60458\nVElPTg== 60459\nKGJn 60460\nIFh1bml0 60461\nVGVtcG9yYXJ5 60462\nIEVuZ2FnZW1lbnQ= 60463\nIHhm 60464\nIHByb3hpZXM= 60465\nIGdlbmVzaXM= 60466\nUGFnZXJBZGFwdGVy 60467\nIFNsYXZl 60468\nIHN1bmdsYXNzZXM= 60469\nIENobG9l 60470\nIGtvamk= 60471\nYWRlbQ== 60472\nCUpTT05PYmplY3Q= 60473\nzrM= 60474\nIGhvcnM= 60475\nKnc= 60476\nw7Ny 60477\nZXNjaA== 60478\nIGNyaXRpY2lzZWQ= 60479\nemlhbA== 60480\nIFNhbGVt 60481\nLlZlcnRpY2Fs 60482\nIFJhc2g= 60483\nPkU= 60484\ndGVyaW5n 60485\nL3NjcmVlbnM= 60486\nIGhlaWdodGVuZWQ= 60487\n0LDRgNGC 60488\nQXV0aG9yaXRpZXM= 60489\nX2Jib3g= 60490\nw7xuc3Q= 60491\nLmZvbnRTaXpl 60492\nIEJPT0xFQU4= 60493\nZGl2aWRl 60494\nIFNsb3Zlbg== 60495\ndWNlcg== 60496\n2ZI= 60497\nc3R1Yg== 60498\nIG5hdmlnYXRpbmc= 60499\nOmFuaW1hdGVk 60500\nX05PVw== 60501\nX3ZlY3Q= 60502\nfXsK 60503\nQCg= 60504\nIHRlbGVjb20= 60505\nIGNvbnRyYWN0aW5n 60506\nIEFzc2FuZ2U= 60507\nIGV4dHJhY3Rpbmc= 60508\nIGdyw7Y= 60509\nY29icmE= 60510\nLkRJUw== 60511\nIGNyYWI= 60512\nIHR3aXRjaA== 60513\nIHZlcnRz 60514\nIHJlamVjdHM= 60515\nCWZvcm1hdA== 60516\nIHJlZ2VuZXJhdGlvbg== 60517\nLlN5cw== 60518\nc29sdmU= 60519\nCWRpYWxvZw== 60520\nc2hp 60521\nbWV0ZXI= 60522\nKGJlc3Q= 60523\ndmFsaWRhdG9ycw== 60524\nIG9ud2FyZHM= 60525\nIGd1cnU= 60526\nIG1vZGVyYXRvcg== 60527\nb3dpZWQ= 60528\nZXhwZXJpbWVudA== 60529\ncnVi 60530\nIG1xdHQ= 60531\nIENhdWNhcw== 60532\nIG5hdGlvbmFsaXNt 60533\nIG1hbmdl 60534\nCUltR3Vp 60535\nL0VkaXQ= 60536\nIGluaA== 60537\nIGludGVsbGln 60538\nZXJva2Vl 60539\nCWV4cG9ydA== 60540\nIGRpc2NyaW1pbmF0ZQ== 60541\nc3VidHJhY3Q= 60542\nIE1vb2RsZQ== 60543\nZW5zZXI= 60544\nIEd1aWRlcw== 60545\nUkFQ 60546\nLWhvdA== 60547\nX2dycA== 60548\nLnBpY3R1cmU= 60549\nWEE= 60550\nIGluaXRWaWV3 60551\nX0NvbW0= 60552\nIG92ZXJkb3Nl 60553\nICsKCg== 60554\nIFNpbGVudA== 60555\nc2hvd3M= 60556\nIGludGVycG9sYXRl 60557\nRm9ybWF0aW9u 60558\nIGJpc2M= 60559\nbWFya2V0cw== 60560\nKFND 60561\nWmU= 60562\nIE5ldHdvcmtpbmc= 60563\nIGFkcmVuYWw= 60564\nIEd1bnM= 60565\nZXRlb3I= 60566\nRGVjbGFyZWQ= 60567\nb3JnZXRvd24= 60568\nIGthcmVuYQ== 60569\nL3Bhc3N3b3Jk 60570\nX2FkZHJlc3Nlcw== 60571\nSVRFUkFM 60572\nQnV6eg== 60573\nIENvbndheQ== 60574\nKGNhc2U= 60575\nUFdE 60576\naGVpcm8= 60577\nKGFjdA== 60578\nKioNCg== 60579\nKCkpOwoKCg== 60580\nIGFudg== 60581\nIC4uCgo= 60582\nKE1lbnVJdGVt 60583\nKG1haWw= 60584\nX3NlY3Rpb25z 60585\nCW5ldA== 60586\nIHBsdXQ= 60587\nIHdyZW5jaA== 60588\nL29iamVjdA== 60589\nIElzdA== 60590\nIFZJUw== 60591\nL3B1Yg== 60592\nYWx0ZW4= 60593\nIGd1aXRhcnM= 60594\nIGFudGliaW90aWM= 60595\n77yW 60596\nwrk= 60597\nICIrIg== 60598\nZm9ybXVsYQ== 60599\nIGJhYmVz 60600\nIFByb21wdA== 60601\nIGVuaW0= 60602\nL3BsYXllcg== 60603\nCXJlZg== 60604\nIGJ5xIc= 60605\nIGNvbnN1bWVz 60606\nIEhhc3Q= 60607\nIFRhbw== 60608\nICcpKQo= 60609\nIGNsYW0= 60610\nIHRoaWdocw== 60611\nIG1vdGlm 60612\nQXBpT3BlcmF0aW9u 60613\nIFdM 60614\nZ2V0Qw== 60615\nCWZsYWdz 60616\nb2ludG1lbnRz 60617\nIGVjb25vbWljYWw= 60618\nbmVlZGxl 60619\neGxz 60620\ncHJhY3RpY2U= 60621\ndXR6ZXI= 60622\ndGltZW9mZGF5 60623\nLW91dHB1dA== 60624\nIGZpbmRCeUlk 60625\nIEJ1ZGR5 60626\n0J7Rgg== 60627\nU2V2ZW4= 60628\nIEJhcms= 60629\nIGVudm95 60630\nX2FsZ29yaXRobQ== 60631\n5Yip 60632\nIGJhbGxpc3RpYw== 60633\n56e7 60634\ncmFkZXM= 60635\nCWRvYw== 60636\ncm9kdWNpbmc= 60637\nIEVhdGluZw== 60638\nVW5tb3VudA== 60639\nL2RhdGFUYWJsZXM= 60640\nX2JvbnVz 60641\nIGxpdHQ= 60642\ncHBz 60643\nKWxvY2FsT2JqZWN0 60644\ncGVyZg== 60645\nIEhlbHZldGljYQ== 60646\nc2h1dGRvd24= 60647\nL21s 60648\nLnRva2Vucw== 60649\nIEhhcmRjb3Jl 60650\nLHJvdw== 60651\nL2Jn 60652\nU2NhbGVy 60653\n4oCUYXM= 60654\nX2xvZ2l0cw== 60655\n4oCZaW50 60656\nCUFwcA== 60657\nSW1wbGljaXQ= 60658\nLkZwcmludGY= 60659\nRVRP 60660\nIHRlcnJh 60661\nIHBvc3Nlc3Npbmc= 60662\nLnJzdHJpcA== 60663\nLCks 60664\nPXllcw== 60665\nIFN0cmlwZQ== 60666\nPz0= 60667\nbmV1dHJhbA== 60668\nLmdvb2Q= 60669\nIGtlbm5lbg== 60670\nIFN1bmc= 60671\nZmF1bHQ= 60672\neXN0YXRlY2hhbmdl 60673\nQ2FuYWRpYW4= 60674\nJywnIi4k 60675\nIE1pdHM= 60676\nw6ZuZA== 60677\nIFNUUlVDVA== 60678\nIFVSTFdpdGhTdHJpbmc= 60679\nIENvbXBhc3M= 60680\nIC0tCgo= 60681\nIE5TTGF5b3V0Q29uc3RyYWludA== 60682\nfG1pbg== 60683\nLWFkanVzdA== 60684\nIHJlYnVpbHQ= 60685\nTElHSFQ= 60686\nL3Nl 60687\nLW1vdW50 60688\ndnBu 60689\ndmFsaWRhdGVk 60690\nKFFPYmplY3Q= 60691\nIGlnbml0aW9u 60692\nIENoYXJnZXJz 60693\nUllQVE8= 60694\nXWluaXRXaXRoRnJhbWU= 60695\nIEZsdWlk 60696\nIGNhZHJl 60697\nIG5vbWluYXRpb25z 60698\nTmVpbGw= 60699\nIEhvdQ== 60700\nIGN1cnJlbnRz 60701\nX2dlbmU= 60702\nKGlucA== 60703\nUGFyaXM= 60704\nesSZ 60705\nYWdncmVnYXRl 60706\nIGFzc29j 60707\nd2VldGVk 60708\nZXJyYXQ= 60709\n4oCTCgo= 60710\nICcvJywK 60711\nZml4dHVyZQ== 60712\nIEhpZ2hlc3Q= 60713\nYW1iaWVudA== 60714\nIGNobW9k 60715\nIGNvbnRl 60716\nIHNlbnN1YWw= 60717\nIGdhcm1lbnQ= 60718\nemVycw== 60719\nIFBvd2VyZWQ= 60720\nZG9tYWlucw== 60721\nUmV3YXJk 60722\naW9tYW5pcA== 60723\nIGNvY2twaXQ= 60724\nb3V0ZmlsZQ== 60725\nIGJ1aWx0aW4= 60726\nIGluc2lzdGluZw== 60727\nLnZhcnM= 60728\nemlwY29kZQ== 60729\nIO+/ve+/ve+/ve+/vQ== 60730\nZmFpbHM= 60731\nIGNvbnNvbGlkYXRpb24= 60732\nX29pZA== 60733\nUGxhbmV0 60734\nID0iLA== 60735\nCWVs 60736\nVUlMVA== 60737\nw6R0eg== 60738\nYWZhcmk= 60739\nIE1jQ2w= 60740\nVGltZWxpbmU= 60741\nRXN0YQ== 60742\nIGZyYW0= 60743\nWUU= 60744\nIGNlcmVicmFs 60745\nT2ZNb250aA== 60746\nIFByZWdu 60747\nINC60LvQsNGB0YE= 60748\nICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCg== 60749\nIEZyZXM= 60750\nQXBwcm92ZWQ= 60751\nLlNwZWNpYWw= 60752\nIFByb3Rlc3RhbnQ= 60753\nIGFsbGVyZ3k= 60754\nX3BjbQ== 60755\nCUNvcHlyaWdodA== 60756\nIHN1cGVyQ2xhc3M= 60757\nInN0cmNvbnY= 60758\nIE1vaGFtZWQ= 60759\nICcvLw== 60760\nRm9yZUNvbG9y 60761\nQXJ0aHVy 60762\nIEp1bmdsZQ== 60763\nIHZlaW5z 60764\nU2Fk 60765\nIGJhY2t1cHM= 60766\nIE9waW5pb24= 60767\nw7t0 60768\nIGludGVybWl0dA== 60769\nb2R5bg== 60770\nIENocmlzdGluYQ== 60771\nIGFuZHJl 60772\nIGV2YWN1YXRpb24= 60773\ncGFsZXR0ZQ== 60774\naG9yc2U= 60775\nIFJlc2lkZW50 60776\nIEhhc3Nhbg== 60777\nLk5pbA== 60778\nIGFpc2xl 60779\nIEdyb3dpbmc= 60780\nIGJsb2dpbmZv 60781\nL3NxbA== 60782\nX2lvY3Rs 60783\nU2NhbGluZw== 60784\nIE1vbmFk 60785\nX2NwcA== 60786\nIEh1dGNo 60787\nIEFwcGxlV2ViS2l0 60788\nRXhwZW5zZQ== 60789\nX0pPQg== 60790\nIHBvaW50bGVzcw== 60791\nRnJvbUJvZHk= 60792\nYW50YWw= 60793\nIGRlcGljdGluZw== 60794\nIENFTEw= 60795\nIHJlZmlu 60796\nIENOQw== 60797\n7LmY 60798\nX2RpbWVuc2lvbnM= 60799\nIFNBTg== 60800\nIGFmdA== 60801\nIGZvb3RzdGVwcw== 60802\nY2NvbGk= 60803\nX1BIT05F 60804\nL21hdGg= 60805\nLWtpbmQ= 60806\nIE1lYW5z 60807\naWNoYWVs 60808\nLmd1bmE= 60809\nIGluYXVndXJhdGlvbg== 60810\nLWRyaXZpbmc= 60811\nKGRlbGV0ZQ== 60812\nIHRvdGFsQ291bnQ= 60813\nX01D 60814\nLkV4dGVuc2lvbg== 60815\nQ29tbWVyY2lhbA== 60816\nIHpJbmRleA== 60817\nPEN1c3RvbWVy 60818\nImc= 60819\nLXNoYXJl 60820\nIHBhY3Q= 60821\nYWdhcmE= 60822\nIFNJTA== 60823\nX21vZGVz 60824\nIE1vbGVjdWxhcg== 60825\nIHN5c3RlbWF0aWNhbGx5 60826\nPEc= 60827\nX3Njcg== 60828\nIE9ybw== 60829\nYXNlcnM= 60830\nIGJpYw== 60831\nIGRlc3Ryb3lz 60832\nUElQRQ== 60833\nLlN0YXJ0UG9zaXRpb24= 60834\nIGPhu6dh 60835\naXJleg== 60836\nLkJ1bmlmdQ== 60837\nX0Z1bmN0aW9u 60838\nIHPDvA== 60839\nX2Z1dHVyZQ== 60840\nIFdlYWx0aA== 60841\nIE5hdHVyYWxseQ== 60842\n5oC7 60843\nX3llcw== 60844\nIGFicnVwdGx5 60845\nU3RyaW5nRW5jb2Rpbmc= 60846\nIENHUG9pbnRNYWtl 60847\nIHpo 60848\nIGltcGVyc29u 60849\nIHBpdm90YWw= 60850\nIFNvbWFsaWE= 60851\nIHNlZ21lbnRhdGlvbg== 60852\nX0FOQUw= 60853\nIExvZ2luQ29tcG9uZW50 60854\nQ29uc3VsdA== 60855\nIHRydW5jYXRlZA== 60856\nXSI7Cg== 60857\nLmdldENvbmZpZw== 60858\nIGludGVybnNoaXA= 60859\nQmFieQ== 60860\n6rCc 60861\nIHN0cmVuZ3RoZW5lZA== 60862\nX01J 60863\nYmFza2V0 60864\nIG5pY2h0cw== 60865\nIFRWcw== 60866\nIFNoYW4= 60867\n44K1 60868\ncmFjdXNl 60869\nLlJlTFU= 60870\nL2ludGVyZmFjZXM= 60871\nIGdldEl0ZW1Db3VudA== 60872\nIHJldGlyaW5n 60873\nIHNwZWNpYWxz 60874\nIGVudGl0eU1hbmFnZXI= 60875\nYmVsaWVm 60876\nIHNvbGRlcg== 60877\nZGF1Z2h0ZXI= 60878\naWprbA== 60879\nIHV0aWxpemVz 60880\nLmZpeGVk 60881\nU1U= 60882\nIGRyYXN0aWM= 60883\nIGhhY2tz 60884\nZ3J1bmQ= 60885\nIE1V 60886\nIFN0YXJ0ZXI= 60887\nLkNvbXBvbmVudHM= 60888\nX21vdG9y 60889\nR29sZGVu 60890\nIGxvZGdl 60891\nICkpOw== 60892\nIENvcmludGg= 60893\n0LjRh9C10YHRgtCy0L4= 60894\nw7NuaWNv 60895\nZ3JlU1FM 60896\nIEZsdWVudA== 60897\nIG1hcmM= 60898\nLkxvYWRTY2VuZQ== 60899\nLkdyb3Vwcw== 60900\nIGVyaA== 60901\nIEF1dHVtbg== 60902\nU3RvcHBlZA== 60903\nIGl0YWxpYW5v 60904\nIG1pbmlvbnM= 60905\nIEFzc2VydGlvbnM= 60906\nIG11eA== 60907\nQnU= 60908\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 60909\nCXVw 60910\ncmVhZHlzdGF0ZWNoYW5nZQ== 60911\nX01ldGE= 60912\nIGN1cnJlbnREYXRl 60913\nIENoYXBtYW4= 60914\nVW5kbw== 60915\nU2Vhbg== 60916\nYXBy 60917\nIHBhcm0= 60918\nX2ljb25z 60919\nIFN0YQ== 60920\nw6F6 60921\nIHN1YmRpdmlzaW9u 60922\nIGFsdGVyaW5n 60923\nUE5H 60924\ncG9uZW50aWFs 60925\nIHBvc3RncmVz 60926\nIEJEUw== 60927\nLWV4aXN0ZW50 60928\nIEJyYWRmb3Jk 60929\nIE9NWA== 60930\nX1dISVRF 60931\nX1BST0dSQU0= 60932\ncWM= 60933\nIHR5cGluZ3NTbGlua3k= 60934\nIFBpY3M= 60935\nX01FVEE= 60936\nSVRURVI= 60937\nX3N1YnNjcmlwdGlvbg== 60938\nSVJPTk1FTlQ= 60939\nIEh5dW5kYWk= 60940\nKCk7CgoKCg== 60941\nINiz 60942\nIGphYw== 60943\nIGVsaW1pbmF0ZXM= 60944\nKX0pOwo= 60945\nIGNvbXByZW5k 60946\nCWluc2VydA== 60947\nX2ZhY2Vz 60948\nIj4k 60949\nIGViYXk= 60950\nIGNhcHRpdmU= 60951\ncGxpYW50 60952\nIENhbGN1bGF0ZXM= 60953\nb2x0YQ== 60954\nZXN0aW5n 60955\nX3JldmlzaW9u 60956\nIG3DunM= 60957\nK20= 60958\nIiwiIiwi 60959\nV0hBVA== 60960\nIGNvbXBhc3Npb25hdGU= 60961\naGFyZ2E= 60962\nW3JhbmRvbQ== 60963\nIG1vZHVsbw== 60964\nKHNu 60965\nIG9jY3VwYXRpb25z 60966\nLy8vLwo= 60967\nCWJvYXJk 60968\nIEJhbGs= 60969\nd2nEhQ== 60970\nIFdpZmk= 60971\nLlByb2ZpbGU= 60972\nOm1hag== 60973\nCW1hdA== 60974\nTE9DS1M= 60975\nKGpCdXR0b24= 60976\nICgnJA== 60977\nTXVy 60978\n5oyJ 60979\nYmJsZQ== 60980\nIGZyb2c= 60981\nLWhpZGU= 60982\nIGJyb2FkY2FzdGVy 60983\n4Lie 60984\naGFsZWQ= 60985\nIGFtdXNpbmc= 60986\nX3ByZWRpY3Rpb25z 60987\nX2ludHI= 60988\nIGVhZ2xl 60989\n0LDRgtC10LvRjA== 60990\nIGdldExpc3Q= 60991\ncHNpbG9u 60992\nIGNoYXJhY3Rlcml6YXRpb24= 60993\nQVJEUw== 60994\nIHJlbG9jYXRpb24= 60995\nIHJ1bGVycw== 60996\nUEFZ 60997\nIERlZmluaXRlbHk= 60998\nX0FjdGlvbg== 60999\nIGNsb3N1cmVz 61000\nIGZhY3R1YWw= 61001\nb2R5bmFtaWM= 61002\nIHByZWNhdXRpb25z 61003\nbmllag== 61004\nIFBhcnRpZXM= 61005\nIFN1YmFydQ== 61006\nIGNvdXNpbnM= 61007\nYXJiZWl0 61008\nLm1vbmV5 61009\nZ3VudGE= 61010\nKGFuZA== 61011\nZ2V0aXRlbQ== 61012\nLlN0eWxlUHJpb3JpdHk= 61013\nIHNsaWQ= 61014\nc2luZ2xldG9u 61015\nIGdhcm4= 61016\nIFBBUw== 61017\nIGRheno= 61018\nYcW8 61019\nIGJvZ3Vz 61020\nIE1vZw== 61021\nIHJpdmFscnk= 61022\naXNvbA== 61023\nIGxhbmRtYXJrcw== 61024\nw7Fhcw== 61025\nQmVybg== 61026\nIFNhY2hz 61027\nICIpCgo= 61028\nIGhvc3RpbGl0eQ== 61029\nX21leA== 61030\nbWVyZQ== 61031\nTW90 61032\ncGljdHVyZUJveA== 61033\nRGVmZW5zZQ== 61034\nIGFmZmlkYXZpdA== 61035\nb3RoZXJ3aXNl 61036\nLmRpcmVjdG9yeQ== 61037\nX1VuaXR5RW5naW5l 61038\nLWJsb2c= 61039\nLnNraW4= 61040\ncGhlbQ== 61041\nQXBlbGxpZG8= 61042\nZXJjaGFudA== 61043\nW2NsYXNz 61044\nIHdhcnQ= 61045\nLiJb 61046\nYWxldXI= 61047\nL2JhY2s= 61048\nICAgIAkgICA= 61049\nIHByZWNpcGl0YXRpb24= 61050\nIG9ic3RydWN0aW9u 61051\nIHBPYmo= 61052\nIHJ1cHQ= 61053\nVUNLRVQ= 61054\nYXll 61055\n5o6S 61056\nZ3g= 61057\nIGVjbA== 61058\nIHNlY3JlY3k= 61059\nL0hlYWRlcg== 61060\nIExlc2I= 61061\nIGxlaQ== 61062\nIEJ1bGxldGlu 61063\nIGdpdmVhd2F5 61064\nLkhvbWU= 61065\nX1JPT00= 61066\nIlc= 61067\nIGNvd29yaw== 61068\nX3Jh 61069\nIEN5Y2xpbmc= 61070\nIFBhdw== 61071\nIHB1cGls 61072\nL2FyY2g= 61073\nIEZpbGVVdGlscw== 61074\n6aaW 61075\ncnNw 61076\nIGZyZWVkb21z 61077\nIExlYXI= 61078\nfWApLg== 61079\nIGJvd2xz 61080\nL2Jsb2Nr 61081\nX2xvZ2dpbmc= 61082\nIG1ldGhhbmU= 61083\nIGhvcm5z 61084\nIHdvbmRlcmZ1bGx5 61085\nIGFsdGVyYXRpb25z 61086\nIGV4aWxl 61087\nbHNlbg== 61088\nX3BhdXNl 61089\nX0xBTkdVQUdF 61090\nIFVTREE= 61091\nX215c3Fs 61092\nX0FNT1VOVA== 61093\nIExJRkU= 61094\nIHlvdW5nc3RlcnM= 61095\nIHJpb3Rz 61096\nW0U= 61097\nIHVuZm9yZ2V0dGFibGU= 61098\nLH0sCg== 61099\nRGlzcG9zZWQ= 61100\nIEFzc2Fzc2lu 61101\nVU5H 61102\nIE5ld3Nw 61103\nVXNlclNlcnZpY2U= 61104\nOmFsb2Fk 61105\nKycs 61106\nIHNldHRsZXJz 61107\nIHNjcmVhbXM= 61108\nIGluY29udmVuaWVuY2U= 61109\nLlJvdGF0ZQ== 61110\nIGphcnM= 61111\nIFB1enpsZQ== 61112\nIG1lc3Q= 61113\nYXJzaQ== 61114\nIFNoYXJtYQ== 61115\nfCg= 61116\nLmRz 61117\nIFNhY3JlZA== 61118\nX2V2dA== 61119\nIGV4cHJlc3Nlcw== 61120\nIGhvY2g= 61121\nIER1Y2g= 61122\nLmNhbGxz 61123\ndGhy 61124\nIFNoZWZmaWVsZA== 61125\nLkFsZXJ0RGlhbG9n 61126\nIHJhZGljYWxseQ== 61127\nIHRyb3Vz 61128\nIHByZXZhaWxpbmc= 61129\nIFdXSUk= 61130\n4oCZbg== 61131\nZW5zZWx5 61132\nIFllc3RlcmRheQ== 61133\nIFNpcml1cw== 61134\nIGtpbGxlcnM= 61135\nIEZGVA== 61136\nIG92YWw= 61137\nJyk6DQo= 61138\nIOygleuztA== 61139\nb3VyYWdl 61140\nIENoZWNrYm94 61141\nV29ya2Jvb2s= 61142\nLmRlZmVy 61143\nX2Zsb29y 61144\nIGNvdW5jaWxs 61145\nIG5vcnNrZQ== 61146\nbW9pbA== 61147\nb3JlYQ== 61148\nIG1hcmtldGVk 61149\nX1NVUg== 61150\neEFB 61151\nIHN0YWluZWQ= 61152\nZXV0 61153\nIE1lbmc= 61154\nIGllZWU= 61155\nLmV4dGVybg== 61156\nZWdpZQ== 61157\nIHJhcHA= 61158\nIFB5b25neWFuZw== 61159\nJ2NsYXNz 61160\nTW9i 61161\nIGluaXRpYWxWYWx1ZQ== 61162\nX3dhdmU= 61163\nIGphYg== 61164\nIG1hc2N1bGluZQ== 61165\nIGFtcGxpZmllcg== 61166\nIHR0eQ== 61167\nUGF0aENvbXBvbmVudA== 61168\nX3h0 61169\nIEdGUA== 61170\nL3NlYw== 61171\nCWRpc3BhdGNo 61172\nbWFya2Rvd24= 61173\nIFNjaG4= 61174\nYm9sZQ== 61175\nwrfCtw== 61176\nbW91c2Vtb3Zl 61177\nIGVyck1zZw== 61178\nIGFzaWdu 61179\nX21vbm8= 61180\nVG9TZWxlY3Rvcg== 61181\nIFp1 61182\nKFJlY3Q= 61183\nIEVycm9yQ29kZQ== 61184\nbGF0aW4= 61185\nYW5naWJsZQ== 61186\ndnRr 61187\nQ0dTaXpl 61188\nUG9rZW1vbg== 61189\nIGNsYXNzbWF0ZXM= 61190\nIGF0dHJhY3Rz 61191\nIFRhdHRv 61192\ndWx0YW4= 61193\nb2zDs2c= 61194\nIGhhbHRlZA== 61195\n4KSo 61196\nIEthcnQ= 61197\nIHVl 61198\nX0luaXRTdHJ1Y3R1cmU= 61199\nVGVzdENsYXNz 61200\nIEFpcmJuYg== 61201\nXyIs 61202\nIGNoYXJjb2Fs 61203\nIGlwYw== 61204\nIFN0cmV0Y2g= 61205\nLmdsaWRl 61206\nbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 61207\nIHBvdGlvbg== 61208\nSVRUTEU= 61209\nIGNvdW50ZXJ0 61210\nX2hk 61211\ncHJlcGFyZWQ= 61212\nQWRz 61213\nIFZhbXBpcmU= 61214\ncm9ib3Rz 61215\nLkNyZWF0ZUluZGV4 61216\nU3RhdHVzTGFiZWw= 61217\nIHR1Y2tlZA== 61218\nYWbDvHI= 61219\nVXQ= 61220\nIHN3ZWF0ZXI= 61221\nX0ZO 61222\nICAgICAgICAgICAgICAgIAk= 61223\nYXRha2E= 61224\nIGV5ZWJyb3dz 61225\nYWNvZXM= 61226\ndWRlbg== 61227\nLkxpbmVhckxheW91dE1hbmFnZXI= 61228\nIHN3YXk= 61229\nIG11bHRpbg== 61230\nKCkpKSkK 61231\nIE5TVUludGVnZXI= 61232\nIE15QmFzZQ== 61233\nUGFydG5lcg== 61234\ndXRzY2hlbg== 61235\nIENhdGVy 61236\nLnNldEJhY2tncm91bmRDb2xvcg== 61237\nIGFjY29tcGxpc2htZW50 61238\nX3Byb2JsZW0= 61239\nLmR0ZA== 61240\nIHBhZ2VOdW1iZXI= 61241\nIGphY2tldHM= 61242\nIGNyb3BwZWQ= 61243\ndWVscw== 61244\nIEhlcA== 61245\nIGNhcHBlZA== 61246\nKk1hdGg= 61247\nX2NhbGxiYWNrcw== 61248\nIHB1YmI= 61249\nIEJydW5zd2ljaw== 61250\nLnJlc3BvbmQ= 61251\nWyJf 61252\nIGJlZGRpbmc= 61253\naHl0aG0= 61254\nT1g= 61255\nKHNwZWVk 61256\nIHBlc3RpY2lkZXM= 61257\nIC0tLS0tLS0= 61258\nLkJsdWU= 61259\nIG5vb2RsZXM= 61260\nIEdvZXM= 61261\nIHNhdmVy 61262\nb3h5 61263\nX2NvbXBsZXRpb24= 61264\nIFN3aW5nZXI= 61265\nIGdldERhdGU= 61266\nIG1pbmRlZA== 61267\naW50ZWdyYXRpb24= 61268\nIExvdHVz 61269\nKHN0b3A= 61270\nKCcsJyk7Cg== 61271\nIGZsb29kcw== 61272\nIFdvcmtmbG93 61273\nIGVydXB0ZWQ= 61274\nTWFjcm8= 61275\nIFNhdWNl 61276\nIGV2ZW50TmFtZQ== 61277\nXElucHV0 61278\nQnJlYWtpbmc= 61279\nCXdoZW4= 61280\nX3B3 61281\nSU5ERVI= 61282\nIFdlbGxuZXNz 61283\nIHZveGVs 61284\nIE1lbGw= 61285\nIE1FRElB 61286\nU0VOUw== 61287\nIEZ1bmRz 61288\nIE1pbGQ= 61289\nPEFycmF5 61290\nLXRoaXM= 61291\ndW1wZWQ= 61292\nL2Z3 61293\nIERiQ29udGV4dA== 61294\nV0k= 61295\nZ2lybHM= 61296\nSE9X 61297\nJyk7Pz4K 61298\nIHRlbXB0aW5n 61299\nIHRlc3RhbWVudA== 61300\nIGJpYmxl 61301\nIGNvbnN1bHRlZA== 61302\nIEluZGV4RXJyb3I= 61303\n6KiY 61304\nIGtleXBhZA== 61305\naXp6bw== 61306\nKG9r 61307\nIHdoYXRzYXBw 61308\nIFJlbW90ZUV4Y2VwdGlvbg== 61309\nIHRlYW1lZA== 61310\n4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 61311\nwrss 61312\nIGdldFRpbWU= 61313\nZGlhZw== 61314\naXNzeQ== 61315\nIGhlZA== 61316\nIGtub3Rz 61317\nam9t 61318\nIGZ1bm5lbA== 61319\nLW1haWxz 61320\nIGV4cG9ydGluZw== 61321\nIFZM 61322\nIEthcm4= 61323\nIEJ1ZGRoaXNt 61324\nIEFsbGFu 61325\nX1JBRElVUw== 61326\nIHdvcmRpbmc= 61327\nIEZvcmdldA== 61328\nIENvcm9uYQ== 61329\naXBoeQ== 61330\nIGxpbWJ1cmc= 61331\ndWdneQ== 61332\nIFVzZXJSZXBvc2l0b3J5 61333\naW1pbg== 61334\nKGVsZQ== 61335\nIGxhYmVsbGVk 61336\n56S+ 61337\nIEhlcm1hbg== 61338\nLnFx 61339\nICIpKTsK 61340\naWViZXI= 61341\nLlRyYW5zbGF0ZQ== 61342\ncnlu 61343\nIGRlc2Vudg== 61344\ndW1k 61345\nU2ltcGx5 61346\nCW1vZGU= 61347\nUnBj 61348\nIFZhbGVuY2lh 61349\nIHN0YWZmZXJz 61350\nIHNlbHY= 61351\nIFNwaWtl 61352\nIGRlbGlj 61353\nIGVydQ== 61354\nX0RU 61355\nSnVkZ2U= 61356\n4buV 61357\nIEJhc2lu 61358\nLm11dGFibGU= 61359\nInVybA== 61360\nIHRhcmlmZg== 61361\nIFNsZWV2ZQ== 61362\nIGZsYXJl 61363\nLmRyb3BvdXQ= 61364\nIGJyaWRlcw== 61365\nKSksDQo= 61366\nX2NvbnN0cmFpbnRz 61367\nZGVzdHJ1Y3Q= 61368\nT3V0bGluZQ== 61369\nIGRpc2FwcGVhcnM= 61370\nX2xvY2tlZA== 61371\nIE5TTG9jYWxpemVkU3RyaW5n 61372\nY2tl 61373\nCW51bGw= 61374\nYWRyZXNzZQ== 61375\nIHRvcHBpbmc= 61376\nIEpva2Vy 61377\nYmlzaG9w 61378\n0L3QvtGB0YLRjA== 61379\nYW5kZXJpbmc= 61380\nX2FtcA== 61381\nPXRpbWU= 61382\nX1NwYWNl 61383\nX1BVTEw= 61384\nJz0= 61385\nIGFudGlxdQ== 61386\nIGNhY2g= 61387\nX19fCgo= 61388\nT05FUw== 61389\n0L7Rjw== 61390\nIHVucmVhZA== 61391\nLnBvbGljeQ== 61392\nb29vb29vb28= 61393\n65+s 61394\nIHVzdGVk 61395\nIFJlY2U= 61396\nIGFsbGVt 61397\n44O844K5 61398\nIFRob3VnaHRz 61399\ndmVpbGxhbmNl 61400\naXN0cmF0ZQ== 61401\nX2xhbmU= 61402\nIGZhbWVk 61403\nLkdldE5hbWU= 61404\nIHNtb290aGVy 61405\nIFF1YWxpZmllZA== 61406\nYXplcnM= 61407\nX2dlbw== 61408\nRmF4 61409\nIE1pbmRz 61410\nIFJhaXNlcw== 61411\nIHRyYW5zY3JpcHRz 61412\nQ29udmVyc2F0aW9u 61413\nIHJlbWFya2Vk 61414\n64KY 61415\nZGxpbmc= 61416\nIGRlcGxveWluZw== 61417\nIHNoYXJlZEFwcGxpY2F0aW9u 61418\nIGtw 61419\nRm9udEF3ZXNvbWVJY29u 61420\nX2R1bW15 61421\ncmVpYmVu 61422\nIEphbmVpcm8= 61423\nRGlyZWN0aW9ucw== 61424\nLmdldEJlYW4= 61425\nc2Fzcw== 61426\nIGNvbW1hbmRlcnM= 61427\ndmF0aW9u 61428\nZXJyb3JDb2Rl 61429\nIEFsbG95 61430\nLmxvY2FsaXplZA== 61431\n0JE= 61432\nIGRpc2h3YXNoZXI= 61433\nIFNvdXA= 61434\nTnU= 61435\nX0RlZmF1bHQ= 61436\nIHVuZXZlbg== 61437\nIC8+IjsK 61438\nLUJhc2Vk 61439\nIHNlYW1sZXNzbHk= 61440\nLW51bGw= 61441\nIFhD 61442\nIHN0ZXc= 61443\nKGRlbGF5 61444\nQVRPUlM= 61445\nIFdoZWVsZXI= 61446\nIjw/ 61447\nIENoYW5kbGVy 61448\nIHJldGFsaWF0aW9u 61449\nIGJ1ZGRpZXM= 61450\nLXNpemluZw== 61451\nIEVpbnM= 61452\nIC4uLiw= 61453\ncXVldGU= 61454\nIERPQw== 61455\nIGZhbHNlbHk= 61456\nIGZsYXRz 61457\nTklDQUxM 61458\nIGxpYnI= 61459\nQmVOdWxs 61460\naW11bGF0aW9u 61461\nCVF1ZXJ5 61462\nX3V0 61463\nIHBsYXF1ZQ== 61464\nYmlsZA== 61465\nIHNjcmVhbWVk 61466\nLm12Yw== 61467\nLldpZGdldA== 61468\nIGRpZmZlcmluZw== 61469\nL3N1cHBvcnQ= 61470\nX1ZPTFVNRQ== 61471\nLm5vZGVUeXBl 61472\nCVdyaXRl 61473\nIHLDs3du 61474\nYm9va21hcms= 61475\nX0NPTk4= 61476\nIENyZWVk 61477\nIGluaGliaXRpb24= 61478\nIFJlaGFi 61479\ndXZyZQ== 61480\nIGR1bXBz 61481\nb3dlag== 61482\nX3BsYWNlaG9sZGVy 61483\nIEhXTkQ= 61484\nIGRlcm1hdA== 61485\nLmRldGFjaA== 61486\nIGZpbmFsaXplZA== 61487\nZ2VyaWVz 61488\naWRhaw== 61489\nX3Byb2c= 61490\nIHVwZGF0ZVVzZXI= 61491\nbHlz 61492\nLkdvb2dsZQ== 61493\nIGx1ZWdv 61494\nIGFudHM= 61495\n5qCH6aKY 61496\nIERSTQ== 61497\n0LvQtdC9 61498\nLWRi 61499\nZXJyaWNr 61500\nX2xu 61501\nLi5c 61502\naWtpdA== 61503\nIERpZW4= 61504\nIHBhcmFtZXRyb3M= 61505\na2V5cHJlc3M= 61506\nIEtlcmFsYQ== 61507\nIGRyYWluZWQ= 61508\nZsO8Zw== 61509\nIGNhcGl0 61510\nX2F1Zw== 61511\ndGFudA== 61512\nTmF2QmFy 61513\nIHJvbGxiYWNr 61514\nIGxleQ== 61515\n4LiI 61516\nIEJTUA== 61517\nIFByZWRpY3Rvcg== 61518\nIHdhZ29u 61519\nICJ8Ig== 61520\nU2VydmU= 61521\nLkRvbmU= 61522\nIER1cmNo 61523\nUHJvdmlkZQ== 61524\nCXNjb3Jl 61525\nX09E 61526\nLndlYXBvbg== 61527\nIHVuaXZlcnNhbGx5 61528\nIGluanVuY3Rpb24= 61529\nX1NDUk9MTA== 61530\nLk1hdHJpeA== 61531\nIE1vbmdvQ2xpZW50 61532\nYnVmZmVycw== 61533\nIGJhZGdlcw== 61534\nIHNoYXJrcw== 61535\nIFNoYXJr 61536\nTU9ERUw= 61537\nLlJFQUQ= 61538\nCXRhZw== 61539\nIHN0cnRvdXBwZXI= 61540\nRVJHWQ== 61541\nYmlhcw== 61542\nIGFjY291bnRJZA== 61543\nIEVtbWFudWVs 61544\nIHJlc29ydHM= 61545\nIHN2bg== 61546\nd2FybmluZ3M= 61547\nX0lF 61548\nTEFT 61549\nIG51bGxh 61550\nCWFz 61551\nIGRlbWVhbg== 61552\n4oCcQXM= 61553\nQXV0aG9yaXplZA== 61554\nIHRlbmRlbmNpZXM= 61555\nLXNldHRpbmc= 61556\nIHByZWxvYWQ= 61557\nIGNubg== 61558\n4oCcTm8= 61559\nJSkKCg== 61560\nPVQ= 61561\ndXN0bw== 61562\nIEZJUkU= 61563\ncmVzZWFyY2g= 61564\nINCT 61565\nIExlc3NvbnM= 61566\nLkFwcGVuZEZvcm1hdA== 61567\nIGluaXRpYXRpb24= 61568\nIENvdXM= 61569\nYXJlcg== 61570\ncHJvamVjdGlvbg== 61571\nIFNoZWV0cw== 61572\nIEZvbGQ= 61573\nUmVkZGl0 61574\nRGVsZXRpbmc= 61575\nIHphbQ== 61576\nIE5ldXJhbA== 61577\nIEZlY2hh 61578\nIMKu 61579\nIHRhc3RlZA== 61580\nIEVuZW1pZXM= 61581\nIEpvaG5zdG9u 61582\nIGRhbmNlcnM= 61583\nIGRpc2FibGluZw== 61584\nIHBldHR5 61585\nIFdlbGQ= 61586\nLy0t 61587\nKHNwcml0ZQ== 61588\nSUdP 61589\nYXJnb3V0 61590\nIHF1YXJ0ZXJiYWNrcw== 61591\nZGlzcGF0Y2hlcg== 61592\nIFN1c3RhaW5hYmxl 61593\nZW5hcmlvcw== 61594\nIFNraQ== 61595\nIGZhY3Rv 61596\naWxsaW4= 61597\nX2V4dGVuc2lvbnM= 61598\nybU= 61599\nPkg= 61600\nZWFzdA== 61601\nLmFpcg== 61602\n4oCcQnV0 61603\nT2JqZWN0Q29udGV4dA== 61604\nc3VjY2Vzc2Z1bGx5 61605\nX2xhbmQ= 61606\nIGZvbGRz 61607\nX0NPT1JE 61608\nIHN1YnBv 61609\nLmdldEFkZHJlc3M= 61610\naW5zdHI= 61611\nTWF0ZXJpYWxz 61612\n0YPRgdGC 61613\nZGVwb3NpdA== 61614\nLWxhc3Q= 61615\nX0dSQVk= 61616\nPWZpbmQ= 61617\nIG11dGFudA== 61618\nIGxlc2JpZW5uZQ== 61619\nbGV0Y2hlcg== 61620\nUk9VR0g= 61621\ndXJla2E= 61622\nLmNhcHR1cmU= 61623\nIGVubg== 61624\nIChbWw== 61625\nIEZsdQ== 61626\nIHRhc2tJZA== 61627\nIEh1c3NlaW4= 61628\nLmZvbGRlcg== 61629\nIGF1c3Rlcml0eQ== 61630\nSVNUUkFUSU9O 61631\nX0ltcGw= 61632\n5rOo5oSP 61633\nIGRlY3JlZQ== 61634\nLWNoYXQ= 61635\nIGltcGxpY2F0aW9u 61636\nIGd1ZXNzZXM= 61637\ndWxrYW4= 61638\nQW5hbHl0aWNz 61639\nLnBsdXM= 61640\nQ09NTUFORA== 61641\n0LXQu9C4 61642\nwrsKCg== 61643\nX1NJVEU= 61644\nIGVxdWFsVG8= 61645\nU3VwcG9ydEZyYWdtZW50TWFuYWdlcg== 61646\nIFJlY29yZGluZw== 61647\n5a6M5oiQ 61648\nIGJhZ2dhZ2U= 61649\nIHBpdGNoZXJz 61650\nIEVo 61651\nb3F1ZQ== 61652\nCWNudA== 61653\nID0+JA== 61654\nL2Zvbw== 61655\nSVJB 61656\nIFNhdGVsbGl0ZQ== 61657\nYm9yYWg= 61658\nIH19Igo= 61659\nIEVuZHM= 61660\nIFNwcmF5 61661\nLHBhcmFt 61662\nLkNocm9tZQ== 61663\nKnE= 61664\ndGhvdWdodA== 61665\naWJyYXRlZA== 61666\nIHRoaWV2ZXM= 61667\nIGJlbmVmaWNpYXJpZXM= 61668\nRW50ZXJlZA== 61669\nb3R0ZXN2aWxsZQ== 61670\nIHZldGVyaW4= 61671\nQnlJRA== 61672\ncXVpcGU= 61673\ndW1wdGlvbg== 61674\nLXVuaXQ= 61675\nRXhlY3V0aW9uQ29udGV4dA== 61676\nQHM= 61677\nIEdpb3Y= 61678\nLlRvb2xUaXA= 61679\nX2ZyaWVuZA== 61680\nKGF0dHJpYnV0ZXM= 61681\nIGR1bXBpbmc= 61682\nIEpD 61683\nX0RPQ1VNRU5U 61684\nIEFybW91cg== 61685\nKGluc2VydA== 61686\nLkhvcml6b250YWxBbGlnbm1lbnQ= 61687\nIFFlZA== 61688\n44GE44G+44GZ 61689\nL2dpdA== 61690\nIFlZWVk= 61691\nIENhcmRpZmY= 61692\nIGFwYQ== 61693\nb3JnYW5pYw== 61694\nIFdoZXJlYXM= 61695\nIOad 61696\nIE1pYQ== 61697\nIGRlbW9saXRpb24= 61698\nIHNjYXJz 61699\nIHBhaQ== 61700\nIHJldHJpZXM= 61701\nIHJx 61702\nIERlbmlz 61703\nKFV0aWxz 61704\nIGFsbGV2aWF0ZQ== 61705\nIFBJQw== 61706\naWR1ZQ== 61707\nIGFja25vd2xlZGdpbmc= 61708\nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 61709\n56Gu5a6a 61710\nxKs= 61711\nXEpzb24= 61712\nLmJpbmFyeQ== 61713\nIHh0eXBl 61714\nc2lnbmFscw== 61715\nIEFwcGVhcmFuY2U= 61716\nJnI= 61717\nfXM= 61718\nQ2k= 61719\nIElsbHVt 61720\ncG9yYXRl 61721\naG9n 61722\nIGluZGV4T2Y= 61723\nXENvbW1hbmQ= 61724\nX3BhcmFsbGVs 61725\nIFNoZXJsb2Nr 61726\n7YM= 61727\nICIiKQ0K 61728\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 61729\nIGNyaXRpY2l6ZQ== 61730\nIFNvYXA= 61731\nIE1hdGNoZXI= 61732\nIGdyaWxsZWQ= 61733\nKlQ= 61734\nIGFkb3Jl 61735\ndWxsaW5n 61736\nIGplZG9jaA== 61737\nX3JlZnM= 61738\nbGVhbnVw 61739\nIEpBWEI= 61740\nIHJvc2Vz 61741\nIExpYW0= 61742\nc2l6ZWk= 61743\nIGdldGNoYXI= 61744\nIHRhcmRl 61745\nLXRvb2x0aXA= 61746\nIHF1YWxpZmllcg== 61747\nIEludGVybWVkaWF0ZQ== 61748\nX1dpbmRvdw== 61749\nIE1hbHRh 61750\nRGlzY29ubmVjdA== 61751\nZXdoZXJl 61752\nQ2FtcG8= 61753\nIGlycmF0aW9uYWw= 61754\nbGVkbw== 61755\nIERO 61756\nQVJHVg== 61757\nIG91dHJv 61758\nIHRoaXJ0ZWVu 61759\nSm9zZXBo 61760\nTUFS 61761\nL2ds 61762\nSmVzcw== 61763\nIFBzeWNoaWF0 61764\nIHBhZGRpbmdCb3R0b20= 61765\nLWxvb3A= 61766\nL2ZvbnRz 61767\nX3NlZW4= 61768\nVGVhbXM= 61769\nUmVhY3RET00= 61770\nKG1hbg== 61771\nKHhwYXRo 61772\nLmdldFNpbXBsZU5hbWU= 61773\nPigq 61774\nIFB2dA== 61775\nIGVsZGVycw== 61776\nIHBpZXM= 61777\nLnVzZXJBZ2VudA== 61778\nLXJlZ2lvbg== 61779\nIEdyZWVrcw== 61780\nKGZyYWdtZW50 61781\nc3R1 61782\nIGNvdW5jaWxz 61783\nIHN0YW1pbmE= 61784\nIEdvZGRlc3M= 61785\n6KW/ 61786\nIHBoaWxvc29waGVycw== 61787\nIHBlcnNvbmU= 61788\nIExvc2U= 61789\nIENMUg== 61790\nIERvY3M= 61791\nIHNvYWs= 61792\nIEhPTERFUg== 61793\nIGJlbGxz 61794\naGFzaENvZGU= 61795\nUkFURQ== 61796\nX1dFSUdIVA== 61797\naW5vdXM= 61798\nZW5kcmE= 61799\nb3Bob2JpYw== 61800\nIHByb3Nl 61801\nIGZpbmVseQ== 61802\nL29hdXRo 61803\nKHNwYWNl 61804\nYWRnZQ== 61805\nIE1hbWE= 61806\nIHN0cmluZ0J1ZmZlcg== 61807\nIHN0aW50 61808\nIG1pc21h 61809\nIHZpbGxhaW5z 61810\nIENyaW1lYQ== 61811\nIGRpcGxvbWE= 61812\nINC/0L7RgdC7 61813\nIEJlYQ== 61814\nKGpvaW4= 61815\nIO2VtA== 61816\nQ0hBVA== 61817\ncGVyaW5n 61818\nIENyb3M= 61819\nIG1vbmtleXM= 61820\nIHByZWRz 61821\neWxh 61822\nLCws 61823\nIHZpYnJhdG9y 61824\nIE5V 61825\n5YWI 61826\nZmFudA== 61827\nemV0 61828\nIGJpZXRldA== 61829\ndW5mdA== 61830\nc3dvcnRo 61831\nLkZsb3c= 61832\nIHBzeWNoZWQ= 61833\nIENvbnRpbmVudGFs 61834\nPnQ= 61835\nIHF1aWx0 61836\nLlVQ 61837\nIGV4cGFuc2l2ZQ== 61838\nRGlzcG9zZQ== 61839\nKGxhbmd1YWdl 61840\nQ2Fwcw== 61841\nX1pPTkU= 61842\nIHJlY3ljbGU= 61843\nIE1hbmFnZWQ= 61844\nY3VycmVudENvbG9y 61845\nLmJyb2FkY2FzdA== 61846\nc2lnbklu 61847\nLnByb20= 61848\nbGx1 61849\ndWVibG8= 61850\nIHB1bmNoZXM= 61851\nIGF1dG9tYXQ= 61852\nIGFzc2lnbmluZw== 61853\nIGNyZWF0ZVVzZXI= 61854\nIEFsbGllZA== 61855\nIGNvbmR1Y3Rvcg== 61856\ngqg= 61857\nIHNhZGRsZQ== 61858\nIGRuaQ== 61859\nb21lZGljYWw= 61860\nLVdlc3Q= 61861\nUG9zaXRpdmVCdXR0b24= 61862\nIGl0YWxpYw== 61863\nP1s= 61864\nKHRyaWdnZXI= 61865\nIGVsZXBoYW50cw== 61866\nIjoiIiwi 61867\nIGNhbGliZXI= 61868\ncmFmdGVk 61869\nZGlnaXRz 61870\nIG1hcnNoYWw= 61871\nbWlsbGlzZWNvbmRz 61872\nbWFya2Vycw== 61873\nbW9t 61874\nL3BsYWNl 61875\nIGhvbGlzdGlj 61876\nOnQ= 61877\nIyw= 61878\nIGJvdG8= 61879\nIG5hdXNlYQ== 61880\nIFNob290aW5n 61881\naXRlY2g= 61882\nIHRleHRTdGF0dXM= 61883\nPENsYXNz 61884\nIERlc2NyaWJl 61885\nIGJ1ZmZldA== 61886\nZ2ls 61887\nIGxvZ2l0cw== 61888\nc3RkY2FsbA== 61889\nbW9kcw== 61890\nIFNrdWxs 61891\nIEJhcmU= 61892\naG9wZQ== 61893\nIEludHI= 61894\nRmFpcg== 61895\nCXB0 61896\nIGFjb21wYW5o 61897\nIGZraw== 61898\nX3JwYw== 61899\nSW5zdGFsbGVk 61900\nX2Fucw== 61901\nLmdldE1pbnV0ZXM= 61902\n4oCmIgoK 61903\nLXRocmVhZA== 61904\nIHByZXNjaG9vbA== 61905\nQUlMUw== 61906\nIGRpZmZpYw== 61907\nKGNvbnZlcnQ= 61908\nIE5hdGg= 61909\nIERPSg== 61910\nIHJlZ2ltZXM= 61911\nIGVudGh1c2lhc3Q= 61912\nIHdhcnJhbnRpZXM= 61913\nIGZhc2NpbmF0ZWQ= 61914\nX2JpbmRpbmc= 61915\nX05vdA== 61916\nb2Z0ZW4= 61917\nX1JX 61918\nL21haWw= 61919\nIHRpdGxlTGFiZWw= 61920\nIHZpbGxhZ2Vycw== 61921\nIEppYW5n 61922\nIHN3YWdnZXI= 61923\nLlJvd0luZGV4 61924\nX2ltZ3M= 61925\ncmFweQ== 61926\nVkVSQUdF 61927\nLlVw 61928\nIG5vb3A= 61929\nY2lv 61930\nCVNU 61931\nIGRlY3JlbWVudA== 61932\nIG1hZ25lc2l1bQ== 61933\nX3JvdGF0ZQ== 61934\nU2l0 61935\nIG5pZXV3ZQ== 61936\nIHRlcm1lZA== 61937\n7ZWp64uI64uk 61938\nIHVyZw== 61939\nX3RvdWNo 61940\nIHN3YXJt 61941\nIGNsYXZl 61942\ndGhlc3Q= 61943\nIExhZg== 61944\nSFg= 61945\nIEh1bGs= 61946\nIHBsYWludGV4dA== 61947\nIFNvZmE= 61948\nZ2V0U2Vzc2lvbg== 61949\nTGVk 61950\nIGVjb3N5c3RlbXM= 61951\naGVp 61952\nIEtpbGxz 61953\nIGh1c2JhbmRz 61954\n0YXRgNCw0L0= 61955\nKGRvbQ== 61956\nX3RpbGVz 61957\nTmliTmFtZQ== 61958\nIGRvbmF0aW5n 61959\nLmFjYw== 61960\nIGxpZmVzcGFu 61961\nLmJu 61962\nX1JHQ1RY 61963\n5qU= 61964\nYW5zZW4= 61965\nIG1vZGVsbGluZw== 61966\nTGF5b3V0UGFyYW1z 61967\nIG9uQ2hhbmdlVGV4dA== 61968\ncnNh 61969\nLWxvY2F0aW9u 61970\nLlBl 61971\nKGJ1cw== 61972\nKHNvbmc= 61973\nIHByb2R1aw== 61974\nIFNIT1VMRA== 61975\nIENK 61976\nIHNvcw== 61977\nIEhvbWVDb250cm9sbGVy 61978\nLmxvYWRlZA== 61979\nKERvY3VtZW50 61980\nLnNvY2lhbA== 61981\ndGlsZXM= 61982\nIGxhbWU= 61983\nPWRm 61984\nLnBhcnNlTG9uZw== 61985\nIHByYWM= 61986\nIGRldG94 61987\nIFZF 61988\nIHB1bnRvcw== 61989\nIGRvY3Ry 61990\nIGFuY29y 61991\nQ0FQRQ== 61992\nIGNtYg== 61993\n54S2 61994\nKiki 61995\nOi8vLw== 61996\nVmFsdWVUeXBl 61997\nIG1vcnRnYWdlcw== 61998\nO3E= 61999\nIFJvY2tldHM= 62000\nc3BvcnQ= 62001\nVUdD 62002\nY3Rz 62003\n44KB 62004\naWV1cg== 62005\nIEFwcGVhbA== 62006\nKG5i 62007\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 62008\nSU1BVElPTg== 62009\nIENyZXM= 62010\nIE1hbmlw 62011\nQ2F1c2U= 62012\nYXR5cGVz 62013\nbWFudWZhY3R1cmVy 62014\nIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 62015\nIHNwb3I= 62016\nZXNvbg== 62017\nIHB1bmNoZWQ= 62018\nIGJvb2ttYXJrcw== 62019\nIEJ1bGs= 62020\nQ29tcGxldGVMaXN0ZW5lcg== 62021\nIFRhbGtpbmc= 62022\nIEVybmVzdA== 62023\nIHJ1YmJpc2g= 62024\na2lsbHM= 62025\nIERFRklO 62026\nIG5laWdoYm91cmluZw== 62027\nYXJsbw== 62028\nIFBDQQ== 62029\nCW1hdHJpeA== 62030\nbG9r 62031\nIGF0bGFz 62032\nIEd1cg== 62033\nIHd5bg== 62034\nLW5lZ2F0aXZl 62035\nIHR1bA== 62036\nIHJlbGlj 62037\nIFZvbHRhZ2U= 62038\nIFByZWlz 62039\nIEpOSUNBTEw= 62040\nIFBNSUQ= 62041\nYWtldA== 62042\nCWF0dHI= 62043\nIGV0aXF1 62044\nIE1K 62045\nIEdtYWls 62046\nY2xy 62047\nX2V4ZWN1dGlvbg== 62048\n6ZSu 62049\ncG9zaXRvcg== 62050\nLmFm 62051\nTnI= 62052\nR2VvcmdpYQ== 62053\nVG9wb2xvZ3k= 62054\nIHBlcmNow6k= 62055\nIG11c2xpbQ== 62056\nIGVwaWRlbWk= 62057\nIHNhYm90 62058\nYWN0dXM= 62059\nIOuMgA== 62060\nIElPRXJyb3I= 62061\nLmVzdA== 62062\ncHJlZnM= 62063\nIEtyaXNo 62064\nLlJlYWRLZXk= 62065\nTkFTQQ== 62066\ndcOnw6Nv 62067\nX0Ri 62068\ndW1lcmF0b3I= 62069\nV2lkZQ== 62070\nKHN0YXRlbWVudA== 62071\nLmVuZHBvaW50 62072\nLi4uLi4uLi4u 62073\nIFsq 62074\nc3RyZWFtcw== 62075\nbXRpbWU= 62076\nUHg= 62077\nYXRy 62078\nIHRwbA== 62079\nUm9tYW4= 62080\nIHNjZW5pYw== 62081\nLm56 62082\nIFNlY29uZHM= 62083\nc3VibWVudQ== 62084\nIOyLpO0= 62085\nX2J1bmRsZQ== 62086\nIGRlxJ8= 62087\nIFNpc3RlcnM= 62088\ncHJlZmVyZW5jZXM= 62089\nIHBvcnRh 62090\nQWR2aXNvcg== 62091\nbWF4TGVuZ3Ro 62092\nIEdSRUFU 62093\nX18oCg== 62094\nb2xlc3Q= 62095\nIExhYmVscw== 62096\nIGVuZmVy 62097\nICAgICAgCgo= 62098\nIFRoZWZ0 62099\nX0ZJTEw= 62100\nIFdpc2U= 62101\nKWFwcGxpY2F0aW9u 62102\ndW5hbWk= 62103\nPigpKQo= 62104\nQUREUkVTUw== 62105\nQlNU 62106\nZXR6dA== 62107\nIFFncw== 62108\nU2Vuc2U= 62109\nRXhjZXB0aW9uSGFuZGxlcg== 62110\nIENodQ== 62111\nLmdldE93blByb3BlcnR5 62112\nIGV4ZXJjaXNlZA== 62113\naW90aWM= 62114\nIFJlbGVhc2Vz 62115\nIHBpbnRlcmVzdA== 62116\nb2xpZQ== 62117\naXNvZnQ= 62118\nIHNlcXVlbmNpbmc= 62119\nIHBhZHJl 62120\nXSkpOw0K 62121\nKHJhZGl1cw== 62122\nLm1lZA== 62123\nYWludGllcw== 62124\nLk9iamVjdE1vZGVs 62125\nIGVtcGxl 62126\nIHNlZ3Vybw== 62127\nU3RhcnM= 62128\nIHF1YWxpdGF0aXZl 62129\nbGVtbg== 62130\n4bux 62131\nPiIpLg== 62132\nIGd4 62133\nLWNlcnQ= 62134\nIEFTVE0= 62135\nIGZ1bGxuYW1l 62136\nIHRlbGVtZXRyeQ== 62137\nIENhbWJvZGlh 62138\nX3Vs 62139\nIENsYXJl 62140\nQ1VTVE9N 62141\nUUM= 62142\nIFVucw== 62143\nIEhUVFBT 62144\nIFBhcmtpbnNvbg== 62145\nYW5jeWJveA== 62146\nJywnLg== 62147\nVHVl 62148\nLmdldExhc3Q= 62149\nIGFiaQ== 62150\nxIVk 62151\nQXN0 62152\nIEVkaXRpbmc= 62153\nLlVuaXR5 62154\nam1w 62155\nIG1hdHM= 62156\nIHNoYXJlZFByZWZlcmVuY2Vz 62157\nQ2FwdGFpbg== 62158\nLnBhZ2VTaXpl 62159\nIHJ0bA== 62160\nIGFubWVsZA== 62161\nUnVudGltZU9iamVjdA== 62162\nIGRlbWFuZGU= 62163\nKCI7 62164\nc2VpdGU= 62165\nLWhlYWRlZA== 62166\nIEtyYQ== 62167\nIEZPTlQ= 62168\nYFw= 62169\nQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbg== 62170\nLmF2Zw== 62171\nYXRpY2Fs 62172\nQWo= 62173\nIHBlcm1pdHRpbmc= 62174\nUHJvag== 62175\nRVJSUQ== 62176\nIGNyZWFtcGll 62177\nIEJ1eWVy 62178\nLW1vZHVsZXM= 62179\nIFN1bmRheXM= 62180\nfGAK 62181\nIGRheXRpbWU= 62182\nICso 62183\nIGdsaXRjaA== 62184\nIE9wZXJhbmQ= 62185\nIHRveGlucw== 62186\naW55YQ== 62187\nRE5T 62188\nIFNhcw== 62189\nQ2FrZQ== 62190\nIE5hdGlvbmFscw== 62191\nLmFkZFRv 62192\nIHNpbmtpbmc= 62193\nIGNvbXByZWhlbnNpb24= 62194\nIHNjb3I= 62195\nYWdlbWVudHM= 62196\nIHRhcmQ= 62197\nIG1hcmNoaW5n 62198\nIE1UVg== 62199\nIHNhbmU= 62200\nQ3JlYXRlSW5mbw== 62201\n4bqv 62202\nIGVuZEluZGV4 62203\nCWxheW91dA== 62204\nIOWQjQ== 62205\nU0lURQ== 62206\nIFRIRVJF 62207\nIFt7Jw== 62208\nb3BhdGhpYw== 62209\nIHRyYW5zbWl0dGVy 62210\nL2JvZHk= 62211\nIHB1bmQ= 62212\nIENsb3Npbmc= 62213\nIHNldGF0dHI= 62214\nIGJvdW5kZWQ= 62215\nQXRsYXM= 62216\nc3VtaW5n 62217\nKHRpbWVz 62218\ncGFyZXI= 62219\neW5vbQ== 62220\nZmVpdA== 62221\nIGZyZW0= 62222\nLWxlZw== 62223\nIEJyYXM= 62224\nPiM= 62225\nIOy2nOugpQ== 62226\nIElOU1RBTkNF 62227\nIENvdWNo 62228\nX2hvc3Rz 62229\nbGlrZWxpaG9vZA== 62230\nLk1hcmtlcg== 62231\nIE1hc2tz 62232\nIGNlcmVhbA== 62233\ndXRpbGl0aWVz 62234\nIGVsZW1lbnRhbA== 62235\nIGRpc3RvcnRlZA== 62236\naW5hY3RpdmU= 62237\nY3J5 62238\nV0w= 62239\nVVBQT1JURUQ= 62240\nLlRocm93cw== 62241\nL3NjaGVtYQ== 62242\nc2VyaWU= 62243\nLiInLA== 62244\nIEJlbmVkaWN0 62245\nLXBpY2tlcg== 62246\naWdncw== 62247\nIFBpcmF0ZQ== 62248\n5ZGo5pyf 62249\nIFRoZW1h 62250\nIFNvdXRoYW1wdG9u 62251\nIGFycmF5V2l0aA== 62252\nIFBhdWxh 62253\nIHByZWRpY3Rvcg== 62254\nLUFzcw== 62255\nLnVzZXJpZA== 62256\nIHBlcmk= 62257\nIGV4YWdnZXJhdGVk 62258\ndXJhdGU= 62259\nYXJzZWlsbGU= 62260\nIENvbmNlbnQ= 62261\nIFBpaw== 62262\nIEBfOwoK 62263\nIGZvcm1hdGlvbnM= 62264\nIGRlbm9taW4= 62265\nIi8+Lgo= 62266\nZW5kZWRvcg== 62267\nIHBhbmNyZQ== 62268\nIGFtdA== 62269\nIG9uUmVzdW1l 62270\nb25EZWxldGU= 62271\nIEJDSA== 62272\nKSgi 62273\nbW92ZW1lbnQ= 62274\nIHBvdGFzc2l1bQ== 62275\nPCEtLVs= 62276\nIG1lbWVz 62277\nX1NFVFVQ 62278\nX2dhbW1h 62279\nIGNvbG9yV2l0aFJlZA== 62280\nIGdyYXZlcw== 62281\nIHN0YXR1dGVz 62282\nIGFxdWFyaXVt 62283\nIExhbWFy 62284\nIHhBeGlz 62285\nV2VicGFja1BsdWdpbg== 62286\nX2ZvbGQ= 62287\nLmdlbw== 62288\nIEZlZXQ= 62289\nLXNwZWFraW5n 62290\n6aKd 62291\nX2Nvcw== 62292\nIEF2ZWM= 62293\nYW5zdA== 62294\nIEVFUFJPTQ== 62295\nIGRlYWxlcnNoaXA= 62296\nIFVudGVybmVobWVu 62297\nLEludGVnZXI= 62298\nIMOqdGVz 62299\nLmB8YAo= 62300\ndmluZQ== 62301\nIEtuaWZl 62302\nX3ZlcnRpY2Fs 62303\nLkRvd25sb2Fk 62304\nIG92ZXJzaXplZA== 62305\nbGlk 62306\nIHBpbGxhcg== 62307\nY2F1Z2h0 62308\nIGZsYWdnZWQ= 62309\nKHJvdXRlcg== 62310\nKFJFRw== 62311\nIGJhcmJlY3Vl 62312\nYnJvd3Nl 62313\nIEZpdHpnZXJhbGQ= 62314\nINC/0YDQvtCy 62315\naXJpZQ== 62316\nIGVyc3Rl 62317\nZWxpYg== 62318\nX1BSRVNT 62319\nIGhlYWxlZA== 62320\nIGhhdXQ= 62321\nPnhwYXRo 62322\nIFdlbg== 62323\nZ3J1bnQ= 62324\nLktleXdvcmQ= 62325\nLWhhc3BvcHVw 62326\nbnc= 62327\nU1o= 62328\nZ2FiZQ== 62329\nSW50ZXJhY3Rpb25FbmFibGVk 62330\ncHJlY2g= 62331\nIHByaW1v 62332\nc3RyaXBl 62333\nYWx0ZWQ= 62334\nX0JPUkRFUg== 62335\nZmluZEJ5 62336\nX2Fubm90YXRpb24= 62337\nV2ViU29ja2V0 62338\nQnVy 62339\nIGRpcGxvbWFjeQ== 62340\nKHRk 62341\nIFNpbXBs 62342\nZGV0ZWN0 62343\ncGVyZm9ybWFuY2U= 62344\nIGNhcmJvaHlkcmF0ZXM= 62345\nL2lvdXRpbA== 62346\nLS0tLS0tKw== 62347\nX3Ny 62348\nbWVldGluZw== 62349\nIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 62350\nX1Zhcg== 62351\nIHJvdmVy 62352\nIGNhc2k= 62353\nIE1hdGNoZXM= 62354\ncXJ5 62355\nX0JPT0s= 62356\nIHByZXN1bWVk 62357\nIE3DqXQ= 62358\nL2l0ZW1z 62359\nIENyZWRlbnRpYWxz 62360\nXSkuCg== 62361\nIEthcmRhc2g= 62362\nQWRtaW5pc3Ry 62363\nIFNsb3Zhaw== 62364\nKCcsJykK 62365\nIGNvbnF1ZXN0 62366\nUGVyc2lzdA== 62367\nIERyYWlu 62368\nYmlq 62369\nIGRvdg== 62370\nIHPDuGdlcg== 62371\nV29uZGVy 62372\nQVNFVA== 62373\nW21pbg== 62374\nZ3VuYQ== 62375\nZ3Jvd24= 62376\nIH0pCgoK 62377\nQVVE 62378\nIGJlbGlldmVy 62379\naXNlcnM= 62380\nKHNlbnQ= 62381\nSmFja3Nvbg== 62382\nIHBhaXM= 62383\nIGN1ZGFNZW1jcHk= 62384\nIGZsYXNoZXM= 62385\nYmVyZQ== 62386\nIG11bHRpZg== 62387\nIENhcmdv 62388\nRWxlbWVudHNCeVRhZ05hbWU= 62389\nKGVwb2No 62390\nIEt1bmRlbg== 62391\nUmVjb2duaXRpb24= 62392\nIFNldFZhbHVl 62393\nIFN1bnNoaW5l 62394\nQUNQ 62395\nOnN0cg== 62396\nIGFtYmlndQ== 62397\nIO2VnA== 62398\nLWxpbmVhcg== 62399\nIFdPVw== 62400\nKGN1c3RvbQ== 62401\nIGlzRW5hYmxlZA== 62402\nQkFU 62403\nX2RpYWc= 62404\nX0dVSQ== 62405\nSGVhdA== 62406\nIGFzc2VtYmxpZXM= 62407\nIENldHRl 62408\nL2NhcmQ= 62409\nIERlY2xhcmU= 62410\nIHVwaGVsZA== 62411\nIENsYXVk 62412\nLWZsb3c= 62413\nIGhvb2t1cA== 62414\nSVJR 62415\nRmF0aGVy 62416\nRGVsZXRlcw== 62417\nKSk7Ly8= 62418\nIFBUU0Q= 62419\nKTsNDQo= 62420\nZWdhbA== 62421\nLmFycm93 62422\nIE1QVQ== 62423\nw7Nq 62424\nIG1vdGl2YXRl 62425\nIEthdGhlcmluZQ== 62426\nLmZyYW1lcw== 62427\nIHRoaQ== 62428\nPFJlc3VsdA== 62429\nLmdyYXk= 62430\nIEt1c2huZXI= 62431\nIENlbWVudA== 62432\nIEJ1cmw= 62433\nSW50ZXJ2aWV3 62434\nPSciLg== 62435\nUE9XRVI= 62436\nIENEcw== 62437\nIFsmXSg= 62438\nIGNoYW5nZXI= 62439\nPj4sCg== 62440\nLXdl 62441\nIENMSw== 62442\nIEFkcmk= 62443\nIGNpbA== 62444\nPVg= 62445\nIHNlbmRv 62446\nIENlbHNpdXM= 62447\nYmxvY2tlZA== 62448\nT3V0T2ZCb3VuZHM= 62449\nLiE= 62450\nb3Byb2plY3Q= 62451\nYW5kZXM= 62452\nZWRpdGluZw== 62453\nIHB1bXBlZA== 62454\nKCk7fQo= 62455\n4Ka/ 62456\nX0VWRU5UUw== 62457\nIEZyaWVkbWFu 62458\nID4v 62459\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62460\nIHRlbXB0YXRpb24= 62461\nIElwc3Vt 62462\nIENlcw== 62463\nIG5vdGljaW5n 62464\nX2VsZQ== 62465\nQWNjZW50 62466\nIE52aWRpYQ== 62467\nIGFtdXNlbWVudA== 62468\nIGludHJvZHVjdG9yeQ== 62469\nCXJldHZhbA== 62470\nIGxpbA== 62471\naXJpbQ== 62472\nZW5xdWV1ZQ== 62473\nLWhpc3Rvcnk= 62474\nIGNvdW5zZWxvcg== 62475\nVFJBTlNGRVI= 62476\nX1ZlY3Rvcg== 62477\nY2F0ZWdvcnlJZA== 62478\ncGVyeQ== 62479\nRklMVEVS 62480\nKHJlbW90ZQ== 62481\nIHNlcGFyYXQ= 62482\nIEVtYmVkZGVk 62483\nIEJhY29u 62484\ndGVycmFmb3Jt 62485\nIHJlc3BlY3RhYmxl 62486\naWNoYQ== 62487\nYWlj 62488\nKydc 62489\nIHN0cmF5 62490\n0LXQvdC40Lk= 62491\nIEF1ZGl0b3I= 62492\nZW50aWNhdG9y 62493\nIGNsb2Fr 62494\nIFVOS05PV04= 62495\nIEFtZW4= 62496\ndm94 62497\nYXN0cmVldA== 62498\nLi4uXQ== 62499\nIGAl 62500\nLXByb3BlcnR5 62501\nIFF1YWxjb21t 62502\nZWRpdGVk 62503\nIGRpc2NyZWV0 62504\nLU11c2xpbQ== 62505\nLnJlY2lwZQ== 62506\nIHZhbmRhbA== 62507\nIHXFvHk= 62508\nc2VuaGE= 62509\nLGlz 62510\nIFBvbXBl 62511\nIEtuaWNrcw== 62512\nKCknLA== 62513\nKHRi 62514\nIEhJRA== 62515\nIHBldw== 62516\nIGNhcnJvdHM= 62517\nIHBvbGljeW0= 62518\nLmxp 62519\nIHR3ZW50aWV0aA== 62520\nX3Byb21wdA== 62521\nc2NlbmFyaW8= 62522\nLkpGcmFtZQ== 62523\nIE1RVFQ= 62524\nIEluZGl2aWR1YWxz 62525\ndG9NYXRjaFNuYXBzaG90 62526\nw61zdGljYXM= 62527\nIkQ= 62528\nIGZvZA== 62529\nIHJpY2h0 62530\nIFphcg== 62531\nIHJlc3VycmVjdGlvbg== 62532\nIG1pbGl0YXI= 62533\nIE1hbmFnZXJz 62534\nX0dSSUQ= 62535\nbm9ubnVsbA== 62536\nQkVSVA== 62537\nT3V0cHV0cw== 62538\nICAgIAoKCg== 62539\nIHByZWRlY2Vzc29ycw== 62540\nIGlzU2VsZWN0ZWQ= 62541\nIGN5YmVyc2VjdXJpdHk= 62542\n5YaZ 62543\nLm1j 62544\nUXVp 62545\nIGFsbGVnaW5n 62546\nIHRpYw== 62547\nTWFudWZhY3R1cmVy 62548\nIEVuaGFuY2Vk 62549\nIEJpeg== 62550\nIHJlYWRPbmx5 62551\nw7Ru 62552\nIGx1bWJlcg== 62553\nYWVk 62554\nIHJhaW5z 62555\ncHJvdmlkZQ== 62556\nTGF0ZQ== 62557\nIHBlZGVzdHJpYW5z 62558\namF2 62559\nQWN0aXZhdGlvbg== 62560\nJ0JyaWVu 62561\nIHZhY2FuY3k= 62562\nLy8t 62563\nIGJsYWRkZXI= 62564\nIGFnaWxl 62565\nIHN0ZWFscw== 62566\nIHJlZ2lzdHJhcg== 62567\nIGVsZWN0b3JhdGU= 62568\nR292ZXJubWVudA== 62569\nJ109Ig== 62570\nYWxidW1z 62571\nZWxlY3Rpb24= 62572\nYWJs 62573\nIE9yaWVudA== 62574\nIHBpcmF0ZXM= 62575\nIGxvb3Bo 62576\nCXJlYWRlcg== 62577\nIMO6bHRpbW8= 62578\nIFBldHJv 62579\nINGB0YLRgNCw0L3QuNGG 62580\nIHNhbXA= 62581\naW52ZXJzZQ== 62582\nLmdyYWRsZQ== 62583\nIERvbnQ= 62584\neG9u 62585\nIGNyZWFk 62586\nZXJ0aWxpdHk= 62587\ncmdjdHg= 62588\nIHBvbMOtdGljYQ== 62589\nVmFsdWVDaGFuZ2Vk 62590\nQXBpUmVzcG9uc2U= 62591\nY29tYm8= 62592\nIFVY 62593\nIGRhaGE= 62594\nJ2Fu 62595\nLW15 62596\n4oCcTXk= 62597\ncGVl 62598\nbGF0bG9uZw== 62599\nXEJhc2U= 62600\nLndpaw== 62601\nIFBPVA== 62602\nIHB1bmN0dWF0aW9u 62603\ncXVz 62604\naW55aW4= 62605\nPW1pbg== 62606\nIG51Y2xldXM= 62607\nIGNvbmNlc3Npb25z 62608\nLmF2ZXJhZ2U= 62609\ndXNlcmluZm8= 62610\nIHRhYmxlc3Bvb24= 62611\nIE5laWdoYm9yaG9vZA== 62612\nKFRocm93YWJsZQ== 62613\nPnY= 62614\nb3Z5 62615\nWFhYWFhYWFg= 62616\naXN0aQ== 62617\nIGJhcnQ= 62618\n77u/Cg== 62619\nRW5jcnlwdA== 62620\nPWVuZA== 62621\nIGluY3Vy 62622\nIHBlcnRpbmVudA== 62623\nX01JTk9S 62624\nKSI+Cg== 62625\nY2hpZWY= 62626\nIHZk 62627\nKGAK 62628\ndXJneQ== 62629\nYWJ5cmludGg= 62630\nIFNoYXBlcw== 62631\nIHZhZ3k= 62632\nLmRkcw== 62633\nbWVtY21w 62634\nCUl0 62635\nc2VtZXN0ZXI= 62636\nIEVtaXQ= 62637\nIGluc2Fu 62638\nIGJydXNoZWQ= 62639\nX0ZBVEFM 62640\nImVycm9ycw== 62641\nIGRpc3J1cHRpdmU= 62642\nJW4= 62643\nIGNvbXBvc2l0aW9ucw== 62644\nIGJhY2hlY2E= 62645\nIGRpc2FncmVlbWVudA== 62646\nUHJvdGVjdA== 62647\nTElLRQ== 62648\nLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 62649\nIHdlaXRlcmU= 62650\nIE1vbmFjbw== 62651\nXzw/ 62652\nIG1vZGVsZWQ= 62653\nc3RlZWw= 62654\nZWVudGg= 62655\nIFtdKS4= 62656\nKHJlZ2V4 62657\nZW5pZQ== 62658\nLkZsdXNo 62659\nLnBvcHVw 62660\nIE92ZXJz 62661\nLkRlYnVnZ2Vy 62662\nPmA7Cg== 62663\nbml0ZQ== 62664\nLnF1b3Rl 62665\nIGNvZw== 62666\nIHdha2Vz 62667\nIFdyZXN0bGluZw== 62668\nSW50cm8= 62669\nIHNlcmRl 62670\nIHJldXNhYmxl 62671\nIENvbXBvdW5k 62672\nSW1wbE9wdGlvbnM= 62673\nCUl0ZW0= 62674\nIG51bU9m 62675\nIENIUg== 62676\nIEJvbHRvbg== 62677\nUExVUw== 62678\nYm91bmRpbmc= 62679\nKCsr 62680\nICIsIjsK 62681\nIEd1ZXN0cw== 62682\nIGRlcHJpdmVk 62683\nIG1lbG9keQ== 62684\nWklQ 62685\nPj4oKQ== 62686\nIGNvbmNlZGVk 62687\nX2RpZQ== 62688\nIGpveXN0aWNr 62689\nIGFuYXRvbXk= 62690\nIFRvb2xTdHJpcA== 62691\nIEVub3VnaA== 62692\nIio= 62693\naW50b3No 62694\naGFiaQ== 62695\nIFN5cmFjdXNl 62696\nIEluY3JlYXNlZA== 62697\nTXVz 62698\nLnBhdGllbnQ= 62699\nIGluY3JlbWVudHM= 62700\nIFBJWA== 62701\nIGJvb3R5 62702\nLnByaXZhdGU= 62703\nZXJ0b2lyZQ== 62704\nIGN1dHRlcg== 62705\nIGJla2Fu 62706\nIGRyYXdlcnM= 62707\nX0FMSUFT 62708\nQW5pbWF0aW5n 62709\nX2Fuc3dlcnM= 62710\nLmF0dGFjaw== 62711\nd3JpdGVycw== 62712\nIGdhYW4= 62713\naWtvbg== 62714\nCWNvbnRyb2xsZXI= 62715\nIGZhY2FkZQ== 62716\nk+WQjQ== 62717\nLHN0YXR1cw== 62718\nLmZl 62719\nIHBvc3Rwb25lZA== 62720\nIEZvbnRz 62721\nIEJlbmNobWFyaw== 62722\naWRlbnRhbA== 62723\nIGNoaWxsaW5n 62724\nIEtpZXY= 62725\nIGJydXNoZXM= 62726\nLXdoZWVs 62727\nIEhpcmU= 62728\nKHByb2M= 62729\nIGNoZW1vdGhlcmFweQ== 62730\nINCx0YvRgtGM 62731\nIE5vbGFu 62732\nKGllcnI= 62733\nIEp1ZGU= 62734\nLUF1Zw== 62735\ndW1ub3M= 62736\nY29udmVyc2F0aW9u 62737\nIEJlaGF2aW9yU3ViamVjdA== 62738\nYmF1Z2g= 62739\nIGd1aXRhcmlzdA== 62740\nLm9mZmVy 62741\nIGFjY3VzZQ== 62742\ncGFyZA== 62743\ncmVmZg== 62744\nLlJlYWN0 62745\nIHVjaGFy 62746\nIG9mZnNldG9m 62747\nJHN0YXR1cw== 62748\nL2VtYWls 62749\nLmNvbm5lY3RlZA== 62750\nLys= 62751\nQHFx 62752\nYXJhdmVs 62753\nIGZ2 62754\nLlBlcnNpc3RlbnQ= 62755\nZW5zdGVpbg== 62756\nLi4uXQoK 62757\nLmdyaWRWaWV3 62758\nIEpPQg== 62759\nLScuJA== 62760\nLmxheW91dENvbnRyb2w= 62761\nIGNhcmc= 62762\nIEtvdA== 62763\nX2VxdWFscw== 62764\nIHdpdGhkcmV3 62765\nQVRFU1Q= 62766\nLWJ1dHRvbnM= 62767\nCVVQUk9QRVJUWQ== 62768\nIFVJR3JhcGhpY3M= 62769\nIFB1YmxpY2F0aW9ucw== 62770\nIElOVEVSTg== 62771\nIGV0aGFub2w= 62772\nw6RuZ2Vy 62773\nU0VORA== 62774\nCXNsb3Q= 62775\n0LvQtdC90LjRjw== 62776\nIHBhc28= 62777\nX2V4dGVuZGVk 62778\nb3J0aGFuZA== 62779\nKHNoZWV0 62780\nIHByb2NlZHVyYWw= 62781\nIGtpZG5hcHBpbmc= 62782\nLy8tLS0tLS0tLS0tLS0tLS0t 62783\nW21zZw== 62784\nT2NjdXJyZWQ= 62785\nQWxpY2U= 62786\nIENBU1Q= 62787\nIGthdGE= 62788\n5rOo5YaM 62789\nY2hlYXA= 62790\naWNpdHk= 62791\nIHJlYWRpbmVzcw== 62792\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62793\nIFNZTg== 62794\nIE1hZ2dpZQ== 62795\ncmljYQ== 62796\nIHlp 62797\nIFR3ZQ== 62798\naWdub24= 62799\nYW5kZW4= 62800\nIGpxdWVyeQ== 62801\nIHN0YXJ0WQ== 62802\nIGF2ZW51ZQ== 62803\nQW50aA== 62804\nX2NhcHRpb24= 62805\nIFJvd3M= 62806\nwq/Cr8Kvwq8= 62807\nc2VxdWVuY2Vz 62808\n0LjRhA== 62809\nKCIvIikK 62810\nY3JhdGU= 62811\nIFNhZ2E= 62812\nSnVk 62813\nIGZhY2V0cw== 62814\nX3NjYWxlZA== 62815\nUnVieQ== 62816\nIFBR 62817\nIGNydXM= 62818\nSXJhbg== 62819\nLnNxdWVlemU= 62820\nCWZk 62821\nIHBlcmNl 62822\nIGRhdGFw 62823\nXl5eXg== 62824\nX1NDT1BF 62825\nIFNhbG1vbg== 62826\nIHRhaWxsZQ== 62827\nIFZhbG9y 62828\nQUdFTUVOVA== 62829\nUnA= 62830\nIEd1YXJkaWFucw== 62831\nIHJlYWRGaWxl 62832\nIG5lZ3Jv 62833\nIG9icmE= 62834\nLlBhcmNlbA== 62835\nQ0FDSEU= 62836\ncmV0Y2hlZA== 62837\nY3Jt 62838\ncXJzdA== 62839\nb3VmbA== 62840\n7ZqM 62841\nLm5vbQ== 62842\nc3NpZA== 62843\nIHNhZmVzdA== 62844\nLkVycm9ycw== 62845\nX3BuZw== 62846\nQ29udmVydGVyRmFjdG9yeQ== 62847\nPFNlbGY= 62848\nIHNlcGFyYXRlcw== 62849\nX2pCdXR0b24= 62850\nIG1pc3VzZQ== 62851\nZXhjZXB0aW9ucw== 62852\nIFt7Ig== 62853\nIFBBRA== 62854\n562+ 62855\na0h6 62856\nPWVu 62857\nIGjDoG5n 62858\nSFo= 62859\nIFhhdmllcg== 62860\ne2lk 62861\nIHN0YWlyY2FzZQ== 62862\ndGV4dGZpZWxk 62863\nL2RvY2tlcg== 62864\nKHRhYmxlTmFtZQ== 62865\nIHRlbGVjb21tdW5pY2F0aW9ucw== 62866\nb25zbw== 62867\nb2Ns 62868\nUGFyZW50cw== 62869\nL3BhcnNlcg== 62870\nLWRyb3A= 62871\nKHN0eWxlcw== 62872\nX21vZGlmaWVy 62873\nUmVxdWVzdElk 62874\nLmJyYW5k 62875\nIENvaW5z 62876\nIGt1bnQ= 62877\nLkdy 62878\nIEhJU1RPUlk= 62879\nKGRyb3A= 62880\nQnJhZA== 62881\nIHNla3Np 62882\nX3Nkaw== 62883\nIGluc3BlY3RlZA== 62884\ncHJlZGljYXRl 62885\nLmZp 62886\nR09S 62887\nIGNvY29h 62888\nIElRdWVyeWFibGU= 62889\nLS0tPC8= 62890\nIGRlcm5pZXI= 62891\nIFVzZXJEZWZhdWx0cw== 62892\nX1RT 62893\nIGVvcw== 62894\nIGJsZW5kZXI= 62895\nIGxvdWRlcg== 62896\nU3BhbmlzaA== 62897\nbGluZXI= 62898\nXHdpZGdldHM= 62899\nIHNjaGVtYXM= 62900\nX0NBUFRVUkU= 62901\nLm1pY3Jv 62902\n44Kt 62903\nIPCfkQ== 62904\nIGFuZGVy 62905\nYWx0dW5n 62906\nID09Jw== 62907\nIGVuZm9yY2luZw== 62908\nIEV4aXN0 62909\ndXZ3 62910\naXJ0c2NoYWZ0 62911\nIEdyZWF0ZXN0 62912\nIE1vc3Vs 62913\nX3Bv 62914\nIHNpbW1lcg== 62915\nIHByb2dyZXNzZWQ= 62916\nIHJvdGFyeQ== 62917\nIG50bw== 62918\nTm9pc2U= 62919\nIGNoYXNlZA== 62920\nIGluc3RpbmN0cw== 62921\nUHVibGljS2V5 62922\nIHNuYXBzaG90cw== 62923\nIFN1cGVydg== 62924\nLm1hYw== 62925\nIEJpYmxp 62926\nLi4uKQoK 62927\nCW9sZA== 62928\nS0VO 62929\nIENsaW0= 62930\nIFByb2dyZXNzRGlhbG9n 62931\nbGljYW50cw== 62932\nX3NsaWRl 62933\nK2g= 62934\nIGVtcG93ZXJlZA== 62935\nSW5qZWN0b3I= 62936\nIGluZmx1ZW56YQ== 62937\nIHBsYW5ldGFyeQ== 62938\nV2lsbGlhbXM= 62939\nIG1vbmQ= 62940\nZW5hbg== 62941\nLnJhbmRvbVVVSUQ= 62942\nKFBvc2l0aW9u 62943\nIGhvbWJyZXM= 62944\nIGluc2VjdXJl 62945\nIHZlcmJz 62946\nX3JlY3RhbmdsZQ== 62947\nSU5TVEFMTA== 62948\nIFBhcnNlRXhjZXB0aW9u 62949\nX1RB 62950\nJGZpZWxk 62951\nLkltYWdlSWNvbg== 62952\nIEd1amFyYXQ= 62953\nLWxpdmVk 62954\nX3NvbWU= 62955\nIGNsaXBwaW5n 62956\nLmdldENvbXBvbmVudA== 62957\nLmNsb3Nlc3Q= 62958\nLmxpdmU= 62959\nIGluY2lk 62960\nDQoJCQ0K 62961\nIHByb2R1dG9z 62962\nX211c2lj 62963\nU3FsQ29ubmVjdGlvbg== 62964\nIFByZWRpY3Rpb24= 62965\nIFhU 62966\nLW5vdGVz 62967\nIEpld2Vscnk= 62968\ncmVtZW4= 62969\nKHJlYXNvbg== 62970\nU25hcA== 62971\nQWZmaW5lVHJhbnNmb3Jt 62972\nYW5nZWxvZw== 62973\nIGRpY3RhdGU= 62974\nIHpvc3Rh 62975\nQmFyQ29udHJvbGxlcg== 62976\nL3Nob3A= 62977\nZWlk 62978\nLXN3 62979\nQ291cnNlcw== 62980\nZm9udFdlaWdodA== 62981\nIEhvZmZtYW4= 62982\nX051bQ== 62983\nS1I= 62984\nIFdpbGxpZQ== 62985\nYXJrYW4= 62986\nLXNjYWw= 62987\nIGF1ZGl0aW9u 62988\nLmRpc2M= 62989\nIHR3aXN0cw== 62990\nIGRlcGljdHM= 62991\nIGJhbnlhaw== 62992\nIEtpdHM= 62993\nIEhlemJvbGxhaA== 62994\nbm9ydGg= 62995\nIEdSRQ== 62996\nw7Zn 62997\ncXVvaQ== 62998\nLXRocmVhdGVuaW5n 62999\nIHdvcm1z 63000\nIFBO 63001\nIHNleGRhdGU= 63002\nIG1vbnVtZW50cw== 63003\nTU1D 63004\nYm90cw== 63005\nIFNETEs= 63006\nZGVhdGg= 63007\nIHBpdHM= 63008\nX2Nob2ljZXM= 63009\nKHNvbHV0aW9u 63010\nIHByb2NsYWltZWQ= 63011\nIFFpbmc= 63012\nIHNzY2FuZg== 63013\nc3RyYXRlZ3k= 63014\nZGVhdXg= 63015\nIEZpc2NoZXI= 63016\nX0lW 63017\nIGlud2FyZA== 63018\nRGF0ZVBpY2tlcg== 63019\nIHNld2Vy 63020\nIGV1cm9w 63021\nIGhvbWVsZXNzbmVzcw== 63022\nLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63023\nIFNwYWNlWA== 63024\nIGluZm9ybWluZw== 63025\nICch 63026\nIHBsYXN0ZXI= 63027\nSW5pdGlhbGl6YXRpb24= 63028\nLmJldGE= 63029\nIFBlcnNvbnM= 63030\ndWdnbGluZw== 63031\nIHNoYW1wb28= 63032\nIEplaA== 63033\nIHNlcnI= 63034\nIG1heFNpemU= 63035\nIHN0aXRjaGVz 63036\nW3BhdGg= 63037\nLnJldA== 63038\nIFByZXQ= 63039\nTmVpbA== 63040\nQ29udmVydGVk 63041\nIE1hemRh 63042\nUE9TSVQ= 63043\nVG9vbGtpdA== 63044\nIFJFQURNRQ== 63045\nQ3VzdG9tQXR0cmlidXRlcw== 63046\nYXJjaGl2bw== 63047\nLlBhaW50 63048\nZ2V0T2JqZWN0 63049\nSVE= 63050\nLldlYkRyaXZlcg== 63051\nIGFudGlib2R5 63052\nIExpbWE= 63053\naW5jb3JyZWN0 63054\nRnJhY3Rpb24= 63055\nIERlYWRsaW5l 63056\nc2VuZE1lc3NhZ2U= 63057\nLk9mZnNldA== 63058\nZWRpbw== 63059\nINeQ 63060\nIHNtb290aGluZw== 63061\nLmJv 63062\nIENFTlQ= 63063\nZWxhc3RpYw== 63064\nLmNoYXJDb2RlQXQ= 63065\nUmVmcmVzaExheW91dA== 63066\nQUdFRA== 63067\nKTtcCg== 63068\nIFtdKQoK 63069\nIHRhcHM= 63070\nRFY= 63071\n4oCV 63072\nIENveQ== 63073\nIG91dHdlaWdo 63074\nJ2dj 63075\nXEV4Y2VwdGlvbnM= 63076\nIEdyYW1tYXI= 63077\nIEd1YXRlbWFsYQ== 63078\nIEd1cnU= 63079\nIHRlag== 63080\nIGZyaWVuZHNoaXBz 63081\nIGNvcGluZw== 63082\nKHVwZGF0ZWQ= 63083\nX2R4 63084\nQW5hbA== 63085\nLU1heQ== 63086\nIG1hdGNobWFraW5n 63087\nIGp1bnRv 63088\nUEFDS0FHRQ== 63089\nIHJlbnRz 63090\nIOiHqg== 63091\nY2FrZXM= 63092\n44CCJywK 63093\ncmVuZGluZw== 63094\nX0ZyYW1ld29yaw== 63095\nLSk= 63096\nKHVwbG9hZA== 63097\nIG9wb3J0dW4= 63098\nIGNhdXNh 63099\nIHByb2xpZmlj 63100\nUm93Q291bnQ= 63101\nIG5hY2t0ZQ== 63102\nIFNveQ== 63103\nU2h1dGRvd24= 63104\n6Ig= 63105\nX0VYUEk= 63106\nIEhhcmJvdXI= 63107\nIHRvcmU= 63108\nXE1lc3NhZ2U= 63109\nL1U= 63110\nT01CUkU= 63111\nLnNlZ21lbnQ= 63112\nIGNvbWVk 63113\ncm9tYW4= 63114\nIHNlZ8O6bg== 63115\nU2lnbWE= 63116\nIHNraWluZw== 63117\nIFRlcnJhaW4= 63118\nIGJlbmNobWFya3M= 63119\nIEF0dGVudGlvbg== 63120\nIH0qLwoK 63121\nIGdlaWw= 63122\nIGNhcnRvb25z 63123\nIGF0dHJpYnV0aW9u 63124\nIHJvdG9y 63125\nZW5oYQ== 63126\nIM6z 63127\nIHRyYWo= 63128\nIGPDtG5n 63129\nIHNoYWtlcw== 63130\nIENsZW1zb24= 63131\nIGJydXRhbGl0eQ== 63132\nIDsNCg0K 63133\nIGVpZ2h0ZWVu 63134\nIEF3YXJlbmVzcw== 63135\nKHJlc3Q= 63136\nIHZpb2xpbg== 63137\nX1JPVVRF 63138\nLkZpZWxkTmFtZQ== 63139\nIEFkZQ== 63140\naXppYQ== 63141\nIEhlbG0= 63142\nIHR5aW5n 63143\nIFByb2dyZXNzQmFy 63144\nYXV0b3I= 63145\nIGxvbmRvbg== 63146\nJnc= 63147\nZ29v 63148\nSVNUUlk= 63149\nL0NyZWF0ZQ== 63150\nIFVTSU5H 63151\nIEdY 63152\nIEVGRkVDVA== 63153\nRmNu 63154\nIEVuY3J5cHRpb24= 63155\nQ0VE 63156\nZmluZQ== 63157\nLWFycmF5 63158\nIHB1c2hWaWV3Q29udHJvbGxlcg== 63159\nQCQ= 63160\nVXBsb2FkZWQ= 63161\nLXdyaXRl 63162\nLmdldFBhZ2U= 63163\nX2VzdGFkbw== 63164\nQU5UTFI= 63165\nIFZpZXdEYXRh 63166\nICR7KA== 63167\nIGFsbW9uZA== 63168\nIExvZ2ljYWw= 63169\nIHNob290ZXJz 63170\nIOygnA== 63171\nIHB1ZmY= 63172\nIHVuY29tbWVudA== 63173\nIGN1c3RvbWl6YWJsZQ== 63174\nxINy 63175\nRGlyZWN0aXZl 63176\nCWlkeA== 63177\nQ2hhbGxlbmdl 63178\nIHN1bW1hcml6ZQ== 63179\nIEF2Zw== 63180\nLlVzZXJJRA== 63181\nLmRpc3BhdGNoRXZlbnQ= 63182\nIGNvb2tlcg== 63183\nIGNvbm5lY3Rpb25TdHJpbmc= 63184\nIHNocmlua2luZw== 63185\namFk 63186\nIFRoZW1lcw== 63187\nYW5kYXRvcnk= 63188\nIGR1YmlvdXM= 63189\nIGNlcA== 63190\nc3Bpbm5lcg== 63191\nIHN1YnJlZGRpdA== 63192\nIGlpaQ== 63193\nL2NhY2hl 63194\nZGVmZXI= 63195\nIHN1YnN0aXR1dGVk 63196\nIGd1bm1hbg== 63197\nY2xpbmc= 63198\nIOyw 63199\nKGN0cmw= 63200\nT3JkZXJJZA== 63201\nX2VuZw== 63202\nIGZpbG1tYWtlcnM= 63203\nIGZvcndhcmRpbmc= 63204\nIHN0cmFuZGVk 63205\nIExlYW4= 63206\nIOunjA== 63207\nKFVuaXQ= 63208\nIGRpZFNldA== 63209\nbGFrZQ== 63210\nZ3JvdW5kcw== 63211\n5Zug 63212\nIHVucmVnaXN0ZXI= 63213\nIG1pbmhh 63214\nIFZlZ2Fu 63215\nCWlWYXI= 63216\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 63217\nb3R0bGU= 63218\nSVBD 63219\nIHByYWdtYQ== 63220\nIElJRA== 63221\nX01pbg== 63222\nJTsiPgo= 63223\nX3JhbQ== 63224\nZHJpdmVycw== 63225\nIENoaWNr 63226\nIGNscg== 63227\nX0JVRkY= 63228\nINCy0YvQsQ== 63229\nTWVyYw== 63230\nanV2ZW4= 63231\nIHNoaW0= 63232\n0YvRhQ== 63233\nIHRoZW9yZXRpY2FsbHk= 63234\nL2ZvcnVt 63235\nIHNwaWRlcnM= 63236\nIGdvb3Nl 63237\nIFBob3Rvbg== 63238\nIHByb2ZpY2llbmN5 63239\nIENsZXJr 63240\nX2ZpZw== 63241\nQ29uY2Vybg== 63242\nKGNvc3Q= 63243\nIHJlZGQ= 63244\nLmVudmlyb25tZW50 63245\nQ3JvcA== 63246\nIOKJpQ== 63247\neWVjdG9z 63248\nLkJhdGNoTm9ybQ== 63249\nLWNvbXA= 63250\nJGltYWdl 63251\nIE5pa29u 63252\nIGRtZw== 63253\nWzo6LQ== 63254\nUExM 63255\ndW5jaW9z 63256\nZm9jdXNlZA== 63257\nIHR1bw== 63258\nIGh2b3JkYW4= 63259\nIGF0dGFpbmVk 63260\nIHByb3RlY3Rvcg== 63261\nIEthbnQ= 63262\nIHNob3Jlcw== 63263\nIEV0aGFu 63264\nX3NjaG9vbA== 63265\nIG5lYXRseQ== 63266\nLlNoYXBlcw== 63267\nIE5lbQ== 63268\naGNw 63269\nLicvJy4k 63270\nIE3DqXhpY28= 63271\nc3RydWN0dXJpbmc= 63272\nIGxha2g= 63273\nIGFkcmVzc2U= 63274\nJywnIw== 63275\nIEhhc2tlbGw= 63276\nX0VOR0lORQ== 63277\nIHJlcGVudA== 63278\nIGN1Y2s= 63279\nLkZJRUxE 63280\nIFNrZQ== 63281\nQEBAQA== 63282\nSGl0cw== 63283\nIGltcGxhbnRz 63284\nIENvbnN0aXR1dGlvbmFs 63285\nIFBIUFVuaXQ= 63286\nIHRvaWxldHM= 63287\nLmFsYnVt 63288\n5LiL6L29 63289\nCXNldFN0YXRl 63290\nKCItLS0tLS0tLS0tLS0tLS0t 63291\nLkFtb3VudA== 63292\nZWN0dXJl 63293\nIFRob3VzYW5kcw== 63294\nTmVpdGhlcg== 63295\nIHByZXNldHM= 63296\nIEFzc3VtZQ== 63297\nKGZhY3Rvcnk= 63298\nIGxpY2s= 63299\nIGdvYWxrZWVwZXI= 63300\nPFN0YXRl 63301\nLXNlY3VyaXR5 63302\nX2ll 63303\nZXNrdG9w 63304\nIEx2 63305\nIFN5bXBob255 63306\nLnNhbXBsZXM= 63307\nIGh5cGVydGVuc2lvbg== 63308\nxYJ1 63309\nLmp1c3Q= 63310\nTWVuc2FqZQ== 63311\nIT0t 63312\nPFRLZXk= 63313\nIHNweWluZw== 63314\nLGRhdGU= 63315\nb3JnYW5pemVk 63316\nICAgICAgICAgIA0K 63317\nKGN1ZGE= 63318\nX01ldGFkYXRh 63319\ndWJpc2hp 63320\nLUJlbno= 63321\nX0Fzcw== 63322\nIEVsc2VJZg== 63323\nIGxlc2lvbnM= 63324\nIFByZXN0b24= 63325\nVGVjaG5pY2Fs 63326\nIHBsYXRpbnVt 63327\nL3Bp 63328\nSW5kZXhlcw== 63329\nIHBhcmFwaA== 63330\nIG92ZXJ0aHJvdw== 63331\naXBhdGVk 63332\nb250b2xvZ3k= 63333\nIGRlbW9ncmFwaGljcw== 63334\nIGNhbmU= 63335\nIHByb2ZpdGFiaWxpdHk= 63336\nIGVzdGFibGlzaG1lbnRz 63337\nXSY= 63338\nOmFic29sdXRl 63339\nZW50cmFkYQ== 63340\nVHA= 63341\nIHNoYXJlaG9sZGVy 63342\nLidf 63343\n5aaC5p6c 63344\nbnBq 63345\ndnJpcg== 63346\nIEVYRUM= 63347\nIFBvbGljaWVz 63348\nIGZlbGxvd3NoaXA= 63349\nIENHUmVjdEdldA== 63350\nX3JlY2lwZQ== 63351\nX1JFQw== 63352\ndW51 63353\nIHJvYmJlZA== 63354\nIHR1cm1vaWw= 63355\nKTo6 63356\nLnN0YXJ0RGF0ZQ== 63357\nIGV2YWN1YXRlZA== 63358\nLWVxdQ== 63359\nIGZvdXJ0ZWVu 63360\nQFNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63361\nIOaVsOaNrg== 63362\nbmFudHM= 63363\ndGhyZW4= 63364\nU29ueQ== 63365\nREZT 63366\nLWNpZ2FyZXQ= 63367\nIGFnZ3JhdmF0ZWQ= 63368\nIG5lZGVybGFuZA== 63369\nIEZ1ag== 63370\ndWNlcw== 63371\nL3VzZQ== 63372\ndW1tZXI= 63373\nKFNURA== 63374\n6rCE 63375\nKj4m 63376\nLnBlcmNlbnQ= 63377\naWFudHM= 63378\nIEN0 63379\nVkFT 63380\nX1RIRU1F 63381\nIHNuaXBlcg== 63382\nX0VM 63383\nLXdvcmtlcnM= 63384\nU25vdw== 63385\nIEF1cmE= 63386\naWVnbw== 63387\nIEdsb2I= 63388\nTmFtZWRRdWVyeQ== 63389\nX0JH 63390\nIExpdmVEYXRh 63391\nIFNlbmRNZXNzYWdl 63392\nIHJlc3BvbmRzVG9TZWxlY3Rvcg== 63393\nZW5jZXJz 63394\naW5zdHJ1Y3Rpb25z 63395\nKEl0 63396\n5ZG95ZGo5pyf 63397\nIEdvbWV6 63398\nY2hhcmdlcw== 63399\nLkdlbmVyYXRlZFZhbHVl 63400\nIE1hY3Jvbg== 63401\nKFBPUlQ= 63402\nIFByb2Nlc3Nlcw== 63403\nLm9uUmVzdW1l 63404\nIGZpZQ== 63405\nQnVpbGRlcnM= 63406\nKWdldA== 63407\nX3dhbGxldA== 63408\nIGNhbmM= 63409\nIE1vYmlsaXR5 63410\nIGFsYXJtcw== 63411\ncm9zaXM= 63412\nYW1hw7Fv 63413\nIHBpcw== 63414\nIOODuw== 63415\nU2hh 63416\nIGNvbmZlc3NlZA== 63417\nKElORk8= 63418\nKCcsJw== 63419\nX1NlcnZlcg== 63420\nIGJsYXN0ZWQ= 63421\nIEZhcm1lcnM= 63422\ncnV6 63423\nY2tlZGl0b3I= 63424\nX0lNUExFTUVOVA== 63425\nIG1vdHRv 63426\nIENBUkU= 63427\nIHlkaw== 63428\nQm9uZQ== 63429\nIGFkZW3DoXM= 63430\nKyIvIis= 63431\nUHJvcFR5cGVz 63432\nX1Na 63433\nLnBhaW50 63434\nLnBpeGVs 63435\nIE1lc3NhZ2VUeXBl 63436\nIHR3ZWFrcw== 63437\nYC4KCg== 63438\nVmVyaWZpY2F0aW9u 63439\nbmVjaw== 63440\nYmVycmE= 63441\nIG1pbmRmdWw= 63442\nU3Vydg== 63443\nIDotCg== 63444\nIGFueXdheXM= 63445\nIEFkbWlzc2lvbg== 63446\nYWNjZXNzaWJsZQ== 63447\nRmxhdEJ1dHRvbg== 63448\nICInIik7Cg== 63449\nIGhhaGE= 63450\nVG9Qb2ludA== 63451\nIGJ1cmdlcnM= 63452\nZ2V0U3RhdGU= 63453\nXEhlbHBlcg== 63454\nIEZVTkNU 63455\nIEVMRU1FTlQ= 63456\nIENFUlQ= 63457\nIEFDQ09VTlQ= 63458\nY2hhcmdpbmc= 63459\nX2NhbmRpZGF0ZQ== 63460\nX3JlY2VudA== 63461\nIEluc3RydWN0b3I= 63462\nIGRydW5rZW4= 63463\nWVNRTA== 63464\nb3JhdGl2ZQ== 63465\nIjoiIg== 63466\nIHRhZ05hbWU= 63467\nX05FRw== 63468\nIHFw 63469\nIFVuZGVmaW5lZA== 63470\nIGdyZWFzZQ== 63471\nCSAgCQ== 63472\nIGVhZ2VybHk= 63473\nVGV4UGFyYW1ldGVyaQ== 63474\nZGlzdHJpYnV0ZWQ= 63475\nQWRtaW5pc3RyYXRvcg== 63476\nRGlzdHJpYnV0aW9u 63477\nIERlY29tcA== 63478\nIFRyYW5zZm9ybWVy 63479\nLmJ0blNhdmU= 63480\nIEdvcw== 63481\nKEVudW0= 63482\nY2Fpcm8= 63483\nLWNp 63484\nL3JlcG9ydA== 63485\nIFBvc3Rlcg== 63486\nX2RlcGVuZGVuY3k= 63487\nIGV4cGxvaXRz 63488\nc2V0Rmxhc2g= 63489\nIHh0 63490\nIGpld2VsbGVyeQ== 63491\nIGRhaQ== 63492\nX1JBTQ== 63493\nIGJlcnJpZXM= 63494\nIGdyYW5ueQ== 63495\nRmF0YWw= 63496\nw6lhbA== 63497\nLW1vc3Q= 63498\nLlZpc3VhbEJhc2lj 63499\nIFBlbmQ= 63500\nYmVp 63501\namFr 63502\nOyovCg== 63503\nQm95 63504\nPlNlbGVjdA== 63505\naW5kcmljYWw= 63506\nVGVjaG5vbG9neQ== 63507\nIEFsbGlzb24= 63508\nZGF0YXR5cGU= 63509\nJ2Nsb2Nr 63510\nIGtvc3Q= 63511\nIGJham8= 63512\nLkNvdW50cnk= 63513\nWmVuZA== 63514\nLndyYXBwZXI= 63515\n4L0= 63516\nIEZpbGlwaW5v 63517\nb2NyZQ== 63518\nU1NI 63519\nIFNBTVBMRQ== 63520\nX2luaXRpYWxpemVk 63521\nKTs/Pgo= 63522\nIHBvcm5vc3Q= 63523\nZXNhbg== 63524\nIEN1dHRpbmc= 63525\nIG1peGVz 63526\nX2FnYWlu 63527\nIGZvcm11bGFyaW8= 63528\nW1Y= 63529\nIHRlbGVmb25v 63530\nL3Vz 63531\nIGxvYWREYXRh 63532\nLnJlZmVyZW5jZXM= 63533\nIG1hcFZpZXc= 63534\nKyJf 63535\nIFNRTGl0ZURhdGFiYXNl 63536\naXRvbg== 63537\nQ29sdW1uVHlwZQ== 63538\nIEV2ZXJ0b24= 63539\nLlJlc3VsdHM= 63540\nL25vdA== 63541\nIGdldEZpbGU= 63542\naGVyaXRhbmNl 63543\nIGdldEhlaWdodA== 63544\nJHVzZXJuYW1l 63545\nd2l0aGRyYXc= 63546\nXyk7DQo= 63547\nLnV0 63548\nIFFBcHBsaWNhdGlvbg== 63549\ndXJuYWw= 63550\nLWRvd25sb2Fk 63551\nYnVyZ2Vy 63552\ncHJlY2k= 63553\nIFRoYW5rZnVsbHk= 63554\nLkVWRU5U 63555\nIGdyZWF0bmVzcw== 63556\nIGxvb3NlbHk= 63557\nIG1hc2g= 63558\nIGdlaGVu 63559\nX2FudA== 63560\nIGltcGVuZGluZw== 63561\nLmlzUHJlc2VudA== 63562\nIHN0YWlucw== 63563\nSU1T 63564\nLmJhY2tlbmRz 63565\nIGlycmlnYXRpb24= 63566\nIFRhdA== 63567\nL3Rlc3Rz 63568\nIEtpbmdzdG9u 63569\nLnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 63570\nIHZvbWl0aW5n 63571\nLXJlcXVpcmVk 63572\nIGJsYXpl 63573\nIFN0YWZmb3Jk 63574\nUklE 63575\nL2Z3bGluaw== 63576\nIGthbGU= 63577\nc29sZA== 63578\nKHByb2dyZXNz 63579\nKGNoYXJ0 63580\nIGN5c3Q= 63581\nIGRpbGlnZW5jZQ== 63582\nL21w 63583\nIGNsZXJneQ== 63584\nIEJyb3dzZXJSb3V0ZXI= 63585\nIEFQSw== 63586\nIENPTlRBQ1Q= 63587\nQmFySXRlbQ== 63588\nLURpc3Bvc2l0aW9u 63589\nIE1vdG9yb2xh 63590\nX3NhbA== 63591\nIFdvb2Rlbg== 63592\nIFRIRVk= 63593\nIGNvbW1lbnRhdG9ycw== 63594\nIGNvbW1lcmNpYWxz 63595\nPW1vZGVs 63596\nLiIpLAo= 63597\nIFBsdWdpbnM= 63598\nZGFpbg== 63599\naGVhZGVk 63600\nIENvb3JkaW5hdGVz 63601\nSmFuZQ== 63602\nIFByZWZlcnJlZA== 63603\nIHBvZGVtb3M= 63604\nLmlzQmxhbms= 63605\nIFN0YXA= 63606\nIHdzcA== 63607\nIENPTEw= 63608\nX2JpZA== 63609\nIHByb2Jlcw== 63610\ndWFuaWE= 63611\nKHN5bQ== 63612\nIGN1ZXJwbw== 63613\nIG1hbmlwdWxhdGluZw== 63614\nIGFtYXppbmdseQ== 63615\nLkRBWQ== 63616\ndW1wdGVjaA== 63617\nYWNvYmlhbg== 63618\nVGVybWluYXRl 63619\nIHN0YXRpb25lZA== 63620\nU2V0QnJhbmNo 63621\nU2NyZWVuc2hvdA== 63622\nZXN0aGVzaWE= 63623\nIHdhbGtlcg== 63624\nI2Zyb20= 63625\nY29vcmRpbmF0ZQ== 63626\nX2ludGVyZXN0 63627\nIGhlbHBsZXNz 63628\nCXB1Yg== 63629\nbmdh 63630\nX0V4 63631\nIG53 63632\nIHRleHR1YWw= 63633\nIHBsdWdz 63634\nIG1pbmlvbg== 63635\nbWFyZXM= 63636\nPD4K 63637\nQUNB 63638\nQ29tcGFueU5hbWU= 63639\nKGVj 63640\nIExhbmRzY2FwZQ== 63641\nX1BST1ZJREVS 63642\nY3c= 63643\nlIQ= 63644\nQWNjb3VudElk 63645\nJDo= 63646\nIFBlcnNvbmFsbHk= 63647\ncHJvcGVydHlOYW1l 63648\nIEt1Yg== 63649\nJ2k= 63650\nIEdpdWw= 63651\nIHByaW9yaXRpemU= 63652\nRk9STUFOQ0U= 63653\nIFBhcmFkZQ== 63654\nKVwK 63655\nc3RkYm9vbA== 63656\nIGFsZXJ0RGlhbG9n 63657\nIExlaA== 63658\nLmNhdGFsb2c= 63659\nIHdlYmluYXI= 63660\nIGltcG9ydGVy 63661\ncHJvamVjdElk 63662\nVFlQTw== 63663\nX18NCg== 63664\nR1c= 63665\nc3VtbWVy 63666\nIHNpbmlzdGVy 63667\nLmZhaWxlZA== 63668\nIGJlc29pbg== 63669\naXNtYW4= 63670\nREVTVA== 63671\nIG5o4bqtcA== 63672\nIG1vxbxuYQ== 63673\nX2luc3Ry 63674\nIHBhdmVk 63675\nIHByZWZpeGVz 63676\nIHJhbXBhbnQ= 63677\nIHlBeGlz 63678\nIOazqA== 63679\nX21pZGRsZQ== 63680\nIHNjaG9sYXJseQ== 63681\nIHByb3N0aXR1dGVz 63682\nIG1vcmFsZQ== 63683\nLnBlcm1pc3Npb25z 63684\nLmdldExpc3Q= 63685\nIHJlamVjdGluZw== 63686\nIGxvb3Bpbmc= 63687\nIFNwZWNpZmljYXRpb25z 63688\nIGltbWVuc2VseQ== 63689\nIE1lZGlhbg== 63690\nKGNoYWlu 63691\nIGNsaWNo 63692\nL2ZsdXR0ZXI= 63693\nYWNm 63694\nLnVybG9wZW4= 63695\ndXR0ZXJzdG9jaw== 63696\nIHNwZWN0cmE= 63697\nIGFkbWly 63698\nL21heA== 63699\nLkVtaXQ= 63700\nKHdlaWdodHM= 63701\nacSZ 63702\nSW5zdGFsbGluZw== 63703\nSnU= 63704\nIEZlbGw= 63705\nIEZSRQ== 63706\nLmRlbg== 63707\nIEJpZ0ludA== 63708\nIj5A 63709\nICopOwoK 63710\nIEJpb2xvZ2ljYWw= 63711\nIHBhdGVudGVk 63712\nLnBhZ2luYXRpb24= 63713\nLnJvbGw= 63714\nIER1bA== 63715\nIGRlc2Fycm9sbG8= 63716\nUmVnYXJkbGVzcw== 63717\nmOydtA== 63718\nIHJvYmU= 63719\n0J3QtQ== 63720\nIEJveWQ= 63721\nLyoqKioqKioqKioqKioqKioqKioqKioqKg== 63722\ncmVjZWlwdA== 63723\nIEFzc2lnbmVk 63724\nYXR0ZW5kYW5jZQ== 63725\nLWNob2ljZQ== 63726\nZXRzeQ== 63727\nX2Vsc2U= 63728\nLG5leHQ= 63729\nX2V4aXN0aW5n 63730\nICcnKSwK 63731\nIGxpYmVydGlu 63732\ndHJhaXRz 63733\nYXR0ZQ== 63734\nQ29tcGFyYWJsZQ== 63735\nIENvdg== 63736\nIEFkb2xlcw== 63737\nLHRoZQ== 63738\nIExvYWRlZA== 63739\nfHI= 63740\nPWluZGV4 63741\nIEdhc3Q= 63742\nIGluamVjdG9y 63743\nCXN0b3A= 63744\nLWdvb2dsZQ== 63745\nIGZldGFs 63746\nIGFsbG8= 63747\neWxlZnQ= 63748\nZ2V0UGFyYW1ldGVy 63749\n4oCd4oCU 63750\nX3NlY3Rvcg== 63751\nLlV0aWxpdHk= 63752\nb3Njb3Bl 63753\nLmVhc2U= 63754\nIE1hZ25ldGlj 63755\nQXJyYXlPZg== 63756\nIGZlYXJmdWw= 63757\nIEluZmVy 63758\nIEZ1aw== 63759\nSm9obnNvbg== 63760\nJGFycmF5 63761\nIHNhaXM= 63762\nX2NvbnRy 63763\nRGVzY3Jp 63764\nIERldGFpbGVk 63765\nX2xlYXZl 63766\nX1JPVA== 63767\nIG7DpGNo 63768\nIGthbWk= 63769\nRENBTEw= 63770\nOmVx 63771\nIG1vbms= 63772\nX29ianM= 63773\nKFNlcnZpY2U= 63774\nZmluYW5jZQ== 63775\nIHBvZGVt 63776\nX3Jlc3RvcmU= 63777\nIGRlY29yYXRvcnM= 63778\nIGFkdmlzaW5n 63779\nINC/0LDRgA== 63780\nLnBlcm0= 63781\nIEhhaQ== 63782\nIGZr 63783\ndW50ZWVycw== 63784\nIFJUV0Y= 63785\nX2l4 63786\nQUNT 63787\nIGJyZWFrb3V0 63788\nZGlyZWNjaW9u 63789\nIFN1bnNldA== 63790\nX2Z4 63791\nb2xrYXRh 63792\nLXJhZGlv 63793\nSGV0 63794\nLnV0aWxpdGllcw== 63795\nX2Jhc2lz 63796\nKGtpbmQ= 63797\nIENvbmM= 63798\nVGh1bWI= 63799\nIE1pY2hl 63800\nZGVsaXZy 63801\nIGd1dGU= 63802\nIEZpbGVQYXRo 63803\nIFRyaWJl 63804\nXCIp 63805\nX2N1ZGE= 63806\nRGlmZmVyZW5jZQ== 63807\nIE1vbnN0ZXJz 63808\nIHNldFR5cGU= 63809\nLkNvbnRlbnRUeXBl 63810\nIGR1bQ== 63811\nRW52ZWxvcGU= 63812\nYWd0 63813\nIHVubG9hZA== 63814\nX2NoZWNrZXI= 63815\nIHJlc3Rv 63816\nX3Blb3BsZQ== 63817\nUHJpY2Vz 63818\nUHJvZmlsZXM= 63819\nKClc 63820\nRlVO 63821\nICIjIg== 63822\nIFBhdHRlcm5z 63823\nIFNQRA== 63824\nX1JPV1M= 63825\nT3JpZw== 63826\nYmxhZGU= 63827\nIGzDqQ== 63828\nJWk= 63829\nKysr 63830\nTGlmZWN5Y2xl 63831\nLS0tLS0tLS0tLS0tLS0tCg== 63832\nVGFy 63833\nVGhhbk9y 63834\nJnE= 63835\nIGNyaXRpY2lzbXM= 63836\nLXBo 63837\nRWxlbWVudEV4Y2VwdGlvbg== 63838\nX2d1ZXN0 63839\nIOu2 63840\nX0Fz 63841\nIENhcnJ5 63842\nX0JJRw== 63843\nYWtldXA= 63844\nX3JldHJ5 63845\nIG7DqWNlc3M= 63846\nIE1JU1M= 63847\naXN1 63848\nIFNwaXJpdHVhbA== 63849\nXyRf 63850\nIHJlZmxlY3Rpb25z 63851\nPHQ= 63852\nIGZ1bsOnw6Nv 63853\nIG1vbmFyY2g= 63854\nIFBhdGVs 63855\nX3ZvbHRhZ2U= 63856\nIHJhaW55 63857\nY291cnQ= 63858\nIHVsdHJhc291bmQ= 63859\naU9T 63860\nX0FMV0FZUw== 63861\nV28= 63862\nX0JMRU5E 63863\nb2tzZW4= 63864\nIHRyYXZlbGVy 63865\nIGRhdGFUYWJsZQ== 63866\nc2V0Q3VycmVudA== 63867\nV29ya2Zsb3c= 63868\nLnllbGxvdw== 63869\nXSkt 63870\nQUJTUEFUSA== 63871\nX2l0ZXJhdGlvbg== 63872\n0LTRgA== 63873\nIHViaWM= 63874\nIG1lYXRz 63875\nL2Vt 63876\nIERpc29yZGVy 63877\nIGVudmlhcg== 63878\nU0VP 63879\nIGhlYXZlbnM= 63880\nX3N0dWI= 63881\nIGFkcmVzcw== 63882\nIFRyaWU= 63883\nIExpbmRzYXk= 63884\nbGVp 63885\nIHBsYXRh 63886\nLnNldHRpbmc= 63887\nIGVsZWs= 63888\nICgkew== 63889\nQXV0b21hdGlj 63890\nIGRvd25zdGFpcnM= 63891\nUElY 63892\naWNpb25hbA== 63893\nYWJhbA== 63894\nLXN0b3JhZ2U= 63895\naWNoaWVy 63896\nIEFscGhhYmV0 63897\nLGxhYmVs 63898\nQAo= 63899\nIGludGVzdGluYWw= 63900\nIHZhcmE= 63901\nLm1h 63902\nIHByb2du 63903\nIG5lcGhldw== 63904\nVGltaW5n 63905\nY2xhc3NuYW1l 63906\nIGxvY29t 63907\nIFNhbWFudGhh 63908\nIEFjY29yZGluZ2x5 63909\nIFhDVGVzdENhc2U= 63910\nIFBsYWlucw== 63911\nIExlbmlu 63912\nbm9w 63913\nIFR5c29u 63914\nIHJlbmFs 63915\nb2luZQ== 63916\nKFRlc3RDYXNl 63917\nIExvbWI= 63918\nQmFuZw== 63919\nIHZvbHVt 63920\nX2dlbmRlcg== 63921\nIGx1dA== 63922\nIO+8 63923\nQ29uZmlndXJlcg== 63924\nIHN0cm9rZVdpZHRo 63925\nLkh0dHBTZXJ2bGV0 63926\nfHg= 63927\nLkpTY3JvbGxQYW5l 63928\nIGNvbnNvcnQ= 63929\nLmJ1bXB0ZWNo 63930\ndHJpZGdlcw== 63931\nIGJlbmVmaWNpYXJ5 63932\nPXJlcXVpcmU= 63933\ncmVuYw== 63934\nIE9V 63935\nZW50YXJpbw== 63936\nIHVyZ2Vz 63937\n4oCUbm90 63938\nQ2FtcGFpZ24= 63939\nZHJl 63940\nIFJpdmVyc2lkZQ== 63941\nCXRi 63942\nIG91dHB1dEZpbGU= 63943\nIGFic3Q= 63944\nIHN0cnVjdHM= 63945\nIHJ2YWw= 63946\nXCI+Ig== 63947\nIGFjcXVpc2l0aW9ucw== 63948\nQkxBQ0s= 63949\nIHRydW5j 63950\nIGFubm90YXRlZA== 63951\nc2V0VXA= 63952\nVE9LRU4= 63953\nIENvY2E= 63954\nRGlzYXBwZWFy 63955\nOnZhbHVl 63956\nIGFpZGVk 63957\ndHRs 63958\nbHV4 63959\nIGFjdWVyZG8= 63960\nIEZpbmdlcg== 63961\nLkdlb21ldHJ5 63962\nXScpOwo= 63963\nLmdm 63964\nVFhU 63965\nIFNjb3RpYQ== 63966\nYXZyYQ== 63967\nIHZpcA== 63968\nIHdob3BwaW5n 63969\nLWdpcmw= 63970\nIGN1cnNlZA== 63971\nXVst 63972\nIGNpcmN1bGF0ZWQ= 63973\ndW5jdHVyZQ== 63974\nb3JtYW4= 63975\nIG1BZGFwdGVy 63976\nIOKAlAoK 63977\nRmlsZU1hbmFnZXI= 63978\nKGlQYXJhbQ== 63979\nSW1hZ2VCdXR0b24= 63980\nREFR 63981\nQXJtb3I= 63982\nIHNwYXQ= 63983\nLmpzZGVsaXZy 63984\nIG1pc29n 63985\nLmVjb3Jl 63986\nJ119Cg== 63987\naW1wb3J0cw== 63988\nIGRpbm9zYXVy 63989\nLUZyZWU= 63990\nIGFubm9u 63991\nIHRyaWJ1bmFs 63992\nWWE= 63993\nLmd1aWQ= 63994\nbW9zdGx5 63995\nPT09PQo= 63996\nIGltYWdlbQ== 63997\nU3VpdA== 63998\na2Fz 63999\nIENoYW5uZWxz 64000\nQnVkZ2V0 64001\nIERpdmlkZQ== 64002\namVt 64003\nIEdyaQ== 64004\nIGluZGljYXRpdmU= 64005\nXEZhY3Rvcnk= 64006\nLnJlcG9zaXRvcmllcw== 64007\nIEFNUA== 64008\nLnNucA== 64009\nIGHDpw== 64010\nIms= 64011\nIMK1 64012\nZGVjb2RlZA== 64013\nX2FyYw== 64014\nLUNsYXVzZQ== 64015\nIEFkag== 64016\nIG5ld0FycmF5 64017\nKEdFVA== 64018\nIGxhdGlu 64019\nIHd6 64020\nOnVpbnQ= 64021\n5Yir 64022\nIi4u 64023\nQ29ubmVjdGluZw== 64024\nZW5ub24= 64025\n5bm2 64026\nIFNlcw== 64027\nIGJlbG9uZ2luZ3M= 64028\nKycm 64029\nCXNldHRpbmdz 64030\nSU5W 64031\nIHDDqQ== 64032\nIGFkdWx0aG9vZA== 64033\nYW1ibGU= 64034\nX21hc2tz 64035\nLXJlc29sdXRpb24= 64036\ncmF0cw== 64037\nIO2BtA== 64038\nIHZvZw== 64039\nIFNobw== 64040\nIENvdmVuYW50 64041\nIHJlbWluZGluZw== 64042\nb3JuYWRv 64043\naWFk 64044\n5byC 64045\nQ3JlYXRpdmU= 64046\nIFNUWUxF 64047\nIGFub21hbHk= 64048\nXEFwcGxpY2F0aW9u 64049\nIG1hbmlmZXN0YXRpb24= 64050\nIE5hbm8= 64051\nTWFwVmlldw== 64052\naWRlYWw= 64053\nYWNoaW5lcnk= 64054\nIFZhdWdo 64055\ncHJpbnRlcg== 64056\nVmVyZGFuYQ== 64057\nL2NvbXBvbmVudA== 64058\nIGFkZENoaWxk 64059\nIGxlYXJuZXI= 64060\nIGRlY3J5cHRlZA== 64061\nIHRpZ2h0ZXI= 64062\n5p2f 64063\nIGplag== 64064\nIC4KCgoK 64065\nIExvYmJ5 64066\nbGVw 64067\nw6Rubg== 64068\nbGVpZ2g= 64069\nL3JvdXRlcw== 64070\nIGNhbm9weQ== 64071\nIEZpc2NhbA== 64072\nOjsi 64073\nIGJ1cmRlbnM= 64074\nL2Z1bGw= 64075\nIENTUg== 64076\nLlNoYXJlZFByZWZlcmVuY2Vz 64077\nL3RyZWU= 64078\nIGRyb2l0 64079\nSW1wbGVtZW50 64080\nR2V0Q3VycmVudA== 64081\nKHB1c2g= 64082\nJHg= 64083\n0Y/Qtw== 64084\nQUNJVFk= 64085\nPT09PT09PT09PQo= 64086\namM= 64087\nX2hyZWY= 64088\nLmdldFJvb3Q= 64089\nIEtE 64090\nKGxz 64091\nW2NudA== 64092\nIGRhbGw= 64093\nKGJw 64094\nIEVX 64095\nS2V5RXZlbnQ= 64096\nbG9iZQ== 64097\nIGh0bWxlbnRpdGllcw== 64098\nIGZhbHRh 64099\nIHZhbHZlcw== 64100\nIHNpemluZw== 64101\nUG9ybg== 64102\nIHNob3dFcnJvcg== 64103\nIEZyaWQ= 64104\nIMOH 64105\nLnJhbmRu 64106\nIHRhbnRy 64107\nIHNheA== 64108\ndXJvdmlzaW9u 64109\ndGhlb24= 64110\nX1JDQw== 64111\neEZE 64112\nSW5pdFN0cnVjdA== 64113\nIGNhbm5lZA== 64114\nIHF1YW50aWRhZGU= 64115\nLldBUk5JTkc= 64116\nIEJyaXR0 64117\nLXJlZ2lzdGVy 64118\nYWN0aXZlbHk= 64119\nIE5hdGFsaWU= 64120\n44G/ 64121\nIENPTk5FQ1Q= 64122\nemVr 64123\nIG1pbGxvbmVz 64124\nXWludA== 64125\nICcsJyw= 64126\nIHByaW4= 64127\nIjpbLQ== 64128\nIC8vLg== 64129\nIGludGltaWRhdGluZw== 64130\ncmF6aW9uZQ== 64131\nLmlibQ== 64132\nIEpha2FydGE= 64133\n0LzQtdGA 64134\nIGxvYWRDaGlsZHJlbg== 64135\nX1VQTE9BRA== 64136\nIFdlZWtz 64137\nIGdldFRleHQ= 64138\nIPCfkg== 64139\nIF1dCg== 64140\nIENvc3Rz 64141\nxJlw 64142\ncGF5bWVudHM= 64143\nLk1vdmll 64144\nbGg= 64145\ntIg= 64146\nX2NlcnRpZmljYXRl 64147\nPXE= 64148\nbGlicmFyaWVz 64149\nIEFlcg== 64150\nYXVzcw== 64151\nCWZhaWw= 64152\nT1VORFM= 64153\nc2VuZEtleXM= 64154\nIHNjYW1z 64155\nd2FydHM= 64156\nSGlzdA== 64157\nIEVzc2V4 64158\nIGZ1cnk= 64159\nIHRpdHJl 64160\nIENvcGVuaGFnZW4= 64161\nIHByZWRlZmluZWQ= 64162\nc2Nw 64163\nc2VycmF0 64164\nLmVuc3VyZQ== 64165\naWxlZQ== 64166\nTWVyaXQ= 64167\nX1VOTE9DSw== 64168\nIENvcnJlY3Rpb24= 64169\nTm9ybWFsaXphdGlvbg== 64170\nIOS/ruaUuQ== 64171\nIHN0b29s 64172\nIOWIoOmZpA== 64173\nU2hvcnRjdXQ= 64174\nY2hvc2Vu 64175\nIGJ1bGx5 64176\nIGZ1bmNpw7Nu 64177\n44O844Or 64178\nIOeUn+WRveWRqOacnw== 64179\nLmFsaWFz 64180\nPlRvdGFs 64181\nIFNURU0= 64182\ncGVuZw== 64183\nY2FsZXI= 64184\ncGVyZmVjdA== 64185\nIGJvbmRpbmc= 64186\nUGhvbmVz 64187\nIHB1bHA= 64188\n67aA 64189\nSUVXUw== 64190\nIERlZXI= 64191\nX0xDRA== 64192\nIENvbmNvcmQ= 64193\nV2l6YXJk 64194\nIG9mcmVj 64195\nIEVtZXJhbGQ= 64196\ndGVuZXNz 64197\nbmF2aWdhdG9y 64198\nVGhlb3J5 64199\nIGd1YXJkYXI= 64200\nIGZ1bGZpbA== 64201\nIFVuYXV0aG9yaXplZA== 64202\nIEJvdXQ= 64203\nCWhvc3Q= 64204\nIFJpYg== 64205\nKGZ0 64206\nRG9jcw== 64207\nLmdldEJvZHk= 64208\n5b+D 64209\nIFJpdmVyYQ== 64210\nIHdhdmluZw== 64211\nIHBlcmZpbA== 64212\nQm91bmRpbmdDbGllbnRSZWN0 64213\nLmZh 64214\ncGFnZWQ= 64215\nIEFmZmlsaWF0ZQ== 64216\nIHByb2xldA== 64217\nfS0+ew== 64218\nKHNjb3Jlcw== 64219\nIHZpdGFl 64220\ne05hbWU= 64221\nc2NoZWR1bGVy 64222\nX1NBTg== 64223\nIE5lYw== 64224\nIEJlZWY= 64225\nX3Rj 64226\nTElO 64227\nIEV2ZW50VHlwZQ== 64228\nIEJ1ZmZlcmVkV3JpdGVy 64229\nIHNvZnRlcg== 64230\nIFZvdGluZw== 64231\nIEdlc3R1cmVEZXRlY3Rvcg== 64232\nIHVuc2Vlbg== 64233\nIFNDTw== 64234\nIGVsbw== 64235\nY29tYmluZQ== 64236\nX21ha2VDb25zdHJhaW50cw== 64237\nIHVuZGVyZ29uZQ== 64238\nIE9mZmljaWFscw== 64239\nLG9wdA== 64240\nIGxheWVyZWQ= 64241\nScOTTg== 64242\nIGJhbmtlcnM= 64243\nIHNlZ3JlZ2F0aW9u 64244\nIHJ1c3NpYW4= 64245\nIHZlbnRhbmE= 64246\nZ2V0S2V5 64247\nU2FudGE= 64248\nLlRvb2xTdHJpcFNlcGFyYXRvcg== 64249\nIEFlcm9z 64250\nLnB1dEludA== 64251\nIGluZm9ybXM= 64252\nX2JpbGw= 64253\n66aE 64254\nLnNldE1heA== 64255\nIH0+Cg== 64256\nIElQUw== 64257\nIEFsaWM= 64258\nIn0KCg== 64259\nIHVzaGVy 64260\nIE5ndXllbg== 64261\nIGFic29sdXQ= 64262\nIGd1YXJkZWQ= 64263\nIFJlYmVs 64264\nIFp3 64265\nIEFubnVuY2k= 64266\nIHByw6E= 64267\nYWJjZGVmZ2hpamts 64268\nIFZlcmlmaWVk 64269\nW2l4 64270\nIHRpZXJz 64271\nw6J0 64272\nLiIpDQo= 64273\naWp1 64274\nbGl2aW5n 64275\nR1BT 64276\nLlRlc3RUb29scw== 64277\nU2l6ZVBvbGljeQ== 64278\nIG1hc3NhZ2Vz 64279\nYXNzZXJ0SW5zdGFuY2VPZg== 64280\nIHBvc3PDrXZlbA== 64281\nIGJ1c2M= 64282\nIEp1ZGFpc20= 64283\nIGluZGlzcGVuc2FibGU= 64284\nIE1vc3RseQ== 64285\nSVRB 64286\nIGdldENvbnRlbnQ= 64287\nQnJvd3NlclJvdXRlcg== 64288\nLWNvdW50ZXI= 64289\nIG9idGVu 64290\nIC8+KTsK 64291\n0LjQuw== 64292\naGVhZGxpbmU= 64293\nKGhvbWU= 64294\nYWxpY2U= 64295\nbGRyZQ== 64296\nX01vZHVsZQ== 64297\nQ29tcGFuaWVz 64298\nTlBD 64299\nIHRvcnNv 64300\nLmNvbnM= 64301\nCWFkZHJlc3M= 64302\nX3B1cmNoYXNl 64303\nIEJhcmQ= 64304\nZ3N0 64305\nLWFuaW1hdGlvbg== 64306\nX3BhaWQ= 64307\nLnNwZWNpYWw= 64308\nIGRlbGlt 64309\nIHRha2VvdmVy 64310\nKGhhbmQ= 64311\nZW51aW5l 64312\nLWdyZXk= 64313\nIEFCSQ== 64314\nU2Vzc2lvbkZhY3Rvcnk= 64315\naW5zdGFsbGVy 64316\nX0RJU1RBTkNF 64317\nIEZhdm9yaXRlcw== 64318\noIA= 64319\nJz57 64320\nIExhdXJlbnQ= 64321\n0YfQtdGC 64322\nIHN0cmlwc2xhc2hlcw== 64323\nIGVzdGFiYQ== 64324\nJnQ= 64325\nLnBhbg== 64326\nIFBBUlRZ 64327\nIEJhbGk= 64328\nY3Np 64329\nKG1lbW9yeQ== 64330\nIFRvZG9z 64331\nIFNPQVA= 64332\nYWduZXQ= 64333\nCWJlZm9yZQ== 64334\nT3B0aW9uc1Jlc29sdmVy 64335\naWJlbg== 64336\nINmF2YY= 64337\nIGFkZGl0aXZl 64338\nIE1lbGVl 64339\nIE1hbml0b2Jh 64340\nIFBlcmNlbnRhZ2U= 64341\nPSgt 64342\nLmtpbGw= 64343\nIGx4 64344\nYW5jYQ== 64345\nIGZvdG9ncmFm 64346\nIGJsYW5j 64347\nIFJlc2lkZW50cw== 64348\ncGluaw== 64349\nSEJveExheW91dA== 64350\nLnVuaW9u 64351\nIEhZ 64352\nIGNvbnRlbnRWaWV3 64353\nLWZhdA== 64354\nCWhhcw== 64355\n66OM 64356\nIHdoaXBwZWQ= 64357\ndmVuZG9ycw== 64358\ndWJyZQ== 64359\nSVRIRVI= 64360\nLmZ1bmN0aW9uYWw= 64361\nINCy0LXRgA== 64362\nQ2FuY2VsZWQ= 64363\nLWNu 64364\nSW5PdXQ= 64365\nLlJvd1N0eWxlcw== 64366\nIHRyYXRh 64367\nIEluZG9vcg== 64368\nLWZhc2hpb25lZA== 64369\nIEJvb3Ro 64370\nLkxhYmVsQ29udHJvbA== 64371\nIHBvcGU= 64372\nIENhcm5lZ2ll 64373\nbmVyZ2ll 64374\nIEJY 64375\n44CCIiwK 64376\nIFdlYnN0ZXI= 64377\nCWRpdg== 64378\nTmFycg== 64379\nIGNvbmp1Zw== 64380\na2lk 64381\nIG1vZGVyYXRpb24= 64382\nIGFteQ== 64383\nIFNvbHZl 64384\nVklD 64385\nIEVa 64386\naWxsYWM= 64387\nIENpcGhlcg== 64388\nIEFjY2VwdGVk 64389\nTEFCRUw= 64390\nIHdyYXRo 64391\nIG1pblZhbHVl 64392\nIGthxbw= 64393\nIERhdWdodGVy 64394\nKS5e 64395\nKGRj 64396\nIHJlc29sdmVz 64397\nc2Nzcw== 64398\nYWJvdXRz 64399\ndWx0aXBhcnRGaWxl 64400\nIGZlYXRz 64401\nIGxhdW5kZXJpbmc= 64402\nIGNvbXBhw7E= 64403\nIHNlZ3VyaWRhZA== 64404\nIGhvYmJpZXM= 64405\nLWZhY2luZw== 64406\nInZhbHVl 64407\nZ2V0SW1hZ2U= 64408\nU3FsU2VydmVy 64409\nIHdpdGhTdHlsZXM= 64410\nPkRhdGU= 64411\nIEV4cGVk 64412\nJGpzb24= 64413\n6ZO+ 64414\nIEFDVElPTlM= 64415\nU2Vuc2l0aXZl 64416\nYmxhc3Q= 64417\nIMO2ZmY= 64418\nZnRl 64419\nQ1RTVFI= 64420\nIExvZ0xldmVs 64421\nY29udHJhY3Rz 64422\nLmRqYW5n 64423\nIj4NDQo= 64424\nRVRZUEU= 64425\nIG9iamM= 64426\nX1NPVU5E 64427\nX3NwYWNpbmc= 64428\nX2NsYXNzaWZpZXI= 64429\nIHJvYw== 64430\nQ2xhc3NpYw== 64431\nIOuztA== 64432\nX2ludmVyc2U= 64433\nLWFjcmU= 64434\nIEZJTA== 64435\nIERWRHM= 64436\nIHN3YWxsb3dlZA== 64437\ndmlsbGE= 64438\nIFJlcGxpZXM= 64439\nRmlyZWJhc2U= 64440\nIHBoeXNpcXVl 64441\nCXRoYXQ= 64442\nIFJlc2l6ZQ== 64443\nPj4+Pj4+Pg== 64444\nTmVhcmx5 64445\nLmFydGlzdA== 64446\nLXs= 64447\nPz4NCg0K 64448\nLmxy 64449\nLmly 64450\nKFsk 64451\naWFubmU= 64452\nCW9i 64453\nLCcl 64454\nIGtuZXg= 64455\nIGNvcnJv 64456\nIE93ZW5z 64457\nPW5pbA== 64458\nbGF5cw== 64459\nYXBn 64460\nw5Y= 64461\nRU5P 64462\nSGVucnk= 64463\nSnVzdGlu 64464\nZWxlY3RyaWM= 64465\nIE5vcmRpYw== 64466\n5oyH 64467\nIGV4Y2x1ZGVz 64468\nRXVyb3BlYW4= 64469\nIHRlbnRz 64470\nKFN0cmluZ1V0aWxz 64471\nKHBlZXI= 64472\neXN0b3Jl 64473\nUG9ja2V0 64474\nZnVlbA== 64475\nZXR1cw== 64476\nIE1hcmlu 64477\n0YDRg9C6 64478\n6K+E 64479\nIFBlbnM= 64480\nIGluZWZmaWNpZW50 64481\nIGV0ZXJuaXR5 64482\nLicm 64483\nIFBhY2thZ2Vz 64484\nIEFwcENvbmZpZw== 64485\nIG11bHRpZA== 64486\nY3Vsbw== 64487\nIGJvcnJvd2Vycw== 64488\nIERlYmJpZQ== 64489\nIGZyb250cw== 64490\nSko= 64491\nICIuLi8uLi8uLi8uLi8= 64492\nICIrCg== 64493\nPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 64494\nIEdhdmlu 64495\nIG1pc2g= 64496\n4pWR 64497\nX0FUVEFDSw== 64498\nSW5kZXBlbmQ= 64499\n4K+N4K4= 64500\nw6Fm 64501\nZ2Fycw== 64502\nIFBhcnRpY2lwYXRpb24= 64503\nVmVyYm9zZQ== 64504\nU3By 64505\nU3Zn 64506\nKFZhbHVlRXJyb3I= 64507\nIHJlY29uY2lsZQ== 64508\nCURCRw== 64509\nbWVldA== 64510\nIExvZ2luUGFnZQ== 64511\nLXVudXNlZA== 64512\nIGpvbmc= 64513\nIGFuY29yYQ== 64514\nINij 64515\nPlo= 64516\nPXc= 64517\nIFJlbm8= 64518\ndmll 64519\nb3Rpb25FdmVudA== 64520\nIExpc3RUaWxl 64521\nX1J1bnRpbWU= 64522\nIHVwaG9sZA== 64523\nIE9idGFpbg== 64524\ncHJvdmlkZWQ= 64525\nIERhdGVQaWNrZXI= 64526\nIENHSQ== 64527\nIEJsYWNrQmVycnk= 64528\nYWNobw== 64529\nIElzYWlhaA== 64530\n5pW0 64531\nIEFiZHVsbGFo 64532\nIHVwcA== 64533\nIHVybHBhdHRlcm5z 64534\nCXNpemVvZg== 64535\nIHBpc3NlZA== 64536\nIHByZWZlcnJlZFN0eWxl 64537\nQVBQRVI= 64538\nIFZC 64539\nIFRlcmVzYQ== 64540\nb2duaXRv 64541\nRU1Z 64542\nIGVsZWdhbmNl 64543\nIENsYXl0b24= 64544\nYXRpdm9z 64545\nIEFuYWxvZw== 64546\nIGdhdXNzaWFu 64547\nIEhpYmVybmF0ZQ== 64548\nW11b 64549\nIHN3ZWV0bmVzcw== 64550\nIE5pZWxzZW4= 64551\nIER1dGVydGU= 64552\nKHNlbA== 64553\nLCs= 64554\nIGV4dHJhb3JkaW4= 64555\nZmxha2U= 64556\nW0RvdWJsZQ== 64557\nLy8vDQo= 64558\nIG11Y2hhcw== 64559\nIEJyb2FkY2FzdGluZw== 64560\nQXNzb2NpYXRpb24= 64561\nZXhlcmNpc2U= 64562\nLlJlbGF0aXZl 64563\nIHViaXF1aXRvdXM= 64564\nU0JBVENI 64565\nxLFuYQ== 64566\nLWZvb2Q= 64567\nIGNyeXN0YWxs 64568\n0YPQsQ== 64569\nICd+ 64570\nINCR 64571\nIGR1bms= 64572\nIHpp 64573\nIE11Zw== 64574\nIGRlY2VwdGlvbg== 64575\nIEVtYWNz 64576\nCiAgICAKICAgIAo= 64577\nIMSRxrDhu6Nj 64578\nIFdvbHZlcw== 64579\nYW1lbnRp 64580\nICcpWw== 64581\nZm9ybWF0cw== 64582\nUmVjdg== 64583\nRGV0YWlsZWQ= 64584\nKEhXTkQ= 64585\nX3RyaWFs 64586\nYWdyYW50 64587\nT20= 64588\nY29uc2Npb3Vz 64589\nIG9zcA== 64590\ncXXDqQ== 64591\nIGdvbg== 64592\nIG1lcmVrYQ== 64593\nYXJlbmRyYQ== 64594\nTWluZQ== 64595\nLmxpbmtlZGlu 64596\nIGZpZm8= 64597\nLm1vbml0b3I= 64598\nIHJ1bmU= 64599\nbW5vcA== 64600\nIHNwZWN1bGF0ZQ== 64601\nZWds 64602\nIHZhc2N1bGFy 64603\nLnRlY2g= 64604\nIG1hZ21h 64605\nIGxlc3Q= 64606\ndW1hbm4= 64607\nIERyaXZlck1hbmFnZXI= 64608\nIG9ydA== 64609\nIGxpbmdlcmluZw== 64610\nIG9zdHJlYW0= 64611\nIHNwYXJrbGluZw== 64612\nLmNvbm5lY3Rvcg== 64613\nIHRhaWxz 64614\nIGtlcm5lbHM= 64615\nVVNFUk5BTUU= 64616\nCWNj 64617\nIG9uU2VsZWN0 64618\nL01QTA== 64619\ndGFwZQ== 64620\nLmRqYW5nb3Byb2plY3Q= 64621\nR2VuZQ== 64622\n4oCZaW4= 64623\nL2ZpbHRlcg== 64624\nLWVudmVsb3Bl 64625\nIGFwcGxhdXNl 64626\nIHJlZ2lzdHJvcw== 64627\nIENvcnk= 64628\nb2ZmbGluZQ== 64629\nLXNob3Q= 64630\nbGVzYw== 64631\nb3RlbnQ= 64632\nIG51bWVyYXRvcg== 64633\nLmVmZmVjdA== 64634\ncGxhY2VtZW50cw== 64635\nIEFGQw== 64636\nLlNlcXVlbmNl 64637\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 64638\neW50aGlh 64639\nIEdyaWZmaXRo 64640\nZWxtYW4= 64641\nc2V0RGVzY3JpcHRpb24= 64642\nIE5pZ2h0cw== 64643\nLm9yZGVycw== 64644\nIGAsCg== 64645\nIFNhbGFk 64646\namlhbmc= 64647\nIHJlY3Vy 64648\nIFNUQVRJQw== 64649\nLXNwb25zb3JlZA== 64650\neWxlbmU= 64651\nLGVtYWls 64652\nX18pKQ== 64653\nKSIpLg== 64654\nQ0VMTA== 64655\nYW1tZW50 64656\nTEFZ 64657\nLHN0ZA== 64658\nLnByZWY= 64659\nLkNvcg== 64660\ncmVkbw== 64661\nIEZ1Y2tlZA== 64662\nIHJ1c3M= 64663\nIGVzdGFibGlzaGVz 64664\nbnZhcmNoYXI= 64665\nLkdldEZpbGVOYW1l 64666\nIHBlbWI= 64667\nIFNhdWQ= 64668\nX3BhY2tldHM= 64669\nLmludm9pY2U= 64670\nLmdldFRvdGFs 64671\nSG9tZUNvbnRyb2xsZXI= 64672\nIHTDtg== 64673\nYWdoZXI= 64674\nLmVudA== 64675\nLkFic29sdXRlQ29uc3RyYWludHM= 64676\nIGdlbnVz 64677\nIEJhYnlsb24= 64678\nIC4uLy4uLw== 64679\nIE1pZG5pZ2h0 64680\nIHdn 64681\nIGRhbmNlcg== 64682\nLWltbQ== 64683\nZGlyZQ== 64684\naGF6aQ== 64685\nY2VydGlmaWNhdGU= 64686\nIG1EYXRh 64687\nIGN1cmVk 64688\nc3Zu 64689\nIkI= 64690\naWJyZQ== 64691\nIGRyYWZ0cw== 64692\nQ2FwaXRhbA== 64693\nIGNvbmNpc2U= 64694\nIFBlYWNo 64695\nIHxc 64696\nIHBwbQ== 64697\nX2NvbnRhaW5z 64698\nQXV0b3I= 64699\nQXV0b1NpemU= 64700\nX2xi 64701\nIHNvbGVtbg== 64702\nIGZpbmdlcnQ= 64703\nIEluZGljYXRvcg== 64704\nIFN2 64705\nUGFyaw== 64706\nJHR5cGU= 64707\nX01JU1M= 64708\nYW5udWFs 64709\nUGFpZA== 64710\nbWFzdGVycw== 64711\nIFdE 64712\nIHZ1ZWw= 64713\nIGVqYWM= 64714\nCWdsdXQ= 64715\nIHVuZmluaXNoZWQ= 64716\nZXN0ZWVt 64717\nZ3JvdXBCb3g= 64718\nUmVtb3Zpbmc= 64719\nIGVpbmlnZQ== 64720\nIFNjcmlwdHM= 64721\nZ2V0dG8= 64722\nLkhhbmRsZUZ1bmM= 64723\nIl0pLA== 64724\nIGRpc2FkdmFudGFnZXM= 64725\nLWZyb250 64726\nPnA= 64727\nc2V0T25DbGlja0xpc3RlbmVy 64728\nIGxhbmRsb3Jkcw== 64729\nIE3DvA== 64730\nIHByZXByb2Nlc3Npbmc= 64731\nKX0+ 64732\nLWNvbnRleHQ= 64733\nLGJvb2w= 64734\nUVVJVA== 64735\nICIpIik7Cg== 64736\nIFdlYnNpdGVz 64737\nIENoYXJsb3R0ZXN2aWxsZQ== 64738\nTGF0Y2g= 64739\nLmRpcmVjdGl2ZQ== 64740\nIEh1ZmZpbmd0b24= 64741\nX2RpcnR5 64742\nZXhwaXJhdGlvbg== 64743\nIFRQTQ== 64744\nIGVkeA== 64745\nIFdlYkRyaXZlcldhaXQ= 64746\nIGFkbWlyZWQ= 64747\nIGxpc3RlbnM= 64748\nIFZpbA== 64749\nZGlmZmVyZW50 64750\nIGxpdmVsaWhvb2Q= 64751\nIFdhcmNyYWZ0 64752\nIHBvc2ljaW9u 64753\nIGltcGVhY2htZW50 64754\nSmF5 64755\nIHBvc2l0aXZlcw== 64756\nIGp1bmdl 64757\nIFNNQg== 64758\nL2luY2x1ZGVz 64759\nKCcuLi8uLi8uLi8= 64760\nQXJndW1lbnROdWxsRXhjZXB0aW9u 64761\nZGVzY3JpY2Fv 64762\nQUJDREU= 64763\nLUFB 64764\nIGludmFkZWQ= 64765\nIGFtZXJpY2E= 64766\ndWVkZQ== 64767\nIFBoYXNlcg== 64768\nIHNjb3Jlcg== 64769\nIGRpc2NvdXJhZ2Vk 64770\ndGhpbg== 64771\nIGFiZG9tZW4= 64772\nIElQUA== 64773\nIEhhbXB0b24= 64774\nL0RlbGV0ZQ== 64775\nW3NyYw== 64776\nQ1N0cmluZw== 64777\nIE51bg== 64778\nIGVwaXRo 64779\n4oC7 64780\nLnRhYmxlcw== 64781\nIEhlaW4= 64782\nIHdoaXJs 64783\nIGNsYXJpZmljYXRpb24= 64784\nIHdlZGdl 64785\nIGjDpHI= 64786\nIFRpbmE= 64787\nIHRod2FydA== 64788\nIENvc3R1bWU= 64789\naW9uYWdl 64790\nQ29k 64791\nX2FjbA== 64792\nIHJlc2g= 64793\nIE1lcmN5 64794\nIERpeG9u 64795\nIGRlc2Fycm9sbA== 64796\nVmlyZ2lu 64797\nKiopJg== 64798\nIExlbm92bw== 64799\nIGVyYXNlZA== 64800\nZW50aW9ucw== 64801\nIHNsaXBwaW5n 64802\n5Zub 64803\nIGNyYXZpbmc= 64804\ncGxhbnRz 64805\nIGdldHRleHQ= 64806\nIG1hc3NpdmVseQ== 64807\nIFJlbmFtZQ== 64808\nLmhlcm8= 64809\n44K7 64810\nIHRvbWFy 64811\nIENPU1Q= 64812\nIFByYWN0aWNlcw== 64813\nLk1lZGlhVHlwZQ== 64814\nIEZ1bmRpbmc= 64815\nRmluZQ== 64816\naWdlcmlh 64817\nVW5j 64818\nIHN3YXBwaW5n 64819\nPicuCg== 64820\naW50ZXJw 64821\nYXJ0aWZhY3Q= 64822\nIEJhZ3M= 64823\nLnZpZXdNb2RlbA== 64824\ncXVvdGVk 64825\nCUxvbmc= 64826\nX1NDT1JF 64827\nIHNhdnZ5 64828\nbmVsbGU= 64829\na2zDpA== 64830\nQ291bnRz 64831\n2q8= 64832\nRmllbGRUeXBl 64833\nb2thYmxl 64834\nIFJUTA== 64835\nI2luZGV4 64836\nICV7 64837\nIGFyaXN0 64838\nLkdldE1hcHBpbmc= 64839\nKEFkYXB0ZXJWaWV3 64840\nPSIiKQo= 64841\nIGRpc2lu 64842\nIFRvdWNoYWJsZU9wYWNpdHk= 64843\nIE1PWg== 64844\nIER1bm4= 64845\nQ2FwYWJpbGl0eQ== 64846\nYWtoc3Rhbg== 64847\nVUlWaWV3Q29udHJvbGxlcg== 64848\nKHNvY2tmZA== 64849\nIEphY3F1ZXM= 64850\nPXRr 64851\nYXJQYXJhbXM= 64852\nY29uZGE= 64853\nIGFkdm9jYXRlZA== 64854\nIHBlbmV0cmF0ZQ== 64855\nSkVDVElPTg== 64856\nIOuwmA== 64857\nIEZJTkQ= 64858\nIGVhcm5z 64859\nYXBwZW4= 64860\n6rE= 64861\nIHRocm91Z2hwdXQ= 64862\nIHBlbnNpb25z 64863\nIGZ1c3M= 64864\nSFRUUFJlcXVlc3Q= 64865\nbnV0cw== 64866\nb2NodA== 64867\nLWVzdGFibGlzaGVk 64868\nIEFMSUdO 64869\nIGpzcGI= 64870\nRGlzcA== 64871\nX2VtYmVkZGluZ3M= 64872\nIHJlcHQ= 64873\nIFlvcmtlcg== 64874\nw7JuZw== 64875\nIGpvdXJuZXlz 64876\nIEFwcHJvdmFs 64877\nCVNFTEVDVA== 64878\nKEdyYXBo 64879\n0LzQuA== 64880\nIGRvbGxz 64881\nIHNleGlzdA== 64882\nIHBhbnM= 64883\nIG1wbA== 64884\nIG9wZXJhdGl2ZQ== 64885\nIFRvcnJlbnQ= 64886\nWU0= 64887\nIFBhc3Npb24= 64888\n5pat 64889\nLmNvbXBpbGVy 64890\nCUNTdHJpbmc= 64891\nPWNvbG9y 64892\nb3JpYW5DYWxlbmRhcg== 64893\nIEtub2Nr 64894\nIGhhaWxlZA== 64895\nL3N0YXRl 64896\nIHNldHVwdG9vbHM= 64897\nIE1hcmU= 64898\nIHN5bmNocm9uaXpl 64899\nIFN3aXBl 64900\nIGdhbWJsZQ== 64901\nLCcnXV1dLAo= 64902\nIGRlZmVjdGl2ZQ== 64903\nX09CSkM= 64904\nIGRlbmlt 64905\nIHRhZA== 64906\nIEtpbWJlcg== 64907\nIG5ldXJvbG9naWNhbA== 64908\nw6puY2lhcw== 64909\nCWNi 64910\nLnNldFBhc3N3b3Jk 64911\nIFBsZWFzYW50 64912\nIFBoaQ== 64913\nLXRhZ3M= 64914\nIGNvbnRhZw== 64915\nIENvcmFs 64916\nIGRpc3RyYWN0 64917\naXRpemVy 64918\nIHN1bnJpc2U= 64919\nc2V0SWQ= 64920\nIENoZW5uYWk= 64921\nIE9ncmU= 64922\nX0hJU1RPUlk= 64923\nUFJFU1NJT04= 64924\nX1NVRkZJWA== 64925\nZHVwbGljYXRl 64926\nLmF1dGhTZXJ2aWNl 64927\nIHNwYWNlZA== 64928\nIEJlbmdhbHM= 64929\nU29sdmVy 64930\nIGJ1cmVhdWNyYWN5 64931\nX2hpdHM= 64932\nINGC0LjQvw== 64933\nIGPDqQ== 64934\nIGRpc2dyYWNl 64935\n6KeS 64936\naXNPcGVu 64937\nQ2hlbQ== 64938\nX2xpY2Vuc2U= 64939\nX2hvc3RuYW1l 64940\nX0JSRUFL 64941\nIGZpZXJ5 64942\nOkQ= 64943\nL2xpbnV4 64944\nVGl0dWxv 64945\nUmFkaWFucw== 64946\naXpvbnM= 64947\nUmFt 64948\nb2RpYW4= 64949\naWFuZ2xl 64950\nIG5pbmph 64951\nRXZlcnlib2R5 64952\nKCI+ 64953\nIHRha8W8ZQ== 64954\nIGdyb3VuZGJyZWFraW5n 64955\nIGRpcmln 64956\nSFRNTEVsZW1lbnQ= 64957\nIFVuY29tbWVudA== 64958\nY2hlaW4= 64959\nIOeUn+WRveWRqOacn+WHveaVsA== 64960\nJSIK 64961\nIHRpcG9z 64962\nQ2hhckNvZGU= 64963\nIFByb2R1Y3Rv 64964\nZmFpdA== 64965\nJ2w= 64966\nLXRodW1ibmFpbA== 64967\ndXN1 64968\nX2Zvcm11bGE= 64969\nLlRPUA== 64970\nLmJ1eQ== 64971\nIG1pZXV4 64972\nQ2VudHVyeQ== 64973\ncGVp 64974\nIHRic3A= 64975\nLVBhY2lmaWM= 64976\nb2dp 64977\nIGZhdHRv 64978\nIGZhbnRhc3Q= 64979\nIFNBTEU= 64980\nLmFkcw== 64981\nIHBpbGxhcnM= 64982\nX3RyaXA= 64983\nIHR1YQ== 64984\nIGFwZWxsaWRv 64985\nLnNldENlbGxWYWx1ZQ== 64986\nICgoXw== 64987\nIE5pbmE= 64988\nPGM= 64989\naW5pdW0= 64990\nZGZ1bmRpbmc= 64991\nLXdvcmtpbmc= 64992\nIEVzdGFkb3M= 64993\nIE1hbGk= 64994\nPGY= 64995\ndXJhbmNlcw== 64996\ncGFnaW5h 64997\nX1BL 64998\nIHVuYXJtZWQ= 64999\nb2dnbGVk 65000\nQ2FuZGlkYXRl 65001\nUmF0aGVy 65002\nIGZyYW5jaGlzZXM= 65003\nIGNvdmVuYW50 65004\nwqo= 65005\naXBwaW5lcw== 65006\nR3Vu 65007\nLWZlaXJh 65008\nIGxpbmVhZ2U= 65009\nX0dSQU5URUQ= 65010\nZ2VucmVz 65011\nLkVsYXBzZWQ= 65012\nIGxhcmdv 65013\n0Js= 65014\nLXJlYWR5 65015\nX3Byb2Nlc3NlZA== 65016\nbGFuZ3M= 65017\nw7ptZXJvcw== 65018\nZnE= 65019\nL25wbQ== 65020\nX3Nydg== 65021\nIGF0dGVuZGFudA== 65022\naXZpZA== 65023\nZXZpY2U= 65024\nQUJJ 65025\nKGJpbmFyeQ== 65026\nX1ZBTElEQVRF 65027\nIGFkZEl0ZW0= 65028\nX2NvZWY= 65029\nYWxlYg== 65030\nb2dyYXBoaWNhbGx5 65031\nQm9yZGVyQ29sb3I= 65032\nIGFzc2F5 65033\nIGNhdGNoRXJyb3I= 65034\nIENocnlzbGVy 65035\nb2do 65036\nIGtleVZhbHVl 65037\nZGVjaXNpb24= 65038\nLW9mZnM= 65039\nIGxpZWd0 65040\nKERhdGFUeXBl 65041\nIGlyaXM= 65042\nIGV1cA== 65043\ncmlnZXI= 65044\nb25pY2E= 65045\nIHJvcGVz 65046\nIG5hcnJvd2x5 65047\nIFF1YWRy 65048\nIGVwdWI= 65049\nZXN0aW5hbA== 65050\nLXR1cm4= 65051\nIGxhbmdz 65052\n55uR5ZCs6aG16Z2i 65053\nIHF1ZWxsbw== 65054\nLGFyZ3M= 65055\naWdhdGU= 65056\nIFNlZW1z 65057\nIGZvcnRl 65058\nQ0xJ 65059\nX0xPQURJTkc= 65060\nLlJ1bGU= 65061\nIHlvdXRocw== 65062\nKHh4 65063\nIEFzc3VtaW5n 65064\nYWdoZXR0aQ== 65065\nKQoKCgoK 65066\nIG9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 65067\nT2NjdXA= 65068\nIGRldHJpbWVudGFs 65069\nIGlubmF0ZQ== 65070\nIEJhcnJlbA== 65071\ndWVuY2lh 65072\nIG9uQmx1cg== 65073\nIGxpYnM= 65074\nW2xhc3Q= 65075\nIGNwZg== 65076\nLlRpbWVvdXQ= 65077\nZXN0YXRpb24= 65078\nIHdpZWw= 65079\nIHV0aWxpemFy 65080\nIGRpc2d1aXNl 65081\nIER1bQ== 65082\nT0NJ 65083\nT05HTw== 65084\nICg/LA== 65085\nIFBhdGlv 65086\nVmVydGV4QXJyYXk= 65087\nLmF1dGhvcml6YXRpb24= 65088\ncm96 65089\nIEhvcw== 65090\nLlNwYWNl 65091\nIFZpcnVz 65092\nKGtleXdvcmQ= 65093\nVE9DT0w= 65094\nX0NPTlRST0xMRVI= 65095\nIEJsb2NrZWQ= 65096\nIENob3A= 65097\nd2nEmQ== 65098\nXFJvdXRpbmc= 65099\nL3BhY2thZ2U= 65100\nIHBlcnN1YWRlZA== 65101\nYmVpdHM= 65102\nTENE 65103\nIG11Yw== 65104\nX0ZPUldBUkQ= 65105\nIG91dGxhdw== 65106\nIHphdw== 65107\nX3ZlaGljbGU= 65108\nIEplbnNlbg== 65109\nLkdyZWVu 65110\nIC8vLy8v 65111\nSVJDTEU= 65112\nLWJ1c2luZXNz 65113\nLkhpZGRlbg== 65114\nIGtvbm50ZQ== 65115\ncHE= 65116\nIHBhcmVjZQ== 65117\nIGxhbmRzY2FwaW5n 65118\nIERlY29yYXRpb24= 65119\nIEdSQQ== 65120\nX3Byb2ZpbGVz 65121\nIEZsZW0= 65122\nQ0xJQ0s= 65123\nIEZBSUxVUkU= 65124\nIGlvbnM= 65125\nX1RpbWVy 65126\nLkRvZXM= 65127\nIGJvdW5jaW5n 65128\ndXBweQ== 65129\ndWxpcw== 65130\nL2Fn 65131\nIEdhcm4= 65132\nIGh1ZA== 65133\nIHJlc3BvbmRlcg== 65134\nIHN0cmNocg== 65135\nIGNob2tl 65136\nIHN0YXNo 65137\nX2NoZWNrc3Vt 65138\nIHN0YW1wZWQ= 65139\nQEdldE1hcHBpbmc= 65140\nLkJ5dGVBcnJheQ== 65141\nIER5cw== 65142\nYXRlcm5pdHk= 65143\nKHJi 65144\nIGVkaXRUZXh0 65145\nIGVyZWN0aW9u 65146\nIGNlc3M= 65147\nX2V2ZXJ5 65148\nX2dhdGV3YXk= 65149\nICciLg== 65150\nIHN0YWZmaW5n 65151\nIGludm9pY2Vz 65152\naW5pY2lv 65153\nfV0sCg== 65154\nLHZhcg== 65155\neWNpbg== 65156\nIERpb24= 65157\nICUlCg== 65158\nJywo 65159\nLXNwYW4= 65160\nIHRow6BuaA== 65161\nIGJvcm5l 65162\nIEthdGhsZWVu 65163\n6L+e5o6l 65164\nX2N1YmU= 65165\nIGluZm9ybWHDp8O1ZXM= 65166\nbmdlcg== 65167\nL0ZpbGU= 65168\nIGRhcmE= 65169\nIG1M 65170\nKioqKioqCg== 65171\nIG1hcmtpbmdz 65172\nYmJl 65173\nIHJlY3VycmVudA== 65174\nIFJhbmtpbmc= 65175\nX2ludGVncmFs 65176\nXT4K 65177\nIHVuYW5pbW91c2x5 65178\nIGRpcGxvbWF0cw== 65179\nIElPUw== 65180\nOyI+PD8= 65181\nIE1hdHRl 65182\nIFJhbGVpZ2g= 65183\nIEltcHJvdmU= 65184\nZXhpc3RlbnQ= 65185\nIGZha2Vy 65186\nIEhpZ2hsYW5k 65187\nc3RlbQ== 65188\nLW1z 65189\nTGlzdE9m 65190\nLkxpc3RlbmVy 65191\nKHdhaXQ= 65192\nX1JTVA== 65193\nVW5h 65194\nIG9jY3VwYXRpb25hbA== 65195\nLW1lbW9yeQ== 65196\nIFN1cmY= 65197\nIGJydXRl 65198\nX0VsZW1lbnQ= 65199\nZGRkZA== 65200\nIERlY3Jl 65201\nLnBzaQ== 65202\nLWRldmVs 65203\nIE9uVHJpZ2dlckVudGVy 65204\nVG9EZWxldGU= 65205\nIGhlcmFsZA== 65206\nIHNvY2lhbGVz 65207\nIGJvb3N0ZWQ= 65208\nLkl0b2E= 65209\nKiI= 65210\nIGFudGlkZXByZXNz 65211\nIE1hdmVy 65212\nX18pKQo= 65213\nKER1cmF0aW9u 65214\nZXN0YXRl 65215\nYnJhdGU= 65216\nQ2xh 65217\nIOS4ig== 65218\n65CY 65219\ncmnDqHJl 65220\nYnJlYWtlcg== 65221\nX2xlZw== 65222\nfWVsc2VpZg== 65223\nX2Z1bmNz 65224\ndcOt 65225\nLnBhZ2VZ 65226\nY3JlYXR1cmU= 65227\nIGNhbm5hYmlu 65228\nIEFzdHJv 65229\nbG9jYWxz 65230\nIExBUw== 65231\nX2NvbnZlcnNpb24= 65232\nIENSVUQ= 65233\nLnNraWxs 65234\nIHN0cmF0ZWdpc3Q= 65235\nLnBvbA== 65236\nKHNlZ21lbnQ= 65237\nIHBlZQ== 65238\nfSIpOwoK 65239\nLnByZXZpZXc= 65240\nSmFt 65241\nIGhlZnR5 65242\naXZhdGluZw== 65243\nR3JpZENvbHVtbg== 65244\nIGN1ZGQ= 65245\nIGluamVjdGlvbnM= 65246\nIE5JTA== 65247\nLW9sZHM= 65248\nZmxhdGlvbg== 65249\nIExlYWZz 65250\nIHNwaGVyaWNhbA== 65251\nIGZhbGxvdXQ= 65252\nYW1pbmVy 65253\nIDo6PQ== 65254\nLnBvaW50ZXI= 65255\nLU1hcnQ= 65256\nIG1hdHRl 65257\nIGNvcXVpbmU= 65258\nIGRpc2NvbnRpbnVlZA== 65259\nIFJFR0lPTg== 65260\nLlJpZ2h0VG9MZWZ0 65261\nIHNxdWVlemVk 65262\nX1BPSU5UUw== 65263\nYmVzdG9z 65264\nLWxhc3Rpbmc= 65265\nKHV0aWxz 65266\nPEJhc2U= 65267\nIHBhcmRvbg== 65268\nU3RyaWRl 65269\nY2Ry 65270\nIG5hcnJhdG9y 65271\ndm9sdXRpb24= 65272\nIHVzZXJJbnB1dA== 65273\nX2NvbnRhY3Rz 65274\nKGVuZW15 65275\nIENoYW1iZXJz 65276\nemllbA== 65277\nIGJsb2NrU2l6ZQ== 65278\nQW5pbWF0aW9uc01vZHVsZQ== 65279\nIGltbWVyc2l2ZQ== 65280\nIG91dGluZw== 65281\ndWVzdG9z 65282\nVHdlZW4= 65283\nIGtlcA== 65284\nIHLDqXN1bHQ= 65285\nIEJvbGx5d29vZA== 65286\nRExM 65287\nIFN1cmVseQ== 65288\nLlJvd1N0eWxl 65289\nKHRt 65290\nX2dlbmVyYXRpb24= 65291\nIFN0aXI= 65292\nIGRhdGFTbmFwc2hvdA== 65293\nY2h1cmNo 65294\nIGNvbmZpZGVudGlhbGl0eQ== 65295\nX3N1c3BlbmQ= 65296\ndmlw 65297\nIEthdGh5 65298\n44Km 65299\nIHZpb2xlbnRseQ== 65300\ncGV0cw== 65301\nIG1lc3NlZA== 65302\nIHRleHRib29rcw== 65303\nICAgICAgICAJCQk= 65304\n5raI5oGv 65305\nIExhcmF2ZWw= 65306\nIEFyY2FkZQ== 65307\nIGVudGg= 65308\nIGJlbmlnbg== 65309\nX0RST1A= 65310\nLWVuYWJsZQ== 65311\n4oCdKS4= 65312\ndXZ3eHl6 65313\nX2xpc3Rpbmc= 65314\nIE5JQw== 65315\n44GV44GE 65316\nKCIuIiw= 65317\nLXJvdW5kZWQ= 65318\nLXBhY2Vk 65319\ncGF0cmljaw== 65320\nU2VsZQ== 65321\nLmdldEZpcnN0 65322\nLkVYSVQ= 65323\nZXRlcm1pbmF0ZQ== 65324\nR3JhbQ== 65325\nLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 65326\nLmV4dGVybmFs 65327\nIHdyb25nZG9pbmc= 65328\nIEVsbQ== 65329\nIHNhbms= 65330\nVGVlbg== 65331\nIFRob21zb24= 65332\ncHJpb3I= 65333\namV0YQ== 65334\nIEFEUw== 65335\nIFBlcnNpc3RlbmNl 65336\nIEZvbGs= 65337\ne1wi 65338\nYm9uZA== 65339\nX1NQRUNJQUw= 65340\nX0xBVA== 65341\nb25la3Np 65342\nIG1vdGhlcmJvYXJk 65343\nIHNoZWFy 65344\nRnVsbFNjcmVlbg== 65345\nKks= 65346\nKEJsdWVwcmludA== 65347\nTWV0aG9kSW5mbw== 65348\nQmVjb21l 65349\nIGhhaWw= 65350\nIERvYg== 65351\nIGdlbmVyb3NpdHk= 65352\nID8iOwo= 65353\nIHdoaXNrZXk= 65354\nIHRoaW5uZXI= 65355\nIENw 65356\nIGludGVyc2VjdGlvbnM= 65357\nQ3JpdA== 65358\ncmFpc2Fs 65359\ncmVmZmVu 65360\nV2hlbmV2ZXI= 65361\nIGNvbW1lbmNlZA== 65362\nVHJhbnNmb3JtYXRpb24= 65363\nL3dyaXRl 65364\nPSIiIg== 65365\nKGxk 65366\nIG5vcnNr 65367\nQU1FTlQ= 65368\nLnNoYXJlZEluc3RhbmNl 65369\nX2hvdXNl 65370\nIGdsRW5hYmxl 65371\n6L2v 65372\nIG5hbw== 65373\nIGRlcG9zaXRpb24= 65374\nIGRpbm9zYXVycw== 65375\nIHRpbWVTdGFtcA== 65376\nX18pOwoK 65377\nLlJpYmJvbg== 65378\nIExpbmRzZXk= 65379\nOnVzZXI= 65380\nIMOA 65381\nX2Zvcm1z 65382\nbWluYXRpbmc= 65383\nIE9saXY= 65384\nIGTDqWJ1dA== 65385\nYmFyY29kZQ== 65386\nc2ltaWxhcg== 65387\nIHBsYXRlYXU= 65388\nIGluZGVt 65389\nUmVhbG0= 65390\nIGZlcnRpbGl6ZXI= 65391\nIGNhcGU= 65392\nIGNoYW1wYWduZQ== 65393\nIHNlbGZpZQ== 65394\nIHBsYWlubHk= 65395\nIGNhdGFzdHJvcGhl 65396\nIGJldHJheWVk 65397\ndmVyc2libGU= 65398\nVXBkYXRlVGltZQ== 65399\nLk91dHB1dFN0cmVhbQ== 65400\nYmlhc2Vk 65401\nYm91bmNl 65402\nIFNwb3J0aW5n 65403\nQ29vcmRpbmF0b3I= 65404\nZGV2ZWxvcGVycw== 65405\nIHRyYWNlcg== 65406\nIG11c3RhcmQ= 65407\nU1E= 65408\nX3Rlcm1pbmFs 65409\nIGNvb2xlZA== 65410\nIGF2b2lkYW5jZQ== 65411\nTG9naWNhbA== 65412\nIHllbGw= 65413\nX3JvdXRlcw== 65414\nIGFydGVyeQ== 65415\nIEJlYXJpbmdz 65416\nLm12cA== 65417\nLkdVSQ== 65418\nVUlTY3JlZW4= 65419\neW1t 65420\naXTDpA== 65421\nKClbIg== 65422\nIEF6ZXJiYWk= 65423\nIGNvbmRpdGlvbmVy 65424\nIHdhZw== 65425\nIHNjYWxw 65426\ndmluY2lhbA== 65427\nb3dsZXI= 65428\nLicpOwoK 65429\nQkxVRQ== 65430\nIMKnwqc= 65431\nQm9zdG9u 65432\nIExpbmtlZEhhc2hNYXA= 65433\nRG9jdW1lbnRhdGlvbg== 65434\nLkxlcnA= 65435\nIGRlbm5l 65436\nIGhlc2l0YXRpb24= 65437\nIENlbGVicml0eQ== 65438\nIEh5ZGU= 65439\nIGNvbW1hbmRpbmc= 65440\nYWNlbGx1bGFy 65441\nIHBhdmVtZW50 65442\nIEhhbW1vbmQ= 65443\nYXNzaWM= 65444\nUExVR0lO 65445\nIHJldm9rZWQ= 65446\nRG9jdW1lbnRv 65447\nLnBob3Rvcw== 65448\nIFdpbGxvdw== 65449\nIFZpa2luZw== 65450\nIHVwZnJvbnQ= 65451\nIExpZmV0aW1l 65452\nICVb 65453\nRHJlYW0= 65454\n5aS0 65455\nIGFjY2VsZXJhdG9y 65456\nUGVyc29uYQ== 65457\nX3RvcGljcw== 65458\n77yJ44CB 65459\nIChfLg== 65460\nIHPDqWN1cg== 65461\nIEt3 65462\nX2Nhc2g= 65463\nIHNvb3RoaW5n 65464\nIExvdmVseQ== 65465\nIEhlcnM= 65466\nZWxvbg== 65467\nTElDRU5TRQ== 65468\nX2NhY2hlZA== 65469\nLnNoYQ== 65470\nUkZD 65471\nLkZpbGVJbnB1dFN0cmVhbQ== 65472\nLUFs 65473\nIHVzZXJMaXN0 65474\nIG7DpHI= 65475\nSGlsbGFyeQ== 65476\nIHBhZ28= 65477\nLlBsdWdpbg== 65478\nIENvdmU= 65479\nX3lhbWw= 65480\nX3JzcA== 65481\nJ3Bvc3Q= 65482\nLWR1cmF0aW9u 65483\nIHNlbnRpZG8= 65484\nIG1pbkhlaWdodA== 65485\nIHR1cnJldA== 65486\nLWVuZXJneQ== 65487\nIOeJ 65488\n0YDRg9Cz 65489\nb3RlY2E= 65490\nX3F1YWw= 65491\nU2VsZWN0aXZl 65492\nIEJFTE9X 65493\nCWFkbWlu 65494\nIH19LAo= 65495\nJ3VzZXI= 65496\nU1ZH 65497\nIGN1bG8= 65498\nKFdvcmxk 65499\nLWJpbmRpbmc= 65500\nbmJy 65501\nIFNlbmRz 65502\nIHN1cHJlbWFjeQ== 65503\nIHNrYXRpbmc= 65504\nIGNyZWVr 65505\nIGFjY3VzYXRpb24= 65506\nYXBnb2xseQ== 65507\nLklERU5USVRZ 65508\nIG1hbmRhdGVk 65509\nIGdvd24= 65510\nIHdpZHRocw== 65511\nIExTVQ== 65512\nL3ZlcnNpb24= 65513\nIFJlYWRlcnM= 65514\nIFJvbmFsZG8= 65515\nIGJhZmY= 65516\nIGA7Cg== 65517\nR0xJU0g= 65518\nKGRvdA== 65519\nIE9wZXJhdG9ycw== 65520\nLlNjZW5lTWFuYWdlbWVudA== 65521\nbWVyYw== 65522\nX3JlcG9ydHM= 65523\nLWNlbnRyaWM= 65524\nIENlaWxpbmc= 65525\nPXsh 65526\nbW9ueQ== 65527\nIEFERFJFU1M= 65528\n5a+56LGh 65529\nTWF0Y2hpbmc= 65530\nIHVuaw== 65531\nIGtleUNvZGU= 65532\nICcvJyk= 65533\nKWRhdGE= 65534\nIFZvbHVudGVlcg== 65535\nIGxheg== 65536\nIEd1YW5n 65537\nIENhbmRpZGF0ZXM= 65538\nRW5zdXJl 65539\naWFnZQ== 65540\nc3VjYw== 65541\nQ2VydGFpbg== 65542\nIGxlZnRvdmVy 65543\naW5pbg== 65544\nLWVsZW1lbnRz 65545\ncGlrZQ== 65546\nIHNsaWRlc2hvdw== 65547\nLnRvb2xTdHJpcFNlcGFyYXRvcg== 65548\nLnBoYXNl 65549\nIGVudGVydGFpbmVk 65550\nIENhcnJpZQ== 65551\nIE1vaGFtbWFk 65552\nLmxvZ2dlZA== 65553\nIHNjcm9sbFRvcA== 65554\nIEFiYmV5 65555\naW1vbnk= 65556\nKHJlc3VsdFNldA== 65557\nIGFkaGVzaXZl 65558\nX0RBTUFHRQ== 65559\nIGlvY3Rs 65560\nYnJvd24= 65561\nSU5TVA== 65562\nLkNsb25l 65563\nIGxvb21pbmc= 65564\nRGVzZXJpYWxpemU= 65565\nIGx1eg== 65566\ncXJzdHV2d3h5eg== 65567\nLmlkZW50 65568\nSGVhdnk= 65569\nIGRpbw== 65570\n5piv5ZCm 65571\nIEZ1cm4= 65572\n6YKu 65573\nemltbWVy 65574\n44O844OJ 65575\nc3BlYWtlcg== 65576\nIEdlZA== 65577\nIHVuaWRlbnRpZmllZA== 65578\nSW50ZXJmYWNlT3JpZW50YXRpb24= 65579\nIFN1cnZpdm9y 65580\nZGVlbg== 65581\nIEJvcmc= 65582\ndG9Eb3VibGU= 65583\nX2J3 65584\nIHB1Ymxpc2hlcw== 65585\nX0FMRVJU 65586\nYW5ncw== 65587\naWVyZXM= 65588\nIGhlaQ== 65589\nIElDb25maWd1cmF0aW9u 65590\nIGNvbnN0aXR1dGVk 65591\nV0FUQ0g= 65592\ncHJpdmF0aW9u 65593\nIEdyYW5pdGU= 65594\nLlRleHRBbGlnbm1lbnQ= 65595\nX2t3 65596\nOyIsCg== 65597\nY290 65598\nIE5ld2Fyaw== 65599\ncm9hY2g= 65600\nKW9iag== 65601\nQ29tcGlsYXRpb24= 65602\nQ2F0ZWdvcnlJZA== 65603\nLnNldFVzZXI= 65604\naXZ5 65605\nIEltYWdpbmc= 65606\naWdodGVk 65607\nIHdnZXQ= 65608\nIG1vdXRocw== 65609\nLmxpbg== 65610\nIFJhZGlvQnV0dG9u 65611\nLkNtZA== 65612\nc3Nl 65613\nIG1lc2hlcw== 65614\nIFNvbGU= 65615\nLnJlY29yZHM= 65616\nIGFudGlz 65617\nKG1vbg== 65618\nINGH0LjRgdC70L4= 65619\ngq0= 65620\nIOyeiOuKlA== 65621\nQWxsQXJnc0NvbnN0cnVjdG9y 65622\nIHN1cnJlYWw= 65623\nIE1hcnJpZWQ= 65624\nIHhwYXRo 65625\nXGY= 65626\nQnJpbmc= 65627\nIHlhaG9v 65628\nIEV0c3k= 65629\nX2RhaWx5 65630\nIHRocm93YWJsZQ== 65631\nIFBsYXNtYQ== 65632\nL1B1YmxpYw== 65633\naW1pemVCb3g= 65634\nIHZlcw== 65635\nIHRyb20= 65636\nX3Jocw== 65637\nLWFscGhh 65638\nIEFyYm9y 65639\nKSkt 65640\nRmlzaA== 65641\nZmVlZHM= 65642\nIGNhbGY= 65643\nIFNlcmdlYW50 65644\nKGVudW0= 65645\nIFJhbXNleQ== 65646\nIElkZW50aWZ5 65647\nLmluaXRTdGF0ZQ== 65648\nIGZsdWN0dWF0aW9ucw== 65649\nX0FUVFJJQlVURVM= 65650\nIHB3bQ== 65651\nRVNB 65652\nY3Bm 65653\nU2ltdWxhdGlvbg== 65654\nIHlvdXRoZnVs 65655\nIEluZmFudHJ5 65656\nIGdsYW5jZWQ= 65657\nIFByb3Blcg== 65658\n5LmJ 65659\nIEtyYWZ0 65660\nQ2l0 65661\nb29wcw== 65662\nPXVybA== 65663\ncG9zdGluZw== 65664\nZGVjbGFyaW5n 65665\nIHBOb2Rl 65666\nSmF2YXNjcmlwdA== 65667\nCQkJCQoJCQkJCg== 65668\nLmNvb3JkaW5hdGVz 65669\ncmlldA== 65670\nIFNx 65671\nX0NBVA== 65672\nIFBhcGE= 65673\nYW5kaQ== 65674\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 65675\nTWVldGluZw== 65676\nIOyekA== 65677\nSW1hZ2Vu 65678\nw6lyaWVuY2U= 65679\nQWdncmVnYXRl 65680\nLnBvbHk= 65681\nIHdhdmVk 65682\nIGludmVycw== 65683\nc2VhcmNoTW9kZWw= 65684\nIHRyb2xscw== 65685\nW2xldmVs 65686\nIExvd2U= 65687\ndWxsbw== 65688\nKHBsYWNl 65689\nIE5BU0NBUg== 65690\nIG9yYml0YWw= 65691\nLnN0b3J5 65692\nIGF1dGhvcml0YXRpdmU= 65693\nLnRleHRWaWV3 65694\nIGFscGg= 65695\nX3JlZHVjZQ== 65696\nIEZyYW1lcw== 65697\nIEJyb20= 65698\ncmVkaQ== 65699\nKE1ldGhvZEltcGxPcHRpb25z 65700\nbWFjZW4= 65701\nVG90 65702\nIG1pZGQ= 65703\n2Y8= 65704\nIEJhc2VNb2RlbA== 65705\nIFZlZ2E= 65706\nID8+Igo= 65707\nIFJpZ2lkYm9keQ== 65708\nLnNldENvbnRlbnRUeXBl 65709\nYWFT 65710\nQmFzZWxpbmU= 65711\nIGJsYW5rZXRz 65712\nc2Fw 65713\nIGNhc3VhbGx5 65714\nVW5pdmVycw== 65715\nIFRyYXk= 65716\nIEFpcmVz 65717\nIG1heFk= 65718\nX1BST1BFUlRJRVM= 65719\nIGhlbG1ldHM= 65720\nwqY= 65721\nX2Rlc2Ny 65722\nc2hpbnQ= 65723\nX0NQUA== 65724\ndW1v 65725\nYWRheQ== 65726\nKHBsb3Q= 65727\nZW56eW1l 65728\nIEV4Y2VwdGlvbnM= 65729\nX3Zpc3VhbA== 65730\nOl0KCg== 65731\nKHRhcmdldEVudGl0eQ== 65732\ncGhlcmVz 65733\ndW5hbg== 65734\nIHNlbG9u 65735\nd2ls 65736\nIFJlbmRlcmluZw== 65737\nS0M= 65738\nIGNvbnN0aXR1ZW5jeQ== 65739\nU0NSSUJF 65740\nZXN5 65741\nIEZlbGxvd3NoaXA= 65742\n5Y+4 65743\nIGZ1dHVybw== 65744\nIGFybW9yZWQ= 65745\nbGlzdGU= 65746\nb3Jhcw== 65747\nbXVsdGlwbHk= 65748\nZ2VtZQ== 65749\nY29lZg== 65750\n0L7QsdGA0LDQtg== 65751\nIERlbGl2ZXI= 65752\nZW5nbw== 65753\nLnVzZXJTZXJ2aWNl 65754\nT05VUw== 65755\nLm9ucmVhZHlzdGF0ZWNoYW5nZQ== 65756\nICIvIiw= 65757\nYW1iaW8= 65758\nX1Byb2plY3Q= 65759\nJyk/Pg== 65760\nIGZsaXBwaW5n 65761\nd29tZW4= 65762\nLkNyb3Nz 65763\nIGhvbGxhbmQ= 65764\nIGNpbmVtYXRpYw== 65765\nIHdoaXN0bGVibA== 65766\nIGxpbmd1aXN0aWM= 65767\nLkdldHRlcg== 65768\nIG3DpG5uZXI= 65769\nIExlZ28= 65770\nIFNjaHVtZXI= 65771\nYXNzZXNzbWVudA== 65772\nX2Noaw== 65773\nIHJlY29tbWVuZGluZw== 65774\nLnNjYWxh 65775\nIEd1YXJhbnRlZQ== 65776\nIEBf 65777\nLkFVVEg= 65778\nIHlQb3M= 65779\nbGF0ZXg= 65780\nIEFsYmVydG8= 65781\n5q2l 65782\ndGhvcmE= 65783\n4Li34LmI 65784\nVVJMRXhjZXB0aW9u 65785\nR2hvc3Q= 65786\nLlRvb2xiYXI= 65787\nIGVuZGlhbg== 65788\n6Zeo 65789\nc3RyYWN0aW9ucw== 65790\nRmlsZU5vdEZvdW5kRXhjZXB0aW9u 65791\nIHN0aW11bGF0aW5n 65792\nYnNlcnZpY2U= 65793\nYXTDs3Jpbw== 65794\naXRpb3Vz 65795\nIGF1dGhTZXJ2aWNl 65796\nX1RSQU5TRkVS 65797\nIHJlZGlyZWN0VG8= 65798\nIG1lbnNlbg== 65799\nIFNQTA== 65800\nIMK7LA== 65801\nIGFjZXQ= 65802\nX0JhY2s= 65803\n4KSV 65804\nYWFj 65805\nIFJpb3Q= 65806\nX0ZC 65807\nIFph 65808\nUGxhdGU= 65809\nIGxhYmVsVGV4dA== 65810\nINCy0YDQtdC8 65811\naHRvbg== 65812\nIE1jQQ== 65813\nIEFwcGVuZGl4 65814\nIEtvaw== 65815\nIGludGVydmlld2luZw== 65816\nX3NwZWxs 65817\nIFN1YmplY3Rz 65818\nIGJ1cm5lcg== 65819\n5a+8 65820\naWxsaWFu 65821\nIGJ1bXBz 65822\nUGFzc2Vk 65823\nIENvbnRyaWJ1dG9y 65824\nWW8= 65825\nYmxh 65826\nIHNvdXQ= 65827\nLmV4Yw== 65828\nTm90aWZpZXI= 65829\nc2hpdg== 65830\nLlVuaXRUZXN0aW5n 65831\ndWVsbGVz 65832\nX1NMRUVQ 65833\nCW9wdHM= 65834\nIHByZXNjcmlwdGlvbnM= 65835\nIHJldmlzZQ== 65836\nRURJVE9S 65837\nIGFubsOpZXM= 65838\nX3BrZw== 65839\nIFRyYWNrcw== 65840\n4LmI4Liy 65841\nPWZvcm1z 65842\nLlJVTg== 65843\nIGFzZWc= 65844\nIHDDoQ== 65845\nIGplcw== 65846\nR3Jl 65847\nYWNy 65848\nT2ZmaWNpYWxz 65849\ndWtlcw== 65850\nY29tcGFuaWVz 65851\nXFF1ZXJ5 65852\nIFByaW50YWJsZQ== 65853\n5a6i 65854\nX1ZP 65855\nIGRlaXg= 65856\nIGRldmljZUlk 65857\nIGRpc3R1cmJhbmNl 65858\nbmlzdA== 65859\nLmlzbw== 65860\ncGFyYWxsZQ== 65861\nLWRlc2NyaWJlZGJ5 65862\nIExpZg== 65863\nIGJyZWFzdGZlZWRpbmc= 65864\nIGZlbWluaXN0cw== 65865\nbGVncm91bmQ= 65866\nIGRhbWU= 65867\nIGNvbXB1bHNvcnk= 65868\nTUVSQ0hBTlRBQklMSVRZ 65869\nLXJlc3VsdHM= 65870\nZm9ybWVkVVJMRXhjZXB0aW9u 65871\nOlsK 65872\nLWludGVyZXN0 65873\nIHPDpA== 65874\nIG5vc3RhbGdpYQ== 65875\nIGNsYXJpZmllZA== 65876\nIFBIT1RP 65877\nIHJldmlzaXQ= 65878\nIGNhcHN1bGVz 65879\nIHNoaW5lcw== 65880\nIGNyYWZ0c20= 65881\nc3ViamVjdHM= 65882\nICAgICAgICAgICANCg== 65883\n5LiN6IO95Li656m6 65884\nIFNjaHdhcnR6 65885\ncmV1 65886\nIG1hZHJpZA== 65887\nLnBlbmRpbmc= 65888\nIExJTg== 65889\nIHVuc3Q= 65890\nCW12 65891\nIHZpdmFzdHJlZXQ= 65892\nIHNwb2ls 65893\nw7hq 65894\n64u5 65895\nIGJ1ZW5h 65896\nIGRpZ2l0YWxXcml0ZQ== 65897\nc3Vicw== 65898\nIFVOSVZFUlM= 65899\nIFN1aWNpZGU= 65900\nPEd1aWQ= 65901\nLmVsZW0= 65902\nX2NvbnN0cnVjdA== 65903\nIGFtaWRzdA== 65904\nIOuP 65905\nLWVzdGVlbQ== 65906\nIEludGVncml0eQ== 65907\nLmZtbA== 65908\nT3V0T2ZCb3VuZHNFeGNlcHRpb24= 65909\nLVNlbWl0aXNt 65910\nQmV0YQ== 65911\nLWdvaW5n 65912\nU2VnbWVudHM= 65913\nIE1hZQ== 65914\nIFBlcnNvbmFsaXR5 65915\ndXJiYXRpb24= 65916\n5Y+z 65917\nIHNlcnZpY2luZw== 65918\nIGJpcG9sYXI= 65919\nX1NUQUdF 65920\nLkpQRw== 65921\nJyl9fSI+ 65922\naXNobHk= 65923\nSVZFUlk= 65924\nIEluc3BpcmVk 65925\nLnNlcnY= 65926\nKGRhdGFz 65927\nIGRpdmlkZXM= 65928\nPFJlYWw= 65929\ndmVydHVyZQ== 65930\nIG1vdGl2YXRpb25z 65931\ndmVydGU= 65932\nRU5DSA== 65933\nZmRz 65934\nIHJldm9sdA== 65935\nd2VidG9rZW4= 65936\naW5zdGVhZA== 65937\nCW9wdA== 65938\nIE1hcmlqdWFuYQ== 65939\nX2FkYw== 65940\nYmFv 65941\nW1NlcmlhbGl6ZUZpZWxk 65942\nIGdyYWZmaXRp 65943\nLWFvcw== 65944\nZW1pYWg= 65945\nIGbDrXM= 65946\nIGV0aGlj 65947\nJ2FsbA== 65948\nOmtleQ== 65949\n65Ok 65950\nIHJlc3RyaWN0aW5n 65951\nIFhIVE1M 65952\nZXJlbw== 65953\ndW5kb3M= 65954\nCWVuZGlm 65955\nWzosOiw= 65956\nIHN0ZWhlbg== 65957\nYWtoaXI= 65958\nIGp1aWNlcw== 65959\nZGF0YVNvdXJjZQ== 65960\nX21r 65961\nLmRlbGV0ZWQ= 65962\nQ29uZ3Jlc3M= 65963\naW1tZWw= 65964\nRWxlY3RyaWM= 65965\nYW9z 65966\nIE92ZXJsYXk= 65967\nIEFDTFU= 65968\ncm5k 65969\nZXNzZXM= 65970\nIEx1eGVtYm91cmc= 65971\ncGFyc2VGbG9hdA== 65972\nIGd1dHM= 65973\nY2xhc3NpZmllZA== 65974\nIGRlZlN0eWxl 65975\nIFRjcA== 65976\ncGVhdGluZw== 65977\nQ2hhcnRz 65978\nX3Vy 65979\nX2xhdGVzdA== 65980\nKSEK 65981\nY2F0aW9u 65982\nLkdldGVudg== 65983\nKGxvb3A= 65984\nIHVubA== 65985\nX2R0eXBl 65986\nemXFhA== 65987\nKEpOSUVudg== 65988\nLmZldGNob25l 65989\nIHNpZ21vaWQ= 65990\nIE9MRA== 65991\nIE1pbmlzdA== 65992\n7YE= 65993\nIEvDtg== 65994\nIGZyYWN0aW9ucw== 65995\nIHNpeg== 65996\nPT09PT0K 65997\nLlByaW50V3JpdGVy 65998\nX0FkZHJlc3M= 65999\nIEF1ZGllbmNl 66000\nQ29tbw== 66001\nIEJydWlucw== 66002\nLmFjdGl2aXRpZXM= 66003\nIGFuY2VzdHJ5 66004\n0YPQu9GM0YI= 66005\nCVJldHVybg== 66006\ncHVu 66007\nIGdyYXBlcw== 66008\nSUxvZw== 66009\nIGRpam8= 66010\nIFBlcmtpbnM= 66011\nIFZNd2FyZQ== 66012\nX2F1dGhlbnRpY2F0ZWQ= 66013\nw650cmU= 66014\nb3ZlcndyaXRl 66015\nIEhk 66016\nIGdhbGF4aWVz 66017\nYWNodQ== 66018\nSHJlZg== 66019\nW0Q= 66020\nIHBhcmNl 66021\nTGF0TG5n 66022\nX3BhdHRlcm5z 66023\nIFNIT1JU 66024\nIHJ1bW91cnM= 66025\nY291bnR5 66026\nIEdSSUQ= 66027\nIFsv 66028\nIFNreXJpbQ== 66029\nRGF0YUdyaWRWaWV3VGV4dEJveENvbHVtbg== 66030\nIGNlbg== 66031\nIGN1Y3VtYmVy 66032\nLklOVA== 66033\nX0NPTkZJUk0= 66034\nIGN0bA== 66035\ncGVybA== 66036\naWxsb3M= 66037\nIEFDQQ== 66038\nIEdlb3JnZXRvd24= 66039\nX2NhbGxhYmxl 66040\nIENyYWZ0cw== 66041\nL2Nv 66042\nIGluYm91bmQ= 66043\nIFRlY2huaXF1ZXM= 66044\nc2V0Q2hlY2tlZA== 66045\nIHBuYW1l 66046\nY29tcHV0 66047\nU3RlZWw= 66048\nIGhhbmRoZWxk 66049\nIEFsYW0= 66050\nYWJzdHJhY3RtZXRob2Q= 66051\n6aKR 66052\nSU5Z 66053\nYmF0dGxl 66054\nX0VWVA== 66055\nIGNldXg= 66056\nIGF0b2Y= 66057\nIEFieXNz 66058\nX3ZhbGlkYXRvcg== 66059\nIGhhaXJz 66060\nVmVydGV4QXR0cmliQXJyYXk= 66061\nIGNvbW1vbnM= 66062\nLWJpbmQ= 66063\nTXVp 66064\nIGNvc21ldGljcw== 66065\nIG1pcmFj 66066\nLm1hcmtlcg== 66067\nU0NBTEU= 66068\nLldvcmQ= 66069\nLXVs 66070\nIERpdmVyc2l0eQ== 66071\nIEREUw== 66072\nLmN3ZA== 66073\nX3h5eg== 66074\nIENvbXB1dGVz 66075\nKGNsaWNrZWQ= 66076\nVEVNUExBVEU= 66077\nIHpvbmluZw== 66078\nIGZpbnM= 66079\nIFBK 66080\nZXh0Vmlldw== 66081\nQ2hhcmFjdGVyaXN0aWM= 66082\naWdhdG9ycw== 66083\nIHByb2NsYWlt 66084\nIHByaXN0aW5l 66085\nIGRhdGFzdG9yZQ== 66086\nIGRpc2NvdXJhZ2U= 66087\nX25zZWM= 66088\nIG5pbmV0ZWVudGg= 66089\nIGNlbHVp 66090\nSm9uYXRoYW4= 66091\nIGFtcGg= 66092\nIENyb3NzaW5n 66093\nIEh1bWFucw== 66094\nIEJvb2tlcg== 66095\nw6JjZQ== 66096\nZ2V0UG9zdA== 66097\nIE1vbnRlcg== 66098\nIEZsYXZvcg== 66099\nTWVkaWFUeXBl 66100\nIuKAlA== 66101\nIEFyY2hhZQ== 66102\nQHJldHVybg== 66103\nLWF3YXJl 66104\nb3J1 66105\nLVRoZQ== 66106\nYW1wbGVk 66107\nS0Y= 66108\nLlRlbXA= 66109\nIERyZQ== 66110\nKHtf 66111\ncG9seWdvbg== 66112\nIMOm 66113\nIERlZmVuZGVy 66114\n77yY 66115\nXyks 66116\nLlVuc3VwcG9ydGVk 66117\nX14o 66118\nKElEQw== 66119\nJHY= 66120\nIHdvcnRobGVzcw== 66121\nIFNFRw== 66122\naWxpa2k= 66123\nTm9BcmdzQ29uc3RydWN0b3I= 66124\nIE1lcmNo 66125\nIG5vcA== 66126\nIGZvcmdldHRpbmc= 66127\nIGRvcGFtaW5l 66128\nanVhbA== 66129\nZW9u 66130\nIFJlYXNvbnM= 66131\nc29ydEJ5 66132\nKCctJyw= 66133\nLXN5bmM= 66134\nZWNlZG9y 66135\nS1A= 66136\nKGNvb3Jk 66137\nKENoYXQ= 66138\nXCQ= 66139\nZXN0cmluZw== 66140\nY2Vm 66141\nLmhhbmRsZUVycm9y 66142\n24zYrw== 66143\n0YHQug== 66144\nIGhhbmRj 66145\nZWxpamtl 66146\nIFNwaXI= 66147\nIEJ1Y2tz 66148\nIFFSZWN0 66149\nU2V0Rm9udA== 66150\nLmV4ZWNTUUw= 66151\nOjoKCg== 66152\nIHN1aWNpZGFs 66153\nc2VlaW5n 66154\nIGNpZGVy 66155\nUHJvZ3Jlc3NEaWFsb2c= 66156\nIG1vbGRpbmc= 66157\nCXRyYWNl 66158\nIGVtcGhhc2l6ZXM= 66159\nIG11bHRpcGxlcw== 66160\nX1BU 66161\nX091dHB1dA== 66162\nY2FwaXRhbA== 66163\nTmVlZHM= 66164\nX0RJUkVDVElPTg== 66165\nLmlzVmlzaWJsZQ== 66166\nIHJlc3Rl 66167\nIG92YXI= 66168\nKHNoYXJlZA== 66169\nLWNvbXBvc2U= 66170\nLmJhY2t3YXJk 66171\nCXJlY3Q= 66172\nQW1hemluZw== 66173\nLmRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 66174\nU0VSVklDRQ== 66175\nIEluanVyeQ== 66176\nQnJhaW4= 66177\nIGF1c2dl 66178\nKHBl 66179\nLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 66180\nb3JwdGlvbg== 66181\nX01BSUw= 66182\nb2hh 66183\nIHNubw== 66184\nIGJvaWxlZA== 66185\naWxkZW5hZmls 66186\nIFdlbGZhcmU= 66187\nIFF1YXJ0eg== 66188\nIGNhcHRjaGE= 66189\nIFdFU1Q= 66190\nIE1hemU= 66191\nIGdyYXBoZW5l 66192\nIHBlcms= 66193\nIG1pc3RyZXNz 66194\nLkZvcm1TdGFydFBvc2l0aW9u 66195\nIGV4cGVyaW1lbnRhdGlvbg== 66196\nKikoKA== 66197\nIGJyb2FkY2FzdHM= 66198\nIHJlbW92ZUFsbA== 66199\nCUdVSQ== 66200\n5YOP 66201\nYWJjZGVmZ2hpamtsbW5vcA== 66202\nIHVuaW5z 66203\nQVNQ 66204\nK3c= 66205\nbXVy 66206\nIGRpbmU= 66207\nIGFyb3U= 66208\nIGVzY2FwZXM= 66209\nIFRvYmFjY28= 66210\nLm5hbWVk 66211\nIFBhdHJlb24= 66212\nX0ZBQ0U= 66213\nX3NwaW5uZXI= 66214\nbW92aW5n 66215\nX3ZvdGVz 66216\nT2hpbw== 66217\nLmVuY29kaW5n 66218\nRGVncmVlcw== 66219\nIlRv 66220\nIHByZXN0aWdl 66221\nb3NwaGVyZQ== 66222\nIExhbmNhc3Rlcg== 66223\n77yX 66224\nIG9uQ2FuY2Vs 66225\nIEhJUw== 66226\n0J7RiNC40LHQutCw 66227\nIG9yY2hlc3Ry 66228\nIHJlZnJlc2hlZA== 66229\nRGF0aW5n 66230\nKG11 66231\nIEplZA== 66232\nIEVkaXRvcmlhbA== 66233\nU2V0QnJhbmNoQWRkcmVzcw== 66234\nQ3BwVHlwZURlZmluaXRpb24= 66235\nIEJyb254 66236\nIGdhdGhlcmluZ3M= 66237\nICcnDQo= 66238\ncG9zdERhdGE= 66239\nIEZyYW0= 66240\nQ2xpcGJvYXJk 66241\nIFhQYXRo 66242\ncmF5cw== 66243\nIGJha2VyeQ== 66244\nIHJvd0NvdW50 66245\nIGxvd3M= 66246\nYW5kV2hlcmU= 66247\nX3ZlcnNpb25z 66248\nIEd1bm4= 66249\nIHdlZXI= 66250\nIGNvbnRleHR1YWw= 66251\nIEtleUNvZGU= 66252\nIFNhc2thdGNoZXdhbg== 66253\nIFBoaWxseQ== 66254\nIE1vdXRo 66255\nIGRvUG9zdA== 66256\nIHBlcmNlbnRpbGU= 66257\nIGJ1ZmZlclNpemU= 66258\nKGZyZXE= 66259\nJHNtYXJ0eQ== 66260\naWVydGU= 66261\naXNzYW50 66262\nX2Zwcw== 66263\nIGludGltYWN5 66264\nX2Jvb2tpbmc= 66265\nIGRlY29tcG9zaXRpb24= 66266\ndW5pY2lwaW8= 66267\nIE5TSW5kZXhQYXRo 66268\nIEtS 66269\nIHR1cmJpbmU= 66270\nLXByb20= 66271\nX0NBUlQ= 66272\nKGNvb3Jkcw== 66273\nZWNvbQ== 66274\nIGNvd2FyZA== 66275\nIHdheXBvaW50 66276\nLUNvbGE= 66277\nIHByb2ZvdW5kbHk= 66278\nIEVSUA== 66279\nYm91bmRhcnk= 66280\nIHBvb3Jlcg== 66281\nL2V4YW1wbGU= 66282\nIHJlbmNvbnRy 66283\nIG5pY2Vy 66284\n54E= 66285\nLWNoYWlu 66286\nIEVudGl0eVN0YXRl 66287\nIGdyYWRpbmc= 66288\nQUxJR04= 66289\nIFBpY2tz 66290\nLmFr 66291\nLXZlY3Rvcg== 66292\nIEVudHJpZXM= 66293\nIFNlcmdpbw== 66294\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 66295\nT0RC 66296\nIOW9 66297\nIGNvcm9uYXJ5 66298\nIHNoYXZlZA== 66299\nIGFxdWU= 66300\nZW1wbG95ZXI= 66301\nIHBhcmNo 66302\nIG1lYXN1cmFibGU= 66303\nIGJvaXM= 66304\nam9pbmluZw== 66305\nIHZvbGNhbm8= 66306\nOk0= 66307\nLnRocmVzaG9sZA== 66308\nIERveWxl 66309\ndmVyYm9zaXR5 66310\nIOKWug== 66311\nIHNwb3VzZXM= 66312\nIHJlc3VtZXM= 66313\nTmF0 66314\nek0= 66315\nX0VuYWJsZQ== 66316\nIFVTRUQ= 66317\nIENhcmV5 66318\nCWZw 66319\nUGF0cmljaw== 66320\nIE9zdw== 66321\nUG9zc2libGU= 66322\nLmxlYWRpbmc= 66323\nYWhydW5n 66324\n4pmqCgo= 66325\nCQkJCQkJCQkJIA== 66326\n44CC44CM 66327\nLmFkZEVkZ2U= 66328\nIGVjeA== 66329\nJ0xCTA== 66330\nIFRDTA== 66331\nIGJpcnRocw== 66332\nIHRoZWF0cmljYWw= 66333\nIHBpag== 66334\nZ3JlYXRlcg== 66335\nIEZTdHJpbmc= 66336\nQkVE 66337\n7ZmY 66338\nLkNhc3Q= 66339\nQ1g= 66340\nL01haW4= 66341\ncGVhdGVy 66342\nIHBlcnN1YXNpdmU= 66343\nY29udG8= 66344\neGxzeA== 66345\nX0FCUw== 66346\nIEJ1bg== 66347\nbWFuYWdlZFR5cGU= 66348\n0LPQvg== 66349\nIFNjYWxh 66350\ncmFkb3I= 66351\nIHJlY29nbml6YWJsZQ== 66352\ndHJ1 66353\nIHRq 66354\nXE1hcHBpbmc= 66355\nX0JPQVJE 66356\nIHRvSnNvbg== 66357\nIGJvd2Vs 66358\nKWQ= 66359\nJ30p 66360\nKGhXbmQ= 66361\naHJz 66362\nY2FudA== 66363\nX18oKQoK 66364\nIGludGVycm9nYXRpb24= 66365\nbGljYXRpdmU= 66366\nCQkJCgo= 66367\nIFR3aW5z 66368\nIEFP 66369\nQmlyZA== 66370\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 66371\ncGVyaGFwcw== 66372\nb2ZpbGU= 66373\nIHBlbmM= 66374\nIHRyZWVOb2Rl 66375\nIHRvcGljYWw= 66376\nLXByaXZhdGU= 66377\n54m5 66378\nIERpc2N1c3M= 66379\nIGRlc24= 66380\nUnVh 66381\nLlZFUlRJQ0FM 66382\n44CN44Go 66383\nSUZPUk0= 66384\nIGNvdXJ0eWFyZA== 66385\nINGB0LXRgA== 66386\nICMjIwo= 66387\nIGVtcG93ZXJpbmc= 66388\nIEZhY2lsaXRpZXM= 66389\nXCIsXA== 66390\nvZQ= 66391\nOk9iamVjdA== 66392\nIFZvdGVz 66393\naXNlbA== 66394\nIGV1Y2g= 66395\nb3JzdA== 66396\nKENsb25l 66397\nLmNvb2tpZXM= 66398\nJHRtcA== 66399\nKGluZGljZXM= 66400\nZXJnZW5jeQ== 66401\nIHBsYWd1ZWQ= 66402\nIERpYQ== 66403\neWNsaWM= 66404\nfSkp 66405\n6rK9 66406\nIGR1ZWw= 66407\nIGhldGVyb3NleHVhbA== 66408\nLmFkZENvbXBvbmVudA== 66409\nU0VDUkVU 66410\nbGVybw== 66411\nY29uc3RyYWludHM= 66412\nIGdldENvbm5lY3Rpb24= 66413\nIExlYmVucw== 66414\nIFBvbg== 66415\nIENocm9uaWNsZXM= 66416\nICAgICAgICAgICAgICAgICAgICAgICAgDQo= 66417\nIE1vdXJpbmhv 66418\nIG9jY3VwYW5jeQ== 66419\nX3NsYXZl 66420\nT1JJWkVE 66421\nCVk= 66422\nLmhpZ2hsaWdodA== 66423\nX3NlbnNpdGl2ZQ== 66424\nIHNwZWN0cm8= 66425\nLmVuY3J5cHQ= 66426\nIHNwb2lsZXJz 66427\nLlNpemVNb2Rl 66428\nIHByb2Zlc3Npb25hbGlzbQ== 66429\nPklu 66430\nRXhwaXJlcw== 66431\nQXU= 66432\nIEhWQUM= 66433\ncmVsYXRpb25z 66434\nIEFUSw== 66435\nX0dFTkVSQUw= 66436\nIFNpZ2h0 66437\nIGtpdGNoZW5z 66438\nOlJlZ2lzdGVy 66439\nIGVkbQ== 66440\nIHRvbGVyYXRlZA== 66441\nIFNFU1NJT04= 66442\naWVyeg== 66443\nIElOU1Q= 66444\nLnBhdGhz 66445\nIHBlcnBldHJhdG9ycw== 66446\nZWJw 66447\ncGVjdGluZw== 66448\nZWR1Y2F0ZWQ= 66449\nIFBpb25lZXI= 66450\nX1JFVg== 66451\nIGJ1c3R5 66452\nc3RhdHVzZXM= 66453\nUmVzcG9uZA== 66454\nc2h1ZmZsZQ== 66455\nIFRpbmRlcg== 66456\nRXhhY3RseQ== 66457\naWxsaXNlY29uZA== 66458\nINC30L3QsNGH0LXQvdC40LU= 66459\nKEFjY291bnQ= 66460\nLiY= 66461\naXpy 66462\nYXNzdW1pbmc= 66463\nCU9wdGlvbmFs 66464\nU2VuaGE= 66465\nIGVucm9s 66466\ndHVy 66467\nIGFycm9nYW50 66468\nIEpPYmplY3Q= 66469\nb2xpdGhpYw== 66470\nbWFwcGVk 66471\nIHRpcHBlZA== 66472\nLlVQREFURQ== 66473\nw6htZXM= 66474\nR05VQw== 66475\nV1g= 66476\nIG1vbmtz 66477\nLmJvcmRlcldpZHRo 66478\nIFNodXRkb3du 66479\nIEhhcm1vbnk= 66480\nY2xhc3NpZmljYXRpb24= 66481\nIGRlcXVldWVSZXVzYWJsZUNlbGw= 66482\nIF07DQo= 66483\nLkdlbg== 66484\nIGxhdm9ybw== 66485\nIExlb25hcmRv 66486\nICYp 66487\nIGRlcG9pcw== 66488\nIFZvbHQ= 66489\nRXRo 66490\nIExlb25l 66491\nIE5lZGVybGFuZA== 66492\nIEVYVFJB 66493\nUmVzb2x2ZWQ= 66494\nIHBlbmluc3VsYQ== 66495\nX1ZN 66496\nR2Vy 66497\n2KfYrw== 66498\nLnByb21wdA== 66499\nLmFsaWdu 66500\naW5nZ2E= 66501\nZmlsbXM= 66502\nSEFORExF 66503\nIGNhcnRz 66504\nKFNvbWU= 66505\nPEF1ZGlv 66506\nIGVubGFyZ2VtZW50 66507\nIGdyb2Nlcmllcw== 66508\nLWhvbGRlcg== 66509\nIGlycml0YXRpb24= 66510\nQ29tbXVuaWNhdGlvbg== 66511\nIHByaW1hcmllcw== 66512\naHR1Yg== 66513\nX2luaWNpbw== 66514\nIGNvb3JkaW5hdGluZw== 66515\nKHF1 66516\nIGZhaXM= 66517\nIHZpc3Rv 66518\nZ3VpZGVk 66519\nIHZsYW4= 66520\nIGVzcHJlc3Nv 66521\nw6h0ZQ== 66522\nc2VoZW4= 66523\nX3Blbmc= 66524\nIHJvb2Zpbmc= 66525\nIEFsaXZl 66526\nQXhpc1NpemU= 66527\nIHN0dW4= 66528\nIHJlc3RlZA== 66529\ndWxsZXRz 66530\nIE1hbGF5c2lhbg== 66531\nLFVuaXR5RW5naW5l 66532\nIGVudnk= 66533\nJ107DQoNCg== 66534\nIE9zdA== 66535\nX2p1bXA= 66536\nIGNvbnRyYXNlw7Fh 66537\nIng= 66538\nCVBhZ2U= 66539\nKVsi 66540\nIFNJUA== 66541\nIEdlb2dyYXBoaWM= 66542\nIGNhdWN1cw== 66543\nX1RFUg== 66544\n4oCdOw== 66545\nUG9zdEV4ZWN1dGU= 66546\naW1zaG93 66547\nIENPTVBBTlk= 66548\nIE5lYWw= 66549\nIEhlYXJpbmc= 66550\nKGFjdG9y 66551\nQmlk 66552\nLlBS 66553\nLlByb2R1Y3Rz 66554\nIEVtbQ== 66555\nIOab 66556\nIHB1bHNlcw== 66557\nX0VW 66558\nL2V4cA== 66559\nX21vdGlvbg== 66560\nIGdiYw== 66561\nIG5hdmlnYXRpb25Db250cm9sbGVy 66562\nIENvdXJ0cw== 66563\nIEljb25EYXRh 66564\nd3U= 66565\nX3Jm 66566\nIFJhZ2U= 66567\nLWZsYXQ= 66568\nIEhpbXNlbGY= 66569\nX2NodW5rcw== 66570\nIG92ZXJzaA== 66571\nIGNpZg== 66572\nKElz 66573\ncGVha2Vy 66574\nIENQVXM= 66575\naXJlY3Rvcg== 66576\nLHRpdGxl 66577\nLnNldERlc2NyaXB0aW9u 66578\nIGVhcnRocXVha2Vz 66579\nIHdu 66580\nZ2x5cGg= 66581\ndWx1bWk= 66582\nIHNwZWVkeQ== 66583\nIGVzcGFjaW8= 66584\nIGVtdWxhdGU= 66585\nIFwiJA== 66586\nX0lORg== 66587\nY2FsbG9j 66588\nLXF1ZXJ5 66589\nKHZhbHM= 66590\nIHNlYWI= 66591\nIGhhdm9j 66592\nIEludGVyc3RhdGU= 66593\nIHRyaWFuZ3VsYXI= 66594\nYmluZGluZ3M= 66595\nCQkJCQkgICAgIA== 66596\nIAkg 66597\nYmNyeXB0 66598\nIGNyZWRpdG9ycw== 66599\nIHNlbWlm 66600\nbGxl 66601\naWVuemE= 66602\nIEtlbGxlcg== 66603\nIG1vbnN0cg== 66604\nIE1hcmNvcw== 66605\nKHJlaW50ZXJwcmV0 66606\nIGhpdmU= 66607\nU2Ny 66608\nX2hyZXN1bHQ= 66609\nIOyhsA== 66610\nIFNxbERhdGFSZWFkZXI= 66611\nYW5ub3VuY2U= 66612\nX3ByZWZlcmVuY2Vz 66613\nIHRydXN0cw== 66614\nRXJvdA== 66615\nLXdvcmtlcg== 66616\nIHR3ZWVu 66617\nIFN0cmVldHM= 66618\ngq3soJw= 66619\nIEZyYW56 66620\nIOKApi4= 66621\nVUlUZXh0RmllbGQ= 66622\nLmdldEl0ZW1z 66623\nIHRvbHVh 66624\n4oCcT3Vy 66625\nIHPhu5E= 66626\nIHZpcnR1ZXM= 66627\nIHBvdWx0cnk= 66628\nPXJvdw== 66629\nY29kZWQ= 66630\nTm9TdWNo 66631\nIGtvZA== 66632\nbHNp 66633\nIGtldG8= 66634\nIGdyb3VwTmFtZQ== 66635\nYXNu 66636\nIHVuY29tcA== 66637\nIHRleHRpbGU= 66638\ndG9vbFN0cmlw 66639\nLlBvcGVu 66640\nIHByb3N0aXR1dGU= 66641\nIHByb21vdGVy 66642\nIjt9Cg== 66643\nIGNvbGxpZGVy 66644\nQnJva2Vy 66645\nZGF0YXNldHM= 66646\nCU5TU3RyaW5n 66647\nYW5nbGVy 66648\nUklFUw== 66649\nYXRvbXM= 66650\nIHJlbmRleg== 66651\nYXBv 66652\nIOuE 66653\nLmdj 66654\nIFNPTUU= 66655\nIGZnZXRz 66656\nR0xF 66657\nIHphbA== 66658\nIE9wcG9zaXRpb24= 66659\naGFuZGxlU3VibWl0 66660\nX21hdGg= 66661\nIHNwcmU= 66662\nIHNob3J0ZW5lZA== 66663\nIGNhdmVz 66664\nU01T 66665\nLWNvbnNjaW91cw== 66666\nIFNhdmVz 66667\nLkJhY2tncm91bmRJbWFnZUxheW91dA== 66668\nIGVsZWN0cm9tYWduZXRpYw== 66669\nKGl0ZXJhdG9y 66670\nIHVuYmU= 66671\namVjdG9yaWVz 66672\nIG1lZGlhbnRl 66673\nIMOubnQ= 66674\nIiwt 66675\nIEFTTQ== 66676\n6K6w5b2V 66677\nIGNvbmZpbmVtZW50 66678\n4oCmCgoK 66679\nRXhjZXB0aW9ucw== 66680\nLW1ham9y 66681\nIFZhbmlsbGE= 66682\nIExPQ0FUSU9O 66683\nIGVsdXNpdmU= 66684\nVUFSSU8= 66685\nIElOTElORQ== 66686\nIHByb2R1Y3ROYW1l 66687\nX3F1ZXJpZXM= 66688\nLi4uIjsK 66689\nIFhpYW8= 66690\nV2luZG93VGl0bGU= 66691\nbGV0dGVz 66692\nIHBlcnBldHVhbA== 66693\nU2V2ZXJpdHk= 66694\nIEFjaGlldmVtZW50 66695\nw6JuY2lh 66696\nIHJlbWluZGVycw== 66697\nc29ydGFibGU= 66698\nIGFmZm9yZGVk 66699\nIGluZmx1ZW5jaW5n 66700\nIFR1bm5lbA== 66701\nLmxlYXJuaW5n 66702\nIFF1w6k= 66703\ncGhldGFtaW5l 66704\nLkJBRA== 66705\nLm1ldGFtb2RlbA== 66706\nLWRldmljZQ== 66707\nIEtvbnRha3Q= 66708\n4pSB4pSB 66709\nLXN1bW1hcnk= 66710\nKCc8Pw== 66711\nKTw9 66712\nIHdpc2VseQ== 66713\nX290 66714\nOm1vZGVs 66715\nIFVX 66716\nIE9wZW5TU0w= 66717\nIEpwYVJlcG9zaXRvcnk= 66718\nQ29uZXhpb24= 66719\nVE9U 66720\nLmNyZWF0ZWRBdA== 66721\nKHRyYWluaW5n 66722\nIGJpc2hvcHM= 66723\nIHZlbnR1cmVz 66724\nLkVucXVldWU= 66725\nIFRoZXJtYWw= 66726\nIEJyZXdlcnk= 66727\nb3Rlbg== 66728\nIEZhdGFs 66729\nX3N1cHBseQ== 66730\nIGNvbmRpdGlvbmVk 66731\nIHN1cGVyaW9yaXR5 66732\nIElicmFoaW0= 66733\nIGNvcnBv 66734\ndW91c2x5 66735\nIFByYWN0aWNhbA== 66736\nLy9b 66737\nIEFmcmljYW5z 66738\nIEJhaHJhaW4= 66739\nIHN0ZXJpbA== 66740\nIENsYXNzTm90Rm91bmRFeGNlcHRpb24= 66741\nLlJlZ2lvbg== 66742\nIHRyYW5zaXRpb25hbA== 66743\nIGludGVycHJldGluZw== 66744\nLlNvdW5k 66745\nIGZyb250YWw= 66746\nIGhhcnZlc3Rpbmc= 66747\nfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4= 66748\nYXRhaXJl 66749\nLkh0dHBTdGF0dXM= 66750\nS00= 66751\nIEVyb3Rpc2NoZQ== 66752\nIGVyb3Rpc2tl 66753\nRmlnaHQ= 66754\nUGFja2FnZU5hbWU= 66755\nIENBQ0hF 66756\nd2luZ0NvbnN0YW50cw== 66757\nIFppbW1lcm1hbg== 66758\nL2Nhcg== 66759\nIFF1cmFu 66760\nTWV0YWw= 66761\nIHVzZXJNYW5hZ2Vy 66762\nIG1hc3Rlcnk= 66763\nKFVVSUQ= 66764\nIHZpZXdXaWxsQXBwZWFy 66765\nIHN1bW1lZA== 66766\nKC0o 66767\nICAgICAgIAoK 66768\nVGFrZW4= 66769\nIGNsb2Nrd2lzZQ== 66770\nIENhZsOp 66771\nKGxldHRlcg== 66772\nIENyb3NzUmVm 66773\nIEFzdG9u 66774\nIEFzc2VtYmx5VmVyc2lvbg== 66775\n6Z2e 66776\nbnRz 66777\nICQoJ1s= 66778\nX1JBVElP 66779\naWNpZW50ZQ== 66780\nIHJpY2h0aWc= 66781\nIHBlZGln 66782\nKGl4 66783\n0YHRi9C7 66784\nQXNzaWduYWJsZUZyb20= 66785\nYm91bmRlZA== 66786\nIGFsa2Fs 66787\nX3ByaWNlcw== 66788\nIGfFgg== 66789\nYW5jaGlzZQ== 66790\nX3JlY2VpdmVy 66791\nSUdBVElPTg== 66792\nX3B1bGw= 66793\nIFN0YXRpc3RpY2Fs 66794\nX3Rvb2xiYXI= 66795\nYW1pZGU= 66796\nIEFzeW5jVGFzaw== 66797\ncmV0YQ== 66798\nIOyi 66799\nIFJFQUxMWQ== 66800\nIGJ1cnN0cw== 66801\nIElucXVpcnk= 66802\nIGJpZ290 66803\nc2FuaXRpemU= 66804\nIEhvbWVy 66805\nUXXDqQ== 66806\nIFJvdXRpbmc= 66807\nLmNvbGxlY3Rpb25WaWV3 66808\nIEJpbGxpb24= 66809\nU1RSVUNUT1I= 66810\nLmVqYg== 66811\nIGVuY2g= 66812\nLnNldFRpbWVvdXQ= 66813\nUnVi 66814\nLXJvYWQ= 66815\nLm91dHB1dHM= 66816\nY29udGVzdA== 66817\nIHNwaGVyZXM= 66818\nIHJlc3VycmVjdA== 66819\nIi4i 66820\nIElyaXM= 66821\nIOya 66822\nIFhL 66823\nIFJhcml0eQ== 66824\nIElTZXJ2aWNl 66825\nYXRoYQ== 66826\nIOWH 66827\nIHByZXZhaWw= 66828\nCXBw 66829\nLkxv 66830\nZ2V0V2lkdGg= 66831\nIHd3 66832\nIHdpY2h0aWc= 66833\nQEdldHRlcg== 66834\nIEpheXM= 66835\nIHNwZWN1bGF0aXZl 66836\nKGF0dA== 66837\nIHRlZGlvdXM= 66838\nIHNjcmF0Y2hlcw== 66839\nIHBlbMOtY3Vs 66840\nIGJvcm91Z2g= 66841\nIG3Dsw== 66842\nUmVwcmVzZW50 66843\nYXRvcml1bQ== 66844\nKENhbWVyYQ== 66845\nIGNvbHVtbk5hbWU= 66846\nIHJlaXRlcmF0ZWQ= 66847\nIENhc3Rpbmc= 66848\nLmdldEhlYWRlcg== 66849\nIOKAnFs= 66850\nIEp1aWNl 66851\nY2h1 66852\nLkhUTUw= 66853\nIEFudHdvcnQ= 66854\nR0x1aW50 66855\nCUl0ZXJhdG9y 66856\nIEFOQUw= 66857\nIHVucG9wdWxhcg== 66858\nKExvY2FsZQ== 66859\nIG1pdGlnYXRpb24= 66860\nIGFkcmVz 66861\n4bq3 66862\nfSx7Cg== 66863\nIFNjaHdhcg== 66864\nX1BBSVI= 66865\nPigpLAo= 66866\nb3V2 66867\nIEFsZg== 66868\neEVG 66869\n55yB 66870\nIGVzY3Jp 66871\nTE9VUg== 66872\nU0VMRg== 66873\nIFRtYXg= 66874\nVHJl 66875\nbG90cw== 66876\nICguLi4p 66877\nXSsk 66878\nIGFtZXJpYw== 66879\nL3JlZmVyZW5jZQ== 66880\nIE9keXNzZXk= 66881\nIE1pbmVz 66882\nIGFnb3Jh 66883\nIHByb3BoZWN5 66884\nIE9wcG9ydHVuaXRpZXM= 66885\ncHJvZmVzc2lvbmFs 66886\nKHByb3h5 66887\ncGhhbnVtZXJpYw== 66888\nIEVkaXRlZA== 66889\nb2xvZ25h 66890\nLmlzT3Blbg== 66891\nKHZlcnRpY2Vz 66892\nIFJpY2t5 66893\nX292ZXJsYXA= 66894\nPjs= 66895\nLkRPTQ== 66896\ne31f 66897\nIENPTVBVVA== 66898\ncmVkaXJlY3RUbw== 66899\nIHNoYWtlbg== 66900\nIHJhdGlvbg== 66901\nIG5lbGw= 66902\nX2Jj 66903\nIE5lcg== 66904\nYW5kUmV0dXJu 66905\nIGVyZWN0ZWQ= 66906\nQ2hpZWY= 66907\nIGRpbmVybw== 66908\nIGphc21pbmU= 66909\nLS0tLS0tLS0tLS0tLQo= 66910\nZmFybQ== 66911\nIEhhdGU= 66912\nVEFTSw== 66913\nQU5ORVI= 66914\nJ11dXQo= 66915\nIE5pZ2Vs 66916\naGliaXQ= 66917\nIFFUZXh0 66918\nLkxlbg== 66919\nIHRlxbw= 66920\nc2xpZGVz 66921\nZmVsdA== 66922\nIFJFVg== 66923\nX2hvbGQ= 66924\nIENvdXBsZQ== 66925\nZXNjYXBlZA== 66926\nLWV4cG9ydA== 66927\nPkk= 66928\nZXdpc2g= 66929\nKEFwaQ== 66930\nICghWw== 66931\nTm91cw== 66932\nT1RPUg== 66933\nIHNlYWxpbmc= 66934\nV2ll 66935\nIGthbm5zdA== 66936\nK3htbA== 66937\nIG14QXJyYXk= 66938\nIGFkbWlyYXRpb24= 66939\nLm5i 66940\nIGpld2Vs 66941\nLlRlYW0= 66942\nIHByb3NlY3V0ZQ== 66943\nLnhtbGJlYW5z 66944\nY2h3 66945\nKGJhY2tncm91bmQ= 66946\nIEF2aXY= 66947\nCWZpbGw= 66948\nIGRpc3Bhcml0eQ== 66949\n4Lo= 66950\nX0FQUEVORA== 66951\nIFB2UA== 66952\n44OQ 66953\nIFZpdmU= 66954\nIGdyYW5kc29u 66955\nLmFkZEVsZW1lbnQ= 66956\nQXRvbWlj 66957\nIHByaW1hcnlLZXk= 66958\nIGNvbnRpbmVudHM= 66959\nIEZ1Y2tpbmc= 66960\nJScK 66961\nQG1haWw= 66962\nIGN1bHR1cmFsbHk= 66963\nYW5nYW5lc2U= 66964\n7KCE 66965\nZm9sbG93ZXJz 66966\nIHVybg== 66967\nIHJhY2tz 66968\nIFNBRkU= 66969\nLy8NCg0K 66970\nKCIvew== 66971\nX0lOSVRJQUw= 66972\nX1Jlc3BvbnNl 66973\nRXZlbnREYXRh 66974\nJz4k 66975\nc3RhcnRz 66976\n4Kk= 66977\nIHRoYWltYXNzYWdl 66978\nIHNwZWNpYWxpemF0aW9u 66979\nIOyEpOyglQ== 66980\nZWRv 66981\nIGNvbXBlbnNhdGVk 66982\nX2NoYXJzZXQ= 66983\nfS57 66984\nL2VudGl0aWVz 66985\nX2Zr 66986\nLS0tLS0tCgo= 66987\nYXNjYXI= 66988\nIGNlbGxGb3JSb3dBdEluZGV4UGF0aA== 66989\nIFByb3Bvc2Fs 66990\nIE90dG8= 66991\nIF9fX19f 66992\nICIqIg== 66993\nIHRvb2xraXQ= 66994\nIGV4cGVjdGFuY3k= 66995\nRG93bkxpc3Q= 66996\nLWRh 66997\nIHByb3ZvY2F0aXZl 66998\nIG1laW8= 66999\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 67000\nKCgpPT57Cg== 67001\nJGxpbms= 67002\naW5jYXJl 67003\nIGljeQ== 67004\nIEhpc3Q= 67005\nQWNjZXB0ZWQ= 67006\nIGNsb25lcw== 67007\nIFFB 67008\nIGNvbmZvcnQ= 67009\nIHByb3ByaW8= 67010\nIFZvZw== 67011\nKG1hcms= 67012\nX1NlYXJjaA== 67013\nIGVuZHdoaWxl 67014\nICQj 67015\n44GX44GL 67016\nX0xU 67017\nSW5zdGFuY2VJZA== 67018\nYmFyZA== 67019\ncm5l 67020\ncmVnb3I= 67021\nIG5vcmdl 67022\nXDo= 67023\n0YDRg9C3 67024\nLmJ0bkFkZA== 67025\nIHBpbGxvd3M= 67026\nIFBhcmFtZXRlckRpcmVjdGlvbg== 67027\nSGFuZGxlcw== 67028\nIGRlYWxpbmdz 67029\nIGNvbnZleA== 67030\nIENoYXJpdHk= 67031\nLk51bWVyaWNVcERvd24= 67032\nIFNrZWxldG9u 67033\nIFp1Y2tlcmJlcmc= 67034\nZXNlbg== 67035\nIEZBQQ== 67036\nX3N0ZQ== 67037\nIGh1bWlk 67038\nam0= 67039\nY2hn 67040\nLmdldExvY2Fs 67041\nIHRhbmRlbQ== 67042\naXN0bGVz 67043\nX210 67044\nLmFjY291bnRz 67045\nIEluc3BlY3Rpb24= 67046\nIEZyYXVk 67047\nIGvDvA== 67048\nIHN5bmNocm9ub3Vz 67049\nIFJpY2FyZG8= 67050\nIEh1ZQ== 67051\nIENvbm5lY3Rpb25z 67052\nSU1FTlQ= 67053\nb2NoYXN0aWM= 67054\nXGRhdGE= 67055\nIEVudGVycHJpc2Vz 67056\nLXNpbXBsZQ== 67057\nIGltYWdlRGF0YQ== 67058\nIFVtYg== 67059\nLXNjcmlwdA== 67060\nL2dlbmVyYWw= 67061\nQVBU 67062\nIFR1dA== 67063\naW1pemF0aW9u 67064\nIGlkYWRl 67065\nIEtlbQ== 67066\nZWxzaWY= 67067\nLkFMSUdO 67068\nIFRvcmllcw== 67069\nIEJhc2ls 67070\nb2dvbmFs 67071\naGFjaw== 67072\nTnVsbE9yRW1wdHk= 67073\nIiksCgo= 67074\n44OD44OI 67075\nICclJw== 67076\nX1JG 67077\nZWdvdA== 67078\nLmFzcGVjdA== 67079\nKFByb2plY3Q= 67080\nTEVOR1RI 67081\ncGxlbWVudGFyeQ== 67082\nX3ByZWRz 67083\nIEhvbGRz 67084\nY2Fycmllcg== 67085\nCWxheWVy 67086\nQXR0YWNoZWQ= 67087\nLXByZXNpZGVudA== 67088\naW5kaA== 67089\nJ10uJyI= 67090\nLkFDQ0VTUw== 67091\nIENFTlRFUg== 67092\nUXVhbGlmaWVk 67093\nIG9zdHI= 67094\nLlN5bWJvbA== 67095\ndGFodW4= 67096\nIExBTkc= 67097\nX2J1c2luZXNz 67098\nCVN0YXJ0 67099\nZXJyZQ== 67100\nIGFzaGVz 67101\nIEFkdmVydGlzZW1lbnQ= 67102\nLkhvdw== 67103\nIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 67104\nIG9ibGl2 67105\nIGJsZWVk 67106\nIHN2bw== 67107\nLm5vZGVOYW1l 67108\nIGl0ZW1OYW1l 67109\nIEJBTks= 67110\nw61jdWxvcw== 67111\nIEVtbXk= 67112\nIERvbWluaWNhbg== 67113\nJylbJw== 67114\nIHJlYWxsb2M= 67115\ndWxzZXM= 67116\n6L6T5Ye6 67117\nIE9mZmVyaW5n 67118\n64ql 67119\nLXByb2dyYW0= 67120\nINGB0L7QvtCx0Yk= 67121\nTU9W 67122\nIG5vZGVJZA== 67123\n0LXQvw== 67124\nZmx1aWQ= 67125\nIHRlYXNl 67126\nw7hyZQ== 67127\nIGNvbXJhZGVz 67128\nIHVucmVsaWFibGU= 67129\nIHBvc3RJZA== 67130\nZ2V0SUQ= 67131\nb2dyYXBocw== 67132\nVGFuaw== 67133\nIFFWRVJJRlk= 67134\nIGZsb2F0ZWQ= 67135\nX1RISVM= 67136\nY2ltaWVudG8= 67137\nIE5pY2Fy 67138\nc2hy 67139\nQm91bmRpbmdCb3g= 67140\nIGlub3JkZXI= 67141\nIEdsb3Nz 67142\nV2l0aFRpdGxl 67143\ndW5jaW8= 67144\nIHBlcnNpc3Rz 67145\nIGRpcmVjdHM= 67146\nYWNjacOzbg== 67147\nU2FtcGxlcg== 67148\nIGJsYWNrbGlzdA== 67149\nIGFEZWNvZGVy 67150\nIGludm9rZXM= 67151\nX3NraW4= 67152\nPklm 67153\ndHJ1bmNhdGU= 67154\nLlNpbg== 67155\nc29vbg== 67156\nIGRpc2Zy 67157\nCVZlYw== 67158\nIyNf 67159\nLnNjaG9vbA== 67160\nIGJsaW5kcw== 67161\nIGFjYWI= 67162\nIHBhdGhldGlj 67163\nIHZvbGNhbmlj 67164\nIHJkZg== 67165\nIGN1bHRpdmF0ZWQ= 67166\nIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXI= 67167\nIGlwdA== 67168\nIGdsYW5k 67169\nIGV2aWRlbnRseQ== 67170\nUGh5cw== 67171\nIHN3YW1w 67172\nIGltYWdlTmFtZQ== 67173\nLkxheWVy 67174\ndWZl 67175\nLFsn 67176\nIENyaW1zb24= 67177\n6YCg 67178\nPGZvb3Rlcg== 67179\nIGJpa2luZw== 67180\nINC00LDQvdC90YvQtQ== 67181\nbW92ZXM= 67182\nY3Jj 67183\naWxsYXRpb24= 67184\nIGxhdXJl 67185\n0YDQsNCx0L7Rgg== 67186\n0YPQug== 67187\nIENhaW4= 67188\nIHB5cw== 67189\nIGNvbGxpZGU= 67190\nIHxffA== 67191\nKHNwYW4= 67192\nIGdpbmc= 67193\nIG9iZWRpZW5jZQ== 67194\nb3V0ZXJz 67195\nU29vbg== 67196\nIFdoaXRuZXk= 67197\nIEltcG9ydHM= 67198\nOlVJVGFibGVWaWV3 67199\nKiY= 67200\nIGJr 67201\nV2l0aEVycm9y 67202\nLWV4dA== 67203\nX1JET05MWQ== 67204\nX3RyYWNraW5n 67205\nbm9vcGVuZXI= 67206\nw7xucw== 67207\nIEd0a1dpZGdldA== 67208\nc2ti 67209\nU0FWRQ== 67210\nT2Jz 67211\nKCcuJylb 67212\nIGF1dGhvcmVk 67213\nLS8= 67214\nTG91aXM= 67215\nLmdldE91dHB1dFN0cmVhbQ== 67216\nIGdlbmVyYWxpemVk 67217\n7Yw= 67218\nIGFydGlzYW4= 67219\nKGNwcw== 67220\nIERtaXQ= 67221\n0LvQuNGG 67222\nLkltYWdlTGF5b3V0 67223\nIHN1Y2hlbg== 67224\nXX0s 67225\nLmNvbGxpZGVy 67226\nVGFiUGFnZQ== 67227\nXT1b 67228\naHlkcm8= 67229\nX3N0cmlw 67230\nIGxpY2tpbmc= 67231\nIGJvb3N0cw== 67232\nIHNrZXB0aWNpc20= 67233\nIGpvZ28= 67234\nIGNvbXBldGVk 67235\nIOuCtA== 67236\nTm9kZVR5cGU= 67237\nWEY= 67238\nIHBvc3NpYmlsaXQ= 67239\nLWNvcHk= 67240\nIHRyaXR1cg== 67241\nIEF0dGFja3M= 67242\nIG7Dqw== 67243\nSURBRA== 67244\nb2dyYXBoaWVz 67245\nVGltZVN0YW1w 67246\nb3R5cGluZw== 67247\nLUFwcg== 67248\nINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjw== 67249\nICI7Ig== 67250\nIEhhbGU= 67251\nL2FwaXM= 67252\nIDpdCg== 67253\nX2hkbA== 67254\nIERpYWw= 67255\nCUNvbmZpZw== 67256\nX0ZSQUdNRU5U 67257\nX0VkaXQ= 67258\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 67259\nIGNhbmRpZGFjeQ== 67260\nIENvbXByZXNzaW9u 67261\nX2xvc3Nlcw== 67262\nKj4oJg== 67263\nSW50ZWdyYWw= 67264\nIHBhcm9keQ== 67265\nIGluaXRpYWxpc2U= 67266\nZmlsbHM= 67267\nIGFsdHJp 67268\nX0VMRU1FTlRT 67269\nYWRhc3RyYXI= 67270\nY29ycmVv 67271\nIHdhdHQ= 67272\nX0RSVg== 67273\nIEZvcmdvdA== 67274\nIGdldENvbnRleHQ= 67275\nIHNob3J0YWdlcw== 67276\nIE9DVA== 67277\nd2VldGFsZXJ0 67278\nIE9wZW5z 67279\nKmw= 67280\nIEtpdHR5 67281\n4oCZw6l0 67282\nIFBpY2Fzc28= 67283\nLnRvQnl0ZUFycmF5 67284\n0L7Qu9GD0Yc= 67285\nIERFTg== 67286\n5aeT5ZCN 67287\nV2ludGVy 67288\nYW50YW4= 67289\nX19b 67290\nUHJpbQ== 67291\nIHJvb2Z0b3A= 67292\nIEJpbGxib2FyZA== 67293\ndGVzdENhc2U= 67294\ncHJvZHV0bw== 67295\nLXRodW1i 67296\nIHJlc2V0cw== 67297\nZ2Vibg== 67298\nPkVycm9y 67299\nLmRlcGFydG1lbnQ= 67300\nIGVhcnJpbmdz 67301\nIENhcm91c2Vs 67302\nKGV4YW1wbGU= 67303\nCWVt 67304\nXENvbnRhaW5lcg== 67305\nIEVsdmlz 67306\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 67307\nRW5nbGFuZA== 67308\nY3JlZGl0ZWQ= 67309\nX2NvbnN0cnVjdG9y 67310\nIGxvcg== 67311\nIERhd3Nvbg== 67312\nQnVybg== 67313\nIEJyaWdhZGU= 67314\nIE11dGV4 67315\nIFRyYW5zaXRpb25hbA== 67316\nIE1vdXNlRXZlbnQ= 67317\nZ3Jvdw== 67318\nLm1pbnV0ZQ== 67319\nIEdNTw== 67320\nPVtdLA== 67321\nIHN1c2hp 67322\nIGFlc3RoZXRpY3M= 67323\nT0NVUw== 67324\nIFNFTEY= 67325\nIEFzc2VydGlvbkVycm9y 67326\nIE1DVQ== 67327\nIGhpbnRUZXh0 67328\nIHNlYXc= 67329\nbmdsZQ== 67330\nIGV4cGVsbGVk 67331\nUFJPUEVSVFk= 67332\nKS48Lw== 67333\nLW9wZXJhdGlvbg== 67334\nIEltbXVu 67335\nIGxpY2Vucw== 67336\naWJpYQ== 67337\nIGJpZXRlbg== 67338\nIGdyaXBz 67339\nQ0hBTk5FTA== 67340\nX0VSUk9SUw== 67341\nX3JlY3Vyc2l2ZQ== 67342\nVWx0aW1hdGVseQ== 67343\nIE1hamVzdHk= 67344\nIGRlYWN0aXZhdGU= 67345\nIEVYQU1QTEU= 67346\ndWNpb25lcw== 67347\nIGN1cnJlbnRWYWx1ZQ== 67348\nIGV2YWx1YXRlcw== 67349\nL0dyYXBoaWNz 67350\nInRleHQ= 67351\nX3BhbGV0dGU= 67352\nIFRNUA== 67353\nIEJlZHM= 67354\nLkNvcw== 67355\n4Lix4LiZ 67356\nPXRvcmNo 67357\nIFBBQ0tBR0U= 67358\naWxsYXJk 67359\nLmNw 67360\nleyduA== 67361\nLWFwcHJvdmVk 67362\nIE5vcnRod2VzdGVybg== 67363\nPHRleHRhcmVh 67364\nIENvbXBhdGlibGU= 67365\nX1JEV1I= 67366\nLlF1YW50aXR5 67367\nQElk 67368\nX29yaWVudGF0aW9u 67369\nZ2V0VXJs 67370\nIHRyYW5zbGF0aW5n 67371\nIFdlYXZlcg== 67372\nIGpzb25BcnJheQ== 67373\nIGVtYmxlbQ== 67374\nLklzTnVsbA== 67375\nIENoYXJ0cw== 67376\nW119 67377\nZ2Fl 67378\nX25lc3RlZA== 67379\ndGVtcHM= 67380\ncGF0aG5hbWU= 67381\nQ1c= 67382\nLXdyaXR0ZW4= 67383\nIFBBUks= 67384\nKGNvbmQ= 67385\nX2FsYXJt 67386\nIGdlcmU= 67387\nIEdpeg== 67388\nIE5nYg== 67389\nIC5f 67390\nYXBwaW5lc3M= 67391\nIERlcGxveW1lbnQ= 67392\naVBhZA== 67393\nIl1d 67394\nIHN0cnN0cg== 67395\nIHRvbnVtYmVy 67396\nKGRs 67397\nCXdvcmQ= 67398\nW3Rv 67399\nX0ZJWEVE 67400\nRXhwaXJhdGlvbg== 67401\nOnJldHVybg== 67402\nT250 67403\nPlBsZWFzZQ== 67404\nZ2V0VGl0bGU= 67405\nLnNwbGl0ZXh0 67406\nY29tYmluZWQ= 67407\nT2Q= 67408\nIG5vdmVsdHk= 67409\nIlM= 67410\nIHN2bQ== 67411\nQ292ZXJhZ2U= 67412\nIEh1dA== 67413\nIHJlc2lzdGVk 67414\nIGVsbG8= 67415\nIG3DtmNodGU= 67416\nS2F5 67417\nLmxpa2U= 67418\nY2Npb25l 67419\nIHJlc2VtYmw= 67420\nRGVhdGhz 67421\nIGVwaXQ= 67422\nKHJnYg== 67423\nLkNsYXNzZXM= 67424\nINC00L7RgdGC 67425\nY2FwdHVyZXM= 67426\nXStc 67427\nYW1pZW50 67428\nIFBhc28= 67429\nLlNlbmRNZXNzYWdl 67430\nIFJlbmF1bHQ= 67431\nIE5hcmVuZHJh 67432\ndG91dA== 67433\nIGhhZGRl 67434\nIFR3ZWVu 67435\nw6VkZQ== 67436\nIG91dGZpZWxk 67437\nLz48Lw== 67438\nQFw= 67439\nIER1cmFudA== 67440\nIGFicmU= 67441\nX3N0b3J5 67442\nIHBlcmZ1bWU= 67443\nQ3BwVHlwZURlZmluaXRpb25TaXplcw== 67444\nINC/0LDRgNCw0LzQtdGC 67445\nY2hlbWVz 67446\nIFNhZGRhbQ== 67447\ncHJlbm9t 67448\ndXNwZW5kZWQ= 67449\nIEJlbmVmaXQ= 67450\nIHNjZXB0 67451\nX01vdmU= 67452\nIE5hag== 67453\nLU9u 67454\ncnVk 67455\nSW1hZ2VQYXRo 67456\nwq4s 67457\nIGFuYWx5c2Vk 67458\nIE9H 67459\nZWxsZWljaHQ= 67460\nYmlyZHM= 67461\nZWt0ZQ== 67462\nIEFsaXNvbg== 67463\nIGF0aGVpc3Q= 67464\neyU= 67465\nYWJo 67466\nLXBob3Rv 67467\naW5zdHJ1bWVudA== 67468\nIGhpbnRlZA== 67469\nIE9mZmxpbmU= 67470\nKSIpOwoK 67471\nX1BSRUY= 67472\nIHN0eWxpc3Q= 67473\nIEt1YmVybmV0ZXM= 67474\nIGZlcnY= 67475\nCgoKCgoKCgoKCgoKCgo= 67476\nKCI9Ig== 67477\nLmdldE0= 67478\nIG5vdGV3b3J0aHk= 67479\nIHNjb3V0aW5n 67480\nX3RyYW5zbGF0ZQ== 67481\nIGJlZ2lubmluZ3M= 67482\nIEx1bw== 67483\nIHFs 67484\nX2FsaWduZWQ= 67485\nIGVydw== 67486\ndWFycw== 67487\nX1BhdGg= 67488\nLicuJA== 67489\nIGhvYw== 67490\nIGRlcnA= 67491\nbG9p 67492\nIE1jS2lu 67493\n6K+05piO 67494\nLz0= 67495\nTGlua0lk 67496\nc3RkZGVm 67497\ncmVkdWNlcnM= 67498\naXNhbnM= 67499\nLmhpc3Q= 67500\nJy8+Cg== 67501\nIFRveGlj 67502\nIGRpc2FwcGVhcmluZw== 67503\nIGNpcw== 67504\nKGRv 67505\nIG1haW5TY3JlZW4= 67506\nX0JBTks= 67507\nIGRlbW9uc3RyYXRvcnM= 67508\nIFBhbGV0dGU= 67509\ndWVseQ== 67510\nUmFyZQ== 67511\nIHJlc2lkaW5n 67512\nIGFtYmllbnRl 67513\nIG1pc20= 67514\nLXF1ZXN0aW9u 67515\nIG9wcHJlc3NlZA== 67516\nIGxldHJh 67517\nPGR5bmFtaWM= 67518\nIEZvdG9z 67519\nLXBvbGljeQ== 67520\naXN0ZW0= 67521\nLmV4Y2hhbmdl 67522\nc3RyZQ== 67523\nJC8s 67524\n7ZWY6riw 67525\nJAoK 67526\nIFJlbmU= 67527\nIHRvdXRlZA== 67528\nLUNvcmU= 67529\nIENyYW4= 67530\nIFRyYWRlcg== 67531\nIGRldw== 67532\nIGZsYXA= 67533\nCWZpbGVuYW1l 67534\nIGlubWF0ZQ== 67535\nKE1vY2s= 67536\nIFNvYg== 67537\naXNibg== 67538\nIG5vZQ== 67539\nIEZvcmJpZGRlbg== 67540\nIGVsZXM= 67541\nIGRpbmc= 67542\nX3Nh 67543\nKSovCg== 67544\nYXJpZQ== 67545\nIFN1cHBvcnRz 67546\nIG1vZHVsYXRpb24= 67547\nIGVuc2w= 67548\nIFNoYWRvd3M= 67549\ncHJpbmNpcGFs 67550\nYW5nZW50 67551\nLUphbg== 67552\nIFBhbnRz 67553\nLHRy 67554\nIGZpdHRl 67555\nIGdhcm1lbnRz 67556\nTWFyZ2lucw== 67557\nTFRS 67558\nIE1peQ== 67559\ndmVudHVz 67560\nIE3DtmdsaWNo 67561\nW2F0dHI= 67562\nL3Jlc3BvbmQ= 67563\nIHR0aw== 67564\nIG9sZHXEnw== 67565\nIENvbnNl 67566\nUHJlbWl1bQ== 67567\nIGZyYW5jYWlzZQ== 67568\nX2hvcml6b250YWw= 67569\nX2li 67570\nIEZhcmU= 67571\nIGhhcnZlc3RlZA== 67572\nZW5kaXI= 67573\nKGhpdA== 67574\nPiovCg== 67575\nIElSZXBvc2l0b3J5 67576\neWxpZQ== 67577\nIGRldGVjdHM= 67578\nOm5v 67579\n4pi0 67580\nIGRpc2XDsQ== 67581\nIHVuc2VyZW4= 67582\nIG1vY2tpbmc= 67583\nc291dGg= 67584\ncmF0ZXM= 67585\nIGh5cG9j 67586\nIFNob3J0bHk= 67587\nIEJsYWNrcw== 67588\n0YLQuNGA0L7Qsg== 67589\nIEFTQVA= 67590\ncmViYmU= 67591\naWVj 67592\nLkFkZERheXM= 67593\nIGVwaXM= 67594\nLWluZmxhbW1hdG9yeQ== 67595\nLW5ldA== 67596\nIHBhbGw= 67597\n65Q= 67598\nIGlzc3VhbmNl 67599\nIGNvbnRlbnRpb3Vz 67600\nLkFyZWFz 67601\n0LjQu9GM 67602\nIGNvbnRpZ3VvdXM= 67603\nW2FjdGlvbg== 67604\nIGV4cHJlcw== 67605\nISIpCgo= 67606\nVUxP 67607\nIHdyZQ== 67608\nIHN1YmRpdg== 67609\nIHR1cm5hcm91bmQ= 67610\nIGFjY2Vs 67611\nIFVuaXY= 67612\nIFVuaXZlcnNpZGFk 67613\nc2V0dA== 67614\nZGVzY3I= 67615\nLkdlbmVyYXRpb24= 67616\nIHBhdHJpb3Q= 67617\nIGZhcw== 67618\nKioqKgo= 67619\nUVA= 67620\nIOWN 67621\nb3BwZWw= 67622\nIGp1ZWdvcw== 67623\nLmRyYXdTdHJpbmc= 67624\nLWNvbmZpcm0= 67625\nCSAgICAgICAgICAgICA= 67626\nPFByb3Bz 67627\nIGZhbWlsbGU= 67628\nIEhlbG1ldA== 67629\nZXJ0aWFyeQ== 67630\nYXRoaQ== 67631\nIGN1bHRpdmF0ZQ== 67632\nIGR1cGxpY2F0aW9u 67633\nIHNweU9u 67634\nKi8pCg== 67635\nIEh1bmdlcg== 67636\nT3J0aA== 67637\nIHBpbnBvaW50 67638\nIEhhZw== 67639\nIHRpbWV0YWJsZQ== 67640\nbWFyZ2luVG9w 67641\nIHJlY2lwcm8= 67642\nZmVsbA== 67643\nIFBlcnNpc3RlbnQ= 67644\n44Gp 67645\ncGx1cmFs 67646\ncXVldWVk 67647\nIGdyYWNpYXM= 67648\nw6F0aWNv 67649\nIGhhcmRzaGlw 67650\nIEFwYXJ0bWVudHM= 67651\nIEp1bms= 67652\nIFJldmU= 67653\nX01zaw== 67654\nIHN1cHJh 67655\nIEFUUA== 67656\nIHNldFNob3c= 67657\n5a2X56ym5Liy 67658\nIE5vdHRpbmdoYW0= 67659\nU3RldmVu 67660\nIE11bmQ= 67661\ncmFuZ2Vz 67662\nIHVwbG9hZHM= 67663\nIGJmcw== 67664\ncHo= 67665\ndWx0aW1hdGU= 67666\nIEVmZmljaWVuY3k= 67667\nQU1J 67668\n5b6E 67669\nX1JFUEVBVA== 67670\nIGFjYWRlbWlh 67671\nLnRvb2xTdHJpcEJ1dHRvbg== 67672\nVG9FbmQ= 67673\ncnZpbmU= 67674\nIFRoeQ== 67675\nIEVsZWN0b3JhbA== 67676\nIFJFUVVJUkVE 67677\nIHBsdW5nZQ== 67678\nIFJldm9sdXRpb25hcnk= 67679\nIFRlbnQ= 67680\nIGdyZW5hZGU= 67681\nIjpbeyI= 67682\nIG1vdXI= 67683\nUG93 67684\nIGV2YW5nZWxpY2Fs 67685\nVEVDVEVE 67686\nIG92ZXJ0dXJu 67687\nCUlucHV0 67688\ncmVjb21tZW5k 67689\nJUM= 67690\nIHNsYWc= 67691\nIEJoYXI= 67692\nX2VuY3J5cHQ= 67693\nIFdhcmZhcmU= 67694\nKGFnZQ== 67695\nQVRFR09SSUVT 67696\nbWlsZQ== 67697\nIGhlYXZlbmx5 67698\nYW1tZXI= 67699\nKCkpWw== 67700\nYWRlcmE= 67701\naGc= 67702\nIExBVw== 67703\nIHBhY2thZ2VOYW1l 67704\nX3R5cGVEZWZpbml0aW9u 67705\nKGJl 67706\nREJOdWxs 67707\nX3Rhcg== 67708\nIGhldXJpc3RpYw== 67709\nIFdhbnRlZA== 67710\nIFN0dWI= 67711\nIGtpdHQ= 67712\nUkVD 67713\nIHBhc2Fy 67714\nLm5ld0J1aWxkZXI= 67715\nCWdyYXBo 67716\naW9zYQ== 67717\nLmNvbHVtbkhlYWRlcg== 67718\nIHNldE9wZW4= 67719\nIFRoaXJ0eQ== 67720\nICIlLg== 67721\nQWxiZXJ0 67722\nIHNhbWE= 67723\nIHJvY2tpbmc= 67724\nQ29tcGxl 67725\nTVY= 67726\nfCgpCg== 67727\nX3JlYWRz 67728\nKHZhcmFyZ2lu 67729\nb3Vsb3VzZQ== 67730\nIFNJTUQ= 67731\nIGNhcmJvaHlkcmF0ZQ== 67732\nd2hvbGU= 67733\nLE5vbmU= 67734\ni+ivlQ== 67735\nIENoYW5k 67736\nY3phcw== 67737\nX3F1ZXJ5c2V0 67738\nIGV4aXN0ZW50aWFs 67739\nIGVkaWJsZQ== 67740\nIGFnaWxpdHk= 67741\nIFdpbGxpcw== 67742\nIGh5bQ== 67743\nIEJyaWxs 67744\n0LjRhQ== 67745\nIE5vdEZvdW5kRXhjZXB0aW9u 67746\nICgoKQ== 67747\nQVBTSE9U 67748\nIHN1YnN0YW50aXZl 67749\nX3R5cGVEZWZpbml0aW9uU2l6ZQ== 67750\nIHZhY2FuY2llcw== 67751\nRU5HSU5F 67752\nIGFuZGVycw== 67753\nIHN5bWI= 67754\nIGV0cmVl 67755\nKS5f 67756\nIHRyYW5zcG9ydGluZw== 67757\naW1wcw== 67758\nL2NvcA== 67759\nYWN0YWJsZQ== 67760\nX2ZsdXg= 67761\nIG5ld0luc3RhbmNl 67762\nYXRvaXJl 67763\nIGNvbHVtbkluZGV4 67764\nIEdpbw== 67765\nIHN1YnRpdGxlcw== 67766\nLldpbkZvcm1z 67767\n0LvRj9C10Lw= 67768\nIGFsZXJ0ZWQ= 67769\nIHN0cmlwcGluZw== 67770\nd2VuZHVuZw== 67771\nIE1ldGhvZEludm9jYXRpb24= 67772\nRXJyb3JIYW5kbGVy 67773\nU2Nyb2xsYmFy 67774\nUG9ydGZvbGlv 67775\nY29uc3Vt 67776\nIENPTU1PTg== 67777\nTGY= 67778\nX2Jhc2Vk 67779\nb2NhbHk= 67780\nIGVmZmV0 67781\ndnZt 67782\ncmlwc2k= 67783\nIGZsb3VyaXNo 67784\nY2h0ZXI= 67785\nPT09PT09PT09Cg== 67786\nIHJlcXVlcg== 67787\nLnF1ZXN0aW9ucw== 67788\nKCI/ 67789\nIHBvc1g= 67790\nIFBDUg== 67791\nIE9yZ2FuaXphdGlvbnM= 67792\ncHLDvA== 67793\nRXhhbQ== 67794\nIEluY29ycG9yYXRlZA== 67795\nX3BocmFzZQ== 67796\nIHByYXllZA== 67797\nIGhvbWVvd25lcg== 67798\nIFRhag== 67799\neng= 67800\nIElkZWFsbHk= 67801\nX01BQ0hJTkU= 67802\nIFJlbW92aW5n 67803\nQ29lZmZpY2llbnQ= 67804\nIGVkdWNhdGluZw== 67805\nID8+Jg== 67806\nIHBvdXJz 67807\naXJhbQ== 67808\nX3BlYWs= 67809\nIG5lc3Rpbmc= 67810\nYWJ5dGU= 67811\nbmF0dXJl 67812\nIGFmcw== 67813\nIFJvbw== 67814\nY2FyZ28= 67815\nb2JqZXQ= 67816\nIGZyZWVpbmc= 67817\ncXVha2U= 67818\nRGVuc2l0eQ== 67819\nIGRlc2NyaWNhbw== 67820\nLyoqKioqKioq 67821\nIGRhc2hlZA== 67822\nIGdyb8Of 67823\nb29reQ== 67824\nIFBFT1BMRQ== 67825\nX1Bvc3Q= 67826\nIGNlcnZpY2Fs 67827\nIEFkanVzdGFibGU= 67828\nZW5zdWFs 67829\nIFJldmlzZWQ= 67830\nKHJlZmVyZW5jZQ== 67831\nCUJhc2U= 67832\nZXNzaW0= 67833\nTWFpbnQ= 67834\nIGdldFNpemU= 67835\nIFNhbmR3aWNo 67836\ncmFkaWVudA== 67837\nc2luaw== 67838\nOi8vJw== 67839\nX3R0 67840\nRlBT 67841\nIEFybWVuaWFu 67842\ncHJldlN0YXRl 67843\nX0xJTkVT 67844\nIHRpZ2h0ZW4= 67845\nPFs= 67846\nXTw8Ig== 67847\nIFRyYWZm 67848\nIGxpcXVpZHM= 67849\nIGFyY3M= 67850\nX0NvbW1hbmQ= 67851\nQHByb3RvY29s 67852\nLWlzaA== 67853\nIHJ1YmJlZA== 67854\nQkJD 67855\nL2ZpcmViYXNl 67856\nQXBwQmFy 67857\nPFg= 67858\nIFNJTkdMRQ== 67859\nLlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3I= 67860\nIHZlcnRl 67861\nL3F1ZXJ5 67862\nIGdldENvbmZpZw== 67863\nIERpcmVjdFg= 67864\ncGh5c2ljcw== 67865\neWNvcA== 67866\nIGJyZWFrZXI= 67867\nLXZvbHVtZQ== 67868\nZGF0YVRhYmxl 67869\n4oCZZQ== 67870\ncmlvdHQ= 67871\nIEV0ZXJuYWw= 67872\nZ2V0SGVpZ2h0 67873\nIG9uSXRlbUNsaWNr 67874\nIHF1YXRlcm5pb24= 67875\nIGtpbmt5 67876\nZGVzZXJpYWxpemU= 67877\nKFNwcmluZw== 67878\nIHBlYWNlZnVsbHk= 67879\nX0RldmljZQ== 67880\nKE1hdHJpeA== 67881\nacOocmVtZW50 67882\nKHR5cA== 67883\nLnZhYWRpbg== 67884\nLmdldE1ldGhvZA== 67885\nIOKAnQoK 67886\nIHRocmVhZGVk 67887\nIEZhbW91cw== 67888\nIEdhbWI= 67889\nIOyngA== 67890\nINCk 67891\nIGZha3Q= 67892\nIGVjaHQ= 67893\nX3Vi 67894\nLkpwYVJlcG9zaXRvcnk= 67895\nIHVuZ2U= 67896\nLWVuZGluZw== 67897\nIENBTUVSQQ== 67898\nY3JlZGVudGlhbA== 67899\nIFBhc3Nwb3J0 67900\nCVJUREJH 67901\nIGV4dHJhZA== 67902\nLW9yaWdpbg== 67903\nIHNhY3JpZmljZWQ= 67904\nIFNjaHVsdHo= 67905\nIFR1cnRsZQ== 67906\nLmNlbnRlclg= 67907\nIHNob3djYXNpbmc= 67908\nIGJ6dw== 67909\neXJv 67910\naXNOdWxs 67911\nLmlzRGlyZWN0b3J5 67912\nbWFpbnQ= 67913\nX2Jp 67914\nIFNwcmluZ2Vy 67915\nfSgpCgo= 67916\naXNzdWVy 67917\nLWFybQ== 67918\nZXNr 67919\nbGluaGE= 67920\nIGtvcnQ= 67921\nYWphcw== 67922\nYWxpbms= 67923\nKEJ1dHRvbg== 67924\nIFJlc3RvcmF0aW9u 67925\nIGluY3I= 67926\nIFpob3U= 67927\nCSAgICAgICAgCQ== 67928\nIERpc2NsYWltZXI= 67929\nIGt2aW5ub3I= 67930\nIERhcmU= 67931\nIDwtPg== 67932\n6K+m 67933\nCQkJCQkJCQkJCQo= 67934\nLkNsYW1w 67935\nCXNjb3Bl 67936\nIE11bQ== 67937\nPDw8PDw8PA== 67938\nL3t7 67939\nX2FydGlzdA== 67940\nIFJlYWN0aW9u 67941\nIE5pY2tlbA== 67942\nX1JlbW92ZQ== 67943\nKCgoKA== 67944\n64yA 67945\nIGR5bmFzdHk= 67946\nIFRocm93cw== 67947\nIENvdWw= 67948\nX3JuZw== 67949\nIERvaw== 67950\nLmxpc3RWaWV3 67951\nIFR1Y3Nvbg== 67952\nKHRvaw== 67953\nIFBoaWxpcHBl 67954\nVG9TaG93 67955\nIGRpZXRh 67956\nIFVsdHI= 67957\nLlRpY2s= 67958\nIEdldFR5cGU= 67959\naWV0ZQ== 67960\nIExlYWg= 67961\nSGFyZHdhcmU= 67962\nIENvbXByZWhlbnNpdmU= 67963\nQ09NTU9O 67964\nIGluZHVzdHJp 67965\naXJpY2Fs 67966\nLWJlZHJvb20= 67967\nIGd5cm8= 67968\nINC60L7RgA== 67969\nIC0vCg== 67970\nY291cg== 67971\nIEJydXNoZXM= 67972\nTXVsdGlwbGllcg== 67973\nIHVzZXJkYXRh 67974\nIFJlY29nbg== 67975\nIG9ibGlnYXRlZA== 67976\nIExldmlu 67977\nYW5jZXN0b3I= 67978\nIG1lbmluZw== 67979\nIFVk 67980\nLGpzb24= 67981\nKGFzc2lnbg== 67982\nIG5kYXJyYXk= 67983\nX2Nvcm5lcg== 67984\nQEFsbEFyZ3NDb25zdHJ1Y3Rvcg== 67985\n6aqM6K+B56CB 67986\nYWRvcnM= 67987\nIHJlc3BvbmRlbnQ= 67988\nR09SSVRI 67989\nIHRlbmdv 67990\nIHNldE1lc3NhZ2U= 67991\nIElQTw== 67992\nYXJyYXlz 67993\nIEFHQUlO 67994\nJ1s= 67995\nICItLy8= 67996\nw6Rt 67997\n44CCXA== 67998\nLm9uY2U= 67999\nY3VycmVudFRpbWU= 68000\nR292 68001\nIGdldG9wdA== 68002\nbWx4 68003\nIFRvbmU= 68004\nJ11dOwo= 68005\nIHByZWRhdG9y 68006\nV3k= 68007\nL2VudGl0eQ== 68008\nIG1hbnRyYQ== 68009\nKT49 68010\nb2dyYWQ= 68011\nIG1lbGFu 68012\nIHNvcnRCeQ== 68013\nIERFRklORQ== 68014\nUHJvdGVjdGVk 68015\nY2RlY2w= 68016\nJz4iLiQ= 68017\nPGN2 68018\nY3JpcmU= 68019\nLVRydW1w 68020\nIHVjZmlyc3Q= 68021\nY2Fzc2VydA== 68022\nIGFja25vd2xlZGdlbWVudA== 68023\nIElOVg== 68024\nIFVOVQ== 68025\nLnNxdWFyZXVw 68026\nIFNheA== 68027\ncmV0dGU= 68028\nKCkKCgoK 68029\nIERhdGFCYXNl 68030\nIFBhdHJpb3Q= 68031\nX1Jvdw== 68032\nIEV4aGliaXRpb24= 68033\nIGRldGFpbmVlcw== 68034\nIFN0cmluZ0lP 68035\nX0RFTg== 68036\nTW9kaWZpZXJz 68037\nYXNhcg== 68038\naXJ0aW5n 68039\nIHRyYW5xdWls 68040\nKGVuYw== 68041\nIOOCsw== 68042\nbmNvZGVy 68043\nX3VudXNlZA== 68044\nIEJpYW4= 68045\nVmVyYg== 68046\nX2V4Y2VycHQ= 68047\nL2V4cG9ydA== 68048\nIFNleHQ= 68049\nRHM= 68050\nQU1QTA== 68051\nT2ZTdHJpbmc= 68052\nX3RyYWNrcw== 68053\nd2o= 68054\nb3Rvbmlu 68055\nIElURQ== 68056\nSVZFTg== 68057\nLW9yaWdpbmFs 68058\nIEZJTkFM 68059\nX18pCgoK 68060\nIGVuc2U= 68061\nIFV0dA== 68062\nOioq 68063\nIFN1cnJleQ== 68064\nIEthaXNlcg== 68065\nYWRtaW5pc3RyYXRvcg== 68066\nLWxhcmdlc3Q= 68067\nIGxldHp0ZW4= 68068\nIGNoYWluZWQ= 68069\nJ0g= 68070\nIGRvY3VtZW50aW5n 68071\nIExlY3R1cmU= 68072\nUkg= 68073\nb2xsYXBzZWQ= 68074\nc2tpcnRz 68075\nZWxkZXI= 68076\nIFNpeHRo 68077\nIGFsbGVnaWFuY2U= 68078\nSVNPU3RyaW5n 68079\nVXNhZ2VJZA== 68080\nLmhhcmR3YXJl 68081\nIHBhcmk= 68082\nIHfDpGhyZW5k 68083\nIHJkcg== 68084\nIGhqZW0= 68085\nTE9PUg== 68086\nIExQQVJBTQ== 68087\nINC80L7QttC10YI= 68088\nIGhvbWFnZQ== 68089\nb3V0c2lkZQ== 68090\nIENoYXJTZXQ= 68091\nPEdhbWU= 68092\n77yZ 68093\nX01VVEVY 68094\nKSkvKA== 68095\nX3Jlb3JkZXJlZA== 68096\ndGV4dElucHV0 68097\nQU5DRUQ= 68098\nIFRlZQ== 68099\nIGNvcm5lcmJhY2s= 68100\nUXVlcnlTdHJpbmc= 68101\nIGxvbmdpdHVkaW5hbA== 68102\nIEhvbGlkYXlz 68103\nQUJDREVGRw== 68104\nLktleVByZXNz 68105\nLnVs 68106\neWRybw== 68107\nIFRhdGU= 68108\nCXJvdXRlcg== 68109\nc3BvdHM= 68110\nIHBhdWw= 68111\nLXByZXY= 68112\nIGtub3dpbmdseQ== 68113\nIEt1cmRz 68114\nIEV1cm9w 68115\nLmNlcnQ= 68116\nQklH 68117\nKGNvZWZm 68118\nIENsYXVz 68119\nL2V4YW1wbGVz 68120\nIEZhcm1z 68121\nIC8vKA== 68122\nU1BBTg== 68123\nIGNpcmN1cw== 68124\nIE1JUw== 68125\nIFRyYWl0cw== 68126\nLWNsZWFy 68127\nIHJlZ2ltZW4= 68128\nIGJhY2tncm91bmRJbWFnZQ== 68129\ndXNhaGE= 68130\nX01ldGFkYXRhVXNhZ2VJZA== 68131\nIHJoZQ== 68132\nQ2xpbg== 68133\nIERvbWluaWM= 68134\nLm5leHREb3VibGU= 68135\nKGRldGFpbA== 68136\nVGhyZWFkUG9vbA== 68137\nIENhcnBlbnRlcg== 68138\nc29ydGluZw== 68139\nIGdvdmVybm9ycw== 68140\nIHNpbmdlcnM= 68141\ndW5saW5r 68142\nIHJpbmdpbmc= 68143\nIHNjaGVtYXRpYw== 68144\nIGVycm1zZw== 68145\nIGJlYg== 68146\nLiIr 68147\nIEluY3JlYXNlcw== 68148\nIkFsbA== 68149\nIGFjb250ZQ== 68150\nemlh 68151\nLlRleHRDaGFuZ2Vk 68152\nIFRvRG8= 68153\nLDopOwo= 68154\nbmFnZQ== 68155\nY2hs 68156\nb3dlbA== 68157\nIGdlcmFkZQ== 68158\nX2ZmdA== 68159\nIGVzdGFtb3M= 68160\nU1RBUg== 68161\nIGRpc2d1c3Q= 68162\nZ3Jhbg== 68163\ncG9ydHVuaXR5 68164\nIGF1dG9iaQ== 68165\ne317Cg== 68166\nIENvdXBvbnM= 68167\nX0dBSU4= 68168\nIFRDSEFS 68169\nL3Bhc3M= 68170\n55Sx 68171\nIGZvb3R3ZWFy 68172\nKGJvdW5kcw== 68173\nYXB1cw== 68174\nY2l0ZQ== 68175\nQk9PVA== 68176\nIENvZGVj 68177\nbG9ndWU= 68178\nLXByb3BlcnRpZXM= 68179\nYXV0b21hdGlvbg== 68180\nIFNob2U= 68181\nc3BlY3Q= 68182\nKG1t 68183\nIEtldA== 68184\nW3BhcmFt 68185\nIGJhc2ls 68186\nIEFuZ3VsYXJGaXJl 68187\nIGFkdmVudHVyb3Vz 68188\nX1VDbGFzcw== 68189\nIGluZHVsZ2U= 68190\nCWN1ZGE= 68191\nIGluc3VsdGluZw== 68192\nLkV4cHJlc3Npb25z 68193\nIG9uQ3JlYXRlT3B0aW9uc01lbnU= 68194\nVUVM 68195\nIGJpdGluZw== 68196\nKCFf 68197\nIEVuY3ljbG9wZWRpYQ== 68198\nIGJlcnQ= 68199\nIFZlcmE= 68200\nIEJpYmxpY2Fs 68201\naW5zaWNz 68202\nX1NJTVBMRQ== 68203\nIHNhbGlkYQ== 68204\ncmVxdWVzdGVk 68205\nIENvbXBvc2l0aW9u 68206\nLkF0b2k= 68207\nKEtleUV2ZW50 68208\nZXJlYQ== 68209\nIGRlcG9ydGVk 68210\nIFF1cg== 68211\nIG5pcHBsZXM= 68212\naXNBcnJheQ== 68213\nINGD0LrQsNC3 68214\nIGJyaW5r 68215\nbWV0cm9z 68216\nRW51bWVyYXRpb24= 68217\nIEJ1aWxkcw== 68218\nZXJ0b3M= 68219\nIHNhaW50cw== 68220\nLmRlcGxveQ== 68221\nZXRoZXJldW0= 68222\nIGtpbmRlcmdhcnRlbg== 68223\ndmFuaXplZA== 68224\nIGNvbWJpbg== 68225\nIHBvdXZvaXI= 68226\nS2lu 68227\nYXLEsQ== 68228\nIC4uLi4u 68229\n77y+ 68230\nLkdv 68231\nIHF1aXJreQ== 68232\nxLFuZGFu 68233\nIGFjdGlvblR5cGVz 68234\nIFFVRVJZ 68235\nVGF5bG9y 68236\nIFJL 68237\ndGF0 68238\nLnBhY2tldA== 68239\nIElNUE9SVEFOVA== 68240\nIGN1c2hpb25z 68241\nYnVsaw== 68242\nZHVjdGl2ZQ== 68243\nYmVuZWY= 68244\nb2NyaXN5 68245\nIGZ1ZXJvbg== 68246\nIGN1cnNlcw== 68247\nIGZpbGluZ3M= 68248\nZWxpZXI= 68249\nKD86 68250\nX2RyaXZl 68251\nIGNvbnRhY3Rv 68252\nIFBhcmt3YXk= 68253\ndmlkZXM= 68254\nZ25l 68255\nYXZhZ2U= 68256\nXFwu 68257\nZnVsbE5hbWU= 68258\nZGxs 68259\nIHNob2Nrcw== 68260\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 68261\nX3B4 68262\nQFdlYg== 68263\nLlBlcnNpc3RlbmNl 68264\nIHN1bms= 68265\nLnRvb2x0aXA= 68266\nYXV0aWNhbA== 68267\nTmV3c2xldHRlcg== 68268\nIHdhaXRlcg== 68269\nIGlucXVpcmU= 68270\n0LDQtdGC0YHRjw== 68271\nKCdfXw== 68272\ndG9n 68273\nSUVOVEFUSU9O 68274\nIGNvbXBhbnlJZA== 68275\nIEJhc2ljcw== 68276\nCUpMYWJlbA== 68277\nIG1hY09T 68278\nIE1hdHM= 68279\nX3RlbA== 68280\nLXByZWZpeA== 68281\nIG11dGF0ZQ== 68282\nfScp 68283\nY2hlbmc= 68284\nIE1pbGl0 68285\nIiY= 68286\nZmluZGluZw== 68287\nIERhdGFMb2FkZXI= 68288\nLkdQSU8= 68289\nIExldnk= 68290\nIHNuZWFrZXJz 68291\nIGNyw6lk 68292\nYXduZXI= 68293\neGlh 68294\nL3NpbXBsZQ== 68295\nQ0hS 68296\nIGZsb3RhdGlvbg== 68297\nLnNlbnNvcg== 68298\nQnJhemls 68299\nIFNlYXNvbnM= 68300\nIFNwZWFr 68301\nLWJhbGw= 68302\nIE11dGF0aW9u 68303\ndWtrYW4= 68304\nIE9tYWhh 68305\n4oCZb24= 68306\nIEN1b21v 68307\nIEp1ZGljaWFs 68308\nIGNoZWNrcG9pbnRz 68309\nIEZyZW0= 68310\nCUlk 68311\nZWdyaXR5 68312\nX2Fm 68313\nQE5vQXJnc0NvbnN0cnVjdG9y 68314\nIHRhYmVsYQ== 68315\nWyM= 68316\nbm90YQ== 68317\nIEZhY3RvcnM= 68318\nKGdyb3Vwcw== 68319\naXN3YQ== 68320\nSVZP 68321\nIHNjcmk= 68322\nYWNldA== 68323\nIE1laA== 68324\nKGNsYXp6 68325\nIFs8 68326\ncGVyaWFs 68327\nIHN1cnBhc3NlZA== 68328\nIGpva2Vk 68329\nIHJ1ZA== 68330\nIGltYmFsYW5jZQ== 68331\nIEZyYWdl 68332\nc3Nw 68333\nIGluZGljdGVk 68334\nLm1hcmtldA== 68335\nO20= 68336\nIHJlcGFpcmluZw== 68337\nLW5vdGU= 68338\nRGVidWdnZXI= 68339\nKFdlYg== 68340\nIHNpbmdz 68341\nIExveQ== 68342\nIERFU0lHTg== 68343\nLkNvbXA= 68344\nLWNvbnRyb2xsZXI= 68345\nIGF2b2NhZG8= 68346\nIEJvd2ll 68347\nY29udGFkb3I= 68348\ndWxpbmdz 68349\ndWNob3M= 68350\nc3BlY2lmaWVy 68351\nIFZvbHZv 68352\nIGRlbW9z 68353\nIFByb2R1dG8= 68354\nLk5vdEZvdW5k 68355\nIG5pw7Fvcw== 68356\nIEJvbHM= 68357\nX291dGVy 68358\nU2hlcg== 68359\nQVVUTw== 68360\nIGpvdg== 68361\nIEZyZWRkaWU= 68362\nb3JpYXM= 68363\nIGFmZWN0 68364\nIGZhY2lsaXRhdGluZw== 68365\nIGRvbWluYXRpbmc= 68366\nUGFyY2VsYWJsZQ== 68367\nJywnLQ== 68368\nbW9vbg== 68369\nIG1ldGFzdA== 68370\nIHNjYXJm 68371\nIFRoZXJt 68372\nQ2FsbEJhY2s= 68373\n0YHRgtCw0LI= 68374\nLkltcG9ydA== 68375\nIGJldHJheWFs 68376\naWN1bG9z 68377\nIHdlacOf 68378\n5YyF 68379\nX14= 68380\nd2lmaQ== 68381\nIFNFTlNPUg== 68382\nX0JVU1k= 68383\nJGI= 68384\nX0ZJTkQ= 68385\nIHBsYXN0aWNz 68386\nIENPTlZFUlQ= 68387\nCWNhbGw= 68388\nIFByYWd1ZQ== 68389\nIGdhcm5lcmVk 68390\nX2xlYXJuaW5n 68391\nc2hvb3Q= 68392\nJ10pKQ0K 68393\nIEdpbmdlcg== 68394\nPXBk 68395\nLHRlc3Q= 68396\nUHJvZml0 68397\nIGVzdGltYXRvcg== 68398\nIGJyZWU= 68399\nIC8vPC8= 68400\nX2hhdmU= 68401\nIEtvZA== 68402\nX0lNTQ== 68403\naXp6YXM= 68404\nbWlnaHR5 68405\n154= 68406\nIE9uQ2xpY2tMaXN0ZW5lcg== 68407\n44OH 68408\nIFNjaWVudGlzdA== 68409\nRmlsdGVyZWQ= 68410\nYXZs 68411\naGF5 68412\nX2dlbmVyYXRlZA== 68413\nXScK 68414\nIEF1dGhvcml0aWVz 68415\nOnBhcmFt 68416\nIHN0YXR0 68417\nLW1hdGVyaWFs 68418\nIGxpZGVy 68419\nIENyb3A= 68420\nIEJ1bmlmdQ== 68421\nIG5leHRQcm9wcw== 68422\nb3J6 68423\nX29yZA== 68424\nPHg= 68425\nX0lPQ1RM 68426\nIE11c2NsZQ== 68427\nCWV4ZWM= 68428\nRU5BTUU= 68429\nX2xldHRlcnM= 68430\nIyMjIyM= 68431\nIENz 68432\nJ109PSI= 68433\nICInKQ== 68434\nQ2xlYW51cA== 68435\nLnN0cnVjdHVyZQ== 68436\nzro= 68437\n6YCa6L+H 68438\nJ107Pz4i 68439\nIExhdGl0dWRl 68440\nYmJpbmc= 68441\nIGJhbmFuYXM= 68442\ncmVjdGlvbnM= 68443\nIFJhbmRhbGw= 68444\nTllTRQ== 68445\nIGFwcmVuZA== 68446\nLlJlc3BvbnNlRW50aXR5 68447\nIHRlc3REYXRh 68448\nXGU= 68449\nIFdL 68450\nLkFkZENvbXBvbmVudA== 68451\nX3J1bnM= 68452\nw6dvaXM= 68453\nLW1pbmk= 68454\nZm9sZGVycw== 68455\nIGxvc2Vycw== 68456\nIFRvd2Vycw== 68457\nLUVuY29kaW5n 68458\nOnI= 68459\nY2hvb3Nlcg== 68460\nIGZsYXR0ZW5lZA== 68461\n0YHRgtCw0L3QvtCy 68462\nCVB5 68463\n5Lic 68464\nIGRhbW5lZA== 68465\nRGVwdA== 68466\nd2Vk 68467\nIHBpc2M= 68468\nZ2llcw== 68469\nX2dhbWVz 68470\nLm1hc3M= 68471\nKEVxdWFs 68472\nIG5hdGl2ZXM= 68473\nLnRodW1ibmFpbA== 68474\nbHRy 68475\nIGVxbA== 68476\nX2luY29tZQ== 68477\nCWhlYWRlcnM= 68478\nLWhhaXJlZA== 68479\nIG1lZGlvY3Jl 68480\nIFdpdGhkcmF3 68481\nIGJpdHRl 68482\n2b4= 68483\nPWlu 68484\nb2NrZWQ= 68485\nRnVsbHk= 68486\nIFRFTVBMQVRF 68487\nw7pkZQ== 68488\nT2Rk 68489\naWxsZXo= 68490\nVGVsZXBob25l 68491\nIAoJCQo= 68492\nKCInIg== 68493\nX3NjaGVk 68494\nZXJuZQ== 68495\nwr4= 68496\nLnBpY2s= 68497\nIE1TSQ== 68498\nCWZm 68499\nRGlzY292ZXJ5 68500\nIENPRA== 68501\nIExhY2s= 68502\nIHNlbnNhdGlvbmFs 68503\nbW90aA== 68504\nIExlZ2lzbGF0aXZl 68505\n0Y0= 68506\nIHZpYWJpbGl0eQ== 68507\nIGdldEVtYWls 68508\nIHVuYW5pbW91cw== 68509\nIHBlbGxldA== 68510\nICIoKQ== 68511\nY29hdA== 68512\nYWdvb24= 68513\nIEFMV0FZUw== 68514\nXHVD 68515\nX3N0ZG91dA== 68516\nQW5keQ== 68517\nIG5ld0xpc3Q= 68518\nIE1haGFyYXNodHJh 68519\nLF9f 68520\nPXVzZXJuYW1l 68521\nIHNjcmlwdGluZw== 68522\nIFRtaW4= 68523\nPEFjdGlvbg== 68524\nPXt9LA== 68525\nc3ltYm9scw== 68526\nIGZlbmNpbmc= 68527\nIHbDrWRlb3M= 68528\nIE1hdXJpY2U= 68529\nY29ybGli 68530\nIGtlbQ== 68531\nIn0pLAo= 68532\nIENsYXNzaWNhbA== 68533\nY29sbGVnZQ== 68534\nIEhvbWVwYWdl 68535\nIH19Cgo= 68536\nX01zcA== 68537\nIENvbXBsYWludA== 68538\nIHNhbmR5 68539\nQXNpYW4= 68540\nX3NlcmlhbGl6ZXI= 68541\nIExhaA== 68542\nIGJ1ZHM= 68543\nb2xvZ25l 68544\nIHJlc3BvbnNlRGF0YQ== 68545\nb3BoaWxl 68546\na2F0ZWdvcmk= 68547\nRW5kZWQ= 68548\nbGVjdGlj 68549\nIGNsYXdz 68550\nLi4uJyk7Cg== 68551\nIHBsYW5uZXJz 68552\nIFphaw== 68553\nIEdsb3Zlcw== 68554\nIil9 68555\nIGZhc2hpb25lZA== 68556\nYnJvbg== 68557\nIG5ld2NvbWVycw== 68558\ndmFuYQ== 68559\nIHBpZXJ3cw== 68560\nUmVjZWlwdA== 68561\nLWVudg== 68562\nIHJ1dGE= 68563\nIEZhcm1lcg== 68564\nb2RvcmU= 68565\nbXVp 68566\nIHJvbWFudA== 68567\nIGluZmxpY3Q= 68568\nIHNlbWluYXJz 68569\nPWN2 68570\nKHN0b2Nr 68571\nIGV4dHJhY3Rvcg== 68572\nIFRpZmZhbnk= 68573\nX3V2 68574\nLmNvbnRhY3Rz 68575\nJyksKCc= 68576\nIHNvbHZlcw== 68577\nLkNvbm5lY3Rpb25TdHJpbmc= 68578\nL2RlYnVn 68579\nIEF2ZXJ5 68580\n44Oj 68581\nIG1heFg= 68582\nU3Bhcms= 68583\nPHRoaXM= 68584\nIGhpa2Vz 68585\nS2V5VmFsdWVQYWly 68586\nIFF1aWV0 68587\nc3RhYg== 68588\nIEtvbW1lbnQ= 68589\nbHljZXI= 68590\nIE1TTQ== 68591\nIExhbnRlcm4= 68592\nIGNvbmp1bnRv 68593\naHNp 68594\nTVVMVA== 68595\nV2l0aER1cmF0aW9u 68596\nYXR0YWNoZWQ= 68597\nIEFzdGVy 68598\nCXBvaW50cw== 68599\nIFNpYmVy 68600\nIE1ldGhvZGlzdA== 68601\nL3NpdGVz 68602\nIGZvcnR1bmVz 68603\nUGFydGljaXBhbnQ= 68604\nIGN1c3RvbWVySWQ= 68605\nKWluaXQ= 68606\nX3NlcnZlcnM= 68607\nIHdlYXZl 68608\nIFRSQUlO 68609\nIGhhcmFzc2Vk 68610\n7J6R 68611\nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo= 68612\nX2Zhcg== 68613\nQWxjaGVteQ== 68614\nLmxpbmVXaWR0aA== 68615\nIHRoZXJhcGlzdHM= 68616\nIExvYg== 68617\nZXF1aXBtZW50 68618\nIHJlY2h0 68619\nLm1pcG1hcA== 68620\nLm5pY2tuYW1l 68621\nIHVudG91Y2hlZA== 68622\nQUdPTg== 68623\nIFNhdWw= 68624\nIHdvcmtzaGVldHM= 68625\nIFZldGVyYW4= 68626\nb3VkZW4= 68627\nYWNsYXNz 68628\nX2FzbQ== 68629\nIHRlbXBs 68630\nIEV4cGVuc2U= 68631\nZWlnaHQ= 68632\nI1NCQVRDSA== 68633\nem9uZXM= 68634\nLnBhcnRz 68635\nYXRyaWNl 68636\nbGF3cw== 68637\ndG9CZURlZmluZWQ= 68638\nRWZmZWN0aXZl 68639\nIFBpZWNlcw== 68640\nYXJ0aQ== 68641\nIGluaGliaXRvcnM= 68642\nCXBhcmFtZXRlcnM= 68643\nIHRlbGVncmFt 68644\nYm91cmc= 68645\nX25vdGlmaWNhdGlvbnM= 68646\nIHBvc2l0aW9uYWw= 68647\nLWRlYWxz 68648\nIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 68649\nIHNoYWRlcnM= 68650\nXT0k 68651\nIGRlY28= 68652\nZXR5cGVz 68653\nY2xhcmU= 68654\nIEdTTQ== 68655\nLnV0aWxpdHk= 68656\nVG9TdHI= 68657\nYWZlbg== 68658\nIFht 68659\nX3BhcnRpY2xlcw== 68660\nIGZsdWZmeQ== 68661\nTWFya2V0aW5n 68662\nIHN0YW5kaW5ncw== 68663\nPwoKCgoKCg== 68664\nVU1BTg== 68665\nX1BBWU1FTlQ= 68666\nCVRpbWU= 68667\ncmF3bg== 68668\nb3Jybw== 68669\nIGVlcnN0ZQ== 68670\nIHBhZ2VOdW0= 68671\nIENPUA== 68672\nIHBsYWdpYXI= 68673\nVXBsb2FkZXI= 68674\nJHNlbGY= 68675\nbGF0ZXI= 68676\nZXJpYWxpemVk 68677\nIGFsaWduU2VsZg== 68678\nIOKZpQ== 68679\nLmFycmF5Y29weQ== 68680\nIG5vc290cm9z 68681\nCWdwaW8= 68682\nIHBsb3R0ZWQ= 68683\naXRlcmF0aW9ucw== 68684\nIFJlbGF4 68685\nY2lwaGVy 68686\nR2lmdA== 68687\nIEJldHQ= 68688\nIFhS 68689\nIHN0cmlwZWQ= 68690\nKGVudmlyb25tZW50 68691\nZWdlcnM= 68692\nX1JFU0VSVkVE 68693\nIGvDtm5udGU= 68694\nIGluZmVycmVk 68695\nUGRm 68696\nc29ycnk= 68697\ncGFyYXRl 68698\nLkNvbmNhdA== 68699\nIGxpcGlk 68700\nLkJP 68701\nIG9ybQ== 68702\nIENvbnNvcnQ= 68703\nIG92ZXJzZWVpbmc= 68704\nIGFtYmVy 68705\nIHBsZXRob3Jh 68706\nCUFjdGlvbg== 68707\ncXVlcnF1ZQ== 68708\nIGh1aXM= 68709\nID1b 68710\nIHByb2dyZXNzZXM= 68711\nanVkdWw= 68712\nIGNvbnZlcnRpYmxl 68713\nLmVtYmVkZGluZw== 68714\nIHs/Pgo= 68715\nIHJlZHV4 68716\nW2xhYmVs 68717\nOiIpOw0K 68718\nLm9ubGluZQ== 68719\ncXVhcnRlcmVk 68720\nIHNjaG9vbGluZw== 68721\nICJcIiI= 68722\nW2xpc3Q= 68723\nQWxhbg== 68724\nJ30KCg== 68725\neXBzdW0= 68726\nIHN0cml2aW5n 68727\nIFJlc3BvbnNpYmxl 68728\nIO2MjOydvA== 68729\nLkludFB0cg== 68730\ncmlrZXM= 68731\nZW52aWxsZQ== 68732\nLnNldExheW91dE1hbmFnZXI= 68733\nIFBhc3Nlbmdlcg== 68734\nIGRpc29i 68735\nIGZlcm1lbnQ= 68736\nLlBpeGVs 68737\nPign 68738\nIGNvbnRlbmRlcnM= 68739\nLWJldGE= 68740\nIGFmZmlybWF0aXZl 68741\n0L3QvtGB0YLQuA== 68742\naWHDp8Ojbw== 68743\nUmVjb21tZW5k 68744\naW1pdGVycw== 68745\nX3lsaW0= 68746\nIHN1YnNpZHk= 68747\nIGVyYg== 68748\nRmlsZVNpemU= 68749\nKHNy 68750\nIHBvb3Jlc3Q= 68751\nIHZvaQ== 68752\nU2lk 68753\nIHNsaXBz 68754\nX21pbnV0ZXM= 68755\nIHVn 68756\nxqFu 68757\nIG5hdMO8cmxpY2g= 68758\n44Oe 68759\nYmVhcg== 68760\nfV8kew== 68761\nIGZpc3Nl 68762\nIGRpc2NyaW1pbmF0b3J5 68763\nCQkgIAo= 68764\nIENvaWw= 68765\nX2lmYWNl 68766\nLnZlcg== 68767\nIG1pbmVk 68768\nIGFzc2Fzc2lu 68769\nIHVuc2V0dA== 68770\nLnJlcXVlc3Rz 68771\nLlVT 68772\naW1hZ2VVcmw= 68773\nIHN0cmF0ZWdpY2FsbHk= 68774\nLWJhbmQ= 68775\nIHRyb3VzZXJz 68776\nWEQ= 68777\ney8= 68778\nbGVjdGlvbnM= 68779\nYCgp 68780\nIlA= 68781\nIHNrZXRjaGVz 68782\nY2xpZW50SWQ= 68783\nIFNyYw== 68784\nb3BlbmluZw== 68785\nUHV0aW4= 68786\nIFBvZXRyeQ== 68787\nIFBST00= 68788\nSUxMSVNFQ09ORFM= 68789\nIGJvb21pbmc= 68790\nU2ltaWxhcmx5 68791\nOmxhc3Q= 68792\nLndvcmtlcg== 68793\nLmdldElE 68794\nLlNQ 68795\nc2VydmVycw== 68796\nb2N1bGFy 68797\nIHNwaW5hY2g= 68798\nSVNL 68799\nw7A= 68800\nJ10pWw== 68801\nIGNoaWVmcw== 68802\nIGdyb8OfZW4= 68803\ncmlldmluZw== 68804\nLmFzaw== 68805\nLXN1cg== 68806\nVlY= 68807\nLz4iOwo= 68808\nKHJlbW92ZQ== 68809\nIEtM 68810\nIEhhbGV5 68811\nQFJlc3BvbnNlQm9keQ== 68812\nLSY= 68813\nU3dhZ2dlcg== 68814\nIHpuYWo= 68815\nLm9uRXJyb3I= 68816\ncmVnbw== 68817\nZWxpeA== 68818\nIEFWQUlMQUJMRQ== 68819\nIHNlcGVydGk= 68820\naWFw 68821\nX21pc3M= 68822\nIHN1cmdlcmllcw== 68823\nIGltcGFydGlhbA== 68824\nIENvdA== 68825\nYWt0aW9u 68826\nIHdoaXRlbGlzdA== 68827\nINCw0LI= 68828\nX21peA== 68829\nIEJlZHJvb21z 68830\nIHByaW1laXJh 68831\nIHNpZ25pZmljYQ== 68832\nL2J5 68833\nIHN0YXJ0bGluZw== 68834\nIFNQRQ== 68835\ndWNjacOzbg== 68836\nTnVtZXI= 68837\nSUJN 68838\nLmZyYWdtZW50cw== 68839\nUmVudA== 68840\nIHLDs3duaWXFvA== 68841\nLkFVVE8= 68842\nLkZvckVhY2g= 68843\nIFpodQ== 68844\nIEN1bm5pbmc= 68845\nIFdhcm4= 68846\nIEJI 68847\nX0RPV05MT0FE 68848\nQnlLZXk= 68849\nKeKAlA== 68850\nIGNvbW1hbmRl 68851\nX0FOUw== 68852\nQ2hyb24= 68853\nRklU 68854\nX2F0b21z 68855\nX1NLSVA= 68856\nIHZhcA== 68857\nKEJveA== 68858\nIGxkYXA= 68859\ndW5wcm9jZXNzYWJsZQ== 68860\nSVRJT05T 68861\nw6lyw6k= 68862\nLG1zZw== 68863\nIG91dHNldA== 68864\nIGRyaWxsZWQ= 68865\nIGTDqXZlbG9wcA== 68866\nIENvYXQ= 68867\nIEJlbmdoYXpp 68868\nSG9va3M= 68869\nIE1pc3NpbGU= 68870\nX1Jlc2V0 68871\nPi88 68872\nICItIgo= 68873\nKCk9PnsK 68874\nIEhvY2g= 68875\nLmF3YWl0 68876\nQWRyZXNzZQ== 68877\nIGRpZ2l0YWxseQ== 68878\nIlRoZXNl 68879\nb3BsZXZlbA== 68880\nIGFzeW5jaHJvbm91c2x5 68881\nIER1Y2tz 68882\nUkVTUA== 68883\nSVJP 68884\nLmZpeA== 68885\nIFJhZGFy 68886\ndmVydGlzZQ== 68887\nw61zZXM= 68888\nSXRlcmF0aW9ucw== 68889\nbW91c2V1cA== 68890\nbWludA== 68891\nRklSU1Q= 68892\nIHBheXBhbA== 68893\nX3VwZ3JhZGU= 68894\nV3JhcHBlZA== 68895\nOw0NDQo= 68896\nK3M= 68897\nIGNhdGNoZXI= 68898\nLk9w 68899\nX05PVElDRQ== 68900\ncGFyYWxsZWxlZA== 68901\nQ1ZF 68902\nZm9yZ290 68903\nIHBhbm9y 68904\nIG9mZnJl 68905\nIGVub3JtZQ== 68906\nKCkNCg0KDQo= 68907\nYWRpYXRvcg== 68908\nYWRkQWxs 68909\nW3RleHQ= 68910\nKHV0aWw= 68911\nLlByb21pc2U= 68912\nYW5pc20= 68913\nX29mZmVy 68914\nRU5ESUY= 68915\nZG90cw== 68916\nIEtybw== 68917\nIHNwZWxsZWQ= 68918\nIGFwcE5hbWU= 68919\nQWN0aXZpdGllcw== 68920\nIFNwaWNl 68921\nZWF0ZWQ= 68922\nIHNrYg== 68923\nIGvDtno= 68924\nIHRvcmNodmlzaW9u 68925\nQ2l2aWw= 68926\nIGhvcw== 68927\nX0hlbHBlcg== 68928\nacSH 68929\nX3Vuc2lnbmVk 68930\n6K66 68931\n4oCcQW5k 68932\nCWtmcmVl 68933\nLnJhaXNl 68934\nIGNhbGxl 68935\nIExhbnM= 68936\nIGFudGln 68937\nXCI+IjsK 68938\nYnJhbmNoZXM= 68939\nbG9ncmFkb3Vybw== 68940\nIHN0YWxsZWQ= 68941\nYWx5emVk 68942\nRGVyaXZlZA== 68943\nOm5vdA== 68944\nIGdpYmk= 68945\nIFR1cm5idWxs 68946\nLnVzZXJEYXRh 68947\nKFRhYmxl 68948\nIERlcml2ZWQ= 68949\nCWNvbmY= 68950\nIGFsZ2Fl 68951\nIGthZmth 68952\nIG5ha25l 68953\nIEhlYXRpbmc= 68954\nIFRpcmU= 68955\nYWR1bHQ= 68956\nIERhdGVGb3JtYXQ= 68957\nb3Bj 68958\nZW5zYWdlbQ== 68959\nLlRvb2xz 68960\nLk1peGVkUmVhbGl0eQ== 68961\ncmFp 68962\nIFdvbmRlcmZ1bA== 68963\nKV0pCgo= 68964\naWFyZA== 68965\nVGhlbWVQcm92aWRlcg== 68966\nIGV2ZW50RGF0YQ== 68967\nI2Fk 68968\nLmdldFVybA== 68969\nIHRvb2xib3g= 68970\nIG92ZXJyaWRpbmc= 68971\nQ09OVEVOVA== 68972\nLXByb2R1Y3Rz 68973\nd2lsZA== 68974\nX2V4cGFuZA== 68975\naW5haXJl 68976\nQnJ1 68977\nb2xscw== 68978\nINGN0YLQvg== 68979\nY3Rlc3Q= 68980\nIHB1bmNoaW5n 68981\nRFJW 68982\nX3NwYWNlcw== 68983\nIFN1cGVyaW50ZW5kZW50 68984\nIGxheXVp 68985\nKGZlZWQ= 68986\ndG9k 68987\nIHZo 68988\nIGluc3VsdHM= 68989\nIFN1Yw== 68990\naWtz 68991\nVG9ycmVudA== 68992\nLmty 68993\nX2FjdGl2YXRl 68994\nk5g= 68995\namVl 68996\naW1lcnM= 68997\ncnVpdHM= 68998\nIHByZWNpbmN0 68999\nLlJlcXVpcmVk 69000\nIHNhdGlzZmllcw== 69001\nIGNoZWVyaW5n 69002\nIGFycml2 69003\nCXJlYw== 69004\nIENvYmI= 69005\nIGNvbmN1c3Npb24= 69006\ndWpldA== 69007\nTm90Rm91bmRFcnJvcg== 69008\nSmVhbg== 69009\nIHBob3Rvbg== 69010\nPl8= 69011\nIEJhcmNs 69012\nYW1k 69013\nICV9Cg== 69014\nPVwiIw== 69015\nSW50ZXJu 69016\nIENvbW1pdHRlZXM= 69017\nLmJlbA== 69018\nbnVtbWVy 69019\nIGxldml0cmE= 69020\nX3ZlcmJvc2U= 69021\nKGNvZGVj 69022\nIFN0aXRjaA== 69023\nPSIiOw0K 69024\nIHJlZ3JldHM= 69025\nIG11bHRpbmF0aW9uYWw= 69026\nIHJlc3RydWN0dXJpbmc= 69027\nIE1FTg== 69028\neW5jaHJvbml6YXRpb24= 69029\nIG1lZGlhdG9y 69030\na2ly 69031\nUHJpbmNl 69032\nIGluaGliaXQ= 69033\nIGdvc3Q= 69034\nIE1NQw== 69035\nIHNpZGVk 69036\nX2Rhcms= 69037\nKGJsb2I= 69038\nPkxvcmVt 69039\nPiIpOwoK 69040\nc2Nhbm5lcg== 69041\nOmlubGluZQ== 69042\nLmNhcm91c2Vs 69043\nb3RpZGU= 69044\nIFdXVw== 69045\nIGRydW1tZXI= 69046\nLmZhbWlseQ== 69047\nIG9yZGluYWw= 69048\n5b2T5YmN 69049\nIGRpcGxvbWF0 69050\nIHN1cHBsZW1lbnRhbA== 69051\nIGRhZsO8cg== 69052\nIEZBVA== 69053\nIFlvbmc= 69054\naGFwdXM= 69055\nIEp1bmN0aW9u 69056\nemw= 69057\nLlVzZUZvbnQ= 69058\nIGhhc2hNYXA= 69059\nLVJl 69060\nICIqKg== 69061\nLnNldEJhY2tncm91bmRSZXNvdXJjZQ== 69062\nIGltcGVyZmVjdA== 69063\nLkZpbmRFbGVtZW50 69064\nIExMUA== 69065\nIG11cmRlcmVy 69066\nIHRleHRl 69067\naXPDqQ== 69068\nYWN0aWNz 69069\nVG95 69070\nR3JhbnQ= 69071\nX2Rpc2Nvbm5lY3Q= 69072\nIGJyYXNpbGU= 69073\nIGVtZXJnZW5jaWVz 69074\nX2x2bA== 69075\nIEAiXA== 69076\nfSovCgo= 69077\nX1NPQw== 69078\nTk9STUFM 69079\nL2dhbGxlcnk= 69080\nYXNpY3M= 69081\nRXZlbnR1YWxseQ== 69082\nIGdyYXA= 69083\nIGNyaXN0 69084\nIHByb2plY3Rvcg== 69085\nIGdlb21ldA== 69086\nIGRldGVjdG9ycw== 69087\nIGNyaXRpY2l6aW5n 69088\nIGNoaWNrcw== 69089\nIEhpag== 69090\nL2ZyYW1l 69091\nLW1vbmV5 69092\nImRlc2NyaXB0aW9u 69093\nIHRleHRpbmc= 69094\nIHNleGlzbQ== 69095\nIE1WQw== 69096\nLWdlbmVyYWw= 69097\nIG92ZXJ0dXJuZWQ= 69098\nIG1vdmVy 69099\nIFBocmFzZQ== 69100\nIFVOVVNFRA== 69101\nIEVudHJlcHJlbmV1cg== 69102\nVEVHUg== 69103\nZWxsaXBzZQ== 69104\nTWFya2Rvd24= 69105\nX18oKg== 69106\nIEthcmRhc2hpYW4= 69107\ncHBlbGlu 69108\nIEdvdHQ= 69109\nIGR5c3Q= 69110\nIFJlZHV4 69111\nSG9sYQ== 69112\nPyEKCg== 69113\nIFJlYWx0eQ== 69114\nU3VydmV5 69115\nIE1jR3JlZ29y 69116\nX2hhbmRsZXM= 69117\nIGludHJpZ3VlZA== 69118\nIGdldFVybA== 69119\nIGRldmlzZWQ= 69120\nIFBheXBhbA== 69121\nIHRoaW5rZXJz 69122\nIFN0YXR1c0Jhcg== 69123\nIEVsaWc= 69124\nIGNvbXBsZXhlcw== 69125\nINC60L7QtA== 69126\nc3RvY2tz 69127\nLWluaXRpYWxpemVk 69128\nIHNjYW5kYWxz 69129\nIGNvbWZvcnRpbmc= 69130\nIFJvY2tz 69131\nIGxpb25z 69132\nbG9jYXRvcg== 69133\nIV0= 69134\nIFBvbnk= 69135\nRGF0dW0= 69136\nIEZldA== 69137\nIG9mZnNldFk= 69138\nIFJFVFVSTlM= 69139\nIGJyZWFjaGVz 69140\nVGltZUludGVydmFs 69141\nIHZpZWxlbg== 69142\nVmVyc2U= 69143\nIGthZA== 69144\nIGdhYXQ= 69145\nKCItIiw= 69146\nIG1vdXNlWQ== 69147\nKFBvc3Q= 69148\nIFVo 69149\nZWxpZ2libGU= 69150\nYWx0YQ== 69151\nIHV0aWxpc2U= 69152\nZmFjdHM= 69153\nSElQ 69154\nIG9yY2hlc3RyYQ== 69155\nIFNwYWNlcw== 69156\naXNwaWVs 69157\nIG11bHRpcGFydA== 69158\nLW9wYWNpdHk= 69159\nU2VhcmNoaW5n 69160\nIFBsYXRv 69161\nVmlzaW9u 69162\nIGx1bA== 69163\nIEFwcHJlbnQ= 69164\n57uc 69165\nW3JhbmQ= 69166\nLWRpc2FibGVk 69167\nIEZsZXRjaGVy 69168\nIHRyYW5zcG9ydHM= 69169\nJmU= 69170\ndHBhcmFt 69171\ncG9sZQ== 69172\nIEJ1ZW5vcw== 69173\nw7pibGljYQ== 69174\naW50ZXJhY3Rpb24= 69175\nIGhvYg== 69176\nIGluZmxpY3RlZA== 69177\nbGl0ZQ== 69178\nIFBBUkFNRVRFUlM= 69179\nIFN0YW0= 69180\nKG14 69181\nIEF1dG9NYXBwZXI= 69182\naWxpYW4= 69183\nIHF1aXR0aW5n 69184\nPXt9 69185\nIEpvbmFz 69186\nIGxvY2FsaXR5 69187\nIFNpbGVuY2U= 69188\nX2ZsdXR0ZXI= 69189\nIG5icg== 69190\nbGl0ZXI= 69191\nIE5vcm1hbGl6ZQ== 69192\nIGFjdW0= 69193\nQnJhaW5z 69194\nZXF1aXA= 69195\nXT09Ig== 69196\nIGRlc3Rpbm8= 69197\nIERpb3M= 69198\nLk11bHRpbGluZQ== 69199\nYWdyZWU= 69200\nKQoKCgoKCgoK 69201\nIHN0ZWxsZW4= 69202\nIGN1cmx5 69203\nLk9mZmljZQ== 69204\nLWFib3V0 69205\nICcuLy4uLy4uLw== 69206\nIFVUSUw= 69207\nIFJw 69208\n4oC6 69209\nIG1hcGE= 69210\nLkRP 69211\nYWdhbA== 69212\nLndpbmRvd3M= 69213\nIGFkdmVyc2VseQ== 69214\nLlh0cmFMYXlvdXQ= 69215\nbWVkaWNhbA== 69216\nIHVuc3Vy 69217\ndGhlcm1hbA== 69218\nLk1vZGVsQWRtaW4= 69219\nLmFjdHVhbA== 69220\nc2V0Q29udGVudA== 69221\nIHBvc3RmaXg= 69222\nUFc= 69223\nIENoYWlycw== 69224\nIGdyYW1t 69225\nIGNvbXBsaWM= 69226\nRElTUExBWQ== 69227\nIE1vb3Nl 69228\naGFhcg== 69229\nQUxFUw== 69230\nIGxkYQ== 69231\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg== 69232\nICcvJwo= 69233\nQVNO 69234\nIEJhcmJlcg== 69235\nIG1haW5z 69236\nIG1haW5XaW5kb3c= 69237\n0LDQt9Cy0LDQvdC40LU= 69238\nIGVtYW4= 69239\nX2NvbGxlY3Q= 69240\nIHJlbXBs 69241\nLnRheA== 69242\nYmFo 69243\nIFBzeWNoaWF0cnk= 69244\nRGVzY3JpcHRpb25z 69245\nIGV4ZWN1dGlvbnM= 69246\nCUxPR0dFUg== 69247\nJkU= 69248\nOmJn 69249\nIGtk 69250\nLmRhbWFnZQ== 69251\nIG5pc2k= 69252\n5qy+ 69253\nIENhbWVs 69254\naW5pZGFk 69255\nIExpZmVzdHlsZQ== 69256\nIFRISVJE 69257\nIOCkuA== 69258\nIHBvbHlnb25z 69259\nIGF0dGlyZQ== 69260\nYWxlbnQ= 69261\nX1VTQVJU 69262\nIG1hbGFyaWE= 69263\nbG9icw== 69264\nIF19Cg== 69265\nKHJlZ2lzdGVy 69266\nLXBz 69267\nX29wdGltaXplcg== 69268\nKEFMT0FE 69269\nIHZhcGU= 69270\nLnNvY2s= 69271\nkOiXjw== 69272\nJHByb2R1Y3Q= 69273\nKEVSUg== 69274\nY2twdA== 69275\nYnVxdWVycXVl 69276\nIH19Ij57ew== 69277\nIEhpdmU= 69278\nIE1hc2g= 69279\nIEVwaWQ= 69280\nIEx1bmQ= 69281\nX3RyYW5zYWN0aW9ucw== 69282\nIHN1YmNsYXNzZXM= 69283\nRWFzZQ== 69284\nX0Nsb3Nl 69285\nX2NoZWNrb3V0 69286\nIicsCg== 69287\nU2VjdG9y 69288\nb2lzZQ== 69289\nLXRlbXA= 69290\nKSIp 69291\naHlwZXI= 69292\nZXJjdWw= 69293\nc3RhY2twYXRo 69294\nX05S 69295\nSUxMRQ== 69296\nIHJlbGFjacOzbg== 69297\nIE1hdHRo 69298\nX0NPREVD 69299\nIGhhbmRsZUVycm9y 69300\nX09uZQ== 69301\nYWxib3Jn 69302\nCQkgICAgICAgICA= 69303\nIFVwbG9hZGVk 69304\nTm0= 69305\nLy89 69306\nKlM= 69307\nX0VYUEVDVA== 69308\nIGZyYWN0aW9uYWw= 69309\nQ291 69310\nIHNjYWxhYmxl 69311\nIENJRA== 69312\nPFBvc3Q= 69313\nCXRocmVhZA== 69314\naGFyZHdhcmU= 69315\nLmNoYW5nZWQ= 69316\nLkVsZW1lbnRBdA== 69317\nIGFydGljdWxhdGU= 69318\nZWRvcmVz 69319\nRXN0YWJsaXNo 69320\nPXtbCg== 69321\nISo= 69322\nIFNK 69323\nTWV0ZXI= 69324\nLnJlcA== 69325\nIFZPTA== 69326\nIE91 69327\nbMOp 69328\nIHBuZXVtb25pYQ== 69329\nX3BpY2tlcg== 69330\nZXhwbG8= 69331\nIOyekQ== 69332\nIFN3aW0= 69333\nZHJlc3M= 69334\nc3Rvcmllcw== 69335\nL25hdg== 69336\nVmE= 69337\nINit 69338\nL3NlbGY= 69339\nIHZldGVyaW5hcnk= 69340\nKERlbnNl 69341\nCWJvb3N0 69342\nIElzTm90 69343\nIHRydXN0aW5n 69344\nIExlYmFuZXNl 69345\nJHJlcXVlc3Q= 69346\neGZmZmZmZg== 69347\nX3JlbW92ZWQ= 69348\nIHVwZGF0ZXI= 69349\n2KfY 69350\nRE9XTkxPQUQ= 69351\nIEltbWVkaWF0ZWx5 69352\nIHJvYW1pbmc= 69353\nIEhvcm55 69354\nLmNvZGlnbw== 69355\nIEZpZ3VyZXM= 69356\nIHBhbnRyeQ== 69357\nKHNhbXBsZXM= 69358\nIEJFTA== 69359\nIHNldENvbnRlbnQ= 69360\ndW1vcg== 69361\n5pSv5LuY 69362\nX01JTlVT 69363\nIHVubGVhc2hlZA== 69364\nIHByb2ZpY2llbnQ= 69365\nCVVJ 69366\nLkV4Y2VwdGlvbnM= 69367\nIHNyYW5k 69368\nUHJlc3N1cmU= 69369\nLmFzc2VydE5vdA== 69370\nKHNlcmlhbGl6ZXI= 69371\nCXR4dA== 69372\nUG9ydHM= 69373\nIG5lY2VzYXJpbw== 69374\nIHJldml2ZWQ= 69375\nIG1pbGVzdG9uZXM= 69376\nY2Fubw== 69377\nRXNjb3J0 69378\nIGVudGVuZA== 69379\nQVBF 69380\naXBj 69381\nLmF0b21pYw== 69382\nIFBlbWI= 69383\nIHJlYWNoYWJsZQ== 69384\nIGthbnM= 69385\nd2hhdGV2ZXI= 69386\nTGlzdEJveA== 69387\nIENseQ== 69388\ncGljdHVyZWQ= 69389\nIEVsZWN0cm8= 69390\nYWJpYw== 69391\nIGZ1bms= 69392\nIGRpYXJyaGVh 69393\nIOeZ 69394\nIFNvbHZlcg== 69395\nIEJhYw== 69396\nIHNrZWxldGFs 69397\nIO+C 69398\nIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 69399\nICIpWw== 69400\nIFRyYWl0 69401\ndWRva3U= 69402\nLS0tLS0tLS0tLQoK 69403\nQW5nZWw= 69404\nYWdy 69405\nIHNpbXBsZXM= 69406\nIGJhbmM= 69407\nIEFsZXJ0cw== 69408\nIENvbmZpcm1hdGlvbg== 69409\nIEFseQ== 69410\nY2FsbGJhY2tz 69411\nIGZ1bmt0aW9u 69412\nIGdyYWZ0 69413\nWVBE 69414\nL0FGUA== 69415\nV0s= 69416\na3Vy 69417\nQ0tFVA== 69418\nIFNsYXRl 69419\nIFN0ZWY= 69420\nCVJ1bnRpbWU= 69421\nIEVTTA== 69422\nIHByZWFjaGluZw== 69423\nQnJvYWQ= 69424\nIHNldERlc2NyaXB0aW9u 69425\nYXplbA== 69426\nPQoK 69427\nIGphY2twb3Q= 69428\nIC8vIQo= 69429\ndmlhcg== 69430\nIGVpZA== 69431\nIGF0aXY= 69432\nIHJlZmxleGl2aXR5 69433\nLkxpc3Rlbg== 69434\nIGx5cmlj 69435\nIHZlcms= 69436\nIGNvbGx1c2lvbg== 69437\nYXphYXI= 69438\nIHdpbms= 69439\nIE11ZA== 69440\nL29wZXJhdG9y 69441\nIGV4dGVybmFsbHk= 69442\nIGJhcnU= 69443\nIGJhc2tldHM= 69444\ndGlja2Vy 69445\nKHBob3Rv 69446\nX2V2ZW4= 69447\nIHNwb25nZQ== 69448\nIGhlaWdodEZvcg== 69449\nZ2V0Q2hpbGQ= 69450\nX2Zvcm1hdHM= 69451\nLkV4ZWN1dGlvbg== 69452\nX1Byb3BlcnR5 69453\ncmVwb3M= 69454\ndGhlaWQ= 69455\nX1BIWVM= 69456\nIGV2aWRlbmNlZA== 69457\nLmhlYWRpbmc= 69458\nQW5ndWxhcg== 69459\nIFZlbnVl 69460\nIEhPVVNF 69461\nIEVzdG9uaWE= 69462\n0LzQsA== 69463\ncmdhbml6YXRpb24= 69464\nL2RldmljZQ== 69465\nSVJS 69466\nX3RoZW4= 69467\nYXJlbQ== 69468\nIGFnZ2k= 69469\nRU1PTg== 69470\nINGB0Lo= 69471\nIEVwaA== 69472\nIE1TUA== 69473\nIGxvZ2ZpbGU= 69474\nLWxlYWRpbmc= 69475\nYXRoYW0= 69476\nIHVubWF0Y2hlZA== 69477\nIFNpdHVhdGlvbg== 69478\nKCl7fQo= 69479\nCWNoYW5nZQ== 69480\nIENoYXB0ZXJz 69481\nLlJFU1VMVA== 69482\nIG9l 69483\nRVRZ 69484\nX3ZpZA== 69485\nLi4uJyw= 69486\nIGFsdGVybmF0aXZlbHk= 69487\nX1dT 69488\nIFBsZW50eQ== 69489\nIENyYXRl 69490\nYXNpb25hbGx5 69491\nIExhd24= 69492\nIElNTQ== 69493\nIFZhbml0eQ== 69494\nIFZvb3I= 69495\n5ZCv 69496\nIG1pag== 69497\nc3RlcnJlaWNo 69498\nIFJERg== 69499\nIENyaXRlcmlvbg== 69500\nLkludg== 69501\nLlN0ZXA= 69502\nX0ZyYW1l 69503\nIEVOVU0= 69504\n774= 69505\nSG9wZWZ1bGx5 69506\nTmF2Q29udHJvbGxlcg== 69507\nIOy2lOqwgA== 69508\nIFZhZGVy 69509\nIHJ1dGhsZXNz 69510\nJGtleQ== 69511\nY2t0 69512\naW5lbQ== 69513\naWxlbnQ= 69514\nIHJlc3BlY3Rpbmc= 69515\nbGNk 69516\nKGJ0 69517\nIEVsbGlvdA== 69518\nIFVuaWRvcw== 69519\nKENoYW5uZWw= 69520\nIGVpdXM= 69521\nIGFzdHJvbmF1dHM= 69522\nIEhvc3Rpbmc= 69523\nIGNhc3Rl 69524\nIGhhcm1lZA== 69525\nb3VwbGVz 69526\nPFJvbGU= 69527\nLkRlc2M= 69528\nLWNvdXJzZQ== 69529\nIENhcnRvb24= 69530\naWxlZ2Vk 69531\nIG15c3RpY2Fs 69532\nIOex 69533\nKGZpZWxkTmFtZQ== 69534\nV0lUSE9VVA== 69535\nLHN1bQ== 69536\nJ2FjYw== 69537\nCXJvd3M= 69538\nIGdldFBhc3N3b3Jk 69539\nIGNvY2tz 69540\ncGl2b3Q= 69541\nbmFtZW9m 69542\nIGZlYXNpYmlsaXR5 69543\nIGNvbW1lbmNlbWVudA== 69544\nIERvbWU= 69545\nLkpTT05FeGNlcHRpb24= 69546\nIEh5ZGVyYWJhZA== 69547\nIExpc3RlZA== 69548\nIENvbXB1dGVycw== 69549\nW3ZhbA== 69550\nIGlzb3Q= 69551\nCXdpbg== 69552\nIG5laA== 69553\nKElOVA== 69554\nUmVwdWJsaWNhbg== 69555\nINC/0YDQvtCy0LXRgA== 69556\nRmF0 69557\nIGVxdWl2 69558\nIERhdHVt 69559\nYXN0aQ== 69560\nIHNvaWxz 69561\ndXB1bmN0dXJl 69562\ncHJlc3NpdmU= 69563\nXykpOwo= 69564\nLldhcm4= 69565\nIGhhcmI= 69566\nLm9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 69567\nIGNsb3du 69568\nIE9XTg== 69569\nIGV4YW1pbmF0aW9ucw== 69570\nIEV4aXN0aW5n 69571\nam91cmQ= 69572\nIGNvbmNlc3Npb24= 69573\nIEZpcmViYXNlRGF0YWJhc2U= 69574\nIHVwdGFrZQ== 69575\nIGVubGlzdGVk 69576\nIENhcmI= 69577\nIGZ1cw== 69578\nIGFidXNpbmc= 69579\nLnByb2R1Y3Rpb24= 69580\neW5jaA== 69581\naWx5bg== 69582\ncmVmdW5k 69583\nLWhhdmU= 69584\nKGFyZ3VtZW50 69585\nIGZzY2FuZg== 69586\nY29uY2VwdA== 69587\nX0xBTkU= 69588\nIGVuZ2FnZXM= 69589\nIEV4YWN0bHk= 69590\nYWx0dXJh 69591\nKEFkZHJlc3M= 69592\nIHN5bm9ueW1vdXM= 69593\nVG93bg== 69594\nIFBheW5l 69595\ncm9pdA== 69596\ncGVyaWVuY2Vz 69597\ncGFydGljbGVz 69598\nX2Jk 69599\nIEdyaW5kZXI= 69600\nTWFuYWdlZE9iamVjdENvbnRleHQ= 69601\nKGJi 69602\nW3RtcA== 69603\nLWNvbnM= 69604\nYW9rZQ== 69605\nIHN0ZXdhcmQ= 69606\nIFZpZXdDaGlsZA== 69607\nLmRyYXdMaW5l 69608\nIFdBUk4= 69609\nIHB1ZXM= 69610\nbW9kYXRpb24= 69611\nIHpz 69612\nQWdyZWdhcg== 69613\nICIuIiw= 69614\nLmNlbnRlclk= 69615\nIGZsYXdsZXNz 69616\nIGRldXRzY2hl 69617\nIExpcXU= 69618\naXRlaXQ= 69619\nX2ludHJv 69620\nLXVzZWQ= 69621\nLHRhcmdldA== 69622\nIEhERA== 69623\nICUr 69624\nb3JlbnQ= 69625\nL09iamVjdA== 69626\nIGRpc3J1cHRlZA== 69627\nw6J0ZQ== 69628\nIGFjY2Vzbw== 69629\nIExvd2VzdA== 69630\nIFdpbGxpYW1zb24= 69631\nX2NyZWF0b3I= 69632\nU2VsbA== 69633\nIEJVRw== 69634\nX3JlcHI= 69635\n6ICM 69636\nIGFyY2hhZW9sb2dpY2Fs 69637\nb21lcnM= 69638\nIEVsb24= 69639\nIFNjcm9sbFZpZXc= 69640\nIGxpbmVzdHlsZQ== 69641\naXNSZXF1aXJlZA== 69642\naXNrbw== 69643\nX3Ji 69644\nZsO8aA== 69645\nICAgCQk= 69646\nKGRlZmluZQ== 69647\nIFNDTQ== 69648\nIERJRkY= 69649\nX2Jz 69650\ncGVuZGljdWxhcg== 69651\ncGFjZWQ= 69652\nIEpvdXJuYWxpc20= 69653\nLkpTT05BcnJheQ== 69654\nIERhdGFBY2Nlc3M= 69655\nTWFyaWE= 69656\nIELDvA== 69657\nSEVMTA== 69658\nIE1BVFJJWA== 69659\nT0xUSVA= 69660\nYXBzaWJsZQ== 69661\nXToKCg== 69662\nbmFpcmVz 69663\nX2hpc3RvZ3JhbQ== 69664\nIGZsYWly 69665\naGF2aW5n 69666\nIFVzZXJJRA== 69667\nIFJlbGF0aW9uc2hpcHM= 69668\nUmVwbGFjZW1lbnQ= 69669\nIHJzYQ== 69670\nIGVucmljaGVk 69671\nIHJlaGVhcnM= 69672\nIHfDpHJl 69673\nIGxvYWRlcnM= 69674\nIEVsZW5h 69675\nIFdhdGNoaW5n 69676\nCWpvYg== 69677\nTkVXUw== 69678\nL3NldHRpbmdzZGlhbG9n 69679\naXZlYw== 69680\nX0VRVUFMUw== 69681\nVGVtcGxhdGVOYW1l 69682\nIEJPRFk= 69683\nLmFkYXB0ZXJz 69684\nd29mZg== 69685\nY29tYm9Cb3g= 69686\nLk5ld1JlYWRlcg== 69687\nfHJlcXVpcmVk 69688\nX3Byb2JhYmlsaXR5 69689\nICg6Og== 69690\nIGNyYXo= 69691\nIFVG 69692\nVGVzdElk 69693\nIGVzcGVjaWZpYw== 69694\naWJlbA== 69695\ncGF3bg== 69696\n640= 69697\nIE1hcnI= 69698\nIHN0YXJ0WA== 69699\nX3NpdGVz 69700\nLz4KCg== 69701\nIGltcGxpY2F0ZWQ= 69702\nKGlubmVy 69703\nIGVmZm9ydGxlc3NseQ== 69704\nwq10aW9u 69705\nYXdhcmQ= 69706\nIGhvdmVyaW5n 69707\ncHJp 69708\nJHRlbXBsYXRl 69709\ndWFuZw== 69710\nIGF1dG9tYXRl 69711\nICoqLwoK 69712\naWJsaQ== 69713\nIG51dHJpdA== 69714\nKS4o 69715\nZWVlZQ== 69716\nQXBpQ29udHJvbGxlcg== 69717\nL293bA== 69718\nIFdvbWVucw== 69719\nLWRvdWJsZQ== 69720\nIE9yZGVyaW5n 69721\nc3Bt 69722\nTW9kZXI= 69723\nLk5hdGl2ZQ== 69724\nIEJlcmdlcg== 69725\nZXNkYQ== 69726\nZXJkaW5ncw== 69727\nX2VjaG8= 69728\nIHN1bW1hcml6ZWQ= 69729\nIGVsZXZhdGU= 69730\nX3F1YWQ= 69731\nIHdvbw== 69732\ndWxhbnQ= 69733\nUHJvcGVydHlWYWx1ZQ== 69734\nIHBsaXN0 69735\nIEdSQVBI 69736\nIFNUREVSUg== 69737\nKScpLg== 69738\nQXNzZXJ0aW9u 69739\nbGlua3BsYWlu 69740\nIGFjY2VsZXJhdGluZw== 69741\nIHNuaXBwZXRz 69742\nIFNhbG1hbg== 69743\nYWJjZA== 69744\nLmVjaG8= 69745\nX2lkeHM= 69746\nIHBjbQ== 69747\nb2NhbHlwdGlj 69748\nX2Nvb3JkaW5hdGU= 69749\nKHByZXZpb3Vz 69750\nLXNob3J0 69751\nLnN1YnRyYWN0 69752\nKEJpdA== 69753\nP3Q= 69754\nIE5vdGVib29r 69755\nIEthdHJpbmE= 69756\naWZmZXJlbnRpYWw= 69757\nc2lsZW50 69758\ndGVybWluYXRlZA== 69759\nIHRhbmdlbnQ= 69760\nOlQ= 69761\nIGNvc8Os 69762\nIHBhcmFub2lk 69763\nIGRlcHJpdmF0aW9u 69764\nL3t7JA== 69765\nIGhlbWlzcGhlcmU= 69766\nIHJlaW5zdA== 69767\nZWN6 69768\ndGVycg== 69769\nIFBMQVRGT1JN 69770\nIHRyb3VibGVzaG9vdGluZw== 69771\nIHZhbGlkYXRpbmc= 69772\nIE9yaW9u 69773\nYXN1cmluZw== 69774\n0LjQvdCw 69775\nIGh1YnM= 69776\nYXJlbmNl 69777\nIENoYWxsZW5nZXM= 69778\nIHplYWw= 69779\nU3Bv 69780\nIFNjcmVlbnM= 69781\nIG11bmRhbmU= 69782\nIER1bms= 69783\nICMjIyMj 69784\nIFJFRkVS 69785\nb25ldA== 69786\nLmNhc2U= 69787\nLXBvc2l0aXZl 69788\nSU5URUdFUg== 69789\nLm1ldHJvTGFiZWw= 69790\nU0FO 69791\nIHByb2Zlc3Npb25z 69792\nIHR5cmVz 69793\nUGFsaW5kcm9tZQ== 69794\nIFNFQ09ORA== 69795\nLkdSRUVO 69796\nIFNuYXBzaG90 69797\nVUxL 69798\nX2NpZA== 69799\nJEk= 69800\nIGN1bnQ= 69801\nZXN0cnVjdGlvbg== 69802\nUHN5Y2g= 69803\nIEh0dHBSZXNwb25zZU1lc3NhZ2U= 69804\nZW1iYWxp 69805\nX3Jldmlld3M= 69806\nU2VsZWN0YWJsZQ== 69807\nX1BSRVNFTlQ= 69808\nIEpzb25SZXF1ZXN0 69809\nIFRoZXRh 69810\nX2ludGVycA== 69811\nUmFzdGVy 69812\nI2Vycm9y 69813\nLG9iag== 69814\nIHR3ZWV0aW5n 69815\nX0dQVQ== 69816\nX3RvZGF5 69817\nX3NlY3M= 69818\nbmVlcw== 69819\nLmdldFN5c3RlbVNlcnZpY2U= 69820\nIHZub2Rl 69821\nIFJlZ3VsYXRvcnk= 69822\nIEZhaHJlbmhlaXQ= 69823\nIHNjYWxlcg== 69824\nX21hcmtldA== 69825\nLmFsbG9jYXRl 69826\ndGlja2V0cw== 69827\nYXRhaw== 69828\nIFBpa2U= 69829\nIExvcg== 69830\nZGl0b3I= 69831\nIGxvY2F0aW9uTWFuYWdlcg== 69832\nIGluaXREYXRh 69833\nIFdhcmU= 69834\nIEluY2lkZW50 69835\nIGNvbW1lbnRhdG9y 69836\ndWVudGVz 69837\nIEluZmxhdGU= 69838\nIOWG 69839\nIGFjdGl2aWRhZA== 69840\nIEJq 69841\nRU5VTQ== 69842\nIHJldXNlZA== 69843\nINC80LXQvQ== 69844\nIHNlc2nDs24= 69845\nLicpKTsK 69846\n44GT44KT 69847\nL2dl 69848\nYWdhaW5zdA== 69849\nLGxpbmU= 69850\nKFVubWFuYWdlZFR5cGU= 69851\nKT0i 69852\nIHl0 69853\ndWRpYW50ZXM= 69854\ncm9sbGFibGU= 69855\n5aGr 69856\nX0NPTExFQ1RJT04= 69857\nb2xpcw== 69858\ndW1iZXJsYW5k 69859\nKCIiIgo= 69860\nIHppcHBlcg== 69861\nDAo= 69862\nL3NpZ251cA== 69863\nIHN0cmFuZHM= 69864\ncmF4 69865\nLmNvbnN1bWVy 69866\nIHVuY2VydGFpbnRpZXM= 69867\nRGVidWdFbmFibGVk 69868\nIGRlZmVhdHM= 69869\nIGRydg== 69870\nIHJlYWxpc20= 69871\nYWdyYW1z 69872\nWEU= 69873\nIEhhemFyZA== 69874\nLW5lZWRlZA== 69875\nKHRhYmxlVmlldw== 69876\nLkVsZW1lbnRz 69877\nIFNBUg== 69878\nCWVsZW0= 69879\nKHBrZw== 69880\nU2ltb24= 69881\nVGludENvbG9y 69882\nIFBoZW4= 69883\nX0VNUA== 69884\n2Iw= 69885\nPz4KCgo= 69886\nX2F0dHJpYg== 69887\nIGJveFNoYWRvdw== 69888\nIENHQWZmaW5lVHJhbnNmb3Jt 69889\nIENhbmJlcnJh 69890\nIHN0YXJ0UG9z 69891\nIFJhaw== 69892\nCWNlcnI= 69893\nIFRhbnphbmlh 69894\ndW9uZw== 69895\nY2Fm 69896\nLmJhc2ljQ29uZmln 69897\nb2lucw== 69898\nQ29udGFpbmVk 69899\nPXNldA== 69900\nX2dpdA== 69901\nCXBhY2tldA== 69902\nIGNvZg== 69903\nKFRS 69904\n5qC85byP 69905\nKHt9KQo= 69906\nIGRpcmVjY2lvbg== 69907\nIHBsYXlsaXN0cw== 69908\nIGFmZmluZQ== 69909\nLnNldFNlbGVjdGlvbg== 69910\nIGFtbW9u 69911\nIGNvbnF1ZXJlZA== 69912\nIFJhbW9z 69913\nIFBTUA== 69914\nPXN1bQ== 69915\nIGNvcnJlbGF0aW9ucw== 69916\nIHJvYWRtYXA= 69917\nIGV4dGluY3Q= 69918\nIGFkdmlzYWJsZQ== 69919\nIGJvbWJlcnM= 69920\nIFVJUmVzcG9uZGVy 69921\nX0JQ 69922\nINCx0YPQtNC10YI= 69923\nIFByZW1pZXJl 69924\nIFJV 69925\ndHJhc2g= 69926\nKGNsanM= 69927\nZ251 69928\nLlBhZ2Vz 69929\nIGluc3BlY3RvcnM= 69930\nTWV4aWNv 69931\nIFZlcmU= 69932\nUHJlYw== 69933\nIFNjYWw= 69934\naXNwZXJz 69935\nUnVubmFibGU= 69936\nLm9yaWc= 69937\nIHNhaWxvcnM= 69938\nUGFyc2luZw== 69939\nIFZpc2l0b3Jz 69940\nJnR5cGU= 69941\ncG9wb3Zlcg== 69942\nPCgpLA== 69943\nIG93ZXM= 69944\nIHJlYWN0cw== 69945\nIERlZmluZWQ= 69946\nIHJlYWxtZW50ZQ== 69947\nIGRpY3RhdG9yc2hpcA== 69948\nYWRtaW5pc3Ry 69949\naWRlbmQ= 69950\nPUw= 69951\nc3RyY2FzZWNtcA== 69952\nXSU= 69953\n0L7Qs9GA0LDQvA== 69954\nZWR1bGE= 69955\nLWRlc2lnbmVk 69956\nQ09WRVI= 69957\nX0NoYW5uZWw= 69958\nIHByb2pldG8= 69959\neW1vb24= 69960\nQ0hLRVJSUQ== 69961\n6YeK 69962\nIHZlcmlmeWluZw== 69963\nL2tleQ== 69964\nLmZyb21DaGFyQ29kZQ== 69965\nLkJpdA== 69966\nX2J1ZGdldA== 69967\nICUi 69968\ndmV5b3I= 69969\nIHl1bQ== 69970\nIGV4dHJlbWVz 69971\nX0NSRQ== 69972\nZ2V0U3RhdHVz 69973\nc3Vic2VjdGlvbg== 69974\nIHNvYWtlZA== 69975\nIGdlbmF1 69976\nX0NIQVJBQ1RFUg== 69977\n5oyB 69978\nLW9ubGluZQ== 69979\nLnRvQ2hhckFycmF5 69980\nY2VyZXI= 69981\nIl0sIg== 69982\nIHN0cm9sbA== 69983\nIFl1YW4= 69984\nIFdhbmRlcg== 69985\nIHNpc3RlbQ== 69986\nX3Vj 69987\nKG5vbWJyZQ== 69988\nY2hhbnRtZW50 69989\nKGNsb3Nl 69990\nbWV0aA== 69991\nLXNlY3JldA== 69992\ncHNldWRv 69993\nQ291bnR5 69994\nQ09OVFJPTA== 69995\nIHNvbHZlbnQ= 69996\nIHNvYXJpbmc= 69997\nIHNwaWVz 69998\nTmF2SXRlbQ== 69999\nIHJlc2VtYmxhbmNl 70000\nKGJpdHM= 70001\nIGNlbGx1bA== 70002\nIGFzc29jaWF0aXZl 70003\nLmltd3JpdGU= 70004\nLmNvb3JkaW5hdGU= 70005\nXSwk 70006\nKHNr 70007\nKi8p 70008\nIG1vY2tz 70009\nIGp1bmc= 70010\nX0RPQw== 70011\nLXJ1bnRpbWU= 70012\nIEdpdmVz 70013\ndW5q 70014\nKHNlZw== 70015\nKFtc 70016\nIG5haA== 70017\nX2V4cGVjdA== 70018\nUm93SW5kZXg= 70019\nKGZvcmNl 70020\nIEdldFZhbHVl 70021\nIHN1bW1hcmllcw== 70022\nX1NIQVJF 70023\nLXRyYWluZWQ= 70024\nIEJsYW5j 70025\nIGZpdHRpbmdz 70026\nIHdhdGVyZnJvbnQ= 70027\nLk5vdGU= 70028\nIFdhbmQ= 70029\nb3ZlcmU= 70030\ncHJlZGljdGlvbg== 70031\nIGNzcg== 70032\nLnRvcEFuY2hvcg== 70033\nIFN0cm9rZQ== 70034\nX0ZpbHRlcg== 70035\nYXRoZQ== 70036\nICJcXCI= 70037\nIEFGRg== 70038\nPSIvIj4= 70039\nLlJlcXVlc3RNZXRob2Q= 70040\nkJzntKI= 70041\nIHdpdG5lc3Npbmc= 70042\nQXBwYXJlbnRseQ== 70043\nIG1kaQ== 70044\nc3RpY2tz 70045\nIEFsdg== 70046\nw6TDnw== 70047\nX2NvbnRpbg== 70048\nIGJvaWxlcnM= 70049\nIE1hcnhpc3Q= 70050\nSU9D 70051\nbmVybw== 70052\naW5uYWNsZQ== 70053\nTGl0 70054\nY2Vj 70055\nS2V5UHJlc3M= 70056\nR2V0RGF0YQ== 70057\nIGlzbnQ= 70058\n0YDQvtCy0LXRgA== 70059\nIHFyeQ== 70060\nUm9vdEVsZW1lbnQ= 70061\nIE5TQ29kZXI= 70062\nLmdldE51bQ== 70063\nIHRocmVlc29tZQ== 70064\nVXNlcw== 70065\nLiJf 70066\nIENvbnRpbnVvdXM= 70067\nIHBvcHVsaXN0 70068\nIFBzeWNob2xvZ2ljYWw= 70069\nX2N5Y2xlcw== 70070\nIGlmZGVm 70071\naXBoZXJhbHM= 70072\nCSAgICAgICAgICA= 70073\nIGFkdmlzZXM= 70074\nIENvbXBhbmlvbg== 70075\ndHJpZ2h0 70076\nIGdyb3dlcnM= 70077\nIFNPQ0tFVA== 70078\neW1jZQ== 70079\nUlNT 70080\nbWVtYmVyT2Y= 70081\nVG91Y2hhYmxl 70082\nX2FycmF5cw== 70083\nIGp1bXBlcg== 70084\nIGhlcnBlcw== 70085\nIFRpdHM= 70086\nIFRlbGVmb24= 70087\nX1BBTkVM 70088\ndWdlbg== 70089\n5YyX5Lqs 70090\nLlNpdGU= 70091\nX3VucmVnaXN0ZXI= 70092\nX2Nocg== 70093\nLnRm 70094\nLWh1bWFu 70095\nIGFzb2Np 70096\nIHF1ZWVucw== 70097\nQW50aG9ueQ== 70098\nIHN0cmluZ2VudA== 70099\nIG1vbGVzdA== 70100\nc2V0SWNvbg== 70101\nSEVFTA== 70102\nSEVMUA== 70103\nRERT 70104\nLmNtcw== 70105\nSVNUUklCVVQ= 70106\nY2llcw== 70107\nLmZvckNoaWxk 70108\nLmNoaw== 70109\nIE90dG9tYW4= 70110\nIFRQUA== 70111\nIG1pbw== 70112\nIEJ1Zg== 70113\nYm9h 70114\nVmVyc2lvbnM= 70115\nKGxvY2FsZQ== 70116\nIFJhaWxyb2Fk 70117\nYmNj 70118\nLyoqPA== 70119\nLXBhaWQ= 70120\nIGNlbGVyeQ== 70121\nYXRpc2NoZQ== 70122\nZ2V0T3B0aW9u 70123\nb3Jpb3VzbHk= 70124\nIGFkYXB0ZXJz 70125\nU3RvcmVz 70126\nL3NhdmU= 70127\nIEJhc2lz 70128\n0Y7Rgg== 70129\nIExhZA== 70130\nX3JlbGF0aW9uc2hpcA== 70131\nIENsdWJz 70132\nIOCo 70133\nOiI8PA== 70134\nX01JU0M= 70135\nVmlzdWFsaXphdGlvbg== 70136\nIG1pcnJvcmVk 70137\nZXNwZXI= 70138\nU3RyTG4= 70139\nIHJlc3BvbnNlT2JqZWN0 70140\n5ZCR 70141\nLmVuY29kZXI= 70142\nLS0tLS0tLS0tCgo= 70143\nIGdyaWRWaWV3 70144\nX2luZGVudA== 70145\nYW50d29ydA== 70146\nIGFycml2YWxz 70147\nIFNldHRsZW1lbnQ= 70148\nVmlld0luaXQ= 70149\nLXZhbHVlcw== 70150\nIHdhdGVyZmFsbA== 70151\nIGluY2FyY2VyYXRpb24= 70152\nIFRlZW5z 70153\nCXNpZ24= 70154\naW1tdW5l 70155\nLnNlY29uZGFyeQ== 70156\nIHZpZGVvZXI= 70157\nIOi+k+WFpQ== 70158\nIGludGltaWRhdGlvbg== 70159\nZW5kYWxl 70160\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 70161\nIGluc2lnaHRmdWw= 70162\nIHNhbmRz 70163\nIHBob3RvZ3JhcGhpYw== 70164\nUGFnaW5hdG9y 70165\nIGRpc2NpcGxpbmVk 70166\nX1RMUw== 70167\nXSkpLA== 70168\ncmxlbg== 70169\nPGNlbnRlcg== 70170\nX1BDTQ== 70171\nS2VsbHk= 70172\nLWJpbGxpb24= 70173\nLmN4 70174\nIGpldXg= 70175\nIGZpbGVMaXN0 70176\nIFFEaWFsb2c= 70177\ndHJhY3RpdmU= 70178\nRHQ= 70179\nIGVzdHJvZ2Vu 70180\nIHN0YXJjaA== 70181\nX2VtaXQ= 70182\nINC30LDQv9GA0L7RgQ== 70183\nIFF1YXJ0 70184\nIGluYWR2ZXJ0ZW50bHk= 70185\nIHRyb25n 70186\nc2hpcG1lbnQ= 70187\nIE5PUg== 70188\nIFNjcmVlbmluZw== 70189\nIERpc2Nvbm5lY3Q= 70190\nbWVubw== 70191\nIFdvcnN0 70192\nIE5y 70193\ne2s= 70194\nc3Bs 70195\nX2N0cg== 70196\nLnNvcnRlZA== 70197\nLXBsYWNlaG9sZGVy 70198\nKCk7Ig== 70199\naHVyc3Q= 70200\nLWhpdA== 70201\nLnNvbHZl 70202\n566X 70203\nIHVuZGVhZA== 70204\nIHdoaW1z 70205\nIGdldERlZmF1bHQ= 70206\nIE5pa2tp 70207\nYXNzZW1ibGU= 70208\nIHJlbG9jYXRlZA== 70209\nLXJldA== 70210\nSXRhbGlhbg== 70211\nOlN5c3RlbQ== 70212\nLnNjaGVkdWxlcg== 70213\n4oCcU28= 70214\nRm9yYmlkZGVu 70215\nQVZPUg== 70216\nemlhxYI= 70217\nLkFkYW0= 70218\nCWNhbnZhcw== 70219\nIHBhcnRuZXJpbmc= 70220\nIGd5bW4= 70221\nIG1hbmlj 70222\nRGlmZmVyZW50 70223\nIMOlcmh1cw== 70224\nIGZlcnRpbGU= 70225\nY2xm 70226\nLQ0K 70227\nLnJldmlldw== 70228\nb2RhYmxl 70229\nIEJvdW5kcw== 70230\nb2Jhbw== 70231\nIFBhcGVyYmFjaw== 70232\nIG1vZGlmaWM= 70233\nY2hlY2twb2ludA== 70234\nIEFwcEJ1bmRsZQ== 70235\nIHN0YWJpbGl6ZQ== 70236\nIEF1ZGlvQ2xpcA== 70237\nbW9udGhseQ== 70238\nLmJlaA== 70239\nIGZsb3I= 70240\nIGJvbmRlZA== 70241\nIFdvcmtvdXQ= 70242\nY29taW5ncw== 70243\nIHJhYmJpdHM= 70244\nIEJBTA== 70245\nQ0NS 70246\nX3Z1ZQ== 70247\nIExldml0cmE= 70248\nIGxpYmVydGluZQ== 70249\nIGNoYWxsZW5nZXI= 70250\nIFZhY2F0aW9u 70251\nVG9G 70252\nfSQv 70253\nX0RyYXc= 70254\nIGZlbmNlcw== 70255\nIGRhdGFzb3VyY2U= 70256\nIHBhcGVs 70257\nc2xpY2s= 70258\nX21lcw== 70259\nIFVJU3Rvcnlib2FyZFNlZ3Vl 70260\nKFRhZw== 70261\nIOWvuQ== 70262\nICctJyk= 70263\nX0NMQVNTRVM= 70264\nKFJlbmRlcg== 70265\nCWZ3cml0ZQ== 70266\nVUVE 70267\nQUVT 70268\nKGpzb25QYXRo 70269\nIHNsb3dz 70270\nPkRlc2NyaXB0aW9u 70271\nIGVucmljaG1lbnQ= 70272\nIGl0ZW1wcm9w 70273\nIFBvdmVydHk= 70274\nIGFic29yYmluZw== 70275\nIFBzeWNobw== 70276\n5rGf 70277\nLC4KCg== 70278\nSW52ZXJzZQ== 70279\nIGFkanVk 70280\naWdpZEJvZHk= 70281\nemlvbmk= 70282\nICInLiQ= 70283\n5LiN5a2Y5Zyo 70284\nVGhhaQ== 70285\nIHNsYWlu 70286\nIGJydXRhbGx5 70287\nIFBlcnNwZWN0aXZl 70288\nIFJldGlyZW1lbnQ= 70289\nJHJz 70290\nIHNlcnZpY2VOYW1l 70291\nIOyI 70292\nLXByb2Nlc3Npbmc= 70293\nYnJhbmRz 70294\nOmVycm9y 70295\nKHByb3BlcnR5TmFtZQ== 70296\nIEJvZWg= 70297\nL2Nt 70298\nL3JlYWQ= 70299\nQU1C 70300\nIHJvdGF0aW9ucw== 70301\nLndvcmtzcGFjZQ== 70302\nOnk= 70303\nIHVwaG9s 70304\ndW5reQ== 70305\nIEJyYWNl 70306\nL21ldGE= 70307\nIEJyYXZl 70308\nYWNqZQ== 70309\nKFVJbnQ= 70310\nIHZpZWlsbGU= 70311\ncmFkaQ== 70312\nX2R5bg== 70313\nTlc= 70314\nbG9zZXI= 70315\nZXJ1c2Zvcm0= 70316\nIEJhcnRvbg== 70317\nIGZhcmVz 70318\nIE11aw== 70319\n4buHdQ== 70320\nIEF1ZGlvU291cmNl 70321\nKChf 70322\nLkJpZw== 70323\nLm9yZ2FuaXphdGlvbg== 70324\nIFRyaWNr 70325\nIGJsdXNo 70326\nKFRZUEU= 70327\nIFJlbGF0aXZlTGF5b3V0 70328\nbGVjdHJvbg== 70329\nXX0i 70330\nIFphcA== 70331\nIFR3ZWx2ZQ== 70332\nOkw= 70333\nIHN0aWZmbmVzcw== 70334\nX0hFTA== 70335\nIHNwZXA= 70336\nKGNvZGVy 70337\nIHRhbWFuaG8= 70338\nIGFudGlveGlkYW50 70339\nIGhvc3BpdGFsaXplZA== 70340\nR1BD 70341\nIHNjcnV0aW4= 70342\n4buBbg== 70343\nIFNa 70344\nIEp1bGl1cw== 70345\nIFNhYmI= 70346\nZWxvcg== 70347\nKG1j 70348\n6YeM 70349\nIFBpbnM= 70350\nIG1vZGVyYXRlbHk= 70351\nIEvDvA== 70352\nb3JnYW5pemF0aW9ucw== 70353\nIFNDT1JF 70354\nIHNjb3Vy 70355\nIGNob3I= 70356\nIFVJRWRnZUluc2V0cw== 70357\nIHNrdWxsZQ== 70358\nX29wZXJhbmQ= 70359\nLmdzdGF0aWM= 70360\nL25naW54 70361\nIGdldFdpZHRo 70362\nQmF0dGVyeQ== 70363\nIFNldHRlcg== 70364\nbUE= 70365\nKFJlc291cmNlcw== 70366\nX3BsYXlsaXN0 70367\nIG1hbmdv 70368\nIE9SRA== 70369\nYW5raW5k 70370\nZXdheXM= 70371\nPyks 70372\nIEdMVVQ= 70373\nIGp1c3Rl 70374\nIHBheWVy 70375\nKGNhbQ== 70376\nIFRlYWNo 70377\nIEZsdXg= 70378\nIG91dHNwb2tlbg== 70379\nIFN0cmluZ1V0aWw= 70380\nIFpoYW8= 70381\nLkhlbHBlcg== 70382\nIGVzdGlsbw== 70383\nIEFudGhyb3A= 70384\nIEd1YXJkcw== 70385\nVm9jw6o= 70386\nOlsn 70387\nCXByb2R1Y3Q= 70388\ndXBkYXRlZEF0 70389\nIGluc3BpcmVz 70390\ncXc= 70391\nQkxFTQ== 70392\nYWtpc3Rhbg== 70393\nIGN6xJk= 70394\nLWhlYXJ0ZWQ= 70395\nIENvbXBlbnNhdGlvbg== 70396\n0LjQsw== 70397\nIGNvbWE= 70398\nIEZpYXQ= 70399\nIHhtbGh0dHA= 70400\nIHJlZmVycmFscw== 70401\nIHNwZWN0YXRvcnM= 70402\nIFRvcw== 70403\naXNvcw== 70404\nSU1QTEVNRU5U 70405\nIGVudHJlcHJlbmV1cmlhbA== 70406\nIFNjb3V0cw== 70407\nIEFsb25l 70408\nYnJva2Vy 70409\nUHJvZHVjdElk 70410\nIEtvYmU= 70411\nIGNoYXVk 70412\nL2ZlYXR1cmVz 70413\nIHJvb21tYXRl 70414\nIFByb2plY3Rpb24= 70415\nYXZvdXJpdGVz 70416\nX0pPSU4= 70417\nIEFWQw== 70418\nX3BoeXM= 70419\nS2V5UHJlc3NlZA== 70420\nLDw= 70421\nIHVucmVhY2hhYmxl 70422\nIENpdGF0aW9u 70423\nW2NoYW5uZWw= 70424\nc3RhcnRzd2l0aA== 70425\nIEphZ3VhcnM= 70426\nLklzRmFsc2U= 70427\nbWVtYmVyc2hpcA== 70428\nQXR0ZW50aW9u 70429\nIHJlbW9kZWxpbmc= 70430\nIENpbmR5 70431\nIGNsaW5pY2FsbHk= 70432\nIG1pbGxlbm5pYWxz 70433\nIM60 70434\nIHJmbA== 70435\nZW5ldA== 70436\nIG9icmln 70437\nIHZvbHVudGVlcmluZw== 70438\nQ3JlZGl0cw== 70439\nCWFy 70440\nIHJlc2lzdGluZw== 70441\nIFByb2R1a3Q= 70442\nPT09Ig== 70443\nIGNvbmVjdA== 70444\nIHJpag== 70445\nINeU 70446\nIHB1YmxpY0tleQ== 70447\nIG95 70448\nIEJ1dHQ= 70449\nX21pc2M= 70450\nIEJlc3Rl 70451\nIFBMQw== 70452\nIOafpQ== 70453\nIEJveEZpdA== 70454\nIiIu 70455\nVGVzdEZpeHR1cmU= 70456\nIGNoYXR0ZXI= 70457\nIGRvb3J3YXk= 70458\neXNpemU= 70459\nINGH0YI= 70460\nSUNUVVJF 70461\nPScuLi8= 70462\nc2hvd24= 70463\nX3dlYXRoZXI= 70464\nIExvZ01hbmFnZXI= 70465\nXX0iCg== 70466\nIGNvbG91cmZ1bA== 70467\nIHJ1bW9yZWQ= 70468\nIGzDpQ== 70469\nIHByb2Jz 70470\nCWJ1aWxk 70471\nIOWmgg== 70472\nLnJldg== 70473\nIGludGVyY2VwdGVk 70474\nR2F5 70475\nTGlzdENvbXBvbmVudA== 70476\nIHBpw6g= 70477\nIkF0 70478\nIGFnYXI= 70479\nIEd1bmQ= 70480\nX0FFUw== 70481\n7IM= 70482\njpjsnbQ= 70483\nIGF1dGhvcmlzZWQ= 70484\nIENoYWxs 70485\nX2xvZ291dA== 70486\nY3Jvbg== 70487\nYXRlZ2llcw== 70488\ncGVyc2lzdGVudA== 70489\nIEFuZEFsc28= 70490\ndXN6 70491\nX3Jlc3RhcnQ= 70492\nIGRlY2lk 70493\nemY= 70494\nIHBhZ2luYXRvcg== 70495\nb2xsZXI= 70496\nIEhH 70497\nT3BhcXVl 70498\nc2VhdQ== 70499\nIE9NSVQ= 70500\nIFRoaWNrbmVzcw== 70501\nIEFpcndheXM= 70502\nX2RlbQ== 70503\neXRpYw== 70504\nIHByb3Rlc3RlZA== 70505\nIHVwcmlzaW5n 70506\nIHN1aW5n 70507\nIFNoZWxieQ== 70508\nLmVuZXJneQ== 70509\nIGFsbGVsZQ== 70510\nLWJpZw== 70511\nU3RyaW5nQnVpbGRlcg== 70512\nIHNpZGVsaW5lcw== 70513\nIFRV 70514\nX2Fp 70515\nLkhPUklaT05UQUw= 70516\nIHJhZ2luZw== 70517\nLnRvTG9jYWxl 70518\nLm11c3Q= 70519\neEZGRg== 70520\nLm5paA== 70521\nICd7fSc= 70522\n2YjYrw== 70523\nIHB1bG1vbmFyeQ== 70524\nIOWPkQ== 70525\nIG7Dum1lcm9z 70526\nIE5hcG9sZW9u 70527\nX01ldGhvZEluZm8= 70528\nbGFzdGluZw== 70529\nIGV4cG9zdXJlcw== 70530\nIGVtYmFyaw== 70531\nX3VkcA== 70532\nS2lkcw== 70533\nX0NPTk5FQ1RFRA== 70534\nIHdlZWRz 70535\nUE9PTA== 70536\nIGtyaWo= 70537\nIG51aXM= 70538\nSk5JRVhQT1JU 70539\nYWFhYWFhYWE= 70540\nIO2P 70541\n5Lu9 70542\nIHJlcGxlbg== 70543\nIFRyaWFscw== 70544\nd2FzaA== 70545\ncnV0 70546\nLWJlZm9yZQ== 70547\nX0FUVEFDSE1FTlQ= 70548\nVU5U 70549\nXFZhbGlkYXRpb24= 70550\nVG9u 70551\nIGhlYWRpbmdz 70552\nUHJvYmFibHk= 70553\nIGZhYnJpY2F0ZWQ= 70554\nU29ja2V0QWRkcmVzcw== 70555\nIGxldHRyZQ== 70556\nKSI+ 70557\nIHZhY2NpbmF0ZWQ= 70558\nOmh0dHA= 70559\nIGNvbmRvbA== 70560\nc2hlZA== 70561\nIFNwaWVsZQ== 70562\n44OU 70563\nRGVwbG95 70564\nLkNvbnRyYWN0 70565\nLWJv 70566\nIy8= 70567\nIGludGVyY2VwdGlvbg== 70568\nIGlzYm4= 70569\nIG1hbm5lcnM= 70570\nL2Fj 70571\nCUNoZWNr 70572\nX2Zn 70573\nIGVuZFBvaW50 70574\nX3dlYXBvbg== 70575\nIHVuaW50ZW50aW9u 70576\nIHF1aXRz 70577\nX01JQw== 70578\nYXBpcm8= 70579\nIGJhbGxvb25z 70580\nIGdyYWRz 70581\nbWFycmllZA== 70582\nIDwqPg== 70583\nIGRpc3RvcnQ= 70584\nX01FU1NBR0VT 70585\nIFBTQQ== 70586\nX1BE 70587\nYWxzZXg= 70588\nIERpYWxvZ3Vl 70589\nIHJlZ2lzdHJhdGlvbnM= 70590\nIE9yaWdpbnM= 70591\nIGZsYW5r 70592\nPzsKCg== 70593\nOwoKCgoK 70594\nXS0k 70595\nIERlc3M= 70596\nLlN0YXR1c0JhZFJlcXVlc3Q= 70597\nIGluaGFiaXRlZA== 70598\nIGdpbHQ= 70599\nIFNURENBTEw= 70600\nLnRoZXRh 70601\nJCQkJA== 70602\naWNsYXNz 70603\nQXBhcnQ= 70604\nLmxpc3RCb3g= 70605\nIEJlbGFydXM= 70606\nIGRlbmVu 70607\nIFN1c3NleA== 70608\nCWRlbA== 70609\nX0VD 70610\nbmVhcmVzdA== 70611\nXE9yZGVy 70612\nUGFja2FnZXM= 70613\nZm9ybWVybHk= 70614\nKe+8jA== 70615\n6LSj 70616\nU2V4eQ== 70617\nIGhvcnJvcnM= 70618\nUk9BRENBU1Q= 70619\nQXBwcm94 70620\nRGVzaw== 70621\nQU1FRA== 70622\nLk5vcm1hbGl6ZQ== 70623\nX3B1Ymxpc2hlZA== 70624\nIERlYm9yYWg= 70625\n56eR 70626\nIHBvdW5kaW5n 70627\nIEVzcGVy 70628\nIERhbmNpbmc= 70629\nIExPT1A= 70630\nIFJveWFscw== 70631\nIGluc3VyZQ== 70632\nIEludmVzdG9ycw== 70633\nIHRoZW9sb2dpY2Fs 70634\nQXBwb2ludG1lbnQ= 70635\nIGNhdGVnb3JpY2Fs 70636\nIGNyYW4= 70637\nVmFsaWRpdHk= 70638\nIHJlc3BvbmRlcnM= 70639\nICgpDQo= 70640\nZXBhZA== 70641\nQklUUw== 70642\nIExhbWJlcnQ= 70643\nc3VtbQ== 70644\nYWNpZGFk 70645\nIGxvZ2dlZElu 70646\nPVc= 70647\nLkxvY2FsaXphdGlvbg== 70648\ncmlkbw== 70649\nJyIpCg== 70650\nIFdlYlZpZXc= 70651\nbG90aA== 70652\nIHRlYXNlcg== 70653\nIENhbmQ= 70654\nIGVwaWxlcHN5 70655\nSW5jcmVhc2U= 70656\naXZpdHlNYW5hZ2Vy 70657\nZW50cmFudA== 70658\nVGVsZWZvbm8= 70659\nLmN1cnJlbnRTdGF0ZQ== 70660\nIE5vZWw= 70661\nICAgICAgICAgICAgCQk= 70662\nIGV4aGF1c3Rpb24= 70663\nZWxpYW4= 70664\nIGNvdmV0ZWQ= 70665\nLXByb2R1Y3Rpb24= 70666\nKHN0ZGlu 70667\nIHByZWZlcmFibGU= 70668\nIG9mZmVuZGluZw== 70669\nKGNvbW1pdA== 70670\nCWFs 70671\nIHJlbG9jYXRl 70672\nIGFub21hbA== 70673\nIERpc2Vhc2Vz 70674\nIEZvcmc= 70675\nIFdJRkk= 70676\nIEtpbGxpbmc= 70677\ncXY= 70678\nIGZtYXA= 70679\nIGxsZXZhcg== 70680\ndGl0cmU= 70681\nLmVtcA== 70682\nLCRf 70683\nYXZy 70684\nQ2FuQmU= 70685\nX21h 70686\nIEhhd2tpbnM= 70687\nX1JPVVQ= 70688\nIGxvYWRJbWFnZQ== 70689\nIFdhaA== 70690\nIERlbXM= 70691\nIGluZGVudGF0aW9u 70692\ncHJlY2F0aW9u 70693\nIOaWh+S7tg== 70694\nIEJ1ZGFwZXN0 70695\nIHV0Yw== 70696\nKGhvdXJz 70697\nIHRyYW5ueQ== 70698\nQW5z 70699\nennEhw== 70700\nLnZlaGljbGU= 70701\nQ29pbnM= 70702\nIEJyYXVu 70703\nCVJlc3BvbnNl 70704\nIHZyaWo= 70705\nIHN0cmFuZ2VseQ== 70706\nIEZhc2M= 70707\nXFNlc3Npb24= 70708\nTW91c2VMaXN0ZW5lcg== 70709\nIFJvbGxz 70710\n4bqnbg== 70711\nLmdycGM= 70712\nSW50ZWdlckZpZWxk 70713\nCWFmeA== 70714\nRG9ja0NvbnRyb2w= 70715\nJVw= 70716\nJTsi 70717\nIGdpZ2c= 70718\nIGJvcnJvd2Vy 70719\nIGRpc3BvbmlibGVz 70720\nX1JFQ1Q= 70721\nIFRoaW4= 70722\nIHBlYXJs 70723\neEZC 70724\nIHJpcHBsZQ== 70725\nIGtIeg== 70726\nLmFjcXVpcmU= 70727\nYmlvcw== 70728\ndGFibGVGdXR1cmU= 70729\nL2FudGxy 70730\nb3JhY2xl 70731\nIEFSRUE= 70732\nIGludGVuc2VseQ== 70733\nIHByb3RvYnVm 70734\nIExFTkc= 70735\nIEhlYWRxdWFydGVycw== 70736\nYXRoZWQ= 70737\nTWluZA== 70738\naW5peg== 70739\nCVBhdGg= 70740\nWE1MTG9hZGVy 70741\nIGFsbG9jYXRpb25z 70742\nLnNsb3Q= 70743\nUHJvY0FkZHJlc3M= 70744\nIHJvbGVJZA== 70745\nOyc7Cg== 70746\nIEJSRUFL 70747\nIFBlcmZvcm1pbmc= 70748\nLk9yZGluYWxJZ25vcmVDYXNl 70749\nLWds 70750\nOmg= 70751\nIGRvd25sb2FkYWJsZQ== 70752\nIFN1YnNjcmliZXI= 70753\nYW5zZQ== 70754\nIGNoYXJhY3Rlcml6ZQ== 70755\nIHNocnVnZ2Vk 70756\nIHNjcA== 70757\nIGd1c3Rh 70758\nIG1ldGFsbA== 70759\nIGxhYm9yYXRvcmllcw== 70760\nIFhpbg== 70761\nIE1vdG9yY3ljbGU= 70762\nIGVnZXQ= 70763\nIGZpbmFuY2Vk 70764\nIE1PRElGWQ== 70765\nKlI= 70766\nQWk= 70767\nIGV4dHJlbWlzbQ== 70768\nIEhhbGlmYXg= 70769\nIHZhbW9z 70770\nJG51bQ== 70771\nIGltcGFydA== 70772\nYnJpY2s= 70773\nIOexuw== 70774\nIGZ1ZXJh 70775\nIFJPTEU= 70776\nLkNvbmN1cnJlbnQ= 70777\nX09QRVJBVE9S 70778\nIGN5bmljYWw= 70779\nIFJlZ2luYQ== 70780\nZ2V0RXJyb3I= 70781\n2KM= 70782\nYnN1Yg== 70783\nSmFwZ29sbHk= 70784\nIGluaGliaXRvcg== 70785\nSnVzdGljZQ== 70786\n44U= 70787\nTmV2ZXJ0aGVsZXNz 70788\nLXNlbQ== 70789\nLm9nZw== 70790\ncmVxdWVudA== 70791\nIG5vc3Nv 70792\nSGFpcg== 70793\nLkxpYnJhcnk= 70794\nbWRpcg== 70795\nIGhhcmk= 70796\nIFRhcmE= 70797\nIFBvcnRv 70798\nbmV0aW5ldA== 70799\nIGFsbGlhbmNlcw== 70800\nZWxsc2NoYWZ0 70801\nX1N1cmZhY2U= 70802\nCVZpZXc= 70803\nYXR1cmRheXM= 70804\nIHBvcGNvcm4= 70805\nX1BBUlNF 70806\nIFJpcHBsZQ== 70807\nIHBoYW50b20= 70808\nIG1vbmRv 70809\nLmNyZWF0ZUNsYXNz 70810\nIEtvcmVhbnM= 70811\nIGZhc2U= 70812\nIFdvY2hlbg== 70813\nIEVxdWlw 70814\nLWVpZ2h0 70815\nIFN0YXRlbWVudHM= 70816\nIGFkYXB0aW5n 70817\nUHJlY2lv 70818\nIEN1cmU= 70819\nIGNhbWJpYXI= 70820\n5rCR 70821\nIGhleGFkZWNpbWFs 70822\nc3BpcmFjeQ== 70823\nYmlsdA== 70824\nIFl1Zw== 70825\nIC0tLT4= 70826\nIFBQQw== 70827\naXN6 70828\nYWtlRnJvbU5pYg== 70829\nIERpc3A= 70830\nIEF0aGxldGljcw== 70831\nIG5pZ2h0Y2x1Yg== 70832\nR09PRA== 70833\nLnNldEdlb21ldHJ5 70834\nK1s= 70835\nL3NlbmQ= 70836\nIGJpbmFyaWVz 70837\nIHLDoXA= 70838\nOnJlcQ== 70839\nLWNvbnN1bWluZw== 70840\nZXJ0aW1l 70841\nVVBEQVRFRA== 70842\nX251bGxhYmxl 70843\nVklO 70844\ndWxpYQ== 70845\nY3lhbg== 70846\nIG1pc3VuZGVyc3RhbmRpbmc= 70847\nb3JpY2Fs 70848\nZGVncmVlcw== 70849\nTGVhZGluZw== 70850\nLkFS 70851\naWNrZXN0 70852\nTnVldm8= 70853\ndWZvcmlh 70854\nIGdvb2RpZXM= 70855\nIGZvcmVz 70856\nKCk8PCI= 70857\nYWRlbWlj 70858\nQWN0aW9uQ3JlYXRvcnM= 70859\nc2VydmVybmFtZQ== 70860\nKG50 70861\nZGJDb250ZXh0 70862\nIGFpcmJvcm5l 70863\nIGV4aGliaXRpb25z 70864\nY2VsZQ== 70865\nIHRlbGE= 70866\nPE1vdmll 70867\nKCd7fQ== 70868\nRXhwbGFuYXRpb24= 70869\nIGhPYmplY3Q= 70870\nIGJlYXJlcg== 70871\nZW5zaWJseQ== 70872\nbmlw 70873\nIEplcm9tZQ== 70874\nIENa 70875\nIGRhdGVGb3JtYXR0ZXI= 70876\nw6ljaWFs 70877\nU2V0TmFtZQ== 70878\nb3VjZQ== 70879\nIHJlZ3Jlc3M= 70880\nJkM= 70881\nKCkiPg== 70882\nLnNldFByZWZlcnJlZFNpemU= 70883\nIE1JRA== 70884\nIEFsZXNz 70885\nIGhvcnNlcG93ZXI= 70886\nIGF0bQ== 70887\nIFBhY2thZ2luZw== 70888\nIGNpcGhlcnRleHQ= 70889\nUmVxdWVzdE1ldGhvZA== 70890\nIGJlaWRlbg== 70891\n6KM= 70892\nIFBPVw== 70893\nLldyaXRlSGVhZGVy 70894\nZGlyZWN0b3I= 70895\nLWJ1dA== 70896\n44Gg44GV44GE 70897\naW5jZXI= 70898\nX2Ru 70899\nISEhISE= 70900\nIG1hbnVmYWN0dXJlcw== 70901\nLlRleHRVdGlscw== 70902\nIGNvbnNjaW91c2x5 70903\nIGJvdW5jZWQ= 70904\nY3VsdHVyZQ== 70905\nIFNwYXI= 70906\nIFBpcGVy 70907\nLnByZXNz 70908\nLW93bmVy 70909\nIGV2YWx1YXRvcg== 70910\nIFNUUkVBTQ== 70911\nLlBpY3R1cmVCb3hTaXplTW9kZQ== 70912\nIHN1Z2Fycw== 70913\nU2NyZWVuV2lkdGg= 70914\nIG5leHRTdGF0ZQ== 70915\nIGl2b3J5 70916\nIGJydW5jaA== 70917\nZGVuc2l0eQ== 70918\nX09X 70919\nIENvcm9uYXZpcnVz 70920\nIENGUg== 70921\nYmFr 70922\nXENhdGVnb3J5 70923\n5pWw57uE 70924\nIGludm9rZXZpcnR1YWw= 70925\nfSgpCg== 70926\nIHN1amV0 70927\nLW1hcmtlcg== 70928\naXNkaWdpdA== 70929\nIE1vYmls 70930\nIEpzb25SZXF1ZXN0QmVoYXZpb3I= 70931\nX1JFTU9URQ== 70932\nLmV4aXN0c1N5bmM= 70933\nIHJpY2hlcw== 70934\nLnByZXNlbnRlcg== 70935\nIGdsQ29sb3I= 70936\nIGhhbnlh 70937\nIGZvcnRyZXNz 70938\nIGZsYXNoZWQ= 70939\ndml6 70940\ncmVxdWVudGx5 70941\nYnVhdA== 70942\nJGNvbg== 70943\nPnw= 70944\nLkZ1bmM= 70945\nIGh1bW9yb3Vz 70946\ndWVt 70947\nLlpFUk8= 70948\nIFNUTA== 70949\nIEJ1aw== 70950\nL3NhbXBsZQ== 70951\nIEdyb3M= 70952\nUmVjaXBlcw== 70953\nIGluZmxhdGVk 70954\nIHN3dW5n 70955\nOkY= 70956\nRmFjaW5n 70957\nLlRoZW1l 70958\n0L3QuNC6 70959\nIHNwbGVuZGlk 70960\nIHJlcXVlc3RJZA== 70961\nLkNlbnRlclNjcmVlbg== 70962\nL2F1dG9sb2Fk 70963\nZW1iZWRkZWQ= 70964\nX2RlcGFydA== 70965\nIFBvcnRz 70966\n4LmD 70967\n0LDQudC0 70968\nZGlzY3Vzc2lvbg== 70969\nX2NvbnN1bQ== 70970\nIHNjb3V0cw== 70971\nIGNvbGFib3I= 70972\nLlN0YWdl 70973\nLm5hbm8= 70974\nZWxkb3Jm 70975\nIGdlbWFjaHQ= 70976\nICAgICAgICAgICAgICAgICAgICAgICAgICAK 70977\nIHBvbGljeW1ha2Vycw== 70978\nX1BLVA== 70979\nLFRo 70980\nb2t5 70981\nX1VJRA== 70982\nUGluZw== 70983\nIG9yY2hlc3Q= 70984\nIG9wdGljcw== 70985\ndWhhbg== 70986\nIFhPUg== 70987\nIGVzcGHDsW9s 70988\nIEFkaWRhcw== 70989\ncm5n 70990\nbWFucw== 70991\nLnZzdGFjaw== 70992\nIGdldGF3YXk= 70993\nIGhpZXJhcmNoaWNhbA== 70994\nYW5vaWE= 70995\nIEJpdG1hcEZhY3Rvcnk= 70996\ncmVhbG0= 70997\nCWFw 70998\nX2FwcHM= 70999\nLWRpdmlkZXI= 71000\nLmRyYXdlcg== 71001\nIEhBUkQ= 71002\nJ107Pz4K 71003\nLXBhY2tlZA== 71004\n5rK7 71005\nX1NUUlVDVFVSRQ== 71006\nW1k= 71007\naVBhcmFt 71008\nKGVx 71009\nIGVuY29tcGFzc2Vz 71010\nIFwKCg== 71011\nLT5b 71012\nJnV0bQ== 71013\nZ3JvdXBvbg== 71014\nc3RyYXRl 71015\nRFk= 71016\nb21vcnBoaWM= 71017\nJzpb 71018\nIGdyYXZpdGF0aW9uYWw= 71019\nIE1pY2hh 71020\nIFRlbmNlbnQ= 71021\nIGNvYWNoZWQ= 71022\n7Lac 71023\n0YPQvNC10L3Rgg== 71024\nL21vYmlsZQ== 71025\nTW91c2VEb3du 71026\nYnVk 71027\nIFlhcw== 71028\nIFByb3ZpZGVycw== 71029\nTlo= 71030\nCXJlcG9ydA== 71031\nZXJybXNn 71032\nIGltYWdlUGF0aA== 71033\nYWN0ZXJpYWw= 71034\nIE1hbmdh 71035\nd2lja2x1bmc= 71036\nKHVzdWFyaW8= 71037\nIikpOw0KDQo= 71038\nLyoqKg== 71039\nIG9yZ2FuaXNl 71040\nSW5kZXhlZA== 71041\nX1FVQUw= 71042\nKFB5T2JqZWN0 71043\nIHN1cnJlbmRlcmVk 71044\nUE9DSA== 71045\nIE5PVEVT 71046\nXFwi 71047\nLWpvYg== 71048\nIHNldmVudHk= 71049\nIyMjIwo= 71050\nIE1hbm9y 71051\nIGRvd25yaWdodA== 71052\nIHRpbWVmcmFtZQ== 71053\naW5zdXJhbmNl 71054\nY2hlY2tlcg== 71055\nIFNFQ1JFVA== 71056\nIGVjaG9lcw== 71057\nIENhcm1lbg== 71058\nLnNldEhvcml6b250YWxBbGlnbm1lbnQ= 71059\nIGlzQ2hlY2tlZA== 71060\nIFRPUg== 71061\nX25u 71062\nKCco 71063\nRmV0Y2hSZXF1ZXN0 71064\nIFByaW50ZWQ= 71065\nRmx1aWQ= 71066\nIFNUQUNL 71067\nR0VT 71068\nYWlnbmVk 71069\naWdvcg== 71070\nLlVua25vd24= 71071\nQ0JD 71072\nIENhcmxzb24= 71073\nLlVSSQ== 71074\nIHBsaWdodA== 71075\nL3N0YXJ0 71076\nIFBlcnNvbm5lbA== 71077\nIFBSRUZJWA== 71078\nLCoq 71079\nIGxpbWl0ZQ== 71080\nX2hlYXQ= 71081\nJe+8jA== 71082\nIERvbm5l 71083\nZ2V0Tm9kZQ== 71084\nIFNjaWVudG9sb2d5 71085\nIGNvbWV0 71086\nIHdlbmln 71087\nQXNpZGU= 71088\nIE1QRUc= 71089\nJz8= 71090\ndmFyaWFibHk= 71091\nLmVuZERhdGU= 71092\nIHVuY29udA== 71093\nIFNjb3Jlcw== 71094\nIExvZ2luRm9ybQ== 71095\nLmdlbmVyYXRlZA== 71096\nLGNo 71097\nLW1hcg== 71098\nIE5lZA== 71099\nIGV2ZW50SWQ= 71100\nK3A= 71101\nIFNJTg== 71102\nL3Jlc2V0 71103\nLlJFQUNU 71104\nIE1lc3Np 71105\nX1JBTks= 71106\nLndyaXRlRmlsZQ== 71107\nIGNyaXBw 71108\nZXN0aGV0aWM= 71109\nRVJTSVNU 71110\nIHJlaW1idXJzZW1lbnQ= 71111\nQ3VycmVudFZhbHVl 71112\nIHVuaW4= 71113\nRG93bkxhdGNo 71114\nIHBhZGRpbmdSaWdodA== 71115\nIHN0b2NrZWQ= 71116\nLycu 71117\nIHJlcGF5bWVudA== 71118\ndHJhaw== 71119\nL2JhY2tlbmQ= 71120\nINC40LfQvNC10L0= 71121\nQ1NS 71122\nIHByZXZlbnRpdmU= 71123\nIHBhbnRhbGxh 71124\nX3RyaW0= 71125\nUGVkaWRv 71126\naG9zcGl0YWw= 71127\nIG1hbmFnZWFibGU= 71128\ncm91dGVQYXJhbXM= 71129\ndGV4dHVyZXM= 71130\nLi4uLi4uCgo= 71131\nIHPDqWxlY3Rpb24= 71132\nTmFtZVZhbHVlUGFpcg== 71133\nIHBvbGx1dA== 71134\nTW9kZXM= 71135\nIExhdWQ= 71136\namF5 71137\nIFVycw== 71138\nIHNpZ25lcg== 71139\nIEpK 71140\nIENoZXJva2Vl 71141\nX0VYSVNUUw== 71142\nIGR3YXI= 71143\nICgkKCcj 71144\nIHJlZWY= 71145\nPnsk 71146\nIEJheWxvcg== 71147\nIE1vZGVsU3RhdGU= 71148\nLV8= 71149\nIFN0cnVjdHVyZXM= 71150\nIHNvdXZlbnQ= 71151\nU3BlY2lmeQ== 71152\nKHBpcGU= 71153\nIGZyYWNraW5n 71154\nIEdQQQ== 71155\nIGJlbGU= 71156\nCQkJCQkJCSAgIA== 71157\nIE1pbm9yaXR5 71158\nIHR1ZA== 71159\nIG9wZW5uZXNz 71160\nIElsbHVzdHJhdGVk 71161\nIG94aWRhdGlvbg== 71162\nIE5L 71163\nCVVwZGF0ZQ== 71164\nIEVNUw== 71165\nIFRlZGR5 71166\nIGdlbmVyYWxz 71167\nCU1hdA== 71168\nIHJhZGlvcw== 71169\nIEFudGlxdWU= 71170\nY29ub215 71171\nIFNxdWFkcm9u 71172\nKScsJw== 71173\n5aOw 71174\nIHlvdXJl 71175\nIE1haW5QYWdl 71176\nIGJlaGF2aW91cnM= 71177\nZW5naHQ= 71178\nKEAiJUAiLA== 71179\nIHRlc3RjYXNl 71180\nIENvbXBpbGF0aW9u 71181\nIGZsYXZvdXJz 71182\nIEV4dGVuZA== 71183\naWxsYXRvcg== 71184\nIGNvaA== 71185\nIHNwbGluZQ== 71186\nIEtH 71187\nLXBheQ== 71188\nIGNvbW11bmlzbQ== 71189\nIEJ1c2luZXNzZXM= 71190\nb2NraW5n 71191\nLk1heExlbmd0aA== 71192\nYXNzYW5kcmE= 71193\ncXVpcmluZw== 71194\nYWRkZW4= 71195\nIEplYg== 71196\nX2ZhdWx0 71197\nW2ZpbGU= 71198\nIHByb21pbmVuY2U= 71199\nZGlzY2lwbGluYXJ5 71200\n4oCUdGhleQ== 71201\nX2V4dGVudA== 71202\nIFZJQw== 71203\nIGVudGFpbHM= 71204\nLnBhcnRuZXI= 71205\nIGhpcHBvYw== 71206\nTGVhZ3Vl 71207\n55S3 71208\nd2lwZQ== 71209\nLXNwaW5uZXI= 71210\nIHNhbHV0ZQ== 71211\nIFN1cmdpY2Fs 71212\nKG91dHB1dHM= 71213\nd29ya2Vk 71214\nW3N0cmxlbg== 71215\nYXBwb2ludGVk 71216\nIEhlZw== 71217\nIEFDUEk= 71218\nKFte 71219\ndWFsYQ== 71220\nX3RvbA== 71221\nIFJpdA== 71222\nLlBheW1lbnQ= 71223\na293c2tp 71224\nIHdhbG1hcnQ= 71225\ncmVxdWlyZW1lbnRz 71226\nIEZJTlNFUQ== 71227\nX0JBQ0tHUk9VTkQ= 71228\nIE9zYm9ybmU= 71229\nKGVycm9yTWVzc2FnZQ== 71230\nUmVwb3J0aW5n 71231\nIGF1Y3Rpb25z 71232\nIGNvbWJvcw== 71233\nIE5vdGljZWQ= 71234\nX29jdA== 71235\nIHByaW1lcm8= 71236\ndGFpcmU= 71237\nX2hy 71238\nINC80L7QtA== 71239\nIGNvbnRyYWRpY3Rvcnk= 71240\nPSJA 71241\nYWNoaW5lcw== 71242\nKG9wdGFyZw== 71243\nIFBlbmd1aW4= 71244\nIEFiYmFz 71245\nIHN1YmxpbWU= 71246\nIHBhZ2VhYmxl 71247\nIERlZmVuc2l2ZQ== 71248\nIGRpc3RpbmN0bHk= 71249\nIEF1dG9tYXRpY2FsbHk= 71250\nVW5kZXJzdGFuZGluZw== 71251\nRXF1YWxpdHlDb21wYXJlcg== 71252\nZ290YQ== 71253\nICI6Og== 71254\nIHB1bHZlcg== 71255\nIEJhdHRsZXM= 71256\nIHVucGFyYWxsZWxlZA== 71257\nVENIQQ== 71258\nIGNvbnN0cnVlZA== 71259\nLWFmZg== 71260\nIHByZWN1cnNvcg== 71261\nLWxmcw== 71262\nIG1hZHVyYXM= 71263\nIERhaXN5 71264\nIEFyYmVpdHM= 71265\nLk1hbmFnZW1lbnQ= 71266\nCUlu 71267\nIHJvYmVz 71268\nIHNww6lj 71269\n4oCcKA== 71270\nIG1hdGVybml0eQ== 71271\nZXh0ZW50 71272\nIFNwYWNlcg== 71273\nRGlkQXBwZWFy 71274\nCXVz 71275\nLmdldFJlcXVlc3REaXNwYXRjaGVy 71276\nKGNvbHM= 71277\nIHBsdW1tZXQ= 71278\n7IU= 71279\nIHsKCgoK 71280\nw6lyaWNh 71281\nIFNpemVz 71282\nLmVudW0= 71283\nLkhpZ2hsaWdodA== 71284\nICEhfTwv 71285\nQVRURVJZ 71286\nIFNvcm9z 71287\nR0xmbG9hdA== 71288\n44KE 71289\nIEplbm5pbmdz 71290\nPz8KCg== 71291\nIFJvbWVv 71292\nID8+CgoK 71293\nV2Vubg== 71294\nIGNsaW1heA== 71295\nIGNyZW0= 71296\nX3RoYXQ= 71297\nW+KApg== 71298\nX2RvbWFpbnM= 71299\nX1JFUExZ 71300\nIGNvbXBsZXRh 71301\nVkVTVA== 71302\nX3BhcnRpY2xl 71303\nIHNvcA== 71304\nIGZhdGFsaXRpZXM= 71305\naW1wbGlmeQ== 71306\nIFNLRg== 71307\nIGluZnVzaW9u 71308\nIEphdmllcg== 71309\nIGJhbGxldA== 71310\nIGFtaWdv 71311\nLndhbnQ= 71312\nIGNvbGxhZ2Vu 71313\nIExhd3llcg== 71314\nLlN0YXRlbWVudA== 71315\nLnJ0 71316\nYmFhcg== 71317\nRW5kUG9pbnQ= 71318\nIEJlaw== 71319\nU0hJUA== 71320\nIHBhdHJpYXJjaA== 71321\nIEF1bnQ= 71322\nX1RN 71323\nIG3DrW4= 71324\nIG1hc3RlcmVk 71325\nV1hZWg== 71326\nIGVzcG9z 71327\nPWxvZ2dpbmc= 71328\nIHJpZ2h0ZW91c25lc3M= 71329\ndG9ycmVudA== 71330\nIGJzdA== 71331\nX0NIQUlO 71332\nIG91dHNraXJ0cw== 71333\nKHJvdGF0aW9u 71334\nICcuJyk= 71335\naWdyYW50cw== 71336\nK2xzaQ== 71337\nIENDVFY= 71338\nX1BIQVNF 71339\nLmF6dXJl 71340\nX1Byb2Nlc3M= 71341\ndmFl 71342\nIFRyb3BpY2Fs 71343\nIEFua2FyYQ== 71344\naW1hZ2VWaWV3 71345\nX1JVTk5JTkc= 71346\nICopX18= 71347\n4bq/bg== 71348\nKGNsaQ== 71349\nc2NhdHRlcg== 71350\nIHNjaGU= 71351\nUmVnaXN0cmFy 71352\nIGFpcmluZw== 71353\nIHB5cGxvdA== 71354\naXNpw7Nu 71355\nL2N1c3RvbWVy 71356\nIHNpbXBsZW1lbnQ= 71357\nIGNsYXNzeQ== 71358\nIERXQw== 71359\nIEJhc2hhcg== 71360\nIERFVkVMTw== 71361\nIFZpY2s= 71362\nYXZhaWw= 71363\nIEjDtg== 71364\nX2V4dGVuZA== 71365\nZHJGYw== 71366\nLmlzTm90Qmxhbms= 71367\nIHBsYWlz 71368\nfH0K 71369\nIHBvcm5vZmls 71370\nbGFicw== 71371\nIGhhdXM= 71372\nIG9yaWdpbmF0aW5n 71373\nIHN1cnJvdW5kcw== 71374\nIFFVQUw= 71375\nbWVn 71376\nL2xvZ2dlcg== 71377\nW29iag== 71378\nIGlycmVzcG9uc2libGU= 71379\nIFB1YmxpY0tleQ== 71380\nSE9ORQ== 71381\nOicv 71382\naWJveA== 71383\nIEZWZWN0b3I= 71384\nfHsK 71385\nYXRhbG9hZGVy 71386\naGF3a3M= 71387\nSERS 71388\nIGVzY2FsYXRpb24= 71389\nIFBvZHNEdW1teQ== 71390\nZWxpdGU= 71391\nIHByZXN1cA== 71392\nQ2FjaGVk 71393\nPkc= 71394\nLm9wdGltaXplcg== 71395\nIFZpc2libGU= 71396\ntIA= 71397\nIG5lbg== 71398\nIHBjcw== 71399\nIElkbGU= 71400\nW0FueQ== 71401\nIGtleWJvYXJkcw== 71402\nIENPTVBPTkVOVA== 71403\nIHRpdGFuaXVt 71404\nKG11dA== 71405\nIExlZGdlcg== 71406\nIHByb3NwZXJvdXM= 71407\nZXRyb2ZpdA== 71408\nX0xM 71409\nX3BhdGllbnQ= 71410\nIHBkYXRh 71411\nIGtvbnRha3Rl 71412\nU3dpcGU= 71413\nIGNoZWVyZnVs 71414\nIEhvbmR1cmFz 71415\nIl1bJA== 71416\nIGhlbW9ycmg= 71417\nIjoiKw== 71418\nIGxlYXNpbmc= 71419\nIGluc3RhbGxz 71420\nIFBheA== 71421\nIExvZ2lzdGljcw== 71422\nIGtpbmV0aWM= 71423\nIFBob24= 71424\nX21vdmVtZW50 71425\nCWJ5dGVz 71426\nIGNpbmNv 71427\nIE1hZG5lc3M= 71428\nIikr 71429\nIEpF 71430\nX2lq 71431\nU2NlbmVNYW5hZ2Vy 71432\nIEJ1c3Q= 71433\ncHRlc3Q= 71434\nYWVh 71435\nIGJlc3Nlcg== 71436\nw61n 71437\n0LTQuNC9 71438\nKHRhc2tz 71439\nKCIoIg== 71440\nc2V0VHlwZQ== 71441\nKG91dGZpbGU= 71442\nCXJlc2V0 71443\nIEFSQw== 71444\nIG3DunNpY2E= 71445\nIFNoZWxm 71446\nIG1pblk= 71447\ncGNo 71448\nIHdlaWJlcg== 71449\naXNzb3I= 71450\nIHRyb3V2ZQ== 71451\nCUJ1dHRvbg== 71452\nIHJlZ2VuZXJhdGVk 71453\nxaNp 71454\naW1hY2hpbmVyeQ== 71455\nYmxvY2tpbmc= 71456\nLmRhdGFUYWJsZXM= 71457\nX2ZyYWM= 71458\nIEFkdmFudGFnZQ== 71459\nLnZpc2l0TWV0aG9k 71460\n6YeN5paw 71461\nIGV4dHJhcG9s 71462\nIHRlYXNpbmc= 71463\nIEhpdGNo 71464\nIEdlZWs= 71465\nRVNDTw== 71466\nIHdpY2g= 71467\nCWF4 71468\nX2RlY29y 71469\nIHNjcmVlbldpZHRo 71470\nIFNvcGhpYQ== 71471\nRm9yZ290 71472\nLnVuaQ== 71473\nIFZlbnR1cmU= 71474\nX2NvbGxpc2lvbg== 71475\nIGxhd21ha2Vy 71476\nKEVkaXQ= 71477\nYmxlcnM= 71478\nIGdldE5leHQ= 71479\n4oCUeW91 71480\nTWVkaWFQbGF5ZXI= 71481\nIEhvcmRl 71482\nIENvbmdyZXNzbWFu 71483\nb2JzZXJ2YXRpb25z 71484\nCXByb3BlcnR5 71485\nIDwtLQ== 71486\nQ3JlYXRlZEF0 71487\ndWJ5dGU= 71488\nIHF1YXJhbnRpbmU= 71489\nIGRpc3RyZXNzZWQ= 71490\nX0FQQg== 71491\nIEdvb2RtYW4= 71492\n44Kr 71493\nIHJlY29tZW5k 71494\nX1BSSU5URg== 71495\nRE9ORQ== 71496\nQmluZGFibGU= 71497\ncnN0cmlw 71498\nY2VudGFqZQ== 71499\nIFVuZXhwZWN0ZWQ= 71500\nIFNDSE9PTA== 71501\nIFByb2Zlc3Npb25hbHM= 71502\nIEdQVXM= 71503\nTGVzc29u 71504\nRXhjbHVzaXZl 71505\nIGF0cmF2 71506\nIERhbms= 71507\nIExhd3llcnM= 71508\nIFdhbHRvbg== 71509\nPltd 71510\nIGFsb3Vk 71511\nPSIuLi8uLi8uLi8= 71512\nIGRlYmF0aW5n 71513\nIEFWRw== 71514\nX1ZPTA== 71515\nL2NnaQ== 71516\nLmRlZw== 71517\nOmc= 71518\nLkluZm9m 71519\nTWVhc3VyZVNwZWM= 71520\nLnNvbmc= 71521\nbXRyZWU= 71522\ndWxscw== 71523\nSm9yZGFu 71524\nIENvdmVycw== 71525\nIGF0dHJpYnV0YWJsZQ== 71526\nIGplZGlz 71527\naWF0cmljcw== 71528\nIHJvdHRlcmRhbQ== 71529\nIG1lbGQ= 71530\nIENvbnRlbnRUeXBl 71531\nIG1hbnRsZQ== 71532\nIGFsaWNl 71533\nX2R1cGxpY2F0ZQ== 71534\nL0ludGVybmFs 71535\nIGZpbGVzaXpl 71536\nCWZpcmU= 71537\ncmVzZQ== 71538\nb25kZXJl 71539\nIGZhbWlsaWFyaXR5 71540\nIENyZXN0 71541\nIGthcm1h 71542\nIHRvcmlubw== 71543\nIG1lc2E= 71544\nL3RlbXA= 71545\nIGNoaXI= 71546\nIE92ZXJmbG93 71547\nIHRlbmVtb3M= 71548\ndW5paw== 71549\nTkVYVA== 71550\nQWxsZQ== 71551\nIG54dA== 71552\nTWFydA== 71553\nIGF0bA== 71554\nIHBlcmlvZG8= 71555\nX3lvdQ== 71556\nIH0pKS4= 71557\naW50ZXN0aW5hbA== 71558\nLkFkYXB0ZXJWaWV3 71559\nIGhlc2l0YW50 71560\nIGNvbXBhcmF0aXZlbHk= 71561\nLlVJbnQ= 71562\nKHZpZXdNb2RlbA== 71563\nIHNhbmdhdA== 71564\nIFJlc3BvbnNpdmU= 71565\nIFphY2s= 71566\n4oU= 71567\nSkFWQQ== 71568\nIEZ1bGxlcg== 71569\nIOKdpA== 71570\nLkNvbnN1bWVy 71571\nIGFuaw== 71572\nIHJlYWN0b3Jz 71573\nZnVjaw== 71574\nX3JhdA== 71575\nIHNlc3Npb25GYWN0b3J5 71576\nX2JhY2t3YXJk 71577\nIHNjcmFtYmxlZA== 71578\nCXRo 71579\nIGluc2Vuc2l0aXZl 71580\nIGNoYW1wcw== 71581\nIG5naW54 71582\nIGNvbmhlYw== 71583\nIEphc3Blcg== 71584\nLmZt 71585\nU3RyaWN0RXF1YWw= 71586\nYWNoc2Vu 71587\nLU5vdg== 71588\nbGFzc2Vu 71589\nLmludGVncmF0aW9u 71590\nKGxibA== 71591\nQ29tcG9zZQ== 71592\nIEZvbg== 71593\nw5o= 71594\nR3JhdGlz 71595\nIExpbWU= 71596\nIEFkYXB0ZXJWaWV3 71597\nIHBvaXNvbmVk 71598\nYW5jaG9ycw== 71599\n6K6+6K6h 71600\nJ10/PiI= 71601\nIHByb2N1cg== 71602\nSXRhbHk= 71603\nLk1PTlRI 71604\nIExVQQ== 71605\nIExpdGh1YW5pYQ== 71606\nIEhlYWRz 71607\nX0NIVU5L 71608\nIFBVU0g= 71609\nQXNwZWN0UmF0aW8= 71610\nIHdlZw== 71611\nIHZpZHM= 71612\nIFdlaW4= 71613\nCUlOVA== 71614\nc2Vzc2lvbklk 71615\nSW5kdXN0cnk= 71616\nIGRlbm91bmNlZA== 71617\nSktMTQ== 71618\nIFZhbmVzc2E= 71619\nLklkZW50aWZpZXI= 71620\ncHJvcHJp 71621\nINC40LM= 71622\nIHTDqWNu 71623\nIG1vc2FpYw== 71624\nU3RyZWFtUmVhZGVy 71625\nLVRo 71626\nZm9ydGg= 71627\nIGFkaGVyZW5jZQ== 71628\nYmF0ZQ== 71629\nIGtuaWdodHM= 71630\nc291bmRz 71631\nIHNhbGxl 71632\nT01FVA== 71633\n44K544OI 71634\nLXRt 71635\nIFJoZQ== 71636\nLkZpbGVPdXRwdXRTdHJlYW0= 71637\n5YiG57G7 71638\nIEVORw== 71639\naG9saWRheQ== 71640\nIENvbmdyYXR1bGF0aW9ucw== 71641\nKSgK 71642\nIGFnZ3JlZ2F0ZXM= 71643\nSE9PSw== 71644\nZXdpcmU= 71645\nU2VuYXRvcg== 71646\nIGVtYmVkZGluZ3M= 71647\nZXB5 71648\nKENPTQ== 71649\nIHJvYmJlcg== 71650\nw6R0ZXI= 71651\nd2FuZw== 71652\nX3RlYWNoZXI= 71653\nIHJlc2VudG1lbnQ= 71654\nIGxldHR1Y2U= 71655\nZXJyZXVy 71656\nKGlj 71657\nIFRhY3RpY2Fs 71658\nIENvbnRyYWN0cw== 71659\nIG3Dpm5k 71660\nIHNpdGlvcw== 71661\nIGJhc3RhbnRl 71662\nIG51ZXZvcw== 71663\nCU5kckZj 71664\nIHByaXZhdGVLZXk= 71665\ndWNjaA== 71666\nTU1kZA== 71667\nIOi+k+WHug== 71668\ndW1iYQ== 71669\nQGZvcmVhY2g= 71670\nOiIpOwoK 71671\nIHNsaXBwZXJ5 71672\nIEtleXN0b25l 71673\nIHBpb25lZXJpbmc= 71674\nX3RyaWFuZ2xl 71675\nKCIK 71676\nCQkJCQkJCQkgIA== 71677\nIEludGVydmVudGlvbg== 71678\nU0NJ 71679\nIGNKU09O 71680\nIHRlcm1pbmF0aW5n 71681\n67mE 71682\nIGJhYnlz 71683\nU3Vic2V0 71684\nIOuh 71685\nIHNldWxlbWVudA== 71686\nIG11ZXN0cmE= 71687\nRW50cmU= 71688\n5Lul5LiK 71689\nbmdv 71690\nImJ5dGVz 71691\nUVJTVA== 71692\nIHlwb3M= 71693\ncGVyc29uYQ== 71694\nIERlcGxveQ== 71695\nY2Vl 71696\nIOCu 71697\nLmdvYWw= 71698\nIGhhYml0YXRz 71699\nIGlzQWRtaW4= 71700\nIGV4cGxvaXRpbmc= 71701\nIHZlbnRpbA== 71702\nIEJhbGxz 71703\n2KfYqA== 71704\nIG1pbmRmdWxuZXNz 71705\nKGt3YXJncw== 71706\nIHJlc2VtYmxpbmc= 71707\nIGNob2ly 71708\nIG9uQmFja1ByZXNzZWQ= 71709\nIFNFQ1VSSVRZ 71710\nL2d0ZXN0 71711\nIGp1c3RpY2Vz 71712\nIGludGVnZXJWYWx1ZQ== 71713\nYmxhaA== 71714\nIEFpbQ== 71715\nX2ZpbmFsaXpl 71716\na2Vo 71717\nIENvbXBsZXhpdHk= 71718\nIGF1Z3VzdA== 71719\nZ2V0RWxlbWVudHNCeVRhZ05hbWU= 71720\nIHByZWFjaA== 71721\nIHByb251bmNpYXRpb24= 71722\nIFRyYXNo 71723\nLXBlcmNlbnQ= 71724\nX1BSSVY= 71725\nIEh1bnRz 71726\nIEN1cnNl 71727\ndWVsbGVu 71728\nIGhlYXZ5d2VpZ2h0 71729\nWGk= 71730\nCXNlbGVjdGVk 71731\nIE1jQ295 71732\n5byC5bi4 71733\nfD0K 71734\nIEJhdHRsZWZpZWxk 71735\nSXRlbUltYWdl 71736\nIGRlZHVjdGlvbnM= 71737\nIEVsZW1lbnRhbA== 71738\nKCkpOy8v 71739\nIEJ1cms= 71740\nfSkNCg0K 71741\nc3dpZnQ= 71742\nL2Z1bmN0aW9u 71743\nVXN1YWxseQ== 71744\nX1N0 71745\nX2ZlYXRz 71746\nIElzVmFsaWQ= 71747\nIHphZA== 71748\nSW1hZ2VDb250ZXh0 71749\nIGNsYXNzbmFtZQ== 71750\nIGRvbm5lcg== 71751\nIC0tPgoKCg== 71752\nIG1vdG9yY3ljbGVz 71753\nKycvJys= 71754\nIHNldEJhY2tncm91bmQ= 71755\nXENNUw== 71756\nLkFsbEFyZ3NDb25zdHJ1Y3Rvcg== 71757\nIExleGluZ3Rvbg== 71758\nLmV4YW1wbGVz 71759\nIFB1cnM= 71760\nUHVzaE1hdHJpeA== 71761\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 71762\nLmFkZFRhcmdldA== 71763\ncG9yYQ== 71764\nRnVsbHNjcmVlbg== 71765\nIGdvb2Y= 71766\naGxlbg== 71767\nw6RnZQ== 71768\nIENVUkw= 71769\nIEludGVyZXN0aW5n 71770\nIHJldHJpZXZlcw== 71771\nX09iag== 71772\naW5uZXNz 71773\nLS0tLS0KCg== 71774\nLnRzdg== 71775\nKElN 71776\nIEJyYXZlcw== 71777\nX0lTUg== 71778\nb3N0aQ== 71779\n4buT 71780\nIEV4dGVyaW9y 71781\nIENvdXJ0bmV5 71782\nIHJlc2lkdWVz 71783\nVGllcg== 71784\nLio7DQoNCg== 71785\nOmJsYWNr 71786\nd2ViVmlldw== 71787\nInBhdGg= 71788\nIG1hc2E= 71789\nXSE9Jw== 71790\nIE1hdGNoaW5n 71791\nZHVy 71792\nSnZt 71793\nPWNvbnRleHQ= 71794\nX1JJTkc= 71795\nIHByb3BvbmVudHM= 71796\nIFFTdHJpbmdMaXRlcmFs 71797\nIGluZmxhdGU= 71798\nPEZsb2F0 71799\nIERvbm92YW4= 71800\nKElP 71801\nSE9SVA== 71802\nIGRpc2FncmVlZA== 71803\naXNreQ== 71804\nYXNraW5n 71805\nX1ZFQw== 71806\nSEFTSA== 71807\nIG1hdGhz 71808\nIExhc3RseQ== 71809\nIGRlcHJlc3Npbmc= 71810\nLmVzdGFkbw== 71811\nIGhhbG8= 71812\nX2JsZQ== 71813\nIEdhYnJp 71814\nPFRSZXN1bHQ= 71815\nIHRyb29w 71816\nIGVudW1z 71817\nIFNFUklBTA== 71818\nbnVtZXJ1c2Zvcm0= 71819\nIENoaWM= 71820\nLWV4ZWM= 71821\nIGJhY2tsb2c= 71822\nIEJyYXZv 71823\nUG9wTWF0cml4 71824\nIEJydXQ= 71825\nIGJsb3F1ZQ== 71826\nIGp1bml0 71827\nIFdoaWxzdA== 71828\n0YbQuNGP 71829\nZmV3 71830\nrIE= 71831\nIFZhcmlldHk= 71832\nIFBvbGl0aWNv 71833\nZXhlbXBsZQ== 71834\nVXNlckNvbnRyb2xsZXI= 71835\nIGhhcmRlbmVk 71836\nYWtlbnM= 71837\nIFNlZWRlcg== 71838\nb3dhcmRz 71839\nY2hlY2tzdW0= 71840\nIFNhaQ== 71841\nVkVSVEVY 71842\nUmVzcG9uc2Vz 71843\ncGxvZGU= 71844\nLWhhcmQ= 71845\nU3BlY2llcw== 71846\nUmVuZGVyVGFyZ2V0 71847\nX0NIQVQ= 71848\nIHNob3djYXNlcw== 71849\naXRpbWF0ZQ== 71850\nX0ZPUkVBQ0g= 71851\nX0NPTkZJR1VSQVRJT04= 71852\nZWJh 71853\nIEVzc2VudGlhbGx5 71854\nKHBvbHk= 71855\nLWxlYXJuaW5n 71856\nIGfDpXI= 71857\nX3N1Y2M= 71858\nKE1hdA== 71859\nIGNvaWxz 71860\nYnJhcw== 71861\nIGFtYQ== 71862\nX21hdGNoaW5n 71863\naW5kdXN0cnk= 71864\nIE5vcnJpcw== 71865\nIEV4cG9zdXJl 71866\nIHBlcnZhc2l2ZQ== 71867\nIGRleg== 71868\n5peP 71869\nIGVsZWN0cm9uaWNhbGx5 71870\nRERS 71871\nIFN0aW0= 71872\nINGE0LDQudC70LA= 71873\nIG1hZHJl 71874\nbmVtb25pYw== 71875\na2ljaA== 71876\nIEZyYWdlbg== 71877\nIFJ1bmU= 71878\nIG9uVG91Y2g= 71879\nCXNjYWxl 71880\nIFBoYXJtYWM= 71881\nIE1hbmRhdG9yeQ== 71882\nIFN0bw== 71883\nIEJyYW0= 71884\nX0xlZnQ= 71885\nX1NUQVI= 71886\nKX19Ig== 71887\nc2Npb3VzbHk= 71888\n0LXQt9GD0LvRjNGC 71889\n56uZ 71890\nZ3Jhdml0eQ== 71891\nK0M= 71892\nfTw= 71893\nQU5HRVM= 71894\nIGNvbnRyYWN0aW9u 71895\nIFdhbGxwYXBlcg== 71896\nLkZhY2U= 71897\nIHByw7N4aW1v 71898\nLmZpZw== 71899\nbGFuZ2xl 71900\nINC/0LXRgNC10Lw= 71901\nX0NSRUFU 71902\nQmFzaWNhbGx5 71903\nIGF3YWl0cw== 71904\nIENIQVJBQ1RFUg== 71905\nIHZwbg== 71906\nSG9u 71907\nIGV2aXRhcg== 71908\nIFVuZG8= 71909\nUVM= 71910\nIEVkbXVuZA== 71911\nIG1pcmFjbGVz 71912\nIFRpbWluZw== 71913\nIFZlbmV6dWVs 71914\nLlNxcnQ= 71915\nb2lkYWw= 71916\nIGVycnM= 71917\nLS0tLS0tLS0KCg== 71918\nIERFQ0xBUkU= 71919\nIHZpZ29yb3Vz 71920\nYXJnb24= 71921\nIGFnZ3JlZ2F0ZWQ= 71922\nIFNoYXJrcw== 71923\nIEN5cnVz 71924\nIHJlcHLDqXM= 71925\nbWF0Y2hlcg== 71926\nIGd1aUFjdGl2ZQ== 71927\nPyIpCg== 71928\nIEpOSQ== 71929\nLmNoYXJzZXQ= 71930\nJ3w= 71931\nIGdvYXRz 71932\naW5kcmU= 71933\nLmdldERheQ== 71934\nIHBhcnNlcw== 71935\nIElocmVu 71936\nX18uJy8= 71937\naWxlZ2Vz 71938\nbmF2aWdhdGU= 71939\nIEJ1ZmZ5 71940\nUEhQVW5pdA== 71941\nIG1hc3Nh 71942\nYWx0YXI= 71943\nJyldLAo= 71944\nIG92ZXJzZWVz 71945\nIHt9DQoNCg== 71946\nIFdMQU4= 71947\nY2xpcGJvYXJk 71948\nX0luc3RhbmNl 71949\nIGdsYWRseQ== 71950\nKHNlcmllcw== 71951\nIHZhZA== 71952\nIGdldFBhZ2U= 71953\nW29m 71954\nLkludGVydmFs 71955\naW51cw== 71956\nY2hhckF0 71957\nb2xlbQ== 71958\nYWludGluZw== 71959\nLkFG 71960\nX21pbm9y 71961\nX0lM 71962\nO3k= 71963\nIFRlbGVjb20= 71964\nIFBvbmQ= 71965\nIG1tYXA= 71966\nL14= 71967\nIFlhaw== 71968\nIFJhYmJp 71969\nZW5vcw== 71970\nCUNvbnRleHQ= 71971\nLnZlYw== 71972\nKEF0dHJpYnV0ZQ== 71973\nIGNhdGVnb3JpemVk 71974\nIGRpYWJldGlj 71975\nKHJhbms= 71976\nIHBhw61zZXM= 71977\nIEAiIjsK 71978\nIGppa2E= 71979\nYXJzaXR5 71980\nIC8o 71981\nLkhlbHA= 71982\nLWJhbm5lcg== 71983\nIEJ5cm9u 71984\nIHVucmVhbGlzdGlj 71985\nIHxf 71986\nIFN0b3B3YXRjaA== 71987\nIGV4ZW1wdGlvbnM= 71988\nL2NhcmRz 71989\nIHRvc3RyaW5n 71990\nbmdpbmU= 71991\nIHNwcmF3bGluZw== 71992\nIGx0ZA== 71993\nIFVuZGVyc3RhbmQ= 71994\nINGC0LXQutGB0YI= 71995\nZXdpdG5lc3M= 71996\nIGNhbGxCYWNr 71997\nLVllYXI= 71998\nRnVlbA== 71999\nPSo= 72000\nIGludmVudG9y 72001\nIGJlc3RzZWxsaW5n 72002\nIGhhcmRuZXNz 72003\nIFR1cw== 72004\nIGtleW5vdGU= 72005\nIGJlYXU= 72006\nX2Fib3J0 72007\nIHByb3Bvcg== 72008\nIGNvbWVyYw== 72009\nX1JFRkVS 72010\nUGFz 72011\naGF2ZW4= 72012\nLWZpeA== 72013\nQ2Fub25pY2Fs 72014\nIGxvb2tvdXQ= 72015\nRXhwbG9yZXI= 72016\nIGNlcmNv 72017\nKHNlbnNvcg== 72018\nIEpzb25TZXJpYWxpemVy 72019\nIHZva3Nlbg== 72020\nIGJyaWdodGVzdA== 72021\nIHN0YWJiaW5n 72022\nLkJl 72023\nLmFkZFByb3BlcnR5 72024\nIEh1bXBo 72025\nIGlzQXV0aGVudGljYXRlZA== 72026\n5rKh 72027\nIHBvcmVz 72028\nIGplZ28= 72029\nIFNob3dpbmc= 72030\nID8+Ij4NCg== 72031\nX0NPU1Q= 72032\naWxpbmVhcg== 72033\nIFdvcmtzcGFjZQ== 72034\nIHNwZWw= 72035\nYWdvZ3Vl 72036\nIE1pbGxlbm5pdW0= 72037\nIFBvcHVsYXRl 72038\nIG5pZA== 72039\nLnBhcnNlQ29sb3I= 72040\nU29sYXI= 72041\nIEdhZA== 72042\nIOykkQ== 72043\nIEthbXA= 72044\nCXJt 72045\nIGJlbno= 72046\nIEhvbmVzdGx5 72047\nIGVsZWN0cm9kZQ== 72048\nIFByYWlyaWU= 72049\nIFBST0ZJTEU= 72050\nIE9yaWVudGFs 72051\nIE9MRUQ= 72052\nL2NvcHlsZWZ0 72053\nYXdhaWk= 72054\nKHByb2R1Y3Rz 72055\nKVw8 72056\nLWNyZWF0ZWQ= 72057\nLk1hbnlUb01hbnk= 72058\nIkhvdw== 72059\nINCy0YvQvw== 72060\nIG1pdG9jaG9uZHJpYWw= 72061\nX3Rlc3Rpbmc= 72062\nKGNyZWF0ZWQ= 72063\nIGdldEZpZWxk 72064\nX0VWQUw= 72065\nXS4i 72066\nIEZTTQ== 72067\nIFJpdGE= 72068\nIOWPguaVsA== 72069\nIGPDtHQ= 72070\nIEluc2lnaHQ= 72071\nCW15c3FsaQ== 72072\nX3RpbWluZw== 72073\nSURP 72074\nKSkpKSkK 72075\nQ09WRVJZ 72076\nLmltYWc= 72077\nQ0RG 72078\nbHVzdA== 72079\naWNrdA== 72080\nX0ZQ 72081\nLicsJw== 72082\nZ2Nj 72083\nIGt1cno= 72084\nX3B3bQ== 72085\nIG9kcG93aWVk 72086\nIEJhcnJpZXI= 72087\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 72088\ncGFr 72089\nLUlzcmFlbA== 72090\nIFJ1dGdlcnM= 72091\nIHNlbGVjdGVkSXRlbQ== 72092\nIFJhbWlyZXo= 72093\nRmFybQ== 72094\nIGNhbGVuZGFycw== 72095\nZ3ppcA== 72096\nIGJsb2NrYnVzdGVy 72097\nIFBseW1vdXRo 72098\n55yM 72099\ncmVzcG9uc2Vz 72100\nLkRpYWxvZ0ludGVyZmFjZQ== 72101\nLWdyYW5k 72102\nIGdldFNvdXJjZQ== 72103\nIGRlanRpbmdz 72104\nIHRpZXRlbg== 72105\nIGNvbmRlbW5hdGlvbg== 72106\nIGNvbnRpbnVhcg== 72107\nLk1vY2tNdmM= 72108\nL2VuZ2xpc2g= 72109\nIE1lZGlhUGxheWVy 72110\nY29tcHV0ZWQ= 72111\nIENsaXBwZXJz 72112\nKGRlbGVnYXRl 72113\nLlNsZg== 72114\nIOuhnA== 72115\nIFRpZGU= 72116\nIGlocmVt 72117\nIFdhbg== 72118\n0YPRjtGJ 72119\nfT48 72120\nRGlzY3Vzc2lvbg== 72121\nIHdhdHRz 72122\nLW1pbnVz 72123\nIEp1bGlldA== 72124\n6ZuF 72125\nIGNvbmNsdWRpbmc= 72126\nYW5kc2NhcGU= 72127\nIMO6bHRpbWE= 72128\nIERFUlA= 72129\nIHNpZ25VcA== 72130\nIFNlY29uZGx5 72131\nV0FJVA== 72132\nbGRz 72133\nLmNhbGxiYWNrcw== 72134\nKGhvdXI= 72135\naW1hdG9ycw== 72136\ndm9sZW50 72137\nQUFG 72138\nZWRyaXZlcg== 72139\nIE1hdGhlbWF0aWM= 72140\nPFR1cGxl 72141\nIC8+Jw== 72142\ne2o= 72143\nX0FCT1JU 72144\nRXRoZXI= 72145\nIGVkdWNhdG9y 72146\nIHByZWNhdXRpb24= 72147\nIGZpbmdlcnRpcHM= 72148\nZ2V0VmFy 72149\nY2FtYXRhbg== 72150\nLWRlYnVn 72151\nIFJBRg== 72152\nW2FyZw== 72153\nIHJhY2Vk 72154\nIHRzdW5hbWk= 72155\nLmZsaW5r 72156\nIGdseWM= 72157\ndWtv 72158\nIE11bHRpcGx5 72159\nIHJlZGlzdHJpYnV0aW9u 72160\nQUdP 72161\nIFJvdXRpbmU= 72162\nIG9wcg== 72163\nKGxvd2Vy 72164\nIEZ1bmt0aW9u 72165\nLmRr 72166\nIGVndA== 72167\nX0JBU0lD 72168\nc3lzY2FsbA== 72169\nIExTRA== 72170\nIER1cGxpY2F0ZQ== 72171\nX3NlbGw= 72172\nIGVycm9ySGFuZGxlcg== 72173\nX2lwcw== 72174\nIGVydg== 72175\nYW5uaWU= 72176\nKHJlc291cmNlTmFtZQ== 72177\nIGJvdHRsZWQ= 72178\nIGNyYXdsaW5n 72179\nZWdtZW50 72180\nLnNldFRhZw== 72181\nIHJzcw== 72182\nIFF1YXJyeQ== 72183\nX2V4YWN0 72184\nLmp3dA== 72185\nIEJvYXJkcw== 72186\nb3Bp 72187\nIG5hc2Fs 72188\nIFhZWg== 72189\nLnVk 72190\nTm9ydGhlcm4= 72191\nIGFjdGl2YXRpbmc= 72192\nZWR4 72193\nb3ZhaA== 72194\nIGluZHg= 72195\nQWxlcnREaWFsb2c= 72196\nIHRpZW5lcw== 72197\nYW5ueWE= 72198\nX3Bhbg== 72199\nKGRlY2ltYWw= 72200\nLkRpY3Q= 72201\nIHN1YnNpZGlhcmllcw== 72202\nUHJvZHVjdE5hbWU= 72203\nRmV3 72204\nZGF0bw== 72205\nb2RpZWQ= 72206\nLXVuZGVy 72207\nIOqygw== 72208\n54mI5pys 72209\nYXRpc20= 72210\nW01hdGg= 72211\nLic8 72212\nKGluZmlsZQ== 72213\nIGRlbm90ZXM= 72214\nJGNsYXNz 72215\nX1NFQ1VSSVRZ 72216\nIHNld2FnZQ== 72217\nbWVsb24= 72218\nKENoYXJhY3Rlcg== 72219\nL2dpdGh1Yg== 72220\nIGdsYXJpbmc= 72221\nLkd1aWQ= 72222\nX3NwYXJzZQ== 72223\nIE1hcmdpbg== 72224\nX2Rucw== 72225\nIG1laW5lcg== 72226\nIGxlZnRpc3Q= 72227\nCWxvYw== 72228\nYWJ5dGVz 72229\nIGVxdWlwbWVudHM= 72230\nZXhwbw== 72231\nIFNvbWVyc2V0 72232\nRUs= 72233\n5o2i 72234\nIGxlY3R1cmVy 72235\nIG1lbWlsaWtp 72236\n5qC4 72237\n57Sg 72238\ncHJvbg== 72239\nOnBvaW50ZXI= 72240\nYm9ycm93 72241\nIFByb3RlY3RpdmU= 72242\nX2Nm 72243\nINCV0YHQu9C4 72244\nYnBw 72245\nJzsKCgoK 72246\nYXR1cmFsbHk= 72247\nX05BVg== 72248\nIHBlcHRpZGU= 72249\nPmQ= 72250\nIGlmc3RyZWFt 72251\nX0ZBQ1RPUlk= 72252\nJyk7Ly8= 72253\nam9pbmVk 72254\nbW9uZw== 72255\nIHRpbWVzcGVj 72256\nIGRlc3RhYmls 72257\nIGF1dG9w 72258\nLWxpbWl0 72259\ncHVibGljYXRpb24= 72260\nIERlbm4= 72261\nLk1lbW9yeQ== 72262\nKHNrYg== 72263\nIEFuYWhlaW0= 72264\nX1JFVFVSTlRSQU5TRkVS 72265\nb3VldXI= 72266\nKF8oJw== 72267\nbGVndA== 72268\naXN0aW5ndQ== 72269\nCXByaXY= 72270\nIHJlZGlyZWN0cw== 72271\nTXQ= 72272\nIGFsbGVlbg== 72273\nIFBvaW50Rg== 72274\nIG9taW4= 72275\nIGNpdHQ= 72276\nIFRhZ2U= 72277\nIFdhbGxz 72278\n4buJ 72279\nIG9jY3VweWluZw== 72280\neEJG 72281\ncmFuZ2xl 72282\nIHJlbGF0aW9uYWw= 72283\nLW9yZw== 72284\nIGpwZw== 72285\nLWRlcml2ZWQ= 72286\nIG1hbGZ1bmN0aW9u 72287\nIEJlbnNvbg== 72288\nKHNjcm9sbA== 72289\nIFhE 72290\nSG9seQ== 72291\nKGNvbW1hbmRz 72292\nIHRpcHBpbmc= 72293\nIHByaW1pdGl2ZXM= 72294\nIHNleGxl 72295\nQ2FsbENoZWNr 72296\nIE1BU1RFUg== 72297\nX1RFQU0= 72298\nLnNldFJlcXVlc3RIZWFkZXI= 72299\nX3NwZWNz 72300\nIHNlcmdl 72301\nLk1hc3Rlcg== 72302\nIGltcw== 72303\nLlNwcmluZ0Jvb3RUZXN0 72304\ncGF5cGFs 72305\nIFdBTlQ= 72306\nLkluc3Q= 72307\nIENhcnBldA== 72308\nIHdyb25nbHk= 72309\nKCQoJy4= 72310\nIGJpbGQ= 72311\nLlJvbGw= 72312\nIFVyYg== 72313\nLWNhbg== 72314\n44GP44Gg44GV44GE 72315\nb2xpYmVyYWw= 72316\nPCEtLTw= 72317\n4oCUZm9y 72318\nIG5lZ2F0ZQ== 72319\nKG5vcm0= 72320\nYWVj 72321\nX3NhbGFyeQ== 72322\ncGxhaW50ZXh0 72323\nb2Rlc2s= 72324\nIEJvc2No 72325\nU2NpZW50aXN0cw== 72326\naW5kZXhlcw== 72327\nIG1weg== 72328\nIGdyb3VuZHdhdGVy 72329\nfX0pOwo= 72330\n0LDQu9C40Lc= 72331\nIGVybw== 72332\nIHByZXNjcmliZQ== 72333\nIEV4dHI= 72334\nPEFycmF5TGlzdA== 72335\nIGF0cm9jaXRpZXM= 72336\nQXJlYXM= 72337\nIFRJbnQ= 72338\nKHBsYXllcnM= 72339\nIGRhdGFi 72340\nIHd5bQ== 72341\n44Gb 72342\nIGR1YXM= 72343\nX3Bvc3NpYmxl 72344\nIGluc3RydWN0aW9uYWw= 72345\naXRpb25lcg== 72346\nL2F1ZGlv 72347\nICAgICAgICAgICAgICAgIAoK 72348\nc3RvcmVk 72349\nT01QSQ== 72350\nIGFwcHJlbnRpY2Vz 72351\nVGVuYW50 72352\nIENvdXQ= 72353\nIGNvbnRyYWNlcHRpb24= 72354\nTG9hbg== 72355\nX3Zpc2liaWxpdHk= 72356\nJ3x8 72357\nLlBhcnNlRXhjZXB0aW9u 72358\nIGNvaW5jaWRl 72359\nLmdldFdpbmRvdw== 72360\nIE1hcnRpYWw= 72361\nX3Rscw== 72362\nL2Jvb2tz 72363\nIG91dHJhZ2Vk 72364\nICh+KA== 72365\nc3Ryc3Ry 72366\nIEJveGVz 72367\n6YO9 72368\n44Ol 72369\nUk9J 72370\nRnVuY3Rpb25hbA== 72371\nIFByb2Q= 72372\nPFRlc3Q= 72373\nIHZpZGVvdA== 72374\nIGFtb3Jl 72375\nYWJicg== 72376\nIE1vbnVtZW50 72377\nIHJlaW5mb3JjZW1lbnQ= 72378\nIENvY29udXQ= 72379\nLnNlbmRTdGF0dXM= 72380\nLmtl 72381\nIExlYXA= 72382\nX2FydGljbGVz 72383\nUGll 72384\nIElydmluZQ== 72385\nQUJDREVGR0hJ 72386\nIEV4cGxhbmF0aW9u 72387\nZ3JvdXBCeQ== 72388\nIG92ZXJoZQ== 72389\nIGFuw6Fs 72390\nIGNsYXNzaWZpZXJz 72391\nIE1peGVy 72392\nL2NvbG9ycw== 72393\nIFVzZXJEYXRh 72394\nX0FSUk9X 72395\nX3ZsYW4= 72396\nLkNyZWF0ZURpcmVjdG9yeQ== 72397\nIEhhaw== 72398\nIEJvbmVz 72399\nIEFwaVJlc3BvbnNl 72400\nIE1vb2R5 72401\nREFD 72402\nZ2V0Yw== 72403\n6LaF 72404\nLkZpcmU= 72405\n6aM= 72406\nIGhpdHRlcg== 72407\nZnJlc2g= 72408\n4LmB 72409\nIENoaWxkaG9vZA== 72410\neG9y 72411\nLWh0dHA= 72412\nIE1PUg== 72413\nLnNlbmRLZXlz 72414\nX3NoYXBlcw== 72415\nIFVwcw== 72416\nIEFycmVzdA== 72417\nYXp6aQ== 72418\nX29wY29kZQ== 72419\nLk5vbWJyZQ== 72420\nIHByw7Nw 72421\nIHp4 72422\nIHRyZW1lbmRvdXNseQ== 72423\nU3BhY2Vz 72424\nZWNj 72425\nIHZlbHZldA== 72426\nIG1lbW9yaWE= 72427\nIExBUA== 72428\nLkRyYXdMaW5l 72429\nIHRhcmdldFR5cGU= 72430\ncmVzdHJpY3Rpb24= 72431\nIERSVg== 72432\nW3RvcA== 72433\nIeKAmQ== 72434\nL2NoYXQ= 72435\nIHNvbmlj 72436\nVG9yb250bw== 72437\nb3dp 72438\nLmRvY3M= 72439\nIEluaXRpYWxpc2U= 72440\nIDwh 72441\nLnRibA== 72442\nLlByZXBhcmVkU3RhdGVtZW50 72443\nL2RvbQ== 72444\nLnJvdA== 72445\nX1BST00= 72446\nS2VlcGluZw== 72447\nIGhhcmdh 72448\nIGpvcm4= 72449\nIGlkZW50aWZpYWJsZQ== 72450\nW2lw 72451\nUGluaw== 72452\nX0hlYWRlcg== 72453\nw5E= 72454\nYWRsZQ== 72455\n572R57uc 72456\nc2VxdWVudA== 72457\nQWN0aXZhdGVk 72458\ndG1wbA== 72459\nIFBhbGw= 72460\nIGZhdGFsbHk= 72461\nfX0pCg== 72462\nUG9wb3Zlcg== 72463\nIE1jTGFyZW4= 72464\nQ2hhbmdlZEV2ZW50QXJncw== 72465\nIEZvcm1hdGlvbg== 72466\nTmFt 72467\nbmV3c2xldHRlcg== 72468\nLmZyb21TdHJpbmc= 72469\nX2ltbQ== 72470\nQVBQRUQ= 72471\nLG5vZGU= 72472\nKGRldA== 72473\nIHBhcmFsbGVscw== 72474\nIGxhc2Vycw== 72475\nIGNob2NvbA== 72476\nL3BvcnQ= 72477\nYWZmZW4= 72478\nKGRldGFpbHM= 72479\nIHJlcGxpY2F0ZWQ= 72480\nQXNTdHJlYW0= 72481\nYXJtYWM= 72482\nXV09 72483\nYWxhY2g= 72484\nX3Nlc3Npb25z 72485\nQWxnb3JpdGhtRXhjZXB0aW9u 72486\nIHZlcmJvc2l0eQ== 72487\nLkNvbHVtblN0eWxlcw== 72488\nKFVTRVI= 72489\nIHNsZWVwcw== 72490\nIGFxdWF0aWM= 72491\nX2J1bGs= 72492\nPScuLw== 72493\nb3VybsOpZQ== 72494\nIE1TRA== 72495\nIEJsb2M= 72496\nIEdsZQ== 72497\nIHJlcHJlc3Npb24= 72498\nIGVudG9uY2Vz 72499\nCQkgICAgICAgICAgICAgICAgICAg 72500\nWU5D 72501\nLkFsbG93R2V0 72502\nIHR1cnRsZXM= 72503\nICd+Lw== 72504\nZXNzb24= 72505\nIERJRQ== 72506\nIEFxdWE= 72507\nIFNFUQ== 72508\nOzs7Ozs7Ozs7Ozs7Ozs7Ow== 72509\nLnB1dHM= 72510\nIE1BSw== 72511\nKEN1c3RvbWVy 72512\nIGRlc3NlcnRz 72513\nIGVtYmVsbA== 72514\nIHRheGVk 72515\n5bqX 72516\nIHNjaGw= 72517\ncmVzY28= 72518\nIEZyb2c= 72519\nIFBlbmRpbmdJbnRlbnQ= 72520\nX0xvY2Fs 72521\nL3NlY3VyaXR5 72522\nIFJveA== 72523\nIHNwb2lsZWQ= 72524\nX1dJTkRPV1M= 72525\nSmVubmlmZXI= 72526\nIGRhdGk= 72527\nVW5sb2Fk 72528\nLmdyaWR4 72529\nKHN0YWdl 72530\n4buX 72531\nU3FsQ29tbWFuZA== 72532\nLm14 72533\nIGJsaXR6 72534\nIEZvcnRyZXNz 72535\nIEJyb3dzZXJBbmltYXRpb25zTW9kdWxl 72536\nd2luZQ== 72537\nTlNF 72538\nLXJhbmtpbmc= 72539\neXJl 72540\nIGxpbmthZ2U= 72541\nw6Fr 72542\nkZw= 72543\nYXRzYXBw 72544\nIEN5Y2w= 72545\nIGVjb2xvZ3k= 72546\nIGJsYXRhbnQ= 72547\nIFBlcmY= 72548\nIFhpYW9taQ== 72549\nIERvcnRtdW5k 72550\ncmVzdWx0U2V0 72551\nIGdpw6A= 72552\nIGZhdWNldA== 72553\nIERhbHRvbg== 72554\nIGZyZWVz 72555\nQlVGRg== 72556\nLnBhcmFsbGVs 72557\nIEFzdHJvcw== 72558\nIFZFQ1RPUg== 72559\nIHN0YW5kb3V0 72560\nw7Ntbw== 72561\nIGZyYW1lYm9yZGVy 72562\nX1BBUkFNRVRFUlM= 72563\nIEZhbGs= 72564\nIERpZ2l0 72565\nIGVsZWN0csOzbmljbw== 72566\nIHZlcnI= 72567\nVUlBbGVydFZpZXc= 72568\nKFNxbA== 72569\nLUlORg== 72570\nIikpKTs= 72571\nJycK 72572\nKEVGRkVDVA== 72573\nIFp1bQ== 72574\nX0RQ 72575\nKV07DQo= 72576\nIGFudGVubg== 72577\nIGFiYnJldmlhdGlvbg== 72578\nIHNlaXNtaWM= 72579\nX1RSQU5TTA== 72580\ntZw= 72581\nLk1pbGxpc2Vjb25k 72582\nLGxhdA== 72583\nIEFuY2g= 72584\nX01vZA== 72585\nQWxyaWdodA== 72586\nZGRh 72587\nIMKl 72588\nVU5ETEU= 72589\nINC30LDQsw== 72590\nIHN1bGZ1cg== 72591\nIFNpdGg= 72592\nIE5pbWJ1cw== 72593\nIEV4YW1pbmF0aW9u 72594\nX3dpZmk= 72595\nfWApOwoK 72596\nIHNlbnNhdGlvbnM= 72597\nYWZz 72598\nX0NMUg== 72599\nIGluZmluaXRlbHk= 72600\nIHN5c3TDqG1l 72601\nX2ZvbnRz 72602\nSW1wYWN0 72603\nUG93ZXJlZA== 72604\nIDw9Pg== 72605\nX25lZWQ= 72606\nREVDUkVG 72607\nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 72608\nIFJlcG8= 72609\nZ2V0U2VydmljZQ== 72610\nJG4= 72611\nX3BjdA== 72612\nRXJyZXVy 72613\nIE5HT3M= 72614\nICoKCgo= 72615\nLmF0YW4= 72616\nX1RNUA== 72617\nIGNvbGxhcHNpbmc= 72618\nIHNobw== 72619\nX1BDSQ== 72620\nLm9wZXI= 72621\nKGFkag== 72622\nIGdpb3Y= 72623\nPiku 72624\nIGluY29udHJv 72625\nYXJkYQ== 72626\nIGFwZXg= 72627\nIG1lZGlkYQ== 72628\nIFNoZWlraA== 72629\nIEFybWVuaWE= 72630\nYXNzb2NpYXRl 72631\nLXdvdw== 72632\nIFR1cm5pbmc= 72633\nIEZyZXVk 72634\nIEZvb2w= 72635\nIExEUw== 72636\nLS0tLS0tLQoK 72637\nb2xzb24= 72638\nLkZJTEU= 72639\nX2RldGVjdG9y 72640\nRG9taW4= 72641\nIGRlcGxveW1lbnRz 72642\nIGZhcmV3ZWxs 72643\nKGJpbmQ= 72644\nIG5vdmljZQ== 72645\ndGRvd24= 72646\nIGdldEVsZW1lbnQ= 72647\nIHZlbGl0 72648\nYXN0aGFu 72649\nCWNoYW5uZWw= 72650\nX0ZSQU1FQlVGRkVS 72651\nLnRyYWlsaW5n 72652\nLnNldEVkaXRhYmxl 72653\nOyw= 72654\nIElERg== 72655\nX1BC 72656\nZ2V0TGFzdA== 72657\nIENvYXN0YWw= 72658\nIEhhbmR5 72659\nbGluZ2Vy 72660\n44Gn44KC 72661\nUGVyc2lzdGVuY2U= 72662\nLmdldFNlcnZpY2U= 72663\nINC+0Lo= 72664\nIG5vdHdpdGhzdGFuZGluZw== 72665\nKFBS 72666\nVU1C 72667\nJ10pKXsNCg== 72668\nZW1icmFuY2U= 72669\nZXhjZXJwdA== 72670\nYXF1 72671\nX2Jsb2M= 72672\nIFByb3Zpc2lvbg== 72673\nIE1jRG9u 72674\nIEdvbGRiZXJn 72675\nIGNvbXBvbmVudFdpbGxVbm1vdW50 72676\nIGJhc2VQYXRo 72677\nLWZpcmVk 72678\nIGZvbGxhbmRv 72679\nIFRpbGVz 72680\nQGVuZGZvcmVhY2g= 72681\nRU5DSUw= 72682\nIEJveGluZw== 72683\naXF1ZXI= 72684\nQWNoaWU= 72685\nRW51bXM= 72686\nQmFzZVVybA== 72687\nKHNjYW4= 72688\nIFBhc3NpdmU= 72689\nYWJlbGxh 72690\nL3Nu 72691\nLm51bWVyaWNVcERvd24= 72692\nIHZlcm4= 72693\nbG9jYWxpemVk 72694\nIE1peg== 72695\nIHJlc3VsdExpc3Q= 72696\nL3Z1ZQ== 72697\nRVJWSUNF 72698\nLm9k 72699\nIGxpZ24= 72700\nIFN0cmluZ1Rva2VuaXplcg== 72701\nIHRyYWc= 72702\nQWNjb3JkaW9u 72703\nIG5vcmVmZXJyZXI= 72704\nbXNjb3JsaWI= 72705\nw6F0aXM= 72706\nYnl0ZXI= 72707\nIHNob3dkb3du 72708\nIHNlbWFpbmU= 72709\nIC0tPg0KDQo= 72710\nIE1haG0= 72711\nfSI7Cgo= 72712\nIGRx 72713\nIFB1Ymxpc2hlcnM= 72714\nIEFtcGw= 72715\nIERhbmllbGxl 72716\nIHRlcm4= 72717\n6LW3 72718\nbm/Fm8SH 72719\nZWlu 72720\nIEFzeW5jU3RvcmFnZQ== 72721\ndW5nZXI= 72722\ncm91dw== 72723\nIHNjaXNzb3Jz 72724\nL2Fzc2VydA== 72725\nLmJ1Y2tldA== 72726\nL2FyY2hpdmU= 72727\nX01hbg== 72728\nIGludG9sZXI= 72729\nICgpPT4= 72730\nINCS0Ys= 72731\nIHNhaQ== 72732\nLnh5 72733\nLiINCg== 72734\nIHVyaW5hcnk= 72735\nZXN1Yg== 72736\nSVNUSUNT 72737\nIM66 72738\nIGNvbXBsaW1lbnRz 72739\nIHR5cGluZ3NKYXBnb2xseQ== 72740\naWhhcg== 72741\nRXhwYW5zaW9u 72742\nIFNlcnZpbmc= 72743\nX3N0dWRlbnRz 72744\nIFhCT09MRQ== 72745\nKGls 72746\nIOyymA== 72747\nIGrDsw== 72748\nKHRvbA== 72749\nKEpT 72750\nCUNH 72751\nIERSQVc= 72752\ndHdpZw== 72753\nIG9hdA== 72754\nX3Ntb290aA== 72755\nIENTTA== 72756\nIG9zb2I= 72757\nIGVuc3Vpbmc= 72758\nIGJhbmtlcg== 72759\nIEJhY2twYWNr 72760\nX3Bpbmc= 72761\nIHdpc2hsaXN0 72762\nPWF4 72763\nCSAgIAo= 72764\nRGlzbmV5 72765\nc3RlYWR5 72766\nIj4l 72767\nIHByb3BoZXRz 72768\nIFpY 72769\nIG1pbmltYWxpc3Q= 72770\nLlBMQUlO 72771\nU2VhdHRsZQ== 72772\nLm9yZGluYWw= 72773\nIFBJUEU= 72774\nIHJldG9ybmE= 72775\nIGp1Z2Fkb3I= 72776\nIEJyZXQ= 72777\nIOKUnA== 72778\nIHBsdXNo 72779\nVUxBVE9S 72780\nU29ydGluZw== 72781\nLmdyaWR5 72782\nZWN0b215 72783\nX2FjdGl2 72784\ncmFjaw== 72785\nSW50ZXJhY3RpdmU= 72786\nIEFudGFyY3RpY2E= 72787\nIHZlbmdlYW5jZQ== 72788\nZW5zbw== 72789\nX2tub3du 72790\ndXBwbGllcg== 72791\nLk1vZHVsZXM= 72792\nIENvbm5lY3Rpb25TdGF0ZQ== 72793\n6ZqQ6JeP 72794\nQEZpbmRCeQ== 72795\nIHBsYWNlcg== 72796\nXG1vZGVs 72797\nPCgpPg== 72798\nLmlzU3VjY2Vzc2Z1bA== 72799\nLWdvb2Q= 72800\nYno= 72801\nIERyYWNv 72802\nQXNzaXN0YW50 72803\nLWV4dHJh 72804\n0LDQsdC70LjRhg== 72805\nIGh5cG9jcmlzeQ== 72806\nIHRzdA== 72807\nIEFncg== 72808\nJHR4dA== 72809\nIGxvZ2lzdGlj 72810\nbGljZW5zZWQ= 72811\nIEhvZg== 72812\nIHRhdA== 72813\nKGl2 72814\nIGludG94aWM= 72815\ncG9zdElk 72816\nX3N0cmlrZQ== 72817\nIGh1bWlsaWF0aW9u 72818\ncGNvZGVz 72819\nInN5bmM= 72820\nKHJlY2lwZQ== 72821\nK04= 72822\ncmVudGU= 72823\nCUNsaWVudA== 72824\neWNvcGc= 72825\nIFp1cmljaA== 72826\nIFByb2ZpbGVz 72827\nQ291bnRyaWVz 72828\nIHBpY3Q= 72829\nIHJvbGxvdXQ= 72830\ncmVxdWVuY2llcw== 72831\nIHBhdGNoZWQ= 72832\nIGNhcnRyaWRnZXM= 72833\nIHNoYWRpbmc= 72834\nSmFy 72835\nIHNhbHZhZ2U= 72836\nIFRheGVz 72837\nIHN0YW5kYnk= 72838\nYXBvcmFu 72839\nRWlnZW4= 72840\nLmFuZ3VsYXI= 72841\nIE5lc3RlZA== 72842\n5Lqr 72843\nIGlzVmlzaWJsZQ== 72844\nIER3aWdodA== 72845\nX0JSQU5DSA== 72846\nLkRlbGF5 72847\nIGtlbmQ= 72848\nIGZhY2lsaXRhdGVk 72849\nLmZsYXRNYXA= 72850\nIHNhbnRh 72851\nCVNlbmQ= 72852\nL21lc3NhZ2Vz 72853\nIG9mVHlwZQ== 72854\nCXN3YXA= 72855\nI3BsdA== 72856\nIFR1cmtz 72857\nTkVT 72858\nIHByb2dyZXNzaXZlbHk= 72859\nIFJlc2lkZW5jZQ== 72860\nIFRSRUU= 72861\nIG5vZW4= 72862\nZGlv 72863\nIG5lbGxl 72864\nIHNvZ2Fy 72865\naXR0aQ== 72866\nd2Vla2x5 72867\nIGFtYmlndWl0eQ== 72868\nX1NldHRpbmdz 72869\nV2FyZQ== 72870\nLm5lbw== 72871\nX0RTVA== 72872\nIOaWuQ== 72873\ncHJlcA== 72874\nbG9iYnk= 72875\nQGVtYWls 72876\nL21vdmll 72877\nIGZ1bmtj 72878\nICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 72879\nwq1z 72880\nIGd1YXJkaWFucw== 72881\nLXBvcw== 72882\nIGNvbmZpZ3VyaW5n 72883\nIENQUw== 72884\nIERldXM= 72885\nIHZpZMOpb3M= 72886\nX2VtcHJlc2E= 72887\nIHNsYXBwZWQ= 72888\nPE1vZGVs 72889\nIHVuZGVyc2NvcmVz 72890\nVWg= 72891\nLmFjY2Vzc1Rva2Vu 72892\nU0VUUw== 72893\nIFNwYXJzZQ== 72894\nIENhbGQ= 72895\nOnBhdGg= 72896\nIFNlcnZlcnM= 72897\nPWJhdGNo 72898\nIGtuaXR0aW5n 72899\nIHhh 72900\nIHNlYXJjaEJhcg== 72901\nIHNuYWc= 72902\nIGluZnVzZWQ= 72903\nLmJhbQ== 72904\nbGV2ZXI= 72905\nIHRheG9ub215 72906\nw44= 72907\nIGF0dGFjaGluZw== 72908\nIGhlcm4= 72909\nX05PUA== 72910\nQ2xpY2thYmxl 72911\nKFBhcnNl 72912\nIER5bmFtbw== 72913\nLWJ1aWxkZXI= 72914\nIGRlcmVn 72915\nIHNjYXR0ZXJpbmc= 72916\n6L+b6KGM 72917\nYW56aQ== 72918\nIFNoZXBhcmQ= 72919\nIj4nLAo= 72920\nX1hERUNSRUY= 72921\nIEJ1enpGZWVk 72922\nX01BUkdJTg== 72923\nUExPWQ== 72924\nLnNtYWxs 72925\nIG1pbWVUeXBl 72926\nIGhvbG9n 72927\nCWNhbWVyYQ== 72928\nbGlhcw== 72929\nIHN1c3BlbnNl 72930\nb2R5bmFt 72931\nYmF1 72932\nIGdyYXZleWFyZA== 72933\nX25hbWVk 72934\nIjoiJw== 72935\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 72936\nIGdhbWVPdmVy 72937\nIExFTkdUSA== 72938\nCXNjcmVlbg== 72939\nIGRvSW5CYWNrZ3JvdW5k 72940\nX2RlcGVuZGVuY2llcw== 72941\nIHJ0Yw== 72942\nL3Vw 72943\nX1JPTQ== 72944\nSGFsbA== 72945\nIGRlZmljaWVuY2llcw== 72946\nKHRl 72947\nJyM= 72948\nX2VxdWl2 72949\nIHByZW9yZGVy 72950\nIEF4ZQ== 72951\n0L7QvNGD 72952\nLnNlbmRGaWxl 72953\nIGZpbHQ= 72954\nIExpbWl0cw== 72955\nIENhdmFsaWVycw== 72956\nLmRpc2NvdW50 72957\n4oaQ 72958\nIFdpdA== 72959\nUVJTVFVW 72960\nIGlq 72961\nIHRlZ2Vu 72962\nIDoiLA== 72963\nZGlmZmljdWx0eQ== 72964\ncHVua3Q= 72965\nIEVtYWlscw== 72966\nY2hsb3I= 72967\nKGZ1bg== 72968\nLlVpbnQ= 72969\nIFN0YWxs 72970\nX3ZlcmlmaWVk 72971\ndUQ= 72972\nRmlsZVR5cGU= 72973\nIHBsZWFzdXJlcw== 72974\nIGp1ZGljaWFyeQ== 72975\nIHNoYW0= 72976\naXB1cg== 72977\nX1BMVVM= 72978\nb2ZmZXJz 72979\nKGZvbw== 72980\nX0dU 72981\nCWNvcmU= 72982\nRU5USU9O 72983\nIExpYmVyYXRpb24= 72984\nQ29tbWFuZExpbmU= 72985\nX2RlcGFydG1lbnQ= 72986\nLkFy 72987\nX25laWdoYm9y 72988\nIFN1Ym1pdHRlZA== 72989\nIDwhLS1b 72990\nIGxvY2F0aW5n 72991\nLk1hcHBlcg== 72992\nX3N0cmVuZ3Ro 72993\nWy4uLiw= 72994\nIEphbA== 72995\nL2xvYWQ= 72996\nIGJ1ZmZz 72997\nIG1vdG9yaXN0cw== 72998\nCWNz 72999\nYXNjZW5kaW5n 73000\nIFdoYXRzYXBw 73001\nIE5hc3M= 73002\nX0NPTFVNTlM= 73003\nTGVvbg== 73004\ncHBl 73005\nZWx0YXM= 73006\nIHRqZWplcg== 73007\nX0tFWVdPUkQ= 73008\ncXVhbGlmaWNhdGlvbg== 73009\naHJh 73010\nIHJpZGljdWxvdXNseQ== 73011\nJGluZm8= 73012\nRkVBVFVSRQ== 73013\nZG9lc24= 73014\nIEtX 73015\nIEVudW1lcmFibGVTdHJlYW0= 73016\nX01BVA== 73017\nIFN0cmVhbUxhenk= 73018\nIHNjcmF0Y2hpbmc= 73019\nLnRpY2tldA== 73020\nIHNob3J0Y29taW5ncw== 73021\nZWxsaXBzaXM= 73022\nPWN1cnJlbnQ= 73023\nIGNyZXN0 73024\nIHdob3Jl 73025\nIFBldHJvbGV1bQ== 73026\nY29udGV4dHM= 73027\nIOat 73028\nLXB5dGhvbg== 73029\nKGpzb25PYmplY3Q= 73030\nIFByaXNt 73031\nIHlhY2h0 73032\nt6g= 73033\nZmxhc2hkYXRh 73034\nIGxlaWNodA== 73035\nIE1vcnRvbg== 73036\nIHN0ZXJsaW5n 73037\nX2l0cg== 73038\nX3Vk 73039\nRmFjZXM= 73040\nIGhpcmVz 73041\nZmZh 73042\nJyx7Cg== 73043\nLWNhbWVyYQ== 73044\nX1JFQVNPTg== 73045\nIEhlbGVuYQ== 73046\ncnVn 73047\naWdodGx5 73048\nIHBlcm11dGF0aW9ucw== 73049\nIFRvcmFo 73050\nIOaYr+WQpg== 73051\nCXJlY29yZA== 73052\nw4A= 73053\nLmdtYWls 73054\nRm9ydHVuYXRlbHk= 73055\nKE1vZA== 73056\nT2NjdXJyZW5jZXM= 73057\nIGRlcHJlY2k= 73058\nIHZhZ3VlbHk= 73059\nL1o= 73060\nVk4= 73061\nLnRw 73062\nX2dlbmVy 73063\nIHs6P30iLA== 73064\nd2FobA== 73065\nSUtF 73066\nIExlZ2lzbGF0aW9u 73067\nIGhpbnRlcg== 73068\nIGFkZWw= 73069\nKGhpZ2g= 73070\n5o+Q5Lqk 73071\nL2RvbWFpbg== 73072\nLnRpbGVz 73073\nIFRpYmV0YW4= 73074\nIFN0ZXJlbw== 73075\nIGZpbGVTaXpl 73076\nZ3J1cG8= 73077\naWFl 73078\nU0NQ 73079\nIHZvdWNoZXJz 73080\nIFBhbmRvcmE= 73081\nIGRpc21heQ== 73082\nIGzDqWc= 73083\nIEJlaGF2aW9yYWw= 73084\nY3Jhbg== 73085\nTmVzdGVk 73086\nYWNjb20= 73087\nIE5haA== 73088\nIEJhbHRpYw== 73089\nIERFU1Q= 73090\nIGtpc3Nlcw== 73091\nVmlu 73092\nIHByb3Zva2U= 73093\nX0NvbnRleHQ= 73094\nIHdlZWtkYXlz 73095\ndXJnZW5jZQ== 73096\nTGlr 73097\nIHBsYXph 73098\nIGJsZXY= 73099\nIHJlYWZm 73100\nX1RpdGxl 73101\nKEd0aw== 73102\nIGNlbGxl 73103\nIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 73104\nIEpvb21sYQ== 73105\nIj4vLw== 73106\nTW9udGhseQ== 73107\nLnRvRG91Ymxl 73108\nKGVudHJpZXM= 73109\nIE5SRg== 73110\nKGdjZg== 73111\nIE1pZGRsZXdhcmU= 73112\nfS17 73113\nX0hJREU= 73114\nIGxvd2Vycw== 73115\nKFNlbGY= 73116\n5Y+R6YCB 73117\nIGlzTG9nZ2VkSW4= 73118\nIGJpb2RpdmVyc2l0eQ== 73119\nIG11c2NoaQ== 73120\nKGNhbmRpZGF0ZQ== 73121\nIEFuc2k= 73122\nCXNt 73123\nL2lt 73124\nKycp 73125\nY2Rj 73126\nIGFsZ3VuYQ== 73127\nIHNhY3JpZmljaW5n 73128\nL3ZlbmRvcnM= 73129\nL0FQSQ== 73130\nQWR2ZXJ0aXNpbmc= 73131\nIEdFTkVSQVRFRA== 73132\nIERpc29yZGVycw== 73133\nIFNlcmlhbGl6YXRpb24= 73134\nIHNhdmFnZQ== 73135\nIOm7 73136\nIEluc2lnaHRz 73137\nIHJldm9rZQ== 73138\nIGp1cm9ycw== 73139\nc3VpdA== 73140\nIENhbXBpbmc= 73141\nX3Byb2ZpdA== 73142\nYnVjaA== 73143\nLkFjdGlvbnM= 73144\nIElERUE= 73145\nb2x1bHU= 73146\nTGlrZXM= 73147\n67KI7Zi4 73148\nLkJMTA== 73149\ndsOk 73150\nIGNhcmRp 73151\nIGRpc3Byb3BvcnRpb25hdGVseQ== 73152\nIGluc2FuaXR5 73153\nLmVvZg== 73154\nIFBsYXR6 73155\nLmZpcnN0bmFtZQ== 73156\nIFNsYXNo 73157\nX0NG 73158\namFuZHJv 73159\nIEdhdWdl 73160\nIFN1bmRlcg== 73161\nIEJ1bm55 73162\nX3Vt 73163\n6IGU57O7 73164\nIGlQaG9uZXM= 73165\nIEJJTw== 73166\nIGtobw== 73167\neEZB 73168\nIEZyaWVuZHNoaXA= 73169\nIGNhbG1seQ== 73170\nX3Rocg== 73171\nX0FuaW0= 73172\nIHJhaXNvbg== 73173\nL3Jvb3Q= 73174\nLmdldEJ5SWQ= 73175\nIFNhdmFubmFo 73176\nIEludGVycHJldA== 73177\na2lsbGVy 73178\nCXdn 73179\nXSld 73180\n0YPQtdGC 73181\nS2V5VmFsdWU= 73182\nW0c= 73183\nc3RyZXRjaA== 73184\nLXBsYXlpbmc= 73185\nJTsNCg== 73186\nIHBsYW5r 73187\nIHBlYWNo 73188\nIERlcnJpY2s= 73189\n0LTRgNC10YE= 73190\nIFNoYW0= 73191\nQVBQTElDQVRJT04= 73192\nLnByb2dyZXNzQmFy 73193\nIHRyYW5zaXRpb25pbmc= 73194\nX2RyYWc= 73195\nLlJlcXVlc3RCb2R5 73196\nLk1vYmlsZQ== 73197\nSm9uZXM= 73198\nLlBob3Rv 73199\nIGF4bGU= 73200\nenVn 73201\nL29wdGlvbnM= 73202\nXV0pCgo= 73203\nCW5v 73204\nW2hyZWY= 73205\nIGFncmVnYXI= 73206\nIFNlcnZpY2VFeGNlcHRpb24= 73207\nbmluZ2Vu 73208\nRGlmZmljdWx0eQ== 73209\nQk9PTEVBTg== 73210\nQWRkcw== 73211\nLWhhbmRsZXI= 73212\nIEdhdA== 73213\nIEVib255 73214\n4bqtbg== 73215\nYnJpZ2h0 73216\nIGNvcnBzZXM= 73217\nLkNoZWNrZWRDaGFuZ2Vk 73218\nIG1hdGluZw== 73219\nIEhhcnRmb3Jk 73220\nIHpvdQ== 73221\nIGR1ZGVz 73222\nX2FsZw== 73223\nIEp1bGk= 73224\nb2N1cA== 73225\nINC/0YDQsNCy 73226\nIEthdHk= 73227\nX0ludGVybmFsQXJyYXk= 73228\nLkNvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73229\nTWV0aG9kTWFuYWdlcg== 73230\nIFJlZGU= 73231\nIGxpc3RJdGVt 73232\nLkJvdW5kcw== 73233\nIGF2ZW51ZXM= 73234\nIENvZ25pdGl2ZQ== 73235\nRXh0ZW5k 73236\ndGVjaG5pY2Fs 73237\n4oCa 73238\nc25ha2U= 73239\nRnJvbUNsYXNz 73240\naWxlc3M= 73241\nID17 73242\ndXJldHRl 73243\nL3RocmVhZA== 73244\nRklFTERT 73245\nSVZJTkc= 73246\nIFBPU0lY 73247\nX2Fr 73248\nIC4uLy4uLy4uLw== 73249\nTXA= 73250\nIGFub255bW91c2x5 73251\nVGFyZ2V0RXhjZXB0aW9u 73252\nYWZmZXI= 73253\nYW55dGhpbmc= 73254\nImlz 73255\nZ3Jlc28= 73256\nIExhcmE= 73257\naXphZG9z 73258\nIG1pbmc= 73259\nLnRh 73260\nX3Rocm93 73261\nUmg= 73262\nIHNvbGlkaXR5 73263\nbmFobWU= 73264\naWNoYWdl 73265\nIG1vdW5k 73266\nb2xpbw== 73267\nYXJ5YQ== 73268\nQVNVUkU= 73269\nIHdvaGw= 73270\nIGZ1cm5pc2hpbmdz 73271\nLnNlY3Rpb25z 73272\nIGFwb2xvZ2llcw== 73273\nYXBpa2V5 73274\nIFNjcmV3 73275\nIFdhcnNhdw== 73276\nL2dyYXBo 73277\nIFNBVEE= 73278\neXNlcw== 73279\nL2J1dHRvbnM= 73280\n0LXQvdC+ 73281\nVUdIVA== 73282\nIHBvcm5zdGFy 73283\nUGljdHVyZUJveA== 73284\nX1RleHR1cmU= 73285\nIGHDsQ== 73286\nIG5lcmQ= 73287\nLWNvbm5lY3RlZA== 73288\nIG91dHNpZGVycw== 73289\nIG9wZXJhdGl2ZXM= 73290\nYWJibGU= 73291\nL21hbg== 73292\nIHBsZWFk 73293\nXERi 73294\nIENvdmVyZWQ= 73295\nPVM= 73296\nIEZsYW1lcw== 73297\n77+l 73298\nX3RpdGxlcw== 73299\nIHJldHJhY3Q= 73300\nIGNvbGxhYm9yYXRpbmc= 73301\nIGJlaGFuZA== 73302\nLkRhdGFHcmlkVmlld0NvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73303\nIGxhYm9yZQ== 73304\nIHRvdGFsUHJpY2U= 73305\nIHNwb2lsZXI= 73306\nIGRpcHBlZA== 73307\nIikpew0K 73308\nX1NC 73309\nIExlaQ== 73310\nIGluY2x1c28= 73311\ndmVsbA== 73312\nCXBs 73313\nSW5hY3RpdmU= 73314\nIFVTU1I= 73315\nb25kZW4= 73316\nIHJvdXRlZA== 73317\nLnN0cnVjdA== 73318\n4Ks= 73319\nIE1hbGlr 73320\nIEhFWA== 73321\nIEN1c3Q= 73322\nX1BFUkNFTlQ= 73323\nX2VwaXNvZGU= 73324\n5ouJ 73325\nVkVSUw== 73326\nIGNydWlzaW5n 73327\nQm9va21hcms= 73328\n4oCmCgoKCg== 73329\nY2hlY2tCb3g= 73330\nb3VmbGFnZQ== 73331\nIG5vbnplcm8= 73332\nIGFwcm94 73333\nIFB1cmR1ZQ== 73334\nY29vbg== 73335\nbGVncw== 73336\nIExvdHRlcnk= 73337\nU2xm 73338\nSEFW 73339\nPms= 73340\nPkFu 73341\nIHNsZW5kZXI= 73342\nc2NoZWQ= 73343\nVGVsZWdyYW0= 73344\nUmljaw== 73345\nX1N0cnVjdA== 73346\nX0JD 73347\nIGN1c3RvbWFyeQ== 73348\nIERhbW9u 73349\ndXJjaGFzZWQ= 73350\nIGtvYg== 73351\nIHRpb24= 73352\nKHByb21wdA== 73353\nIGltYg== 73354\neEND 73355\nCVdlYkVsZW1lbnQ= 73356\nIGhlbW9z 73357\n4Kaw 73358\nIENOQkM= 73359\nIEFMTE9X 73360\n57Gz 73361\nIEVOQw== 73362\nLnNjYWxhdGVzdA== 73363\nIFRCRA== 73364\nZ2V0UmVmZXJlbmNl 73365\nIEltcG9ydGVk 73366\n4Liw 73367\nIGl3 73368\nb2xvbg== 73369\nbWls 73370\nOi8vJHs= 73371\nLk1hbmlmZXN0 73372\nIGxo 73373\nIGl0ZW1MaXN0 73374\nX2Fkcw== 73375\nSW5zcGVjdGFibGU= 73376\nIFRvbGVkbw== 73377\nIERpc2FzdGVy 73378\nVXBkYXRlZEF0 73379\nKScpLA== 73380\nIFBBTg== 73381\nRmlsZUNob29zZXI= 73382\nIHl1YW4= 73383\naXRt 73384\nINC10LPQvg== 73385\nIElibg== 73386\nSGF0 73387\nX3Vsb25n 73388\nYXBs 73389\nIFVydWd1YXk= 73390\nw6lueQ== 73391\nIENyYWlnc2xpc3Q= 73392\nZG9jaA== 73393\nIGJpbGU= 73394\nIHByb2R1a3Q= 73395\nIGVsZWN0cm9seQ== 73396\nLkNvdXJzZQ== 73397\nIG1x 73398\ndW5jdHVhdGlvbg== 73399\nLyoqKioqKioqKioqKioqKio= 73400\ndWp1 73401\nTU1NTQ== 73402\nX0xFRw== 73403\nIG5ldXRyb24= 73404\nIHBsdXJhbGl0eQ== 73405\nICsrJA== 73406\nZm91bmRhdGlvbg== 73407\nLkNvbHVtblN0eWxl 73408\nIEhvb3Zlcg== 73409\nLkFDVA== 73410\nIEJyYXo= 73411\nbGVzc29ucw== 73412\nZsO8aHI= 73413\n4KSC 73414\nIENsYXNzaWNz 73415\ncmFpZw== 73416\nIG1o 73417\nIGtldHRsZQ== 73418\nU3RyaWtl 73419\nZXJkYWxl 73420\nRU5UQQ== 73421\nIFRhYmxlQ29sdW1u 73422\nIFNoYWtl 73423\nIFdG 73424\nIExpY2Vuc2luZw== 73425\ndWHDp8Ojbw== 73426\nIHNlY2FyYQ== 73427\nIG5ld1ZhbA== 73428\nU2VsZWNjaW9u 73429\nUHJlZmFi 73430\nZmlnaHRlcg== 73431\nTGF1bmNoaW5n 73432\nJyI7DQo= 73433\nLmxvbg== 73434\nLnV0Y25vdw== 73435\nIEh1bmRyZWRz 73436\nZXN0ZWFk 73437\nIE92ZXJ3YXRjaA== 73438\nX0FGVEVS 73439\nIHJlbW5hbnRz 73440\nKS5c 73441\nIGxvYmJ5aXN0cw== 73442\nIHVuaW50ZW5kZWQ= 73443\nIOuQ 73444\neXN6 73445\nIGxpYnJvcw== 73446\nLXBhZ2Vz 73447\nSU5URVJGQUNF 73448\nIGRldGVybWluaXN0aWM= 73449\nIFVOSVFVRQ== 73450\nIGV0dMOk 73451\nU2luZ2xlTm9kZQ== 73452\nCQkJCQkJCQ0K 73453\nLXN0YXQ= 73454\nIGhhc2hpbmc= 73455\nL2FjY2Vzcw== 73456\ndGVsbA== 73457\nCXVzZXJuYW1l 73458\nIERhdG9z 73459\nQml0Q29udmVydGVy 73460\nOmhvc3Q= 73461\nIGFsdGVybmF0aW5n 73462\nIOKAi+KAiw== 73463\nIHdhdmVmb3Jt 73464\nPEVsZW1lbnQ= 73465\nIENhbnRvbg== 73466\nIGRlc3RhYw== 73467\ndGVudA== 73468\nLmdldE1heA== 73469\nIHN0ZW5jaWw= 73470\nIEFjcXVpc2l0aW9u 73471\nLkdlbmVyYXRpb25UeXBl 73472\nIE1FUg== 73473\nX2NvbWJpbmU= 73474\nIFtdLg== 73475\nX0JJVE1BUA== 73476\nbGRy 73477\nIGNhbnY= 73478\nIEpWTQ== 73479\ncGFycw== 73480\nIGRvd25oaWxs 73481\nRGV0YWlsc1NlcnZpY2U= 73482\nKE5BTUU= 73483\nIHJlanV2ZW4= 73484\nX3dpdGhpbg== 73485\nQWNjZXNzb3J5 73486\nIFPDqQ== 73487\nL2luYw== 73488\nIildCgo= 73489\nUHVibGljYXRpb24= 73490\nX3JvaQ== 73491\nIG1vYnM= 73492\nLk5vQXJnc0NvbnN0cnVjdG9y 73493\nIGV2ZW50b3M= 73494\nLnZlbmRvcg== 73495\nX1NFTEVDVE9S 73496\nw6lmb25v 73497\nPSJb 73498\nIGxhYXQ= 73499\nIGJsdXJyZWQ= 73500\nIEJvcmRlclNpZGU= 73501\neEZGRkZGRg== 73502\nX3dyaXR0ZW4= 73503\nIGplbnRl 73504\nL3Rpbnk= 73505\nLndw 73506\nLnN0eWxlYWJsZQ== 73507\nIENoYXJnZXI= 73508\nIGJhdGhpbmc= 73509\nIFBhbmRh 73510\nw6lsaQ== 73511\nIHBhY2llbnRl 73512\nIGdpb2NoaQ== 73513\nIFZpZXdTdGF0ZQ== 73514\nY2dp 73515\nLmxvZ2ljYWw= 73516\nRG9uYWxkVHJ1bXA= 73517\nLGNvcHk= 73518\nZW1t 73519\nX0xpbms= 73520\nIGluc2lnbmlmaWNhbnQ= 73521\nZmZtcGVn 73522\nL3BheQ== 73523\nX3F1aXQ= 73524\nSU9EZXZpY2U= 73525\nIEV4aXN0cw== 73526\nIGNvb2tz 73527\nanVuY3Rpb24= 73528\nIFRYVA== 73529\nKGVndA== 73530\nYW5pdQ== 73531\nX3BhcnRuZXI= 73532\nIGZhY3VsdA== 73533\nIFVuaWZpZWQ= 73534\nL3NiaW4= 73535\nIE5laA== 73536\nIEthemFraHN0YW4= 73537\ncG9zdGNvZGU= 73538\nIHZlZ2Fz 73539\nIHNlaW5lbQ== 73540\nfV0s 73541\ndGV0 73542\nLXBheW1lbnQ= 73543\nIENvbW1lbnRhcnk= 73544\nIGd1aWRlbGluZQ== 73545\nKTsk 73546\nIENvbnNvcnRpdW0= 73547\n57O757uf 73548\ndmlzbw== 73549\nIEJpbGxpbmc= 73550\naWNpYXI= 73551\nIFR5cGVJbmZv 73552\nCXRyYW5z 73553\nPFRleHR1cmU= 73554\nYXRob20= 73555\nbGF1Z2hz 73556\nIGludGVyY2VwdGlvbnM= 73557\nKEVWRU5U 73558\nRm9yZWNhc3Q= 73559\nVHJhcA== 73560\ndHJ4 73561\nIFdoaXRlcw== 73562\nc3VibWl0dGVk 73563\nYWxnbw== 73564\nIHRyYW5zcG9ydGVy 73565\nb3VuZGFyeQ== 73566\nIEluaGVyaXRz 73567\nIENvbmV4aW9u 73568\nLmNsaWVudFg= 73569\nCXByb2plY3Q= 73570\naGVhcnRiZWF0 73571\nLW90aGVy 73572\nICc7DQo= 73573\nw6ty 73574\nb3JwaW9u 73575\nKGNvcnM= 73576\nIEVMRUNU 73577\nIFBlcmU= 73578\nIHVzZU1lbW8= 73579\nZXdyaXRlcg== 73580\nIHNxdWlydA== 73581\nL2V4dGVuc2lvbnM= 73582\nL2Fz 73583\nLkNMSUVOVA== 73584\nIGdvdXJtZXQ= 73585\nIGF1dG9Db21wbGV0ZQ== 73586\nUkVW 73587\nIGJyYWtpbmc= 73588\nX1NFTEVDVElPTg== 73589\n44Oh44Oz44OI 73590\nX2xpZmU= 73591\nX2dyb3VuZA== 73592\nX3Rlcg== 73593\nc25z 73594\nIFNQT1JU 73595\nkuGe 73596\n5rs= 73597\nVW5pcXVlSWQ= 73598\nIGRyaXA= 73599\nX0JST1dTRVI= 73600\nLW1ldGVy 73601\nZW5kZXo= 73602\nIGV4aGF1c3RpdmU= 73603\nKFNL 73604\nIEJ1cmxpbmd0b24= 73605\nd29vcmQ= 73606\nKHBvdw== 73607\nIHNlYXJjaFRleHQ= 73608\nhYw= 73609\naGVlbHM= 73610\nc3RlbGxlcg== 73611\nLnNpZw== 73612\nWU9VUg== 73613\nLmFsaQ== 73614\nIERhdGFDb2x1bW4= 73615\nIHByb2plY3ROYW1l 73616\nX2ZlY2hh 73617\nIHJlZnVuZHM= 73618\nIHRvcG8= 73619\nIENISUxE 73620\nIE1hcmJsZQ== 73621\nIGZvckNlbGw= 73622\nIHBlc3NpbQ== 73623\nIGNyaXNweQ== 73624\naWZlc3R5bGVz 73625\nIG92ZXJkdWU= 73626\nb2xhcml0eQ== 73627\nIGFtYXTDuHI= 73628\nTWQ= 73629\nUFJFU1M= 73630\nIGluc3VyZXI= 73631\nb2NyYXQ= 73632\nIGZhY2lsaXRhdGVz 73633\nLw0KDQo= 73634\nIGh1cmRsZXM= 73635\nX0hJ 73636\nTGV0dGVycw== 73637\nbWluZWNyYWZ0 73638\nYXh0ZXI= 73639\neWs= 73640\nIGVjb27Ds20= 73641\nINC90LDRhw== 73642\nIFNXSVRDSA== 73643\nQ29uc3VsdGE= 73644\nIE5vcmE= 73645\nQ0tFUg== 73646\nX0NU 73647\nLmFwcHNwb3Q= 73648\nIC8vLS0= 73649\nCUJPT1NU 73650\nX2NvdXJzZXM= 73651\nIHdpbGxpbmdseQ== 73652\n66eM 73653\nZmZk 73654\nZmlsZXI= 73655\nIE1lYXN1cmVz 73656\nIGxlYXNlcw== 73657\nIERvcm90aHk= 73658\nOl0u 73659\nc3Vic2NyaXB0aW9ucw== 73660\nIGNob2lz 73661\nIGFsYW4= 73662\nIGFicmly 73663\nLlBvcHVw 73664\nRXN0aW1hdGVk 73665\nIFBMQU4= 73666\n4LWN 73667\nIEVMRg== 73668\nIGRpc3RhbmNpbmc= 73669\nCWFuc3dlcg== 73670\nIHJ1Z3M= 73671\nS2k= 73672\n4Z+S4Z4= 73673\nR3VpbGQ= 73674\nZXh0cmFz 73675\nY3Bz 73676\nTW9ja3M= 73677\nIHRla3N0 73678\nKmc= 73679\nLnJlcXVlc3RGb2N1cw== 73680\nIGFsdGVyYXRpb24= 73681\nIENhdGVnb3JpYQ== 73682\naW1tZXJz 73683\nIERyb3Bib3g= 73684\nIEFkZHI= 73685\n5byV 73686\nZGVwcw== 73687\nLk1lc3NhZ2VCb3g= 73688\nISwK 73689\nLmdldEI= 73690\nIG1pZ3JhdGVk 73691\nIEhvYmJ5 73692\nIE1n 73693\nLlZlcnRleA== 73694\nIGZvcmdpdmVu 73695\nIERlVg== 73696\nIHdlcmQ= 73697\nIEFyYWJpYW4= 73698\nIFNtb2tpbmc= 73699\nIHN0cmF3YmVycnk= 73700\nIENNUA== 73701\nZGJs 73702\nIERIUw== 73703\nLWVycm9ycw== 73704\nLnBhZw== 73705\nIFJORw== 73706\nIHNoYXZl 73707\nIHR3ZWU= 73708\nIGFzc2VydE51bGw= 73709\nIERlbnNpdHk= 73710\nZG9qbw== 73711\nYWlubWVudA== 73712\nIHBq 73713\nLllFQVI= 73714\nICopKTsK 73715\naWJyYXJpZXM= 73716\nSmV0cw== 73717\nRXhlY3V0aXZl 73718\nX2RlbnNl 73719\nLmdldENvbnRlbnRQYW5l 73720\nY2hhbmRsZQ== 73721\nYWluYQ== 73722\nLXJlZmVyZW5jZQ== 73723\nIGxpYXI= 73724\nIEhFQUxUSA== 73725\nW3Rlc3Q= 73726\nLmlzbmFu 73727\nQ2hhcmxpZQ== 73728\nIHB1cHBlcg== 73729\nIGtpcg== 73730\nOmhpZGRlbg== 73731\naXNWaXNpYmxl 73732\nIGtvbXQ= 73733\nIGFjcXVhaW50ZWQ= 73734\nIERydWlk 73735\nKENz 73736\nLmxhc3RuYW1l 73737\nRFNB 73738\nIGRpc3NvbHZl 73739\n57yW5Y+3 73740\nVmFyaW91cw== 73741\nIERleA== 73742\nX2FuZ2xlcw== 73743\nL2FwaW1hY2hpbmVyeQ== 73744\nIGV4cGxvZGluZw== 73745\nKENoYXJTZXF1ZW5jZQ== 73746\nIEhpc3Bhbg== 73747\nKyspewoK 73748\nLk1vZGVsU2VyaWFsaXplcg== 73749\nUVJTVFVWV1hZWg== 73750\n54K55Ye7 73751\nPXNldHRpbmdz 73752\n4KWB 73753\nUENT 73754\nIElOVEVSTkFM 73755\nIEhVR0U= 73756\nIG1pY3Jvc2NvcGU= 73757\naXNBZG1pbg== 73758\nXHY= 73759\nLnJlcXVpcmVOb25OdWxs 73760\n0L7Qu9C+0LI= 73761\naWNlcmNh 73762\nX1NFTlQ= 73763\nIGRlcGljdGlvbg== 73764\nIFVzZXJDb250cm9s 73765\nIE1lbW9y 73766\nIEFsbG9jYXRpb24= 73767\nIEJlZGZvcmQ= 73768\nIOabtA== 73769\nIHRvcm1lbnQ= 73770\nYXplZXJh 73771\nLlRvZGF5 73772\nIFJlZ2FyZGluZw== 73773\nX0VOQw== 73774\nX1JBTkRPTQ== 73775\nTG9nTGV2ZWw= 73776\nPVI= 73777\nIEdyZWVubGFuZA== 73778\nIHN0cmFpbmVk 73779\nIG1hZ25ldHM= 73780\nIGFsZXJ0Q29udHJvbGxlcg== 73781\nIENocm9uaWM= 73782\nX3JlZ2lzdGVyZWQ= 73783\nIGxpag== 73784\nIEVudHJ5UG9pbnQ= 73785\nIFJlZ2ltZW50 73786\ndWNpZA== 73787\nIENvdWxkbg== 73788\nIEFjdGluZw== 73789\nX3JheQ== 73790\nIG5hYg== 73791\nLXNlcGFyYXRlZA== 73792\nIHBubA== 73793\nQ29hY2g= 73794\nQVRZUEU= 73795\nIHN1cHBsZW1lbnRhdGlvbg== 73796\nYWNlcnM= 73797\nZmxlZXQ= 73798\nSW5wdXRCb3JkZXI= 73799\nIFN0cnVjdHVyYWw= 73800\nIGRlaW5l 73801\nIGJyZXdlcmllcw== 73802\nYW5vaQ== 73803\nIHRyYW5zbGF0b3Jz 73804\nIGVpZ2VuZW4= 73805\nIGRhbmNlcw== 73806\ndGFt 73807\nIENvb3BlcmF0aW9u 73808\nX3JlcXVlc3RlZA== 73809\nIE1hZ2ljYWw= 73810\nCUxFRlQ= 73811\nICIiKSwK 73812\nKy0rLSstKy0rLSstKy0rLQ== 73813\nIE5vaXI= 73814\nIEVzdGltYXRl 73815\nIFRocmVhZFBvb2w= 73816\nIEhlY2s= 73817\nICcqLg== 73818\nVHVya2V5 73819\nIHN1Y2NlZWRpbmc= 73820\nZHJ1Zw== 73821\ndmlv 73822\nIHBvbmVy 73823\nIEphZA== 73824\naXp6bHk= 73825\nZXZlcnl0aGluZw== 73826\nIHt9KS4= 73827\nIEluc3RpdHV0ZXM= 73828\nIG51b3Zv 73829\nIGluaXRXaXRoVGl0bGU= 73830\nIGx1YUw= 73831\nb3duaWs= 73832\nIHRob3I= 73833\nIGtsYXI= 73834\nIG5vdG9yaW91c2x5 73835\nIGRvbmc= 73836\nZW1lbnM= 73837\nX3Byb2plY3Rpb24= 73838\nX0dSRQ== 73839\nLmV5ZQ== 73840\nIHdhdGVyaW5n 73841\nIFRpaw== 73842\nb1M= 73843\nIFN0cmFuZ2Vy 73844\nICANCg0K 73845\ncGFnaW5n 73846\nX2ludGVyc2VjdA== 73847\nIENvbG9uaWFs 73848\nTGlzYQ== 73849\nLnVubGluaw== 73850\nIG1pcA== 73851\nYW51dHM= 73852\nYW1hem9u 73853\nIElERU5U 73854\nc3Rhc3k= 73855\nSnd0 73856\nLS0tLS0tKy0tLS0tLSs= 73857\nIEVWUA== 73858\nQ29udGVudExvYWRlZA== 73859\nCUJJVA== 73860\nLnBhcmVudHM= 73861\nIGFsbG9jYXRpbmc= 73862\nIEdPTEQ= 73863\nfWA7Cgo= 73864\nQUxBUg== 73865\nIHByZWNpc2E= 73866\nRGlzdGluY3Q= 73867\nc2Vp 73868\nIHN1YnBvZW5h 73869\nIHBvbXA= 73870\nIFBvbG8= 73871\nY29l 73872\ndmo= 73873\nLndvcmtmbG93 73874\nZXN0cmU= 73875\nIGNvbm5leGlvbg== 73876\naW1ldHlwZQ== 73877\nLlJvd0NvdW50 73878\nIERoYWJp 73879\nIGVtaXRz 73880\nLkJvcmRlclNpemU= 73881\nKHBvbGljeQ== 73882\nLG1lc3NhZ2U= 73883\nT25Jbml0 73884\nKShf 73885\nIGZpbmVy 73886\nW251bWJlcg== 73887\nIHNjcmlwdHVyZQ== 73888\nUmVmbGVjdA== 73889\nLXRvb2xiYXI= 73890\nKFBBVEg= 73891\nIEVOVFJZ 73892\nKC4uLikK 73893\nLWRvbWFpbg== 73894\nKHN0cmlw 73895\nKSgq 73896\nIGNvbnZleWVk 73897\nIGF0dGVudGl2ZQ== 73898\nw6hnZQ== 73899\nX0xE 73900\nIEdyYW50cw== 73901\nLWhpZ2hsaWdodA== 73902\nIGJyZXRocmVu 73903\n2YjZhA== 73904\nIGRlcXVldWVSZXVzYWJsZUNlbGxXaXRoSWRlbnRpZmllcg== 73905\nYXB1bHQ= 73906\nLmJvdHRvbUFuY2hvcg== 73907\nIG9wY2lvbg== 73908\nIG91dEZpbGU= 73909\ncmVhdGluZw== 73910\nZGlu 73911\nX3NhbXBsZXI= 73912\nCWdsRW5hYmxl 73913\ncHR5cGU= 73914\nX0NPTkRJVElPTg== 73915\nLWVmZmljaWVudA== 73916\nJm8= 73917\nIGpj 73918\n0Kc= 73919\nL0Zvcm0= 73920\nKWZyYW1l 73921\nIGJpbmdl 73922\nX2Nsb3N1cmU= 73923\nSU1B 73924\nKG5leHRQcm9wcw== 73925\nCWNk 73926\nIGdldE1lbnU= 73927\nIGdldFN1cHBvcnRBY3Rpb25CYXI= 73928\nIG1hbmlmb2xk 73929\nWlI= 73930\nY2hhbmdlcg== 73931\nYXNzaW5n 73932\nZGlzaA== 73933\nIE1vdQ== 73934\nLm5ldGZsaXg= 73935\nIHBvc3Rjb2Rl 73936\nIHdvbWI= 73937\nIEFycw== 73938\n4oCmKQ== 73939\nIGxpbmVXaWR0aA== 73940\nRGVhbA== 73941\nYXJhcw== 73942\nIEdyYW50ZWQ= 73943\nIGhvYXg= 73944\nIGRpcmVjdGlvbmFs 73945\nLktleUNoYXI= 73946\nID09Ig== 73947\nIFZlcmRl 73948\nX0tQ 73949\nIHN1cnJvZ2F0ZQ== 73950\nIERVSQ== 73951\ndXB5dGVy 73952\nIHBlbnNl 73953\nIFJBTkQ= 73954\nKGV4Yw== 73955\nIG1pc3VuZGVyc3Rvb2Q= 73956\nIENVVA== 73957\nIOS4rQ== 73958\nCXRp 73959\nX2luc2lkZQ== 73960\nIGJpY3ljbGVz 73961\nIGRlYW4= 73962\nZGlyZWN0aXZl 73963\nLnBlZXI= 73964\naWNpbmE= 73965\nX2l0ZXJz 73966\nIGltcGx5aW5n 73967\nLm9idGFpbg== 73968\nIHBzeWNoaWF0cmlzdA== 73969\ndXNlclNlcnZpY2U= 73970\nZWxpdmVyeQ== 73971\nCXBhcnQ= 73972\nIGh1cnJpZWQ= 73973\nIGJ1bQ== 73974\nIGhlcGF0aXRpcw== 73975\namlk 73976\nJ10+Owo= 73977\nIHVuY29udmVudGlvbmFs 73978\nIGZhc2Npc3Q= 73979\nIFBleQ== 73980\n6K+t 73981\nJyl9PC8= 73982\nLkNsdXN0ZXI= 73983\nIEJpdENvbnZlcnRlcg== 73984\nZWRhdGE= 73985\nzr/PhQ== 73986\n4pSC 73987\nQXBwQnVuZGxl 73988\nLmh0dHBDbGllbnQ= 73989\nIGFwbw== 73990\nQUlOUw== 73991\nIFZG 73992\nX2dpZA== 73993\nIG9kZQ== 73994\nRVJSWQ== 73995\nIFJlY2VpcHQ= 73996\nIENhbmRsZQ== 73997\nIG1pc3Npb25hcnk= 73998\nIENyYW5l 73999\nIFNUQVRFUw== 74000\nYm91dA== 74001\nYXlhcmFu 74002\nLi4uIiwK 74003\nIGl0aW5lcmFyeQ== 74004\nKGxhdGl0dWRl 74005\nIENPTlM= 74006\nL3NpZGViYXI= 74007\nU3BpZGVy 74008\nR1JJRA== 74009\nLmRlYnVnTGluZQ== 74010\nIGAn 74011\nLXllbGxvdw== 74012\nIHJlZmluZW1lbnQ= 74013\nIE1ha2V1cA== 74014\nIERhbm4= 74015\nKCk7DQoNCg0K 74016\nIG92ZXJjb21pbmc= 74017\nIEJhdHRlcg== 74018\nL3BhY2thZ2Vz 74019\nINCy0LjQtA== 74020\nIGFyeQ== 74021\n4oCdPw== 74022\ncmVsbGFz 74023\nIGdydXBvcw== 74024\nIFR5cGljYWw= 74025\nIE1vbnNhbnRv 74026\nSW50ZXJzZWN0aW9u 74027\nIHR5cmU= 74028\nPT09PT09Cg== 74029\nzq4= 74030\nOzsKCg== 74031\nIHRyaXZpYQ== 74032\nX3Rha2Vu 74033\nIHNtdWdnbGluZw== 74034\nIG5hcnJvd2Vk 74035\n4bqpbQ== 74036\nIHBhbGFicmE= 74037\nY2Vh 74038\ncGFydGljdWxhcmx5 74039\nQWNjZXNzVHlwZQ== 74040\nIGNvbGU= 74041\nVG9GaXQ= 74042\nIHZlcmU= 74043\nIENPUw== 74044\nL3ZpZGVvcw== 74045\nICgkKCIj 74046\nIGNyYW5l 74047\nLmhhc01vcmU= 74048\nJHBhdGg= 74049\naXZpc20= 74050\nIHN1cGVydmlzb3Jz 74051\nIEZsb3Jlcw== 74052\ncHJvZ3JhbXM= 74053\nLlppcA== 74054\nIGltcGFjdGluZw== 74055\nIG1vdG8= 74056\nIFRK 74057\ncGVnYXdhaQ== 74058\nX0tJTkQ= 74059\nX2ludGVyZmFjZXM= 74060\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 74061\nIExlYXZpbmc= 74062\nVGV4dFN0eWxl 74063\nYmVpdGVy 74064\nIFdpbm5pbmc= 74065\nLXBhcmFt 74066\nR2FyeQ== 74067\nIFN1bnM= 74068\nYWzEscWf 74069\nZHVjaw== 74070\nIHRocmVhZElkeA== 74071\nIHBvZXRz 74072\nIHBsZWFkaW5n 74073\nIENvcmludGhpYW5z 74074\nZmNj 74075\nYXdhaXRlcg== 74076\nKi0= 74077\nIHBlcnNldmVy 74078\nIGFjdGl2aWRhZGVz 74079\nX291dGxpbmU= 74080\nLXBsYW4= 74081\nLnNjcm9sbFZpZXc= 74082\ncXVhdA== 74083\nIHNhbXN1bmc= 74084\nIGxldmVsaW5n 74085\nIHNwbGl0dGVy 74086\nX2dlb20= 74087\nIHByb21pbmVudGx5 74088\nIFNlZWRz 74089\n5Zyf 74090\ndWFpcw== 74091\nZWZ1bGx5 74092\nSUVudW1lcmFibGU= 74093\nYWRkcw== 74094\ndmVyc2F0aW9ucw== 74095\nIGRpc2FibGVz 74096\nQU5EUk9JRA== 74097\nIFdlaXRlcg== 74098\nX0Zvcm1hdA== 74099\nX3NwbGl0cw== 74100\nIEFjdGl2ZVN1cHBvcnQ= 74101\nKGNzcw== 74102\nX21pY3Jv 74103\nc3RyaWtl 74104\nIENhdXNlcw== 74105\nIHZpc2libHk= 74106\nQ2FuY2VsYWJsZQ== 74107\nIFlvc2g= 74108\nIGRyYWluaW5n 74109\nIGNvbGk= 74110\nYXNsZXk= 74111\nIFJlc3BvbnNpYmlsaXRpZXM= 74112\nIFN1dHRvbg== 74113\nKnRoaXM= 74114\nU2hhcmVz 74115\nLWdyYXBo 74116\nIGVubGFyZ2Vk 74117\nUm91dGluZQ== 74118\nIGZyYW1lYnVmZmVy 74119\nIGFpcmZsb3c= 74120\nIHRyeA== 74121\nIExlaWdo 74122\nIEtlbnM= 74123\nKGhlYXA= 74124\nIHNwaWxsZWQ= 74125\nU0NBTEw= 74126\nIFZlbHZldA== 74127\nYWN0dWFsbHk= 74128\nX0VOQ09ESU5H 74129\nIFdvcm0= 74130\nKSl9Cg== 74131\nIERhbmdlcm91cw== 74132\nIHN1cGVyaW50ZW5kZW50 74133\nLmxvb2s= 74134\nIHNoZWw= 74135\nL2Zz 74136\nU2FmZXR5 74137\n5a6L 74138\nLkRFRklORQ== 74139\nX2ZhY3RvcnM= 74140\nIHBhcnRpZG8= 74141\nIG9wdGltaXppbmc= 74142\nRG91YmxlQ2xpY2s= 74143\nLWNvbW1lcmNpYWw= 74144\nIGxvZ2ljYWxseQ== 74145\nY3ljaA== 74146\ndXJ2ZQ== 74147\nwrU= 74148\nQUlMWQ== 74149\nIHJlYWN0aW5n 74150\nX0VYUFI= 74151\na8O2 74152\nLmxvY2FsaXplZERlc2NyaXB0aW9u 74153\nIGFzdG91bmRpbmc= 74154\nIHBhc3RyeQ== 74155\nIGdsb3NzeQ== 74156\nIGJlaGF2ZXM= 74157\nL2Vj 74158\nIGNsaXBwZWQ= 74159\nIHByb3dlc3M= 74160\nIFVC 74161\nLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74162\nCWFscGhh 74163\nIGV4dHJhdmFn 74164\nIGZpbm5z 74165\nKFNvY2tldA== 74166\nIFVuc2FmZQ== 74167\nIHF1aWVyZQ== 74168\nX2VuY29kZWQ= 74169\nb2x1bWJpYQ== 74170\nIHphYg== 74171\nc3RyaWN0ZWQ= 74172\nIG1uaWU= 74173\nIE1PUw== 74174\nIGF0aGxldGljcw== 74175\nIEtlbmRhbGw= 74176\nIOyYpA== 74177\nQVZBSUxBQkxF 74178\naW5veA== 74179\nX09QQ09ERQ== 74180\nIEl0ZW1UeXBl 74181\nIGNlbnRyaWY= 74182\nIGludGVyc3RhdGU= 74183\nX2Jvb2tz 74184\nLmRlbGl2ZXJ5 74185\nIExpc3Rl 74186\nb3JzaQ== 74187\nX3NlY3VyZQ== 74188\nZ3Jvd3Ro 74189\nIHZlbnRl 74190\nIHBzeWNob2xvZ2lzdHM= 74191\nIENDUw== 74192\ndWRlbmNl 74193\nIGNyYXdsZXI= 74194\nL21hbnVhbA== 74195\nIHRleHRTdHlsZQ== 74196\nIHBhbGluZHJvbWU= 74197\nIGNvbmR1Y3Rz 74198\ndGFibA== 74199\nV2l0aFVSTA== 74200\nL3JpZ2h0 74201\nIERyYQ== 74202\nLk1haWw= 74203\nKHNlYw== 74204\nb2Z0d2FyZQ== 74205\nIHNldWw= 74206\nIHdyaW5rbGVz 74207\nX0ZX 74208\nQXk= 74209\nIEVybnN0 74210\ndW5iaW5k 74211\nIGNvbW1lbmQ= 74212\nX2hvb2tz 74213\nIE1vbmV0YXJ5 74214\nIFFR 74215\ndW5pdE9mV29yaw== 74216\nIEVudGl0eVR5cGU= 74217\nIGhvcm1vbmFs 74218\nLkZBSUw= 74219\nQFNsZg== 74220\nL2NoYW5uZWw= 74221\nc29ubw== 74222\nRGFucw== 74223\nX1JlZ2lzdGVy 74224\nSGFu 74225\nT1JC 74226\nSktMTU5PUA== 74227\ndmVudGVk 74228\nIGxvbmdzdGFuZGluZw== 74229\nIGJnQ29sb3I= 74230\nIDsp 74231\nIFJvYmJpZQ== 74232\nKCIuIg== 74233\nIGFqdXN0 74234\nLmhhbmRsZUNsaWNr 74235\ncmF0aW5ncw== 74236\ncHRlcg== 74237\nIGVyb3RpY28= 74238\nIEplbGx5 74239\nKioqKioqDQo= 74240\nLkRvZXNOb3RFeGlzdA== 74241\nCWJl 74242\nJHRlbXA= 74243\nIj4mIw== 74244\n55u0 74245\nCVB1YmxpYw== 74246\nneyytA== 74247\nIEJ1aWxkaW5ncw== 74248\nLWFsb25l 74249\nLCdc 74250\nIHN3YXBz 74251\nIHBlcnBsZXg= 74252\nX3Byb2Nlc3NvcnM= 74253\nINC00LI= 74254\nIE5ZUEQ= 74255\nUENS 74256\n5q+P 74257\nIGhvamU= 74258\nRWRpdE1vZGU= 74259\nIHZ1bGdhcg== 74260\nIHZlcmRl 74261\nICgpPT57Cg== 74262\nL2Zyb250ZW5k 74263\nIHRlbGVmb25l 74264\nIGxhbnRlcm4= 74265\nLnBhZ2VY 74266\nIER1ZA== 74267\nbGltaXRhdGlvbnM= 74268\nIG5vdGlmaWVy 74269\nIE1lc3NhZ2luZw== 74270\nIWltcG9ydGFudA== 74271\nIHN1cmdlb25z 74272\nKT0o 74273\nRml4ZWRTaXpl 74274\nLlpvb20= 74275\naW5hbg== 74276\nIGNyZWRz 74277\nIEJVRg== 74278\nLlN0YWNrVHJhY2U= 74279\nIHdhcnJhbnRlZA== 74280\nIHNvdXJjaW5n 74281\nIGNvbm5h 74282\nX0ZSRQ== 74283\nIHdvbGw= 74284\nIHJlZmluaW5n 74285\nX0FMTE9XRUQ= 74286\nX212 74287\nIFdvcmNl 74288\nIFNpbmNsYWly 74289\nQ2hlY2tzdW0= 74290\nIHVubG9ja3M= 74291\nIE1hcmtkb3du 74292\nIGZpc2hlcm1lbg== 74293\nRHVi 74294\nIEJvbm5pZQ== 74295\nICAgICAgICAJCg== 74296\nIHZlcno= 74297\nPiw8Lw== 74298\nPjwhWw== 74299\nWyc8ew== 74300\namVj 74301\nIEVyZw== 74302\ncmF0aGVy 74303\nIHBhbGFicmFz 74304\nIFBBQ0tFVA== 74305\nbWlzZQ== 74306\nZGFx 74307\nIE9rdG9iZXI= 74308\nKEdMRlc= 74309\nIEhlbnJp 74310\nIEZvdA== 74311\nIER1bw== 74312\nIE5FUw== 74313\nIHNhbHNh 74314\nIHVuYmlhc2Vk 74315\nQFNwcmluZ0Jvb3RUZXN0 74316\nIG9mZnM= 74317\n5YWs5Y+4 74318\nIGFtb3VudGVk 74319\nRnVsbFBhdGg= 74320\nIHF1YXQ= 74321\nIG1haWRlbg== 74322\nIFN1YnNldA== 74323\nIEFwcGxpY2F0aW9uRGJDb250ZXh0 74324\nbWlycm9y 74325\nbmV4 74326\nLnN0cmVldA== 74327\nc2V0UXVlcnk= 74328\nJHJlc3VsdHM= 74329\nYWRlcm8= 74330\nZ3Jlc3Nvcg== 74331\nX2J1Zw== 74332\naXNzZXI= 74333\nIFNlYXJz 74334\nIGZpbGxDb2xvcg== 74335\nLm1hc2tz 74336\nIERpYWJsbw== 74337\nX0FORFJPSUQ= 74338\n0J7QsQ== 74339\nIGZyZWFraW5n 74340\nIHJpbnNl 74341\nKHBrdA== 74342\nIGJvb2tsZXQ= 74343\nIHNhbmN0aW9uZWQ= 74344\nIHN0cmVhbWVk 74345\ndGFicGFuZWw= 74346\nIFJldHVybmluZw== 74347\nUGxhaW5UZXh0 74348\nTE9ZRUU= 74349\nYWxlc2Nl 74350\n0L7QutCw 74351\nIEZpeHR1cmU= 74352\nYXNzYWRvcnM= 74353\nIGRpc2JlbGllZg== 74354\nIEx1c3Q= 74355\nIHJhZGljYWxz 74356\nLkZlYXR1cmVz 74357\nX2luY2hlcw== 74358\nKHByaW1hcnk= 74359\nIEpNZW51SXRlbQ== 74360\nX3Rha2U= 74361\nIENva2U= 74362\nVW5pdE9mV29yaw== 74363\nIFdDSEFS 74364\nIGNvbnNjaWVudA== 74365\nb25lbnVtYmVy 74366\nUElORw== 74367\nYWJham8= 74368\nXSgi 74369\nLnNhbGVz 74370\nX2hlcmU= 74371\nIG9mZnNldFg= 74372\ndGFnTmFtZQ== 74373\nINmK 74374\nX1JpZ2h0 74375\naWxpZw== 74376\ndGhlVmFsdWU= 74377\nb2NhcmQ= 74378\nIGNvbnN1bHRhbmN5 74379\nIGJsaWo= 74380\nZ29ybQ== 74381\nTmF2aWdhdGU= 74382\nxLFj 74383\nSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u 74384\nX3Zl 74385\nLkNPTlRFTlQ= 74386\ndXJvcGVhbg== 74387\nLnJhZGlv 74388\nIGVudmlzaW9uZWQ= 74389\nIFNPTQ== 74390\nLnNk 74391\nQU5USVRZ 74392\nIENBTExCQUNL 74393\nIGhn 74394\nZGVjcnlwdA== 74395\n566x 74396\nXFF1ZXVl 74397\nIE1JTEY= 74398\nIHJlY3Vyc2U= 74399\nIERhbnRl 74400\nLmdhbW1h 74401\nb3Jrcw== 74402\nKCIiKSkK 74403\nIEdyaW0= 74404\nLm9wZW5n 74405\nIE1pY2hlbGU= 74406\nQW5hbHk= 74407\nIFBydQ== 74408\nX3JlZGlyZWN0ZWQ= 74409\nX3BhbA== 74410\nZmFsbGJhY2s= 74411\nIOWtlw== 74412\nIGRpbm5lcnM= 74413\nR2VuZXJhdGluZw== 74414\nJCIs 74415\naGlzdG9yaWM= 74416\nZ2V0U2ltcGxlTmFtZQ== 74417\nIE1pbGxpb25z 74418\nLWdsb2JhbA== 74419\ncm91dGluZw== 74420\nIGNvbnNvbGlkYXRl 74421\nIHJlY29pbA== 74422\nT2JqZWN0T2ZUeXBl 74423\nIGRlc3BlcmF0aW9u 74424\nQW55d2hlcmU= 74425\nIGdldE1vZGVs 74426\nX2tpbGw= 74427\nb2Jvb2s= 74428\nL2Rpc3BsYXk= 74429\nIi8+Cgo= 74430\nIG1heW8= 74431\nINGB0L/QuNGB0L7Qug== 74432\nIGdvYWxpZQ== 74433\neERG 74434\nIFByZXBhcmF0aW9u 74435\nIGRlcGVuZGFibGU= 74436\nLklOVkFMSUQ= 74437\nLi4uJw== 74438\nbmF0YWw= 74439\nbW9kdWxlTmFtZQ== 74440\nY2FyYm9u 74441\nUEFM 74442\nIG1lZQ== 74443\nIGNhc2luZw== 74444\n6aG555uu 74445\nbmljYXM= 74446\nIEhhbW0= 74447\nIEJhYmU= 74448\nb3dhbmU= 74449\nIHN5bm9ueW0= 74450\nIFFpbg== 74451\naW9j 74452\nZW1vdGlvbg== 74453\nIGZlcm1lbnRhdGlvbg== 74454\nIGN1bXBs 74455\nIEVsZWN0cmljaXR5 74456\nKFJPT1Q= 74457\ndGVzdGVy 74458\nIEh1c2JhbmQ= 74459\nIEJhdQ== 74460\nX01BQ1JP 74461\nYWtlbmluZw== 74462\nICAgICAgICAKICAgICAgICAKICAgICAgICAK 74463\nLmZpbg== 74464\nIENvbmZpZGVudGlhbA== 74465\naWV6 74466\nTUJFUg== 74467\nIHNwZXJtYQ== 74468\nIEhQVg== 74469\ndHhu 74470\nQ09OVEFDVA== 74471\nLlRocm93 74472\nIG11cmFs 74473\nIFR3aXN0 74474\nKCZfX18= 74475\nIGpk 74476\nIGVtcG93ZXJtZW50 74477\nIGRpc3RpbnQ= 74478\nIGJvbWJpbmdz 74479\nT3V0Y29tZQ== 74480\nIHNob3J0ZW4= 74481\n5b6M 74482\nQUNDT1VOVA== 74483\nX2NvdmVyYWdl 74484\nZW5jbw== 74485\nX3JlZmVy 74486\nc2V0TWVzc2FnZQ== 74487\nIHJlcGVyYw== 74488\ncHRpZGVz 74489\nIGRlaXR5 74490\ndWNoc2lh 74491\nKGh0 74492\nLnN1YnNjcmlwdGlvbg== 74493\nIHJlZGlzdHJpYnV0ZWQ= 74494\nIER5bmFzdHk= 74495\nX3Zj 74496\nLWZyYW1ld29yaw== 74497\ncnlmYWxs 74498\nIGdhdGluZw== 74499\nIExvcmVuem8= 74500\nb29kb28= 74501\nIGRpZ2VzdGlvbg== 74502\nIGZvb3Rpbmc= 74503\nCUhhc2hNYXA= 74504\ncmVhbERvbmFsZFRydW1w 74505\nIGFwYWNoZQ== 74506\nKHZhbG9y 74507\nIHBvaXNvbm91cw== 74508\nLlBlcm1pc3Npb24= 74509\nIHBhcmFtb3VudA== 74510\nd2VpdA== 74511\nbGxhbmQ= 74512\nIGh5cG90aGVzZXM= 74513\nIFByeQ== 74514\nIGhvbWVt 74515\nKERldmljZQ== 74516\naW5kaWNl 74517\nZXZh 74518\ncHJlc2VuY2U= 74519\nIEJlbnRsZXk= 74520\nIEVuZGluZw== 74521\nIGRvbWVzdA== 74522\nCXRw 74523\nCWVycm9ycw== 74524\nY29ybmVy 74525\nbGRh 74526\nCgkJCQkK 74527\nX1BFUlNPTg== 74528\nIFNlcmdleQ== 74529\nIFBhcnNlcw== 74530\nLWZpY3Rpb24= 74531\nLkJhY2tncm91bmRDb2xvcg== 74532\nIHNvbW1lcw== 74533\nIGNvb2xlc3Q= 74534\nIHJ1YmJsZQ== 74535\nLmpvYnM= 74536\nIGRyb3duaW5n 74537\nYWRvcmFz 74538\nIHdpbmdlcg== 74539\nIEluY3JlYXNpbmc= 74540\n2YrYqQ== 74541\nQkJCQg== 74542\nKFJvbGU= 74543\nIG9kZGx5 74544\nRGV2RXhwcmVzcw== 74545\nLXV0aWw= 74546\nIFNoZW1hbGU= 74547\ncHJpbWl0aXZl 74548\nIGFmZmlybWVk 74549\nLnJldHVyblZhbHVl 74550\nLWxpdmU= 74551\nIEFjdGlvbkNvbnRyb2xsZXI= 74552\nw6ts 74553\nZXJjdWxvc2lz 74554\nIHByYWt0 74555\nIGdlb3BvbA== 74556\ncGljcw== 74557\nQ0RD 74558\nLkZs 74559\nLnNpZA== 74560\ncmllYmVu 74561\nKHZhcnM= 74562\nK3NlbGY= 74563\nIGludGVyaW9ycw== 74564\nIEF1Z3VzdGluZQ== 74565\nIjpAIg== 74566\nIFN0ZWFsdGg= 74567\nIGdldENvbG9y 74568\nIEdlbnRsZQ== 74569\nfiI6Ig== 74570\nIHdoaW0= 74571\nKCc8Lw== 74572\nIFNTRQ== 74573\nIFZpb2xldA== 74574\nX2NyZWQ= 74575\nIGF0YQ== 74576\nIEF6ZXJiYWlqYW4= 74577\nID8/Pz8/ 74578\nLmV2ZXJ5 74579\nKGNvbm5lY3Q= 74580\nIERyb25l 74581\nIHRvbGVyYW50 74582\nc3VidG90YWw= 74583\nX3NodWZmbGU= 74584\ndXN0YWluYWJpbGl0eQ== 74585\ncHJlZmVycmVk 74586\nIFNFWA== 74587\nIGNvbmdyZXNzbWFu 74588\nIG5hbW9ybw== 74589\nIGhvbm9yYWJsZQ== 74590\nIGFmdGVyRWFjaA== 74591\nIMW8eWM= 74592\nSEFN 74593\nLnRvbQ== 74594\nIGVsb25n 74595\nIFNlcmlvdXM= 74596\nLVNlbWl0aWM= 74597\n0KHRgg== 74598\nIGZsYW0= 74599\ndGVuZXI= 74600\nLlRFU1Q= 74601\nIFRSQUNL 74602\nIFBoaWxpcHM= 74603\nIEFyZW4= 74604\nIEhpY2tz 74605\nb2luZWQ= 74606\nIEZhaA== 74607\naXNzZXVy 74608\nIGNpcmN1bWNpc2lvbg== 74609\nKHR3ZWV0 74610\nIHBvaWw= 74611\nIFNlZW4= 74612\nX01BUFBJTkc= 74613\nIGludmFyaWFibHk= 74614\nIEZ1c2U= 74615\nICc/Jw== 74616\nPXBhc3N3b3Jk 74617\nIOuCmA== 74618\nIElIdHRw 74619\nc3R5cGU= 74620\nZml0bmVzcw== 74621\nLlRhZ3M= 74622\nIOqwnA== 74623\nKERXT1JE 74624\nIHF1YQ== 74625\nIE1hcnZpbg== 74626\nIk0= 74627\nLmlzQXV0aGVudGljYXRlZA== 74628\nLmd1YXJk 74629\nKT8KCg== 74630\nCQkJCQkJCQkJCQkJCQkJCQkJCQ== 74631\nIFNoaXBz 74632\nIHNlbnNpdA== 74633\nfTsNCg0KDQo= 74634\nYWhhaGE= 74635\nIGxpZXV0ZW5hbnQ= 74636\nIEphZ3Vhcg== 74637\nIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74638\nVUNF 74639\nSW5zcA== 74640\nYWludGVy 74641\nX3BvbHlnb24= 74642\nLkRvd24= 74643\nIHRleHR1cmVk 74644\nLnNldEFjdGlvbg== 74645\nb2dy 74646\nIHNjaWVudGlmaWNhbGx5 74647\nIHNocmluZQ== 74648\nIGNsb3VkeQ== 74649\nLkhvdXI= 74650\nUG9zdEJhY2s= 74651\nQVpZ 74652\nX2NhbmRpZGF0ZXM= 74653\nKFNlYXJjaA== 74654\nIGNvbW1pc3Npb25lcnM= 74655\nIEJpZW4= 74656\nIGRvY3RvcmFs 74657\nIEZlZWxpbmc= 74658\nX1ZFUlRJQ0FM 74659\nIEJk 74660\nbmdpbng= 74661\nIOWcqA== 74662\nX2FyZ3Y= 74663\nUlNB 74664\nIGVsZGVzdA== 74665\nLWhlYXZ5 74666\nQ09OTg== 74667\nIEh0dHBOb3RGb3VuZA== 74668\nLWNvbHVtbnM= 74669\nIE5QQ3M= 74670\nIGNhZmVz 74671\nIGfDqQ== 74672\nIHN0YWxscw== 74673\nIGZvcmtz 74674\nIHBvYmw= 74675\nU3RyZWFtcw== 74676\nIGJhc3RhcmQ= 74677\nIFJhcHRvcnM= 74678\nIEdyYW1teQ== 74679\nIEdlaA== 74680\nX1RpY2s= 74681\nKHByZWc= 74682\nIGxpcHN0aWNr 74683\nX3J1 74684\nPEg= 74685\nIMSRaQ== 74686\nLkNhcg== 74687\nIHNwYXJlZA== 74688\nbW9uaWM= 74689\naW5jdGlvbnM= 74690\nQWZyaWNh 74691\nKGRpY3Rpb25hcnk= 74692\nICoqKSY= 74693\nYGBg 74694\nX3ByZXNzdXJl 74695\nbWll 74696\nIFJvbWFuaWFu 74697\nL21hcms= 74698\nIG1haW50ZW5hbnQ= 74699\nIHRyZW4= 74700\nIFBvc3RncmVTUUw= 74701\nUkVMRUFTRQ== 74702\nSlBFRw== 74703\nIGRlZGljYXRl 74704\nTWFrZVJhbmdl 74705\nIHJvYm90aWNz 74706\nYWt0aXY= 74707\nJSUl 74708\nYWFy 74709\ndmlld01vZGVs 74710\nKG1hYw== 74711\ndWNoZXI= 74712\nIGRlYmVu 74713\nTG9jYWxpemF0aW9u 74714\n0L7Qt9Cy0YDQsNGJ0LDQtdGC 74715\nLnNldFRvb2xUaXA= 74716\nLmZhc3Rqc29u 74717\nIHBlcmVubmlhbA== 74718\nLWNoaWVm 74719\na2lzaA== 74720\nIGF0dGlj 74721\nU3VidGl0bGU= 74722\nIFNsYW0= 74723\nIExpdGVyYXJ5 74724\nZXJuZXM= 74725\nINGC0L7Qu9GM0LrQvg== 74726\nIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ= 74727\nLkVycm9yTWVzc2FnZQ== 74728\nYmluYXRpb25z 74729\nIkw= 74730\nIGZvcmJpZA== 74731\nIGxvZGdlZA== 74732\nLkxpc3RCb3g= 74733\nIFBTRA== 74734\nIGN1bHR1cmE= 74735\nVU5DVA== 74736\nIk9uZQ== 74737\nIEd1aWxs 74738\nIEJhdHRhbGlvbg== 74739\nIGNhcmVnaXZlcnM= 74740\nIEtsbw== 74741\nQmVoaW5k 74742\nIHNlYXJjaGFibGU= 74743\nX0JPVU5E 74744\nUk9D 74745\nIHN0ZXJlb3R5cGU= 74746\nIHByZXBlbmQ= 74747\naW50ZXJzZWN0aW9u 74748\nQmFza2V0 74749\nKGxv 74750\nIGZpbGVJbmZv 74751\nIFVJU2Nyb2xsVmlldw== 74752\nZWNlc3NhcmlseQ== 74753\nIENoZXM= 74754\nLWluc3RhbmNl 74755\nIGFwcGFydA== 74756\nIEFtYXI= 74757\nIHJvd0RhdGE= 74758\nIGF5dWRh 74759\nIGNhcmF2YW4= 74760\nX3BpY2tsZQ== 74761\nIGNoYWluaW5n 74762\nKV07Cgo= 74763\nIGJveGVk 74764\nYWVwZXI= 74765\nIEVWRVI= 74766\neW50aGVzaXM= 74767\nLWZhc3Q= 74768\nIOuwsA== 74769\n5Y+v5Lul 74770\nIHZvbHVudGVlcmVk 74771\nIGV4aWc= 74772\nU0lERQ== 74773\nIFBob25lTnVtYmVy 74774\ndWxhaXJl 74775\nIEthZA== 74776\nIGRhcm4= 74777\nIHlhaw== 74778\nIEJsaW5r 74779\nLnNwaW5uZXI= 74780\nIG9yZGVhbA== 74781\nX2VuZW15 74782\nIGdldFM= 74783\nIEJvbw== 74784\nTGluZU51bWJlcg== 74785\nX0xPT0s= 74786\nRUxDT01F 74787\nIHNlYW1z 74788\nIHNhZ2Vu 74789\naXNjbG9zZWQ= 74790\nKHJheQ== 74791\nW2dyb3Vw 74792\nUFRT 74793\nLk5hdmlnYXRl 74794\nIE93bA== 74795\nIGRidXM= 74796\nIGltcGF0aWVudA== 74797\nIEd1cHRh 74798\nKG9iamVjdHM= 74799\nIGFwcmls 74800\nLXF1 74801\nIG91dHJhcw== 74802\nIFRIRU0= 74803\nIEVNQw== 74804\nRW1wbGVhZG8= 74805\nIGdydWI= 74806\nSUFN 74807\nIHZlbm9t 74808\nIHRyYW5zY2VuZA== 74809\nIHZpY3RvcmlvdXM= 74810\nIE1heWVy 74811\nINGC0L7QstCw0YA= 74812\nIEtlbGxleQ== 74813\nSW5wdXRHcm91cA== 74814\nIHJlZmlsbA== 74815\nV2l0aFR5cGU= 74816\nIGNoYXVmZg== 74817\nb2xkZW0= 74818\nX3RpZA== 74819\nIGZsdXNoZWQ= 74820\nXHN5c3RlbQ== 74821\nLnJhbmRyYW5nZQ== 74822\nIFBPU0lUSU9O 74823\nIFRlbmFudA== 74824\nY29udmVyc2lvbg== 74825\nY2FsbGluZw== 74826\nKCkpKSwK 74827\n0L7QvdCw 74828\nIHNpZGV3YXlz 74829\nIGxheA== 74830\nCXJlcA== 74831\nYWVwZXJuaWNr 74832\nIG5lZ2Vy 74833\nIEZseWVycw== 74834\nICJALw== 74835\ndXBha2Fu 74836\nX2VsYXBzZWQ= 74837\ndHViZQ== 74838\nUG9zWA== 74839\nLnNleA== 74840\nIGzDpHNzdA== 74841\nIEdyYXZl 74842\n5Y+C 74843\nKGVtcA== 74844\nKHN0cnRvbG93ZXI= 74845\nY29udmVydGVy 74846\nIFNwb25zb3JlZA== 74847\nKHdvcmtlcg== 74848\nIG1hdHJpbW9u 74849\nQ29tbWlzc2lvbg== 74850\nKGh3 74851\nX1NJR05BVFVSRQ== 74852\nbWVr 74853\nIGFsZ3VuYXM= 74854\nX0VU 74855\naXN0cmluZw== 74856\nTHY= 74857\nU2xpZGVz 74858\nIHdlYWtTZWxm 74859\nIHdr 74860\nIFppZw== 74861\nIHB1YnM= 74862\nIEJSQQ== 74863\nIGZsdW9yZXNjZW50 74864\nY2Fycnk= 74865\nLmVyYg== 74866\nIEluaQ== 74867\nLkRyYXdTdHJpbmc= 74868\nIFNFUA== 74869\ndXR0ZXJz 74870\n2ZE= 74871\nUm95YWw= 74872\nIGNhYmJhZ2U= 74873\nIFN1aw== 74874\nXT49 74875\nIEVkaXNvbg== 74876\nIHNwZWN1bGF0ZWQ= 74877\nLmRvd25jYXNl 74878\nIHRwaA== 74879\nIMOD 74880\nIGd1bnNob3Q= 74881\ncnBt 74882\nIGZsdXR0ZXI= 74883\nIGFueA== 74884\nYXplcw== 74885\nUU9iamVjdA== 74886\nIEZhdm9y 74887\nIG1vZHVsZU5hbWU= 74888\nJnM= 74889\nbGVo 74890\nLldlaWdodA== 74891\nIFdBTA== 74892\nX1ZBUlM= 74893\nIFdhc3Nlcg== 74894\nIG91dGJvdW5k 74895\nIGVyZm9sZ3Jl 74896\nLnZhbG9y 74897\nKGxpZ2h0 74898\nIE1hZ251cw== 74899\nIHpvZWs= 74900\neWg= 74901\nIHN0eWxlc2hlZXQ= 74902\nPm0= 74903\nV2hpdGVzcGFjZQ== 74904\nIFsnLw== 74905\nCVJlcXVlc3Q= 74906\nX2luY3JlYXNl 74907\nLWRpc3RhbmNl 74908\naWNvbG9y 74909\naGNp 74910\nIEtJTkc= 74911\nUFg= 74912\nb2ls 74913\nZW1pbmc= 74914\nbmFtZW50cw== 74915\nRGVmaW5lcw== 74916\nIFstLQ== 74917\nIHZhcmlvcw== 74918\nIFBSRVNT 74919\nLGF4aXM= 74920\nIENvbGxpZGVy 74921\nKX0KCg== 74922\nIGZvcmNpYmx5 74923\nIHN0YWF0 74924\nX1NUQU5EQVJE 74925\nIG9jY3VsdA== 74926\nIGJhcHRpc20= 74927\nIEN1bm5pbmdoYW0= 74928\nX2J1aWx0aW4= 74929\nQ1BG 74930\nW21heG4= 74931\nIFJIUw== 74932\nIE9uZXM= 74933\nKF86 74934\nIGluc2VjdXJpdHk= 74935\nLnJlZ2lzdHJhdGlvbg== 74936\naW1wbGlmaWVk 74937\nIFN5bXBvc2l1bQ== 74938\naHJlYWQ= 74939\nIHF1ZWxsZQ== 74940\nIGZyZW56eQ== 74941\nQ2FsaWJyaQ== 74942\nIFNQRUVE 74943\nb3Vp 74944\nKCldLAo= 74945\nYWNjb3JkaW5n 74946\nIG1jYw== 74947\nIGFzaWF0 74948\nIGFkamFjZW5jeQ== 74949\nIEFibGU= 74950\nIHNhbGRv 74951\nbm9zdGk= 74952\nIGRpbWU= 74953\nZXRyYXRpb24= 74954\nIE1vZGlmaWNhdGlvbg== 74955\nIEhlcmI= 74956\nIHBsYWF0cw== 74957\nIGludGVycGVyc29uYWw= 74958\nIO2ZleyduA== 74959\nYXJtZQ== 74960\nIGNvbWVyY2lhbA== 74961\nIEJhdGVz 74962\nKGNhcmRz 74963\nLmdldENsaWVudA== 74964\nLk5PUk1BTA== 74965\nCVRlc3Q= 74966\nICAgICAgICANCiAgICAgICAgDQo= 74967\nIFJhem9y 74968\nd2Vpcw== 74969\nSVRIVUI= 74970\nIEVOVElUWQ== 74971\nYWdpdA== 74972\nIG1pbmVjcmFmdA== 74973\ncHJvcG9zYWw= 74974\nIHNhbHR5 74975\nYW5kcg== 74976\nIENvbmNsdXNpb24= 74977\nIHBydWRlbnQ= 74978\nIFtA 74979\nIFB1cHBldA== 74980\naWdvbg== 74981\nIEdvdGhhbQ== 74982\nIGNoZWVycw== 74983\nIFNoYXk= 74984\nIGpp 74985\nIEdESw== 74986\nZXhwZXJ0 74987\nIGZ1bmt5 74988\nIFphbQ== 74989\nW05VTQ== 74990\nRGVxdWU= 74991\nX1RXTw== 74992\nXHZpZXdz 74993\nIHByb2pla3Q= 74994\nIGRyb3duZWQ= 74995\na2lkcw== 74996\nLnNoZWV0 74997\nIG5vbmQ= 74998\nIGNvdXJ0ZQ== 74999\nIC4uLgoKCgo= 75000\nIHBpY3R1cmVzcXVl 75001\nIHR1YmluZw== 75002\nKCkuIg== 75003\namV0cw== 75004\nX1B1YmxpYw== 75005\nIEZhcnI= 75006\nIEFyZA== 75007\nT1VSU0U= 75008\nIGthZGFy 75009\nIFByb2dyYW1t 75010\nLmtleXdvcmQ= 75011\nCSAgICAgICAgICAgICAgICA= 75012\naWVkYWRlcw== 75013\nYXRvbG9neQ== 75014\nIER1bmQ= 75015\nPWNvdW50 75016\nIHNsb3dkb3du 75017\nLSIs 75018\nLkZvcmVncm91bmRDb2xvcg== 75019\nUnVucw== 75020\nLlR5cGVPZg== 75021\nJGN1cnJlbnQ= 75022\nIHVwc2NhbGU= 75023\nCXVuaW9u 75024\nKGNoaXA= 75025\ndW1pZGl0eQ== 75026\nPVtdDQo= 75027\nIGhhcnQ= 75028\nICRfWw== 75029\neW5lYw== 75030\nLlVzdWFyaW8= 75031\nIG9jdGF2ZQ== 75032\nIHBvcnRyYXlhbA== 75033\nINC90L7QvNC10YA= 75034\nIE9jY3VweQ== 75035\nX25hbg== 75036\nIFNtYXJ0cGhvbmU= 75037\naGluZA== 75038\nIHdpbmRzaGllbGQ= 75039\nIGxvbmVsaW5lc3M= 75040\nL2NoYXJ0 75041\nIGFjdGl2YXRlcw== 75042\nLnJpYmJvbg== 75043\nIGxhZ2k= 75044\nIHBhcmFjaA== 75045\nSHlwZXI= 75046\nc2NhbGVk 75047\nVGVz 75048\nIEJlZXQ= 75049\nIGRpc3NlY3Q= 75050\nIENpYw== 75051\nIH0sCgoK 75052\nPigpCgo= 75053\nLnN0dWR5 75054\nIGNvbnRyYXN0aW5n 75055\nWkVSTw== 75056\nIHR1bmE= 75057\nIENob3c= 75058\nX3Zh 75059\nZmF2b3I= 75060\nW0luZGV4 75061\nIFBvd2VyU2hlbGw= 75062\nKHByb3Rv 75063\nJykpOgo= 75064\nX2Zvcm1hdHRlcg== 75065\nQ2hyaXN0b3BoZXI= 75066\nT3JOdWxs 75067\nQ0lTSU9O 75068\nX2NvbnN1bWVy 75069\nUGFzdGU= 75070\nKG5vbWU= 75071\nZW50b24= 75072\nIHVucmF2ZWw= 75073\nX2Rvbg== 75074\nIHBhcmVudGhlc2Vz 75075\nIE5VSVQ= 75076\nL10= 75077\nIOKIpw== 75078\nc3RhY2xlcw== 75079\nL2NvbW1lbnQ= 75080\ndXR0aW5n 75081\nIHNsb3BweQ== 75082\nKFt7 75083\nLnNhdg== 75084\ndG9Kc29u 75085\nIOu5hA== 75086\nIFByYXR0 75087\nLm1vZGlmeQ== 75088\nLklzQ2hlY2tlZA== 75089\nIHZlbmV6 75090\nIFNFVFRJTkdT 75091\namF3 75092\nIGZpcmVzdG9yZQ== 75093\nIGNvbnNvcnRpdW0= 75094\nIGthYg== 75095\nIFN1cHBvcnRpbmc= 75096\nIFRoZXNpcw== 75097\nIG5vbmxpbmVhcg== 75098\nIHRleHRib3g= 75099\nLiIiIg== 75100\nIEVuZXJn 75101\nLkpPcHRpb25QYW5l 75102\nIGludGVycnVwdGlvbg== 75103\nw6h0cmVz 75104\nIHNoYWxl 75105\nIFBsYXllZA== 75106\nIHNvY2lhbGU= 75107\nWUdPTg== 75108\nX0JBVENI 75109\nIHRyaW1lc3Q= 75110\nIFByb2NlZHVyZXM= 75111\nIGF0dGVuZHM= 75112\nIiR7 75113\nZXZhbHVhdGlvbg== 75114\nLlByb2dyZXNzQmFy 75115\nIEFsZXhhbmRyYQ== 75116\nY2jDqQ== 75117\nX1NFUVVFTkNF 75118\nIGNyb2NoZXQ= 75119\nUm9z 75120\nIGlobmVu 75121\nICIqKio= 75122\nIGFyb3Vz 75123\nIG1vZHVsdXM= 75124\nX0xJTlVY 75125\nU3RhY2tTaXpl 75126\naWF0aW9uRXhjZXB0aW9u 75127\nLk11dGFibGU= 75128\nIClb 75129\nIHBpaQ== 75130\nZmlmbw== 75131\nX1BJQ0s= 75132\nUHVycG9zZQ== 75133\nKFN0dWRlbnQ= 75134\nIE5pY28= 75135\nZXN6 75136\nL3Nt 75137\nIFBQUA== 75138\nW2lucHV0 75139\n5Y+Y 75140\nIGJsYXN0cw== 75141\nIE11dHVhbA== 75142\ncm9sbGV5 75143\nIHV0aWxpc2Vy 75144\nOlRoZQ== 75145\n5Z+6 75146\nLmRlY29kZXI= 75147\nIG9iamV0b3M= 75148\nIGF3YWtlbmluZw== 75149\nIEVubGlnaHQ= 75150\nCWFsaWdu 75151\nX3Jld3JpdGU= 75152\nL2N1cnJlbnQ= 75153\nIGRhcmF1Zg== 75154\nQ2FudGlkYWQ= 75155\nLG5w 75156\nIHZlbG9jaXRpZXM= 75157\nQ0xS 75158\nIG1pc2luZm9ybWF0aW9u 75159\nIHN0cmVhbWxpbmVk 75160\nIGdyb29taW5n 75161\nIGF6aQ== 75162\nb2xn 75163\nIGNvbnN0aXR1ZW50 75164\nIHdlZQ== 75165\n0YXQvtC00LjQvA== 75166\nIEFsb25zbw== 75167\naWV0Zg== 75168\nY3Rlcg== 75169\nIHRoZXJtb3N0YXQ= 75170\nKEND 75171\nIHN0YWNraW5n 75172\nX2NvbnZlcnRlcg== 75173\nIERpc25leWxhbmQ= 75174\nCWZpbGVz 75175\nSUNJ 75176\nX1RPUElD 75177\nCUVsZW1lbnQ= 75178\nYXJnYXM= 75179\nIFxA 75180\nYW5jb2Nr 75181\nIEJhc2VFbnRpdHk= 75182\nKCItLS0= 75183\ncmJyYWtr 75184\nIG5lZ2F0aXZlcw== 75185\nIHZ3 75186\nPWZvcGVu 75187\nY2hlbWlzdA== 75188\nQXJjaGl2bw== 75189\nIGAu 75190\nIEZPVVI= 75191\nKGFp 75192\nVGFibGVXaWRnZXRJdGVt 75193\nPD8+Pg== 75194\nLnByZWQ= 75195\nVHJhaWw= 75196\nLWZhY3Rvcg== 75197\nIEltYWdlQnV0dG9u 75198\ncGVyaWE= 75199\nIENlbGVicmF0aW9u 75200\nLlJlc3BvbnNlQm9keQ== 75201\ndXJjaGFzZXM= 75202\nIGdldEtleQ== 75203\nIENyYWI= 75204\nIHFp 75205\nIFdpY2s= 75206\nIGNoYXN0 75207\nIC4uLi4uLg== 75208\nIGNvbWVueg== 75209\nIHNoYXJkcw== 75210\nIGTDqWNvcg== 75211\nIGhhbHZlcw== 75212\nUVVFTkNZ 75213\nIHBvd2VyaG91c2U= 75214\nTElORw== 75215\nQ2xhc3NMb2FkZXI= 75216\nY2VudHJl 75217\nLXNlbmQ= 75218\nbWFo 75219\nIHNocmVkZGVk 75220\nIFRJRkY= 75221\naW5rYQ== 75222\nLgoKCgoK 75223\nIGRlc2lnbmF0ZQ== 75224\nIE5pZ2h0bWFyZQ== 75225\nIEdlbmV0aWM= 75226\nX2NoYW5jZQ== 75227\nKGFuaW1hdGlvbg== 75228\ncXVpbGE= 75229\nX3NwZWNpZXM= 75230\nTkVZ 75231\nb3lzdGljaw== 75232\ncmVsbG8= 75233\nzqw= 75234\nIGRpdmlzaXZl 75235\nIFJFQw== 75236\nIHN0dW1ibGU= 75237\nKGZha2U= 75238\nIExhY2U= 75239\nYW50YWdlZA== 75240\nYWtlc3Q= 75241\ncHJvbW90aW9u 75242\nIEZvd2xlcg== 75243\nPWNlbnRlcg== 75244\nIENpdWRhZA== 75245\nUmFkaQ== 75246\nIFNsZWVwaW5n 75247\ndXRyb24= 75248\nIHF1b2k= 75249\nIFJBRA== 75250\nIGV4cG9uZW50aWFsbHk= 75251\nIEJyZWVk 75252\nIG1vbm9wb2w= 75253\naGlnaGVzdA== 75254\neG1sbnM= 75255\nSW50UHRy 75256\nIHR1dHRl 75257\nIFJlZnJpZ2Vy 75258\nIOmhtemdog== 75259\nIHpvbmRlcg== 75260\nbGJyYWtr 75261\nO2VsZW1lbnQ= 75262\nIEhlZA== 75263\nUmVsYXRpb25z 75264\n64U= 75265\nQ29ycmVv 75266\n5aC0 75267\nIE1pZ2h0eQ== 75268\nQU5HTw== 75269\nX2NvbXBpbGU= 75270\nLmdldENtcA== 75271\nIGludmFkZQ== 75272\nLnNwcmluZ2Jvb3Q= 75273\nIFR1bmU= 75274\nX3NuYXA= 75275\nX0ZFRUQ= 75276\nIGRlY2lwaGVy 75277\nPXNpemU= 75278\nX2ZyZQ== 75279\nIFRpbGxlcnNvbg== 75280\n0LjQutCw 75281\ndGlnaHQ= 75282\nIGN1bHByaXQ= 75283\nUlRM 75284\nIFBhcmU= 75285\nKHB1Yg== 75286\nZWdvdg== 75287\nIHBvbnRv 75288\nIGNvbnN1bA== 75289\nSlNJbXBvcnQ= 75290\nIHZlcndlbmRldA== 75291\nIEJvb3N0ZXI= 75292\n5b6F 75293\nIGNhcnJvdA== 75294\ndmVyaWdl 75295\nKExQ 75296\nIHd4VA== 75297\nIGltcHJvcGVybHk= 75298\nIik6DQo= 75299\nIHN1Y2U= 75300\nL21vZGFs 75301\nIElDVA== 75302\nLikuCgo= 75303\nX21hcmtz 75304\nIENhY2hlZA== 75305\nIEN1cnJpY3VsdW0= 75306\nQnM= 75307\nCUpPcHRpb25QYW5l 75308\nm4Q= 75309\nIGNvZ25pdGlvbg== 75310\nIE5lZ290 75311\nPXJlc3VsdA== 75312\nX0ZvbnQ= 75313\nYXJpbmU= 75314\nIGNvbnNwaWM= 75315\nIENhbGN1bGF0aW9u 75316\nIENFT3M= 75317\nLXRyYW5zcGFyZW50 75318\nIEJlcmVpY2g= 75319\n56iL5bqP 75320\nLmh5 75321\nLkFsaWdu 75322\nIGhvcGVsZXNz 75323\nIGNvbG9tYg== 75324\ndXJiZWQ= 75325\nIFNBWA== 75326\nIGVpbno= 75327\nKHpvbmU= 75328\nIG11enpsZQ== 75329\nIHRyZXNwYXNz 75330\nIEFicmFtcw== 75331\nIGNvbXDDqXQ= 75332\nIFNhbmN0dWFyeQ== 75333\nIE5TVGV4dEFsaWdubWVudA== 75334\nIHN0YXY= 75335\nIHByYWdtYXRpYw== 75336\nc3RyZW5ndGg= 75337\nV2l0aE9wdGlvbnM= 75338\nLmJhbmQ= 75339\nYXBoYWVs 75340\nQXVzdHJhbGlhbg== 75341\nIE9TRXJyb3I= 75342\nTWFuY2hlc3Rlcg== 75343\nSWRl 75344\nXFJlc291cmNl 75345\n0L7QtNC10YDQtg== 75346\nIHppZQ== 75347\nSGFybmVzcw== 75348\nLlR3ZWVu 75349\nY2Ftcw== 75350\n4pyU 75351\nLXNjYWxhYmxl 75352\nLW9r 75353\nIGpsb25n 75354\nIE9sc29u 75355\nIE9ha3M= 75356\nLnNsaW0= 75357\nIHPFgg== 75358\nIG5ld09iag== 75359\nLkludmVudG9yeQ== 75360\nIGtlbm4= 75361\nIG5pZ2h0bWFyZXM= 75362\naXJjbGVz 75363\nLm50 75364\nZ3Jlbg== 75365\nIFRFTg== 75366\nIFNjb3Rz 75367\nIERpc2FiaWxpdHk= 75368\nX21hbmlmZXN0 75369\nLnNpZGViYXI= 75370\nIHNodWZmbGVk 75371\nIGh1bWlsaXR5 75372\nLnRhcA== 75373\nIEdyYWlu 75374\nbm90aWNlZA== 75375\n77yJ44CC 75376\nX2hwcA== 75377\nIGRpbGF0aW9u 75378\nIGhhbmRpY2Fw 75379\nZ2V0RGF0ZQ== 75380\nIGR6aWHFgg== 75381\nJykuJzwv 75382\ncmVjb3Zlcg== 75383\neXNp 75384\nKGdyYXk= 75385\nYWhrYW4= 75386\nIGludGVyZmVyaW5n 75387\nX1RPVUNI 75388\nX3JlZHVjdGlvbg== 75389\nQWx0ZXI= 75390\nIGN1Yw== 75391\nRXhwZXJ0 75392\nIEx1bXA= 75393\nWzpd 75394\nIHJlbG9j 75395\nIGNvbmR1Yw== 75396\nQ2hhcnNldHM= 75397\nLmxpc3RlbmVycw== 75398\nLWludmVyc2U= 75399\nIHN1bW1vbnM= 75400\nIMO6bmljbw== 75401\nIE9W 75402\nIFNpY2hlcg== 75403\nIEpGYWN0b3J5 75404\nLmdldEJvdW5kaW5nQ2xpZW50UmVjdA== 75405\namg= 75406\nIHNrZWxldG9ucw== 75407\nIEFzaWFucw== 75408\nIEFNQw== 75409\naXNlbGVjdA== 75410\nLmNsaWVudEhlaWdodA== 75411\nKGZy 75412\nSGFzRm9yZWlnbktleQ== 75413\nLnJlbGF0aXZl 75414\nINiu 75415\nIG11bHRpY3VsdHVyYWw= 75416\nX0NPTEw= 75417\nIG1pY3JvYmlhbA== 75418\nIGltcG9ydGFudGVz 75419\nU3BhaW4= 75420\nIGN5bGluZGVycw== 75421\naWVuaWU= 75422\nX09XTkVS 75423\nKERJUw== 75424\nIGZhbmRvbQ== 75425\nKG54 75426\nIGFwbGljYWNpw7Nu 75427\nb2NhdG9y 75428\nZXNzaWFu 75429\nIENsYXVkZQ== 75430\nIGludG9sZXJhbmNl 75431\nxYJlbQ== 75432\nIFNlbWFudGlj 75433\nLk1pZGRsZVJpZ2h0 75434\nQVJFU1Q= 75435\nIHNpZXZl 75436\nxLHEn8Sx 75437\naWNhYmxl 75438\nZXJnaWM= 75439\nIGJhdHRsZWQ= 75440\nb3JiaXQ= 75441\nKXx8KA== 75442\ndWVsZQ== 75443\nIGZhc2NpbmF0aW9u 75444\nIGTDpQ== 75445\nIFRpZ2h0 75446\nX0lOQ1JFRg== 75447\nLklzU3VjY2Vzcw== 75448\nLE8= 75449\nIHN0w7hy 75450\nIHByZXNzdXJlZA== 75451\nLlRSVUU= 75452\nIFRob3VzYW5k 75453\nIGdlbWVpbnM= 75454\nIHpi 75455\nIHNwaXJpdHVhbGl0eQ== 75456\nIFpldXM= 75457\nIFBvd2VyZnVs 75458\nYmF0dGVyeQ== 75459\naXN0ZXM= 75460\nIO2D 75461\nLnNoaXJv 75462\nIEhpcHA= 75463\nZGVjbHR5cGU= 75464\nLmpmYWNl 75465\nLnRlbXBlcmF0dXJl 75466\nIG1hcnF1ZQ== 75467\nX2JhZw== 75468\nQXR1YWw= 75469\ncHJpY2luZw== 75470\nQ2xlYXJseQ== 75471\nX0Fic3RyYWN0 75472\nw6lr 75473\nYWhydW5nZW4= 75474\nSW5zdHI= 75475\nCQoKCg== 75476\nIGNoZXdpbmc= 75477\nIENvYWNoaW5n 75478\nJExBTkc= 75479\nbWFsbG93 75480\nIHNlcmlvdXNuZXNz 75481\nX2N1dG9mZg== 75482\nIFF1YXJ0ZXJseQ== 75483\nfScpCgo= 75484\nIikpKTsKCg== 75485\n6KeE 75486\nLlBvc2l0aXZl 75487\nLXBv 75488\neGl0bw== 75489\nLlJhZA== 75490\nIGJyaXNr 75491\nIExpZmVjeWNsZQ== 75492\n5pWw5o2u5bqT 75493\nZmF0YWw= 75494\nIHhwb3M= 75495\nLkRldGFpbA== 75496\nZW5hbA== 75497\nTUFUQ0g= 75498\nIGhlZWQ= 75499\nIGFmcmljYW4= 75500\nRGFkb3M= 75501\nYmVyYXBh 75502\nIGhlbGY= 75503\nJywnJyw= 75504\nIGVudHJlcHJlbmV1cnNoaXA= 75505\nIGNlcnRz 75506\nZWNl 75507\nPnI= 75508\nX2ZpeHR1cmU= 75509\nIHBvb2xpbmc= 75510\nIG1vZ2VsaWpr 75511\nIHNldERhdGU= 75512\n5pS/ 75513\nLWNvbXBsZXRl 75514\nX1JBRElP 75515\nIGt1bA== 75516\nIGdvYg== 75517\nX1NMQVZF 75518\nIGZ1cnJ5 75519\nIE5VSVRLQQ== 75520\nSUxJVElFUw== 75521\nIG5vY2hl 75522\nIGN1ZmY= 75523\nIGNvbnRlc3RhbnRz 75524\nIFdW 75525\nIHBhc3Nwb3J0cw== 75526\nIMWC 75527\nIE5haWw= 75528\nX2RlY2ltYWw= 75529\nYXN0bGU= 75530\nIFNvbGRpZXJz 75531\nUmVjaXBpZW50 75532\nIGNvdXJzZXdvcms= 75533\nIGltZQ== 75534\nIFNlYXRz 75535\nX0RM 75536\nIGNvbnN1bHRhdGlvbnM= 75537\nX0FEVg== 75538\nIElrZWE= 75539\nIG9maWNpYWw= 75540\nIHJlZ2ltZW50 75541\nIEJhdGhz 75542\nLXBpbg== 75543\nX0JVQ0tFVA== 75544\nQUJDREVGR0hJSktMTU5PUA== 75545\nIl0pKTsK 75546\nPE1lc2g= 75547\nIix7 75548\nIGRlcml2ZXM= 75549\n4oCcRm9y 75550\nIFl1Z29zbA== 75551\naXNFbmFibGVk 75552\nIHNvbGx0ZW4= 75553\nIHBldGl0aW9ucw== 75554\nb3ZlcmFsbA== 75555\nIGdldFRvdGFs 75556\nX0hJTlQ= 75557\nTWludXM= 75558\nIGFub21hbGllcw== 75559\nIFBpY2t1cA== 75560\nPT09Jw== 75561\nbGVpdHVuZw== 75562\nIERlaw== 75563\nWVNJUw== 75564\nLnNlc3Npb25z 75565\nIGNhcmM= 75566\nX0l0ZW1z 75567\nIGludGVybWl0dGVudA== 75568\nLkpzb25Qcm9wZXJ0eQ== 75569\nIG1NYXA= 75570\nIEthaw== 75571\nYWluY29udHJp 75572\nX3NlZWs= 75573\nIHVuYW1l 75574\nX3B1dHN0cg== 75575\nRmQ= 75576\nTGltaXRlZA== 75577\nc25vdw== 75578\nIFBhdmlsaW9u 75579\nIEV4YWN0 75580\nIHBvc3Rpbmdz 75581\nCWRpc3Q= 75582\nPHN0ZGxpYg== 75583\nTGlnaHRz 75584\nIGZpbHRybw== 75585\nV29ya2Vycw== 75586\nIHN5c2xvZw== 75587\nR2lybHM= 75588\nIEd1bQ== 75589\nX3llYXJz 75590\nJ319Cg== 75591\nIGjDpHQ= 75592\nZ2F5 75593\nKHByb2I= 75594\nZWxsYXM= 75595\nIHdpbHQ= 75596\nLm9wdGltaXpl 75597\nX0RVTVA= 75598\nKFhNTA== 75599\nIERYR0k= 75600\nIG3DqXRo 75601\nSVRJWkU= 75602\nZWxlY3Ryb24= 75603\nLmN6 75604\nIHN1YnNldHM= 75605\nIHJlc3Bvc3Rh 75606\nIGJlYWQ= 75607\nwrsu 75608\nIE9TQw== 75609\nJnBhZ2U= 75610\nZ3Bz 75611\nYW5pYW4= 75612\nUHVycGxl 75613\nIGFjcm9ueW0= 75614\nUk9XTg== 75615\nQXVkaXQ= 75616\nIGNvdXJpZXI= 75617\nYWxpZQ== 75618\nIFdhc3M= 75619\nIGF1ZGl0cw== 75620\nIFBPVg== 75621\nIEZhY2lhbA== 75622\nX3N0cmNtcA== 75623\nICsl 75624\nICAgICAKCg== 75625\nYCk7Cgo= 75626\nRUhJQ0xF 75627\nWyJA 75628\nLW5hdGlvbmFs 75629\n6ZuF6buR 75630\n6L2v6ZuF6buR 75631\nX2NvZGlnbw== 75632\nIHVucXVlc3Rpb24= 75633\naWxtaW5ndG9u 75634\ncmVxdWVzdENvZGU= 75635\nIElX 75636\nLnN0cmF0ZWd5 75637\nIFNZTUJPTA== 75638\nIGdyw7bDnw== 75639\nX2JlaGF2aW9y 75640\nIHJlZnJlc2hUb2tlbg== 75641\nIG1vbmc= 75642\naW1lbnRhcnk= 75643\nIFNob3Bz 75644\nKCc/ 75645\nX2hpZ2hsaWdodA== 75646\nX2xleA== 75647\nIGlsbHVtaW5hdGVk 75648\nIHBhbHA= 75649\nLWluc2VydA== 75650\nIHN0cml2ZXM= 75651\nIGZvcnRz 75652\nIGVtYm9kaW1lbnRz 75653\nbXBqZXM= 75654\nX1RPTw== 75655\nIGRyYWdnYWJsZQ== 75656\nIGltbWVyc2lvbg== 75657\ncGlucw== 75658\nIFJlZ2lzdHI= 75659\nIEZyZWVCU0Q= 75660\nX3hsaW0= 75661\nIFR1bHNh 75662\nU25hY2tiYXI= 75663\nL2RhdGU= 75664\nIGRhdm9u 75665\nIGF1dG9yZWxlYXNl 75666\nIHZhY2F0aW9ucw== 75667\nCQkgCQ== 75668\naWNlcHM= 75669\nIFJhbXA= 75670\nIEN5bnRoaWE= 75671\nX3BvcHVsYXRpb24= 75672\nJCQk 75673\nIFRBUg== 75674\nZW5nYQ== 75675\nIHB1cw== 75676\nIOW5 75677\nIHRpbWVzdGVw 75678\nTGlmZXRpbWU= 75679\nIGZpbG1lcg== 75680\nWVNU 75681\nIEdhemV0dGU= 75682\nIG91dHNpZGVy 75683\nIEVYUE9SVA== 75684\nR09SSVRITQ== 75685\nLmZsZXg= 75686\nIFJvb3Rz 75687\nKHBpeGVs 75688\nemN6ZQ== 75689\nYWlyaWU= 75690\nIG92ZXJsb2FkZWQ= 75691\nU1RSQUNU 75692\nIENvdXJpZXI= 75693\n44GW 75694\nY29udGluZW50 75695\nRnJlZA== 75696\nIHNlbXA= 75697\nIFN0ZWxsYQ== 75698\nIGRvdWJ0ZnVs 75699\nYWRtaW5z 75700\nIG9wdGluZw== 75701\nTE9UUw== 75702\nIG1hbmlmZXN0bw== 75703\nLWZvbGRlcg== 75704\nX2Ryb3BvdXQ= 75705\ndXR1cmVz 75706\nw612ZWlz 75707\nYWNoaWV2ZW1lbnQ= 75708\nIGNveQ== 75709\nZmFpdGg= 75710\nX0hBTEY= 75711\naXJlY3RlZA== 75712\nIGNvbnRhdG8= 75713\nU2VtYXBob3Jl 75714\nUHNp 75715\nIHZpdGFsaXR5 75716\nIEZsYXRCdXR0b24= 75717\nSXRlbVR5cGU= 75718\nIGltcGVjYw== 75719\nIGJ1b3k= 75720\ndWlu 75721\nIHNreXJvY2tldA== 75722\nIFNsYXllcg== 75723\nIFJDTVA= 75724\nIFNldmVudGg= 75725\nX0ludGVyZmFjZQ== 75726\nIGZpZXJj 75727\nc3RhdGlvbnM= 75728\nIEdyYWY= 75729\nbGljZWQ= 75730\nIGVudW1lcmF0b3I= 75731\nQ29udGFpbmVycw== 75732\nIG9p 75733\nw4fDg08= 75734\nLXRvbg== 75735\nUkVQ 75736\nKGZsb3c= 75737\nLmNvb3Jk 75738\nR2Fi 75739\nIE1vcnBo 75740\nIFpvZQ== 75741\nIGhhcmJvdXI= 75742\nLm1lc3NhZ2luZw== 75743\nX29wdGlvbmFs 75744\nIEJhc2VBY3Rpdml0eQ== 75745\ncmVzZW50ZXI= 75746\nIG5ieXRlcw== 75747\nIGNvdXJhZ2VvdXM= 75748\nPSE= 75749\nJ0l0 75750\nIGZvcnM= 75751\nIGNvcnJpZG9ycw== 75752\nIEJFRU4= 75753\nIGZ1c2Vk 75754\nPWltYWdl 75755\nLkdyaWRWaWV3 75756\nIHNlbWVu 75757\naWdyb3Vw 75758\ndXB0aW1l 75759\nIFhC 75760\n5o6S5bqP 75761\nIGludGVncmF0ZXM= 75762\nX09D 75763\nIGJhaWxvdXQ= 75764\nIHRlc3Rl 75765\nIG9jdXA= 75766\nYXVsZWQ= 75767\nX29kZA== 75768\ncGdh 75769\nIEFTVVM= 75770\nIFRTUg== 75771\nIG9jY3VwYW50cw== 75772\nU2V0VGl0bGU= 75773\nU2NoZWR1bGVycw== 75774\nIGJla29tbWVu 75775\nQnJpZ2h0 75776\nIE1haW5Gb3Jt 75777\nXygn 75778\nRnJvbUFycmF5 75779\nIGluZGljYQ== 75780\nSEFORA== 75781\nT3JkZW4= 75782\nIFRlbXBlcg== 75783\nLnN0YXR1c1RleHQ= 75784\ncG9saXRpY2Fs 75785\nIFBlcmN5 75786\n44CCCgoKCgoK 75787\nLnNldFg= 75788\nZ2V0TGlzdA== 75789\naG9sZXM= 75790\nUGl4 75791\nIG91dHNvdXJjaW5n 75792\nIG1lc3NhZ2VJZA== 75793\nIGdldFNlc3Npb24= 75794\nIFZJUg== 75795\nT2ZGaWxl 75796\nIFNwYXRpYWw= 75797\nLkZsb2F0RmllbGQ= 75798\nKShfXw== 75799\nIFN3aW1taW5n 75800\nQUNMRQ== 75801\nIHNlbnRpcg== 75802\nIHBsdW5nZWQ= 75803\nIGF1am91cmQ= 75804\nZ3VuYWthbg== 75805\nKHZvbHVtZQ== 75806\nIGNyYXRlcg== 75807\nLnhscw== 75808\nwoDCmQ== 75809\nUmVuZGVyV2luZG93 75810\nLnVzZXJtb2RlbA== 75811\nIGZ1bmN0b3I= 75812\nRG9tYWlucw== 75813\naW50ZXJwcmU= 75814\nIGFibm9ybWFsaXRpZXM= 75815\nYXJnaW5n 75816\nRGVtb2NyYXRz 75817\nIHBhbG1z 75818\n4qCA 75819\nw7hk 75820\nKkE= 75821\nRnJvbURhdGU= 75822\nfFs= 75823\nIEFsdGVybmF0ZQ== 75824\nIHB1ZG8= 75825\nIGNvbmRlbnNlZA== 75826\nKHBsYW4= 75827\nZGVsaXZlcg== 75828\nIGJ1bGxldGlu 75829\nJ11dLA== 75830\nIGNyw6llcg== 75831\nLWlw 75832\nV3M= 75833\nIiIiLAo= 75834\nIGlrZWE= 75835\nIHZpc2l0ZQ== 75836\nIG11bHRpcw== 75837\nUmVzdWx0YWRv 75838\nIFBob3RvZ3JhcGhlcg== 75839\nLi4uJywK 75840\nIG1pZ2xpb3Jp 75841\nIFRocmVhZHM= 75842\nZ2V0U3R5bGU= 75843\nZXJhw6fDo28= 75844\nPFRTb3VyY2U= 75845\nIEdpbmc= 75846\nJ10iLA== 75847\nIHNpZ25hbGVk 75848\nU3VwcHJlc3NMaW50 75849\nIGR3b3Jk 75850\nIEh1bnRpbmd0b24= 75851\nIEFBUA== 75852\nQU5HTEVT 75853\nLmNyZWRlbnRpYWxz 75854\nc3dhZ2dlcg== 75855\nLWNvbnNvbGU= 75856\nIi0t 75857\nLlRleHRJbnB1dA== 75858\nIE5PUlRI 75859\nIG5pZ2h0bHk= 75860\nLkZPTlQ= 75861\nIHF1b3RpZW50 75862\n5Lmf 75863\nIHNjaMO2bg== 75864\nIFBsYW5uZXI= 75865\nIHJlYWRsaW5l 75866\nIGNvbmZyb250aW5n 75867\nYH0= 75868\nSXRlbUNvdW50 75869\nCWFjdGl2ZQ== 75870\nIHLDqXBvbmQ= 75871\nZWxtZXQ= 75872\nIGdpbW0= 75873\nLG5vbmF0b21pYw== 75874\nIEFDVElWRQ== 75875\naGV1cmU= 75876\nL1ByaXZhdGU= 75877\nIG1lYw== 75878\nLlNlY3JldA== 75879\nIENJUw== 75880\nxYJ1Zw== 75881\nKHBlcmlvZA== 75882\nIGxsZWdhcg== 75883\ndXJpYQ== 75884\nRGVzY3JpYmU= 75885\nIHBhcmVqYQ== 75886\nIFZlZA== 75887\nLWVmZmVjdHM= 75888\nIFBhcnNpbmc= 75889\nLXJlc291cmNl 75890\nIGFiYQ== 75891\nICosCg== 75892\nIGFuYXRvbQ== 75893\nICgqKSg= 75894\nLXJlYWw= 75895\nIFZlbnR1cmVz 75896\nIFNoaWVsZHM= 75897\nIFVuaXZlcnNpdGllcw== 75898\nUFJFU0VOVA== 75899\nIFFMYXRpbg== 75900\nxaU= 75901\nIFdpbGV5 75902\nQWFyb24= 75903\nIHJhY2lhbGx5 75904\nIE5hZHU= 75905\nIGh0dHBSZXNwb25zZQ== 75906\nw610aWNh 75907\nIOuwqQ== 75908\nIGdyw6F0aXM= 75909\n5LuL 75910\nb21hcA== 75911\nIGFub24= 75912\nCXBvcA== 75913\nYXZhdGFycw== 75914\nIHN1YnBhcmFncmFwaA== 75915\nZHpp 75916\nUHJvamVjdGlsZQ== 75917\nRFRW 75918\nbGlzdGVuaW5n 75919\nX3JlZ2VuZXJhdGlvbg== 75920\nIFNoZWx0ZXI= 75921\nPFZlcnRleA== 75922\nL21k 75923\nKGxl 75924\nIHZhaw== 75925\nc2VsZWN0ZWRJbmRleA== 75926\nX10= 75927\nIFN5bnRoZXRpYw== 75928\nYXBwSWQ= 75929\nIEZpcmVk 75930\nIHBhbXBo 75931\nX2xhdGVuY3k= 75932\naW5maWxl 75933\nKGNyaXRlcmlh 75934\nc2VyaWFsaXphdGlvbg== 75935\nUkNU 75936\nCWV2 75937\nIFNDSA== 75938\nIE9wdGljYWw= 75939\nIHN0aXJyZWQ= 75940\nIFBvdGlvbg== 75941\nZXRoaWNhbA== 75942\nOjp7Cg== 75943\nIFBlbmd1aW5z 75944\nUEhZ 75945\nRGVjaXNpb24= 75946\na2FydA== 75947\nIGV4cG9ydGVycw== 75948\nIFBvbHllc3Rlcg== 75949\nY29udHJlcw== 75950\nIExhd3Nvbg== 75951\nIEVtcGxveWVy 75952\nIHNhc3M= 75953\nIGRvd250aW1l 75954\nIGJyb2tlcmFnZQ== 75955\nIFJvdGFyeQ== 75956\nIFdhaGw= 75957\nV0FSTg== 75958\nIHNldEFjdGl2ZQ== 75959\ndGVtcGw= 75960\nQ2hlZXJz 75961\nLXNoZWxs 75962\nRml0bmVzcw== 75963\nIHF1aWw= 75964\nIGNsZWFuZXJz 75965\nIOeb 75966\nIE1pbGFubw== 75967\nLWFzc29jaWF0ZWQ= 75968\nfX19LAo= 75969\nUEZO 75970\nIG9uUGFnZQ== 75971\nX3N0cmVhbXM= 75972\nIHNjdWxwdHVyZXM= 75973\nIG5haWxlZA== 75974\nPXNj 75975\n6aaW6aG1 75976\n0LjQvNCy 75977\nY29ubmV4aW9u 75978\nSk9C 75979\nIEthcm1h 75980\nIFN3aWZ0VUk= 75981\nIERleg== 75982\nL1VJ 75983\nIOyZ 75984\nZ2V0Q2xpZW50T3JpZ2luYWw= 75985\nIHB1bmlzaGluZw== 75986\nIG9kZW5zZQ== 75987\nLHJpZ2h0 75988\nZW5lcmF0aXZl 75989\nIFByb2JsZQ== 75990\nIEFwcFN0YXRl 75991\nIGRpc2Nsb3N1cmVz 75992\nIENhbnRlcg== 75993\nY29tcG9zZXI= 75994\ndXBhdGVu 75995\nIHN1Y2Nlc3NvcnM= 75996\nIj4nCg== 75997\nIHByZXNlcnZlcw== 75998\nLm9wZW5k 75999\nX05vcm1hbA== 76000\nL2hy 76001\nUmFuZ2Vz 76002\nLGxvbmc= 76003\nCQkJCSAgICAgICAgICAg 76004\ncHJvZHVjdG9z 76005\nIGZseWVy 76006\nIEdydXBv 76007\nTmlja25hbWU= 76008\nSGllcg== 76009\nIERFQQ== 76010\nU3ByaXRlcw== 76011\nCW1hc2s= 76012\nX3Jlc2VydmVk 76013\nLXNob3A= 76014\nLm5vdGlmaWNhdGlvbnM= 76015\nIGRpdmlzaWJsZQ== 76016\naW9zaw== 76017\na2VyamE= 76018\naW5ndA== 76019\nIEZpZnR5 76020\nIGFjY291bnRhbnQ= 76021\nIEV4cGxvcmF0aW9u 76022\nX2Jyb2FkY2FzdA== 76023\nIGV4dHJhb3JkaW5hcmlseQ== 76024\nIGtvdA== 76025\nIGNpcmN1bWZlcmVuY2U= 76026\ncm91Y2g= 76027\nW0Jvb2xlYW4= 76028\nY3Jhd2xlcg== 76029\nL3JlbW92ZQ== 76030\nYXJlbGxh 76031\nIHNleGVz 76032\nSGludHM= 76033\nIGdhbWI= 76034\nIGRhcmVk 76035\ndGVzdGVk 76036\nX0tFRVA= 76037\nIGZpbHRyYXRpb24= 76038\naWNrZXk= 76039\nIEluZmx1ZW5jZQ== 76040\nIHNwZWNpZmljaXR5 76041\nX0lEUw== 76042\nIFJvZG5leQ== 76043\nX0lSUUhhbmRsZXI= 76044\nT25FcnJvcg== 76045\nIHByZXZTdGF0ZQ== 76046\naWVnZWw= 76047\nIExFU1M= 76048\nIGF3YWtlRnJvbU5pYg== 76049\nIExV 76050\ndW1hYmx5 76051\nb3J0YWxpdHk= 76052\nIG1hbmRhdGVz 76053\nCXZlcnNpb24= 76054\nIHBhcmVudE5vZGU= 76055\nIHBlc3Rz 76056\nIGNhc2M= 76057\nY2VwdGFy 76058\nIFdvb2R5 76059\nZXJlZQ== 76060\nX3Bm 76061\nLlBPUw== 76062\naXN0cmE= 76063\nbGV3 76064\nWWFuZw== 76065\nIHN5c3RlbWQ= 76066\nIHJvYW0= 76067\nLkdyYXk= 76068\nIGNvbmR1 76069\n4oCUaW5jbHVkaW5n 76070\nVmlvbGF0aW9u 76071\nTWFob24= 76072\nIE1VU0lD 76073\nIFNpcmk= 76074\nIEVudGVyZWQ= 76075\nIGNlcnRhaW5z 76076\nZWxhaA== 76077\nCU1haW4= 76078\nLkRhdGVGaWVsZA== 76079\nLkhlYWx0aA== 76080\nIEthc2ljaA== 76081\nIGNhbmluZQ== 76082\nPXJvb3Q= 76083\ndWRkbGU= 76084\nXGNvbW1vbg== 76085\nIFN1bHRhbg== 76086\nZmluYW5jaWFs 76087\nIFFTcWw= 76088\nIGFzY2VudA== 76089\nIHBydWViYQ== 76090\nemllaHVuZw== 76091\nLmdldEVycm9y 76092\nIEdsb3JpYQ== 76093\nRWNobw== 76094\nX0NIT0lDRVM= 76095\nX2Vwcw== 76096\nL3Byb3ZpZGVy 76097\nUEhPTkU= 76098\n5YWz6Zet 76099\nIGNvbXByb21pc2luZw== 76100\nX0FQUFJP 76101\nUHJvY2Vzc0V2ZW50 76102\nIGJ5dGVBcnJheQ== 76103\nIENydWM= 76104\nwqg= 76105\nIGljaW5n 76106\nIFBDTQ== 76107\ndmVjdA== 76108\nQW15 76109\nIFZhY3V1bQ== 76110\naW5jaWRlbnQ= 76111\nIHVzZXJu 76112\nemJlaw== 76113\nXSspLw== 76114\nIH19Ij48 76115\nIEdldERhdGE= 76116\nY250bA== 76117\nIHNhZ3Q= 76118\nX1BSSU1BUlk= 76119\nIGxlcg== 76120\nIEZVQ0s= 76121\nIFN0YXJy 76122\nSUg= 76123\nw7ZycGVy 76124\neW1z 76125\nXSldCg== 76126\nL3Rvb2w= 76127\nY29tYmluYXRpb24= 76128\nIHRhbXA= 76129\nIEJlaXQ= 76130\nIE5JR0hU 76131\nIGFubsOpZQ== 76132\nKGFt 76133\nXFRyYWl0cw== 76134\nOlwi 76135\nIGNhcmdh 76136\nLmlkZQ== 76137\nIGRpa2tl 76138\nQ29tcGV0 76139\nIHNjb290ZXI= 76140\nIHhQb3M= 76141\nKGludGVycA== 76142\nIGhhc2ls 76143\nY2xpZA== 76144\nIGhldXJlcw== 76145\nZ2xvbWVy 76146\nc2hhcmVz 76147\n77yMCgo= 76148\ncG9uZGU= 76149\n4bqjaQ== 76150\nX2R1cGxpY2F0ZXM= 76151\nc29uZ3M= 76152\nfV07Cg== 76153\nIFNuaXBlcg== 76154\nIFRodXI= 76155\ncm9wcA== 76156\nIGdydWVz 76157\nIG9yZXM= 76158\ndXNoaW1h 76159\nIHVzYWJpbGl0eQ== 76160\n6ZKf 76161\nL21lbWJlcg== 76162\nb2xkZW1vcnQ= 76163\nSXNBY3RpdmU= 76164\nR2V0RW51bWVyYXRvcg== 76165\nbXV4 76166\nV0lORE9XUw== 76167\nTmVnYXRpdmVCdXR0b24= 76168\n4Liz 76169\nLW1ha2Vycw== 76170\n44Kk44Oz 76171\nIEJlcm0= 76172\nQnlFeGFtcGxl 76173\nIFLDvGNr 76174\nU2hvd3M= 76175\nZ2hp 76176\nIElocmVy 76177\nIENydWQ= 76178\nY2hlZg== 76179\nX2F1Yw== 76180\nIGFww7Nz 76181\nYW5rYW4= 76182\nIEtERQ== 76183\nSUxMUw== 76184\nIGFuZ2xhaXM= 76185\nLXJlZnJlc2g= 76186\nCXJhbmdl 76187\neG1t 76188\nKGVkZ2Vz 76189\nIGFwcGVs 76190\nIjt9 76191\nIGVkaQ== 76192\nIHN3b2xsZW4= 76193\nIGJ1dGNoZXI= 76194\naWNpZGVz 76195\naG91bmQ= 76196\nIF4o 76197\nIEV2YWx1 76198\nIGtleWJvYXJkVHlwZQ== 76199\nU1NJRA== 76200\ncm9iYXQ= 76201\nIG5paw== 76202\nIHN0cmF3YmVycmllcw== 76203\nXCJd 76204\nbm9zaXM= 76205\nTUVE 76206\n54g= 76207\n5LqU 76208\naW1heA== 76209\nXEFubm90YXRpb24= 76210\nIG51cnU= 76211\nIE1pbmltYWw= 76212\nIHdvcmRwcmVzcw== 76213\nIGNvbGRlcg== 76214\nCXBhcnNl 76215\nL3N0cmV0Y2g= 76216\n5omn6KGM 76217\ncm9tb3NvbWU= 76218\nRElN 76219\nIHRlbnRhdGl2ZQ== 76220\nOk5TVVRG 76221\nLGltZw== 76222\nIE1BVEVSSUFM 76223\nIEpldEJyYWlucw== 76224\nTGVnZW5kYXJ5 76225\nCXN0cm5jcHk= 76226\nIGRlZnM= 76227\nTnVtYmVyRm9ybWF0RXhjZXB0aW9u 76228\nIGJ5dGVjb2Rl 76229\nIHdpc3Nlbg== 76230\nX01PUkU= 76231\noO2DnQ== 76232\nIENvZmY= 76233\nLkNvbmRpdGlvbg== 76234\nIGTDqXBhcnQ= 76235\nZHNu 76236\nIHBhcmFtZXRybw== 76237\nXEw= 76238\nLm5hbm9UaW1l 76239\nQk9UVE9N 76240\nLldoYXQ= 76241\n64Q= 76242\nIERpeA== 76243\nX0RB 76244\nKENvbnRhaW5lcg== 76245\nYXlhcg== 76246\nRmxleGlibGU= 76247\nLlJheWNhc3Q= 76248\nIEVkd2lu 76249\nW3VybA== 76250\nwpI= 76251\nLnN0cm9rZVN0eWxl 76252\nIFBvbHlub21pYWw= 76253\naWxpdGF0aW5n 76254\nIFFWQm94TGF5b3V0 76255\nKHJlcA== 76256\nLnZu 76257\nLWFzc2V0cw== 76258\nQ0hBU0U= 76259\nIEVzc2VudGlhbHM= 76260\nanlsbGFuZA== 76261\nIGF4cw== 76262\nIFRyZW0= 76263\nLm1haW5sb29w 76264\nIFdJTkRPV1M= 76265\nLlJFUVVFU1Q= 76266\nIHJlaW50 76267\nIExpYnJl 76268\nY2hlb24= 76269\nIGd1ZXJy 76270\nCU5kckZjU2hvcnQ= 76271\nLnNvZnRtYXg= 76272\nIEFzdXM= 76273\nLXNjb3Jl 76274\nIEpPSE4= 76275\nPlN0YXR1cw== 76276\nPkVkaXQ= 76277\nIENhbWU= 76278\nIEFzaGU= 76279\nX3VzaW5n 76280\nIExvbmU= 76281\nIGxlc2Vu 76282\nIHJldmVyc2luZw== 76283\nbmdyeA== 76284\nLnNpZ25hdHVyZQ== 76285\nLUFzc2Fk 76286\nL25hdGl2ZQ== 76287\nX3JhdGluZ3M= 76288\nIG55YQ== 76289\nIGFkaWRhcw== 76290\nKG9wdGlvbmFs 76291\nIl0o 76292\nIHJlY3VycmVuY2U= 76293\nIEJNUA== 76294\nz4w= 76295\nX2dw 76296\nIj5c 76297\nX3dyb25n 76298\neXBz 76299\nLlByb3h5 76300\nX1VEUA== 76301\nUXRDb3Jl 76302\nTGlua2VkSW4= 76303\nIGNhdmVybg== 76304\nIHNww6ljaWFs 76305\nX3dpcmU= 76306\nIG5hbm9w 76307\nLmJhbGw= 76308\nIHJlZHVjZXJz 76309\nIG1haWxlZA== 76310\nZG9uZw== 76311\nIG9wcG9zZXM= 76312\nIEhhbnNvbg== 76313\nIFNhdHVyZGF5cw== 76314\nYWNvbW1lbnQ= 76315\nX01ldGFEYXRh 76316\nIEdhbGFjdGlj 76317\nKCIvIik= 76318\nIENsZWFuZXI= 76319\nX1RFUk0= 76320\nIGNsYXJv 76321\nLk9VVA== 76322\n5a6h 76323\nIHNsaWs= 76324\nIGplZG5haw== 76325\nSGFuZGxlckNvbnRleHQ= 76326\nIGlycmFkaQ== 76327\nICAgICAgICAgICAgICAgICAgICAgICAgIAo= 76328\nLnRpZ2h0 76329\nQnJlYWRjcnVtYg== 76330\nZnJleQ== 76331\nIOqwneyytA== 76332\nbGJyYWNl 76333\nTEVHQUw= 76334\nLWd1bg== 76335\nIEJsb2dz 76336\nIFNoaXJsZXk= 76337\nIFB1bmU= 76338\ndXJzaW9ucw== 76339\nIHN1YnRyYWN0aW9u 76340\nICoqKgo= 76341\nYXJtYWN5 76342\nIHNhbXQ= 76343\nPSIpLg== 76344\nIHBlcm1pc3NpYmxl 76345\nKHJk 76346\nIFdBVEVS 76347\nIHByb2Zlc2lvbmFs 76348\nIGhhbmRib29r 76349\nIG1vdXJuaW5n 76350\nYXJlZmE= 76351\nIGFzbg== 76352\naXNleA== 76353\nIGNvbnRlbnU= 76354\nIFVOQw== 76355\nLmdldFByaWNl 76356\nIFB1bXBraW4= 76357\nLwoKCg== 76358\nIGNvc2luZQ== 76359\nIG5pZWQ= 76360\nIEJyYWtl 76361\nRGF0YVVSTA== 76362\nIERhdGFHcmlkVmlld0NlbGxTdHlsZQ== 76363\nIFJldHVybmVk 76364\nZXdvb2Q= 76365\naXF1w6k= 76366\nIGJsZWFr 76367\nIHdlYmhvb2s= 76368\nLlRoZXk= 76369\nYXJi 76370\nTEFOR0FETQ== 76371\nX29yZGVyZWQ= 76372\nIHByYW5r 76373\nLk5ld1JlcXVlc3Q= 76374\nIGxpdGVyYWxz 76375\nJ30+Cg== 76376\nc2VyaWFsaXplZA== 76377\na3Rvcg== 76378\nKHJ4 76379\nIGdldFk= 76380\nCVN0cmluZ0J1ZmZlcg== 76381\nKHNsaWNl 76382\ncmJyYWNl 76383\nZW1lbnRv 76384\nIGxhbmM= 76385\nRGVwbG95bWVudA== 76386\nIGNvbmNlbnRyYXRpbmc= 76387\nU2tldGNo 76388\nIGJyaWdodGx5 76389\nQmVnaW5uaW5n 76390\nIERhaA== 76391\nVGs= 76392\nSW5zZW5zaXRpdmU= 76393\nIHNhYmU= 76394\nKE1vZHVsZQ== 76395\nIGNlZGFy 76396\nX2NvbnRpbnVl 76397\nIHdpdGhPYmplY3Q= 76398\nIGNvbHVtbmE= 76399\nIENhbGRlcg== 76400\nINC/0L7QvA== 76401\nX3NvZnRj 76402\nc2hhbGVk 76403\nZXJ0YXRpb24= 76404\nCSAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 76405\nOkAiIg== 76406\nIGZhw6dvbg== 76407\ndXN0dW0= 76408\nc3Rr 76409\nX0NSQw== 76410\nb2R6aQ== 76411\nIGFzY2VuZA== 76412\nZmdhbmc= 76413\nIHByZWZhYg== 76414\nIGZpbmRldA== 76415\nOicr 76416\n5Y2V5L2N 76417\ndW1ibGVkb3Jl 76418\nLmludmFsaWRhdGU= 76419\nIHRvaQ== 76420\nYW5nZXBpY2tlcg== 76421\nX0FJ 76422\naGls 76423\nU2VhdA== 76424\nIHBpc3Rvbg== 76425\nZmli 76426\nX2JsdWVwcmludA== 76427\n44K4 76428\nX1JlY29yZA== 76429\ncmV0cw== 76430\nRnJhbg== 76431\nIENhaXQ= 76432\nIHBlbGlj 76433\nIGRuYQ== 76434\nIHVwZGF0ZVRpbWU= 76435\nIC9eWw== 76436\nIHJhbGxpZWQ= 76437\nIEhpbWFs 76438\nU1NJ 76439\nX3BsYW5lcw== 76440\nIE91dHN0YW5kaW5n 76441\nQXBwbGljYXRpb25CdWlsZGVy 76442\nc3R1ZA== 76443\nX2xvY2F0b3I= 76444\nIGFib2xpdGlvbg== 76445\nICgkKQ== 76446\namVybmU= 76447\nIEFBQw== 76448\nL3dpbmRvd3M= 76449\nLUNhbA== 76450\nX1NFQ09ORFM= 76451\nICcnfQo= 76452\nw6FueQ== 76453\nIHl1bW15 76454\n5omL5py65Y+3 76455\nIFZHQQ== 76456\naWxhdGU= 76457\nIFN1cnZlaWxsYW5jZQ== 76458\nCUd0aw== 76459\n8J+Y 76460\nIHNoaW1tZXI= 76461\nYWx0ZXJuYXRl 76462\nRm9yU2VndWU= 76463\ndWVzdHJh 76464\nLWNvdmVy 76465\nYXNs 76466\nIEluc2V0cw== 76467\nbGlqYWg= 76468\nOlM= 76469\nCWNhdGVnb3J5 76470\nIGZq 76471\nw61saWE= 76472\nIE1BRA== 76473\nQGpz 76474\n5p8= 76475\nIHBvb2xlZA== 76476\nIHRyZWF0aWVz 76477\nIEJpaw== 76478\nIEhhemVs 76479\nQWxsb2NhdGU= 76480\nIGFpcnBsYW5lcw== 76481\nIHNlcm1vbg== 76482\nIFBvc2l0aW9ucw== 76483\nIE1BSUw= 76484\nU3RvcHBpbmc= 76485\nYXZvcmVk 76486\nKFRlbXA= 76487\nIGNoZWF0cw== 76488\nLnVzZXJJRA== 76489\nIHB1dGE= 76490\nLXl5eXk= 76491\nVWlUaHJlYWQ= 76492\nIG9mc3RyZWFt 76493\nXFNlZWRlcg== 76494\nIENvdHRhZ2U= 76495\nIF4K 76496\nIEFMVEVS 76497\nIHF1YW50aWZ5 76498\ncmVpYnVuZw== 76499\nIG5lY2Vzc2l0aWVz 76500\nLkxvY2FsRGF0ZQ== 76501\nIOaXpQ== 76502\ncGljdHVyZXM= 76503\nIGNydWQ= 76504\n5pyo 76505\nIGRvd250dXJu 76506\nYWN0b3Jpbmc= 76507\nIERlcm0= 76508\nIGVzdHJ1Y3Q= 76509\nIE11c2lr 76510\nIG1seA== 76511\nLm1ham9y 76512\nLkh0dHBTZXNzaW9u 76513\nPzw= 76514\neWVhaA== 76515\nIG1vam8= 76516\nIFVuaXR5RWRpdG9y 76517\nIHJha2U= 76518\nX3R3ZWV0 76519\nIHJhZGlvQnV0dG9u 76520\nIERvbWluaW9u 76521\nYXNTdHJpbmc= 76522\nb3p5 76523\nIHZvZGth 76524\nb2dsb2I= 76525\nIEFsdW1uaQ== 76526\nYmFsYW5jZXM= 76527\nX21hbnVhbA== 76528\nLmxvYWR0eHQ= 76529\nX2ZyaWVuZHM= 76530\nIFhtbERvY3VtZW50 76531\nW2ZpcnN0 76532\nS2V5Q29kZQ== 76533\nIHBvZXRpYw== 76534\nbWluYQ== 76535\nIG9wY2lvbmVz 76536\n5omT 76537\nX3N1cHBsaWVy 76538\nLkZyb21SZXN1bHQ= 76539\nX2Rpc3RyaWN0 76540\nIEdhbGE= 76541\nLnF0 76542\nIGNvbnRyYWN0dWFs 76543\nYWNvbnM= 76544\nLWFuY2hvcg== 76545\nIHl1cA== 76546\nIHVuYW5zd2VyZWQ= 76547\nIG1heGxlbg== 76548\nRXJyTXNn 76549\nLXNu 76550\nIGh5cG5vdA== 76551\nX1dN 76552\nKCldWw== 76553\nIGRlc2VydmluZw== 76554\nb3dtZW50 76555\nKFJhbmRvbQ== 76556\nIHZldG9y 76557\nIElTVA== 76558\n0LDQvdC0 76559\nLWxhbmc= 76560\nIHNpaw== 76561\nY3JlYXNpbmc= 76562\nIHBvcnRhbHM= 76563\nIEJ1bGxkb2dz 76564\ncHJvbW8= 76565\nIHByb3Zva2Vk 76566\nXX07Cg== 76567\nIEliaWQ= 76568\nZXJnbGFzcw== 76569\nX1dJRkk= 76570\nYXBwcm9wcmk= 76571\nIHJlZGVzaWduZWQ= 76572\nIC8vLS0tLS0tLS0tLS0tLS0tLQ== 76573\nemlr 76574\nJG8= 76575\ndWx0b24= 76576\nIFJlbGF0aXZlcw== 76577\nIG1ldHJvcw== 76578\nIG1lbnRvcmluZw== 76579\nYXTEgw== 76580\ndXNobWFu 76581\nIGluaGVyaXRz 76582\nIFJ0 76583\nL3ByZWZlcmVuY2Vz 76584\naW1lZA== 76585\nSk9JTg== 76586\nKGludGVyZmFjZQ== 76587\nIGFkZXB0 76588\nIE9mZmVuc2l2ZQ== 76589\nIEFHUkU= 76590\nb25pYW4= 76591\nLnBhcnNlcnM= 76592\nIHBhc3NwaHJhc2U= 76593\nIHVuc2VyaWFsaXpl 76594\nVmlzaXRlZA== 76595\nIGdldFByb3BlcnR5 76596\nIG5vYw== 76597\nZWRhZA== 76598\nICMtfQoK 76599\ndmlkYQ== 76600\nc29sdmVy 76601\nIE1vcmFsZXM= 76602\nIGt2aW5uZQ== 76603\nIEFjY2lkZW50 76604\nIHZldXQ= 76605\nIG1pc2d1aWRlZA== 76606\nIFJldmVsYXRpb24= 76607\nIHJhcGlkZQ== 76608\ncHVuaw== 76609\nIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 76610\nT2JqZWN0SWQ= 76611\nYWJpbmV0 76612\nZXh0cmFjb21tZW50 76613\nIGJ1bm55 76614\nIERlZmVycmVk 76615\ndXR0YQ== 76616\ndWFl 76617\nYnVzdGVycw== 76618\nIFNvaWw= 76619\nR1NU 76620\nLkN1cnJlbnRSb3c= 76621\n44GR 76622\nIGdyYXR1aXRz 76623\nIGNydWlzZXI= 76624\n15E= 76625\nIFRlbm4= 76626\nanNj 76627\nIO2VhA== 76628\nZGlzcG9zZWQ= 76629\nQUJPVVQ= 76630\nfQ0NCg== 76631\nZXhwaXJlZA== 76632\nIFhtbE5vZGU= 76633\nIFRhdHRvbw== 76634\nVm90ZXM= 76635\nRm9sZA== 76636\nRWxpemFiZXRo 76637\nX0ZJTEVOTw== 76638\nIGNvbmNv 76639\nIEdkaw== 76640\nb3BpZXM= 76641\nfX19 76642\nUVVPVEU= 76643\nLUlJ 76644\nc3BhbQ== 76645\nLWxp 76646\nIGNhcnRh 76647\nLmxheW91dHM= 76648\nIGJlc3Bva2U= 76649\nIGFtYXRldXJz 76650\nIGNvdWxldXI= 76651\naXRhbWlu 76652\nIGlycmVzcGVjdGl2ZQ== 76653\nIGJsYWNrQ29sb3I= 76654\nLnlhaG9v 76655\nIHdlYXJ5 76656\nIHN3ZWV0cw== 76657\nPyI7Cg== 76658\nPVwiJQ== 76659\nX3dvcmtzcGFjZQ== 76660\nIERpYW1ldGVy 76661\nIGFtZA== 76662\nIE5ldWU= 76663\nIGRiTmFtZQ== 76664\nSmVyZW15 76665\nbG9nZmlsZQ== 76666\nYXRyaWI= 76667\nIEh0dHBTZXNzaW9u 76668\nCUNyZWF0ZQ== 76669\naWRkeQ== 76670\nLlBBUkFN 76671\nIGZpYW4= 76672\nIHN6Y3o= 76673\nIHFyZWFs 76674\nX0VTQ0FQRQ== 76675\ndXNhaGFhbg== 76676\nLmRpZ2VzdA== 76677\nIGdldFBhcmVudA== 76678\nLkRyb3BEb3duTGlzdA== 76679\nIHRow6k= 76680\nIG1vbnN0cm91cw== 76681\nIGJlcmhhc2ls 76682\nIiIiDQoNCg== 76683\nU3VwcG9ydGVkQ29udGVudA== 76684\nIEdhdGhlcmluZw== 76685\naW5jeQ== 76686\nLktleUNvZGU= 76687\nIGZldHVz 76688\nLmNlbnQ= 76689\nIGJlc29uZGVycw== 76690\nbmlsYWk= 76691\nTFRSQg== 76692\nIGhpbmdl 76693\nUFJPUA== 76694\nLmZvdW5kYXRpb24= 76695\nbnVtZXI= 76696\nLXJhbmtlZA== 76697\n6I0= 76698\nIHBhaW5mdWxseQ== 76699\nICg7Oyk= 76700\nZm9ybWU= 76701\nTGFkeQ== 76702\nL2FwcGxl 76703\nIENvbnN0aXQ= 76704\nIHN0b2NraW5ncw== 76705\n5rS7 76706\nIG1lbnRvcnM= 76707\nPkNyZWF0ZQ== 76708\nIEludGVybmFsRW51bWVyYXRvcg== 76709\nIHRlbGV2aXNlZA== 76710\nVG9rZW5UeXBl 76711\nIGJyaWI= 76712\nY3JlYXRlVmlldw== 76713\nL0RURA== 76714\nR2l0SHVi 76715\nKGJpZw== 76716\nIG3DoXhpbW8= 76717\n5b6u6L2v6ZuF6buR 76718\nLmNm 76719\nIMKgIMKgIMKgIMKg 76720\nPHR5cGVvZg== 76721\nIHByb2dyZXNzaW5n 76722\nLnNldFdpZHRo 76723\nKHR2 76724\nIHVuZmFpcmx5 76725\nIEFuaXRh 76726\nYXJ5YXdhbg== 76727\nRGFs 76728\nVVJZ 76729\nb2dlbmVpdHk= 76730\nZWZh 76731\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 76732\nIGRlamE= 76733\nT1NF 76734\ncmFpbA== 76735\ncm9vZg== 76736\nX3F1b3Rlcw== 76737\nPGo= 76738\n44Ko 76739\nKHNldHRpbmc= 76740\nbGV2ZWxuYW1l 76741\nX2hhbmRsaW5n 76742\nw6lyYQ== 76743\nJGo= 76744\nIGRhcmxpbmc= 76745\nLlBhdGhWYXJpYWJsZQ== 76746\nW3NvdXJjZQ== 76747\nTWV0aG9kTmFtZQ== 76748\nIE91dGxldA== 76749\n5pKt 76750\nIENvY29h 76751\nVWJ1bnR1 76752\nIG1vb2ll 76753\nIGZsb3JpZGE= 76754\nIHJldGhpbms= 76755\nIGdldFg= 76756\nZ2V0RWxlbWVudA== 76757\nIHJhZGl4 76758\nIEdhbWVy 76759\nZGVhbGxvYw== 76760\nbGVmdEpvaW4= 76761\nX1NZTg== 76762\nR3JpZExheW91dA== 76763\nImdv 76764\nKGVhY2g= 76765\nCXNjZW5l 76766\nIFB5RXJy 76767\nSG93YXJk 76768\nLlNpZ25hbA== 76769\nIFRFTQ== 76770\nIOen 76771\nVkVOVE9SWQ== 76772\nIHNpbXVs 76773\nIDw8LQ== 76774\nIHR1cmJpbmVz 76775\nIHN1cnRvdXQ= 76776\nYWx0bw== 76777\nIHVuYXJ5 76778\nYA0K 76779\nIFNjcmk= 76780\nIE1vbms= 76781\nIHVuZm9sZGVk 76782\nQ29tcG9zaXRpb24= 76783\nUFBFUg== 76784\nIHNpZGluZw== 76785\nJyx7Jw== 76786\nIHRyZWZm 76787\nX1VOSUNPREU= 76788\nIGRlcmVjaG8= 76789\nIHBvbGFyaXR5 76790\nIG9yYw== 76791\nPERvY3VtZW50 76792\nKHRvZGF5 76793\nLikKCgoK 76794\nIHNlZW1pbmc= 76795\nXFY= 76796\nPklE 76797\nIGZpYm9uYWNjaQ== 76798\nKG1hdGVyaWFs 76799\nRkxBU0g= 76800\nZGlyZWN0b3JpZXM= 76801\nZXN0ZXJz 76802\nVEVDVElPTg== 76803\nd3JhcHBlZA== 76804\nLXNlbGVjdGlvbg== 76805\nLXJlbGF0aXZl 76806\nKGNocg== 76807\nIHBvcnRmb2xpb3M= 76808\nIHNob3dEaWFsb2c= 76809\naW5nbGV0b24= 76810\nIFRJQ0s= 76811\nIEludmVzdG9y 76812\nIGJyYXY= 76813\nIFNWTg== 76814\nIGhhdGVmdWw= 76815\ncmlwcw== 76816\nZXhwaXJ5 76817\nX2NvaW4= 76818\nPgoKCgoK 76819\nIG1hcmdpbmFsaXplZA== 76820\nIGV4Y2VlZGluZ2x5 76821\nbmF2YmFyU3VwcG9ydGVkQ29udGVudA== 76822\nKGV4dGVuc2lvbg== 76823\nIGFkdmFudGFnZW91cw== 76824\nLk1pY3Jvc29mdA== 76825\nIGVuc3VpdGU= 76826\nLXZpb2w= 76827\nX2R1ZQ== 76828\nS0g= 76829\nIFJvbWFudGlj 76830\naW5hbmQ= 76831\nZWNp 76832\ncmVwb3J0ZWQ= 76833\nIENvcnB1cw== 76834\nIHNwYW5raW5n 76835\nIENyb3NieQ== 76836\nLkZvdW5kYXRpb24= 76837\nXF8= 76838\nIGFubm9uY2Vz 76839\nQXR0YWNobWVudHM= 76840\n4Liy4Lij 76841\nIFdheA== 76842\n77yB77yBCgo= 76843\nIHNhaWxlZA== 76844\nLkV1bGVy 76845\nCXNjcm9sbA== 76846\nIHBlYXNhbnRz 76847\nIEJ1aWxkZXJz 76848\nLkdlbmVyYWw= 76849\nQVJFQQ== 76850\nIG1lc3Npbmc= 76851\ndmVybg== 76852\nIGRpYXBlcg== 76853\nIG9jY3VwaWVz 76854\nCWxvZ2lu 76855\nLkxPQw== 76856\naWdhbnM= 76857\n77yB4oCd 76858\nX2Zvb3Q= 76859\nX3RhdQ== 76860\nLXBhY2thZ2Vz 76861\ncmVjdXI= 76862\nQWx0ZXJuYXRpdmU= 76863\n77yB44CN 76864\nYXJvbw== 76865\nIHRydXN0ZWU= 76866\nLDpd 76867\n5pa55byP 76868\nPz4+ 76869\nLk1pbnV0ZQ== 76870\nIGFsY2Fu 76871\nIENvbmNlcHRz 76872\nY2hpbGROb2Rlcw== 76873\nQ291cnQ= 76874\nIGNlbGxhcg== 76875\nbGVr 76876\nYWtpcw== 76877\nQnViYmxl 76878\nIG9iamVjdGVk 76879\nIO+7vw== 76880\nOl06Cg== 76881\nLnBhcnNlRmxvYXQ= 76882\nIHNwYXJrcw== 76883\nLWZpbmQ= 76884\ndmFyaWF0aW9u 76885\nSGFjaw== 76886\nRmFucw== 76887\nX3BhcnNlZA== 76888\nRW50aXR5VHlwZQ== 76889\nYXVjZQ== 76890\nX3RyZWVz 76891\nIEVnZ3M= 76892\nVUlCYXJCdXR0b25JdGVt 76893\nX3RheG9ub215 76894\nIFNIT1A= 76895\nVHdlbnR5 76896\nX2NoZWNrcw== 76897\nIExY 76898\ndXRzY2hlaW4= 76899\nKHBsYXRmb3Jt 76900\nIGF1dG9wc3k= 76901\nUmVxdWlyZW1lbnQ= 76902\nIFJFQ1Q= 76903\ndG9Db250YWlu 76904\nJywnJQ== 76905\nL2VkaXRvcg== 76906\nIHFi 76907\nIEVFRw== 76908\naHRh 76909\nX1RJTEU= 76910\nLXN1bQ== 76911\nIEFsYnVxdWVycXVl 76912\nIHNob3J0Y29kZQ== 76913\nIHNpbnVz 76914\nIGRlc2tz 76915\nIHBvb3A= 76916\nLm9wZW5zb3VyY2U= 76917\nIENvbGxhcHNl 76918\nLmRlcg== 76919\nIGhhd2s= 76920\nIFZhbmd1YXJk 76921\nIE1hcnJpb3R0 76922\nX1RhcmdldA== 76923\nIEJhbmFuYQ== 76924\nX2F0dGVudGlvbg== 76925\nIEFyaWVs 76926\nX3Rlbg== 76927\nIGJha2Vy 76928\n4oCUaGU= 76929\nxIXFvA== 76930\ndmVsb3BtZW50 76931\nRWxm 76932\nX2djaGFuZGxl 76933\nUmVwdWJsaWNhbnM= 76934\nIGl0ZW1CdWlsZGVy 76935\nV29u 76936\nX2FjY3Vt 76937\nIG5ld1Bhc3N3b3Jk 76938\nIGRldm9pZA== 76939\nIE1hcmt1cw== 76940\nZGFlbW9u 76941\nLkh0dHBDb250ZXh0 76942\nS3Jpc3Q= 76943\nIGFhbGJvcmc= 76944\nX3RyaWFscw== 76945\nKGFzc2VydA== 76946\n44Gj44Gm 76947\nYmVsdA== 76948\nIG1pbGRseQ== 76949\nZXJ2b2ly 76950\nIGRlc2NlbmRhbnQ= 76951\nIEdpb3Zhbm5p 76952\nIGRlY2x0eXBl 76953\nLVNoaXJ0 76954\nIGFwcm8= 76955\nQXBwbGllZA== 76956\nLmdldFBhcmFt 76957\naG9m 76958\ndXJhcg== 76959\nIE9CUw== 76960\nX3Nlcg== 76961\nKHNlY3JldA== 76962\nW2xheWVy 76963\nIHVzZWZ1bG5lc3M= 76964\nIEtvdQ== 76965\nX3N1Ym1pc3Npb24= 76966\nX0hPUklaT05UQUw= 76967\nLHRtcA== 76968\nLy4K 76969\nIGxlc3Nlbg== 76970\nX3dj 76971\nX0ZJTkFM 76972\n0L3QvtC/ 76973\nLnRvZG9z 76974\nLlhQYXRo 76975\nIElEYXRh 76976\nIGRvb3JzdGVw 76977\nIGNvbXBvc2luZw== 76978\nIGh1dA== 76979\nIFZMQU4= 76980\nIG91dGY= 76981\n6K+l 76982\nKGJldGE= 76983\nKioqLwoK 76984\nIEluZG8= 76985\nIGtsYQ== 76986\nX2NvbmZpZ3VyZQ== 76987\nLk1hcms= 76988\nb3NlY29uZHM= 76989\nKFZlcnRleA== 76990\nb3JnYW5pc21z 76991\nIGZmbQ== 76992\nIGRlbW9saXNoZWQ= 76993\nICItLS0= 76994\nbGVzaQ== 76995\nIFNpZG5leQ== 76996\nLmdldEluZGV4 76997\nLk1vbmFk 76998\nU2VsZWN0ZWRJdGVt 76999\nIE5hdlBhcmFtcw== 77000\nYXpvbGU= 77001\nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo= 77002\nX3NlbnRlbmNlcw== 77003\nIGluY2xpbmF0aW9u 77004\nIEZhdGhlcnM= 77005\nYWNjb3VudElk 77006\naGFyaQ== 77007\nKT4K 77008\nL3Jhdw== 77009\nICcnKTsKCg== 77010\nK2w= 77011\nKGNk 77012\nIHVuemlw 77013\nIGdsYW1vcm91cw== 77014\nIyIs 77015\nIG5hdw== 77016\nIG1pbmli 77017\nIEJyYW4= 77018\nTmFjaA== 77019\nX3R3ZWV0cw== 77020\nIENDUA== 77021\nJSI+PA== 77022\nIFN0ZXBoZW5z 77023\nbWFzxLE= 77024\nJ2Vz 77025\nIHJlcGFy 77026\nX2RvY3VtZW50cw== 77027\nLmNsb3NlZA== 77028\nLXJpbmc= 77029\nL2NhdGVnb3JpZXM= 77030\nIERlZXBDb3B5 77031\nU1VQ 77032\nLm5ld2F4aXM= 77033\nIGdkeQ== 77034\naG9l 77035\nIFJlZWY= 77036\nIHBvbGl0aWM= 77037\nIFJlcXVpcmVtZW50 77038\nIHNoZWRz 77039\nc2VhbGVk 77040\nIHBhdGhvbG9neQ== 77041\nIi8+PA== 77042\nbW9kbw== 77043\nIHN0ZW1taW5n 77044\nIHRhYm9v 77045\nIFNhdmlvcg== 77046\nIH0NCg0KDQoNCg== 77047\nLmN2 77048\nIGpvdWV1cg== 77049\nIENvcm53YWxs 77050\nIFJlY2VwdGlvbg== 77051\nIGlsbHVtaW5hdGlvbg== 77052\nIGdkYg== 77053\nVkVD 77054\nb2R1 77055\nQ29udGVudEFsaWdubWVudA== 77056\nc3RhbnRpYWw= 77057\nYmFzZWxpbmU= 77058\nX2J1c3k= 77059\nLwoKCgo= 77060\nIHBsYXllcklk 77061\n5qM= 77062\nX3BldA== 77063\nIE1pcmFjbGU= 77064\ndXJlbnQ= 77065\nIE1lcmxpbg== 77066\ndWJlbg== 77067\nIHNldENvbG9y 77068\nIGRhcmtlc3Q= 77069\nc3Rlcnk= 77070\nIGNhcmlj 77071\nIHJldGFyZA== 77072\nIEhvdXNlaG9sZA== 77073\nIGphbA== 77074\nIHlw 77075\nIiwiIik7Cg== 77076\nIEFjZXI= 77077\nW1c= 77078\nb2xraWVu 77079\nYXlv 77080\nUHJpdmF0ZUtleQ== 77081\nIFNUQVRT 77082\nINC90YPQtg== 77083\nOicuJA== 77084\nIHRoYW5rZnVsbHk= 77085\nIGRpc3RydXN0 77086\nZ2V0RGVmYXVsdA== 77087\nL2ZhY2Vib29r 77088\nIENvbnJhZA== 77089\nIHV0aWxpemFuZG8= 77090\nIEthZw== 77091\nL25hbWU= 77092\nIGJhbWI= 77093\nLkZyb21TZWNvbmRz 77094\nIG11dGls 77095\nIExhZ29z 77096\nIEJsZXNzZWQ= 77097\naWxsZWdhbA== 77098\naWVp 77099\nX1RQ 77100\nIG1hdGxhYg== 77101\nIGN5Y2xpYw== 77102\nIHdpdGhoZWxk 77103\nIGhvcnJpYmx5 77104\nLWhvdXJz 77105\nLUhlYWRlcnM= 77106\nIG92ZXJsYXBz 77107\nIGN1YXRybw== 77108\nIGVxdWl0YWJsZQ== 77109\nIGNvbG9ybWFw 77110\nIHNoaW4= 77111\nIFN1aXRlcw== 77112\nX2x1YQ== 77113\nKHZv 77114\nX1JFU1VMVFM= 77115\nIFZpa3Rvcg== 77116\nRG93bmxvYWRpbmc= 77117\nbm9jaA== 77118\nTW9vbg== 77119\nIGRlY2lkZWRseQ== 77120\n44GU44GW 77121\nX1JQQw== 77122\nSW50ZXJwb2xhdG9y 77123\nIHZhbnM= 77124\ne1Q= 77125\nX3NwYXdu 77126\nIEV4eG9u 77127\nX0NhbGw= 77128\nIENsYXNzcm9vbQ== 77129\nIHNlcm90b25pbg== 77130\nIERpcGxvbWE= 77131\nYmVkdGxz 77132\nIFByb3RvdHlwZQ== 77133\nLmV4ZWN1dGlvbg== 77134\nIGRhdGluZ3NpZGU= 77135\nIEdva3U= 77136\nX3Jvb21z 77137\n4oCZYW0= 77138\nZ3JhZg== 77139\nYWNlb3Vz 77140\nIGFjY29tbW9kYXRpbmc= 77141\nfSwn 77142\nLmRpbWVuc2lvbg== 77143\nZXJyb3JNc2c= 77144\nCW1lc2g= 77145\nRmlsbGVk 77146\nLnByZWZlcmVuY2U= 77147\nIHNtYXJ0eQ== 77148\nX2NvdXBvbg== 77149\nIMO2dmVy 77150\nIGNvbmNlaXZl 77151\nb2Rvbg== 77152\nZGljZQ== 77153\nVG9EYXRl 77154\nYWRhbWVudGU= 77155\nLW1hc2s= 77156\nIGVzY2FsYXRpbmc= 77157\n4oCmKQoK 77158\nSW5SYW5nZQ== 77159\nX0Vt 77160\nIHV0aWxpemE= 77161\nIGxldnk= 77162\nPCFb 77163\nIEplbm5lcg== 77164\nIFJFU09VUkNF 77165\nX1NUQVJURUQ= 77166\nIHZvbGxleWJhbGw= 77167\nIG1nYQ== 77168\nIFJvc3Np 77169\nQ2hhbmNl 77170\nIEVuZGVk 77171\nLnVudGls 77172\nIGtub2Nrb3V0 77173\nX2V4ZQ== 77174\nIFByZXNjcmlwdGlvbg== 77175\nIENPVU5UWQ== 77176\nLmhy 77177\naWVyc2hpcA== 77178\nRVJWRQ== 77179\n6ak= 77180\n44Gn44Gv 77181\nIHBlcsOt 77182\nIGltZ1VybA== 77183\nZWN4 77184\nIFd5bg== 77185\nCVJldHVybnM= 77186\nX2V5ZQ== 77187\nIEFnaW5n 77188\ncXVldWVz 77189\nIOWIneWni+WMlg== 77190\nLlNlcmlhbGl6ZWROYW1l 77191\nLmhvdXJz 77192\nIGlzZQ== 77193\nLkFjdG9y 77194\n5p2h5Lu2 77195\nYXBwbA== 77196\nVGFu 77197\nL2NhdGFsb2c= 77198\nL1Jlc291cmNlcw== 77199\nZWxhbg== 77200\nKCd7ew== 77201\nIGluc24= 77202\nIG5vZGVOYW1l 77203\nIGNvb2tib29r 77204\nJywnPScsJw== 77205\nUk9NRQ== 77206\nLnRlbXBsYXRlcw== 77207\nZWN1cmU= 77208\nLWtleXM= 77209\nIGdsVW5pZm9ybQ== 77210\nIGdlw6c= 77211\nIFJlY292ZXI= 77212\nSURY 77213\nIEtyaXN0ZW4= 77214\nIHBvbnRvcw== 77215\nYD0nJA== 77216\nYXJnZW50 77217\nIGFycmFuZ2luZw== 77218\n6KiY5LqL 77219\nIGVybGU= 77220\nZW5lZG9y 77221\nKCkpKTs= 77222\nw6Zra2U= 77223\nIEdpbGxlcw== 77224\nIn0+Cg== 77225\nLm1vdmllcw== 77226\nLXNlbGVjdG9y 77227\nLmxlYXJu 77228\nIHBvdGVuY3k= 77229\nIGZpbm8= 77230\nCWJn 77231\nIGxlaGV0 77232\nIGzDtg== 77233\nIGVybQ== 77234\nIGFzYmVzdG9z 77235\nIGRlc3Rl 77236\nIGJsb2NrYWRl 77237\nIFJPVU5E 77238\nIGxuYW1l 77239\nIFNlcGFyYXRl 77240\nw6RuZ2U= 77241\nIGZ1eno= 77242\nCVVO 77243\nX25vbWU= 77244\nX2xpbmtlZA== 77245\nIFNoYXJlUG9pbnQ= 77246\naGF1c2Vu 77247\nIGxvYWY= 77248\nLWVjb25vbWlj 77249\nIGRpZEZpbmlzaA== 77250\neWVu 77251\nIGJsYXN0aW5n 77252\nIFdlaXJk 77253\nSUNMRVM= 77254\nIEdGWA== 77255\nIHN1ZmZpY2U= 77256\nZWJpbg== 77257\nIGFwcHJvdmluZw== 77258\nIFJleWVz 77259\nIFJUQUw= 77260\naWdsaQ== 77261\nX3Rvaw== 77262\nb3Jkb3Zh 77263\nQ2FybA== 77264\nIFBsYXlz 77265\nbG9zc2Vu 77266\ncGFpcmVk 77267\nQUdNQQ== 77268\nd2nEhXo= 77269\nbGlua2VkaW4= 77270\nIGVnYWw= 77271\nKHByZWRpY2F0ZQ== 77272\nIFJFU1BPTlNF 77273\nIG1pblg= 77274\nIGNoYW5jZWxsb3I= 77275\nIFJFQ0VJVkVS 77276\nIGFzY2VydGFpbg== 77277\nIHplcg== 77278\nIFdvcmtzaGVldHM= 77279\nTks= 77280\nIHZvd2Vs 77281\ndmFudA== 77282\nVVBT 77283\n4oCcLg== 77284\nIEhheWRlbg== 77285\nIFNwYXJ0YW4= 77286\ncmlnaHRz 77287\nLmdldElu 77288\nIGlubGFuZA== 77289\nIE5pbGU= 77290\nIFRyYW5zbGF0b3I= 77291\nIHJlY3RhbmdsZXM= 77292\nQnV0dG9uVHlwZQ== 77293\nIFNvbGlj 77294\nIHJhZ2F6emE= 77295\nL3RhZw== 77296\nIGlycmVzaXN0 77297\nI0VuZA== 77298\nKioqKioqKg0K 77299\nIHJlc3RyYWluZWQ= 77300\nIGNoaXJvcHI= 77301\nL1No 77302\nLWZsaWdodA== 77303\nY29udmVydGVk 77304\nIHNraXJ0cw== 77305\nKGNoYXJz 77306\nJHZpZXc= 77307\nIGlucHV0RmlsZQ== 77308\nZ21haWw= 77309\nX0RJQUc= 77310\nIG51bWVs 77311\nIEdpbmE= 77312\nZWxsdW5nZW4= 77313\nIHRheGE= 77314\nIGRyaXBwaW5n 77315\nPSIiLz4K 77316\nIGJvcmRlcmVk 77317\nIHRvdWdobmVzcw== 77318\nbGVuZXNz 77319\nIEJpZWJlcg== 77320\nX1dBS0U= 77321\nKGV0 77322\nIHNhbnTDqQ== 77323\nIFRFWA== 77324\nX0RJU0NPTk5FQ1Q= 77325\nIHBpZW4= 77326\nIEZvbnRTdHlsZQ== 77327\nX1VM 77328\nLXRvdGFs 77329\nd29sZg== 77330\nIE1hcml0aW1l 77331\nIE9QVElPTkFM 77332\nLXJlc3Q= 77333\nIG1lbWJ1YXQ= 77334\nIEJTT04= 77335\nX3NpbWlsYXJpdHk= 77336\nLm92ZXJsYXk= 77337\nIHBhbGF0ZQ== 77338\nIEJyaWRnZXM= 77339\nQW5kUGFzc3dvcmQ= 77340\nIENoYXZleg== 77341\naGV0dG8= 77342\nLm9mZnNldEhlaWdodA== 77343\nIHVuZGVzaXJhYmxl 77344\nIGFwbGlr 77345\nIC8+XA== 77346\nLHRv 77347\nIHJlbW92ZXI= 77348\nIE1vZGVsaW5n 77349\nIHB1cmNoYXNlcg== 77350\nIENob29zaW5n 77351\nb3BsZWZ0 77352\nIG11dGFibGVMaXN0T2Y= 77353\nIFNpc3RlbWE= 77354\nIElQTA== 77355\naWNrZXJWaWV3 77356\nSGFzQ29sdW1uVHlwZQ== 77357\nIHNvYmll 77358\ndWJlcm4= 77359\nIGFsdW5v 77360\nIGltYWdpbmF0aXZl 77361\nIEludGVyZXN0ZWQ= 77362\nKCl9PC8= 77363\nIGRpdmVyc2lvbg== 77364\nX3Rvb2x0aXA= 77365\nLlNhbXBsZQ== 77366\nIEZ1dHVyZXM= 77367\nY29udGVuaWRv 77368\nIEVJTlZBTA== 77369\nKGVuY29kZWQ= 77370\nIFNoYXVu 77371\nCXBheWxvYWQ= 77372\nZGVr 77373\nPllvdXI= 77374\nSXNv 77375\nVHJhdmVyc2Fs 77376\naWNpZQ== 77377\nLmNyb3A= 77378\nIEpC 77379\nSU5HRVI= 77380\nIGV4ZW1wbGFyeQ== 77381\nX3JlbHU= 77382\nYW5uaXM= 77383\n0LXQt9GD0LvRjNGC0LDRgg== 77384\nY2x1YnM= 77385\n4oaR 77386\nIHNjcmFtYmxl 77387\nIFVuYmxvY2s= 77388\nIGRvcnM= 77389\nIHNoYWNr 77390\nIG1pbmltaXppbmc= 77391\nIFBhc3Npbmc= 77392\nYWRkRWxlbWVudA== 77393\n4bud 77394\nIHJvb2Zz 77395\nIGpjbGFzcw== 77396\nY29yZG92YQ== 77397\nUG9zWQ== 77398\nKENhbnZhcw== 77399\nKGZpbg== 77400\nLWxvc3M= 77401\nLmJ0bkNsb3Nl 77402\nZG9jdW1lbnRhdGlvbg== 77403\nIFJK 77404\nYW1vbmc= 77405\nTW9z 77406\nbGluZ2Vu 77407\nIEFndQ== 77408\nb2x5bm9taWFs 77409\nXTw9 77410\nIGRpZmZpY2lsZQ== 77411\nIFdpbm5lcnM= 77412\n5bGV 77413\nU3RyYQ== 77414\nIGNvbmdyZWc= 77415\nIEVuYWJsZXM= 77416\nIFN5bXB0b21z 77417\nX3Nn 77418\nIFJpZGluZw== 77419\nX2hlYWRz 77420\nIENvc21ldGlj 77421\nw650 77422\nLlNpbmdsZXRvbg== 77423\nIE5pY2FyYWd1YQ== 77424\nIAoKCgoK 77425\nIG3DrQ== 77426\nJ30sDQo= 77427\nIEJvc25pYQ== 77428\nPlg= 77429\nLy8qWw== 77430\nIHBpbGVk 77431\nY2FzdGluZw== 77432\nIGdyw6JjZQ== 77433\nIEhlbHNpbmtp 77434\nR3Jv 77435\nI2Fm 77436\n7Iud 77437\nIHNvdWhh 77438\nIEluZGll 77439\nX25lYXI= 77440\nIGltbW9iaWw= 77441\nLkV4Y2Vs 77442\nIHJhZGlhbnQ= 77443\nX01C 77444\nIEtldG8= 77445\ndmVudGFyaW8= 77446\nX2FnZW50cw== 77447\nVGFibGVWaWV3Q2VsbA== 77448\nIFRoZW9kb3Jl 77449\nPT09PT09PT0K 77450\nLGxpc3Q= 77451\nKHNp 77452\naWNpcGF0aW9u 77453\nQVJUSA== 77454\nc2V0RGlzcGxheQ== 77455\nLkZ1dHVyZQ== 77456\nIFNUQU5EQVJE 77457\nIE9JRA== 77458\nIGZyb3duZWQ= 77459\nIE1hcmlseW4= 77460\nb2xhcmU= 77461\nUHU= 77462\nIHPDqWN1cml0w6k= 77463\nUmVkdXg= 77464\nU0NP 77465\nCQkJCQkgICAgICA= 77466\ncml2 77467\ncGVydA== 77468\nIHNvZnRtYXg= 77469\nIHNlbmF0ZQ== 77470\nPWVtYWls 77471\nIGVzdGltYXRpbmc= 77472\nCXRk 77473\nRnVjaw== 77474\nIFdhdGVybG9v 77475\nIG1leGljbw== 77476\nTmV3dG9u 77477\nU2Fi 77478\nLOKApgoK 77479\nIGNlbGVzdGlhbA== 77480\nIFFOYW1l 77481\nIGdldEFwcA== 77482\nTmll 77483\nX3BjaQ== 77484\nIFFQb2ludEY= 77485\nX2xpc3Rh 77486\nLk5WYXJDaGFy 77487\nIENvYw== 77488\nS2Fy 77489\nIGJ1c3RlZA== 77490\naXphdGlvbmFs 77491\nb3VyZA== 77492\nX2Nvbm5lY3Rvcg== 77493\nIFNla3M= 77494\n0L3Rg9GO 77495\n0II= 77496\nL0xpc3Q= 77497\nL2lj 77498\nXEZyYW1ld29ya0J1bmRsZQ== 77499\ndXh0 77500\nIGhlYWRwaG9uZQ== 77501\nRVhURVJO 77502\nLXJlc2V0 77503\nIEdlaWxl 77504\nIHRyaWFuZw== 77505\nIEFOTg== 77506\nIHTDrQ== 77507\nIFNQQQ== 77508\nIE1hY2Vkb25pYQ== 77509\nIGNyaWFy 77510\nIGNsaW1icw== 77511\nIFNPTg== 77512\nIENyaXRpY3M= 77513\nIGTDsw== 77514\nX1NQTElU 77515\nIEJvdW5kYXJ5 77516\nX0luc2VydA== 77517\nQ29sZA== 77518\nLmNyZWF0ZUNlbGw= 77519\nX3NhaWRh 77520\nLkJMVUU= 77521\nQmlnRGVjaW1hbA== 77522\nKEJ5dGVz 77523\nCVN0YXRl 77524\nLS0tQA== 77525\nVmlld1NldA== 77526\nYWthaA== 77527\nX1JlcG9ydA== 77528\nLWNyb3Nz 77529\nLmdldEN1cnJlbnRVc2Vy 77530\ndWx0dXI= 77531\nKEZs 77532\nIEltYWc= 77533\nQ1Rlc3Q= 77534\n7IOd 77535\nIHN0YWc= 77536\nIG96b25l 77537\nIGvDqQ== 77538\ncmVwYWly 77539\nKSIpOw0K 77540\nIHZvd3M= 77541\nLkFsdGVy 77542\nIEFsZ2VicmE= 77543\nIEFoZWFk 77544\nZ2V0dA== 77545\nLklubmVyVGV4dA== 77546\nIFpoZW5n 77547\nLnJlYWxwYXRo 77548\nIGRpc3RyYWN0aW9ucw== 77549\nLGV2ZW50 77550\nIElOQ0xVREVE 77551\nLk1hdGNoZXI= 77552\nLnNwb3RpZnk= 77553\nIGNvbnNpZA== 77554\nLk1hcHBpbmc= 77555\nIEZvYW0= 77556\nIE5BTkQ= 77557\nIGRldmFudA== 77558\nXSIpXQo= 77559\nTGF1cmE= 77560\nIHNhY2tlZA== 77561\nX3hvcg== 77562\nIHJlYWxtcw== 77563\nIFJvYm90aWNz 77564\nLlNlZWs= 77565\nLiQk 77566\nIFJpYmJvbg== 77567\nCUhSRVNVTFQ= 77568\nIENyZXNjZW50 77569\nRUZS 77570\nIE1lZGl0YXRpb24= 77571\nLmdldFo= 77572\nINC60L7QvNC/ 77573\nanNvbndlYnRva2Vu 77574\nOj8= 77575\nZmFm 77576\nVklPVVM= 77577\nYWxsYWg= 77578\nIHBpcGluZw== 77579\nIG1vZGVybmU= 77580\ncG9zdGFsY29kZQ== 77581\nIGxldmVyYWdpbmc= 77582\nIENISVA= 77583\ncGNt 77584\nbWFp 77585\nIGlQ 77586\nQUtFUg== 77587\nZGF0YUdyaWRWaWV3 77588\nX2RlcHM= 77589\nLWRyaXZlcg== 77590\nTGll 77591\nZGlzY2FyZA== 77592\neW50YXhFeGNlcHRpb24= 77593\nIGVjdA== 77594\nIEV4aGliaXQ= 77595\nICgqKg== 77596\nIOuU 77597\nQ2hhbmdlRXZlbnQ= 77598\nIHN1cGVybWFya2V0cw== 77599\nIHNobQ== 77600\ncHJvZml0cw== 77601\ncGlsbGFy 77602\ncmFpc29u 77603\nV2F0 77604\nIHBoYXJtYWNpZXM= 77605\nIG5ydw== 77606\nLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 77607\nCXdvcmxk 77608\nU3RyZWFtaW5n 77609\nRGlhbW9uZA== 77610\nIEVudW1lcmF0b3I= 77611\nIGVucXVpcnk= 77612\nLmxhbWJkYQ== 77613\nYmVr 77614\nUk9UTw== 77615\nIFBkZlA= 77616\nIGhpc3Rv 77617\nIGdldENoaWxk 77618\nL3N0cmV0Y2hy 77619\nIEFNQVo= 77620\nIEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbg== 77621\nInVzZXI= 77622\nIHNhbml0YXRpb24= 77623\nIENsb3RoZXM= 77624\nLm51bXB5 77625\nZmVj 77626\nICMjIyMjIyMjIyMjIw== 77627\n0LXQudGB0YLQsg== 77628\nX2xw 77629\nIGF6dXJl 77630\nWFBhdGg= 77631\nVmVudA== 77632\nTGFib3I= 77633\nIG1pc3Rha2VubHk= 77634\nIGNvbmR1aXQ= 77635\nIEZhaXJmYXg= 77636\nZ2V0U3RhdHVzQ29kZQ== 77637\nIE1veQ== 77638\nTGlzdEFkYXB0ZXI= 77639\nICg/KQ== 77640\nR2VuZXJhbGx5 77641\nLmlzQ29ubmVjdGVk 77642\ndmlkbw== 77643\nTW91c2VCdXR0b24= 77644\nR2VuZXJhdGlvblN0cmF0ZWd5 77645\nX2Rlcml2 77646\nIGxla2tlcg== 77647\nTWVhc3VyZW1lbnQ= 77648\nX0NPT0tJRQ== 77649\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 77650\nIGNvbXBldGl0aXZlbmVzcw== 77651\nIGdhbWxl 77652\nIHJldHJvc3BlY3Q= 77653\nIEVkdWFyZG8= 77654\nIERhdGFTZXJ2aWNl 77655\nIGVzY29ydGVk 77656\nIFF0eQ== 77657\nSG9saWRheQ== 77658\nCXJhdw== 77659\nbGV1cnM= 77660\nQmlydGhkYXk= 77661\nIGhlYXRz 77662\nLmludmVyc2U= 77663\nIF8NCg== 77664\naWxsdW0= 77665\nb2thYmxlQ2FsbA== 77666\nX21s 77667\nTGlrZWQ= 77668\nZW51bWVyYXRl 77669\nRmluaXRl 77670\nLXByb3A= 77671\nQXJlYVZpZXc= 77672\nIG1lZGlhdGlvbg== 77673\nIGNoYW50aW5n 77674\nX05U 77675\nX3VuYw== 77676\nc21vdXRo 77677\nIHBpZ21lbnQ= 77678\nUGFzc3dvcmRFbmNvZGVy 77679\nIHbDqXI= 77680\nIHdhc3Rld2F0ZXI= 77681\nLVBhY2s= 77682\nIGpvdmVu 77683\nYWVz 77684\nS1k= 77685\nUGludGVyZXN0 77686\nIG11c2ljYQ== 77687\nbGFjZXM= 77688\nIFdpY2g= 77689\nKHJvdA== 77690\nKGly 77691\nIOyCreygnA== 77692\n44Gd44KM 77693\nX1RIRQ== 77694\nZ2V0RmlsZQ== 77695\nW3Byb3BlcnR5 77696\nIGVuZGluZ3M= 77697\naXp6YXJl 77698\nPXRyYWlu 77699\nLWxvdmluZw== 77700\nIG5vdXZl 77701\nIGNvbW1hcw== 77702\nIGNhbWJp 77703\nIFp1c2FtbWVu 77704\nCUV4dA== 77705\nKG9ic2VydmVy 77706\nZm9ybWlr 77707\nIHF1aW5kaQ== 77708\nIEl2b3J5 77709\nIEJvbGl2aWE= 77710\nYXNhZA== 77711\nX2xlZ2VuZA== 77712\nQ2l0aWVz 77713\nX0ZJUkU= 77714\nYXNkZg== 77715\nLkRlcHRo 77716\nVmFsdWVHZW5lcmF0aW9uU3RyYXRlZ3k= 77717\ndXBk 77718\nLkdldFJlc3BvbnNl 77719\nIHVyZ2VudGx5 77720\nSW52YXJpYW50 77721\nR2V0WA== 77722\nIHN0YXR1cmU= 77723\nIGltYWdpbmluZw== 77724\nYXRlYXU= 77725\nTU9WRUQ= 77726\nKFRyYW5zYWN0aW9u 77727\nX3Bvcg== 77728\nUmVmUHRy 77729\nLmdsb2JhbERhdGE= 77730\nZ3JhdmU= 77731\naW1lc3RlcHM= 77732\nZm91bmRsYW5k 77733\nU2FsaXI= 77734\nYXJ0aXN0cw== 77735\nIGNyZWF0ZUFjdGlvbg== 77736\nIFNhbnRv 77737\nINC90LXRgg== 77738\nCQkJICAgICAgICAgICAgICAg 77739\nLXNvbmc= 77740\nIG51aXNhbmNl 77741\nIGltcG92ZXI= 77742\nXykNCg== 77743\nIGNyb3dkZnVuZGluZw== 77744\nIHRpbXA= 77745\nUGljdHVyZXM= 77746\nIGxvZGdpbmc= 77747\n6ZKu 77748\nYXRhc2V0cw== 77749\n44Ot44Kw 77750\ncGVyc29ucw== 77751\nY29uZHVjdA== 77752\nIGV2YWRl 77753\nIGhhdW50aW5n 77754\nICEhfQ== 77755\nIExBUkdF 77756\nIGtpdHRlbg== 77757\nIHVwaGlsbA== 77758\nKG1pbnV0ZXM= 77759\nIEVtYW51ZWw= 77760\nJ0M= 77761\nIFNreXdhbGtlcg== 77762\ncHVycG9zZQ== 77763\nX21hcHBlcg== 77764\nIGFkYXB0YXRpb25z 77765\nLmZpbGxUZXh0 77766\ncnVr 77767\nIHJlcGVydG9pcmU= 77768\nKHByaW9yaXR5 77769\nKG1hcHBlZA== 77770\nUm9iaW4= 77771\nIGVycm9uZW91cw== 77772\nIGluaGFs 77773\nQk9WRQ== 77774\nKCIsIikK 77775\ndWVsbGVtZW50 77776\nIGZpbmdlcnByaW50cw== 77777\nIFBZVEhPTg== 77778\nLWRlbQ== 77779\nbGVhbm9y 77780\nesSFZA== 77781\nIlBlb3BsZQ== 77782\nYXNpZXI= 77783\nIHBhdHJpb3RpYw== 77784\nLmZyZWV6ZQ== 77785\nSUo= 77786\nIEJhbmNv 77787\nIGlzU3VjY2Vzcw== 77788\nKHZlaGljbGU= 77789\nKExheW91dA== 77790\nIGNhcnZpbmc= 77791\nX2NpcGhlcg== 77792\nIHZlemVz 77793\nKCdfJyw= 77794\nIEZpcnN0bHk= 77795\nIGZ1bGxlc3Q= 77796\nIExpc3RlbmluZw== 77797\nX3NpZ25hbHM= 77798\nZXdvbGY= 77799\nIFNDUg== 77800\nIE1lcnJ5 77801\nL3Rlc3RpZnk= 77802\nX1NBTklUSVpF 77803\naW9jdGw= 77804\nSUVFRQ== 77805\nPU1hdGg= 77806\nIGVucXU= 77807\nCWF1eA== 77808\n4pml 77809\nIGRpc3BlcnNlZA== 77810\naGFyZQ== 77811\nYmVybg== 77812\nIEFtZW5k 77813\nIGluc2lkZXJz 77814\nIEFsdmFyZXo= 77815\nIFp1Zw== 77816\nL2NhbGVuZGFy 77817\nIGhldXJl 77818\nLXBhcGVy 77819\nIHNvZm9ydA== 77820\nIHNtaXRo 77821\nIHBvYg== 77822\nKHJhdGU= 77823\nIHNvY2nDqXTDqQ== 77824\nIHdvZXM= 77825\nIGJydXNoaW5n 77826\ncWQ= 77827\nb2xvZ3Vl 77828\nc29ja2V0cw== 77829\nX1lFUw== 77830\nLmFkZENvbHVtbg== 77831\nIGV2YXNpb24= 77832\nU09GVFdBUkU= 77833\nYWJveA== 77834\nLnlsaW0= 77835\nIGVuZ3VsZg== 77836\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo= 77837\nIG5nT25EZXN0cm95 77838\nIG5vc3Nh 77839\nLmxzdA== 77840\nKCl9Pgo= 77841\nLmt3YXJncw== 77842\nIGNvbnRleHRv 77843\nIFBVQg== 77844\nRnU= 77845\nIGJpZ290cnk= 77846\nIGJyaWQ= 77847\nIHN0ZXJvaWQ= 77848\nIHZpZ29yb3VzbHk= 77849\nIGJ1cnN0aW5n 77850\nIHZlbmU= 77851\nIHNhbGFkcw== 77852\nIFZBUklBQkxFUw== 77853\nIE9uYw== 77854\nIGZpcmVFdmVudA== 77855\nc2FuZGJveA== 77856\nIHRvdWNoc2NyZWVu 77857\nc2Fucw== 77858\nL0luc3RydWN0aW9u 77859\nIGVvZg== 77860\nbGVjdHVyZQ== 77861\nPy0= 77862\nLmxvY2FsaXphdGlvbg== 77863\nVkVT 77864\nX3ZvaWNl 77865\naXR1cmE= 77866\nLnJlcG9ydGluZw== 77867\nIF0pOw== 77868\nTm92YQ== 77869\nX0NPTVBBVA== 77870\nIG91dGJyZWFrcw== 77871\nLmNsaWVudFdpZHRo 77872\naWZsb3dlcg== 77873\nX0dSQQ== 77874\nSW5pdGlhbGl6aW5n 77875\nX3BlcmY= 77876\nKCl9LA== 77877\nPVA= 77878\nX0lNRVRIT0Q= 77879\nIHRpZ2h0ZW5pbmc= 77880\nIHRhYkJhcg== 77881\nIEJL 77882\nCURvdWJsZQ== 77883\nL2hhc2g= 77884\nIG1leg== 77885\nVG9VcHBlcg== 77886\nVEc= 77887\nKGluZGVudA== 77888\nIHNpbGljYQ== 77889\nIC8vLy8vLw== 77890\nw7Zr 77891\nIGVsdmVz 77892\nZW1wbGF0ZXM= 77893\nLkNvbXBhcmVUbw== 77894\nIGd1bmZpcmU= 77895\nYW5pbWFscw== 77896\nIGtlcGFkYQ== 77897\nIENQUg== 77898\nX0xTQg== 77899\nCXZlcnRleA== 77900\nINC/0LXRgNCy 77901\nLCE= 77902\nIGR1bHk= 77903\nX1BBVENI 77904\nRU5B 77905\nCUND 77906\nY29tcG9zaXRpb24= 77907\nX3N2 77908\nTGJs 77909\namVq 77910\n0YHRgtGA0L7QuQ== 77911\nLkVkaXRWYWx1ZQ== 77912\n5YW3 77913\nYW50YXM= 77914\nIGJyZWFkY3J1bWI= 77915\nIFRlc3Rlcg== 77916\nIE1lYXN1cmVtZW50cw== 77917\nL0lucHV0 77918\nIFJheg== 77919\nX1BPTEw= 77920\nSW5kZXBlbmRlbnQ= 77921\nLmx1Y2VuZQ== 77922\nIE1lY2hhbmljcw== 77923\nY29sb24= 77924\nLnN1cmZhY2U= 77925\nIHVuYXM= 77926\ncmFkbw== 77927\nUExJQ0FURQ== 77928\nQ1JU 77929\nLnNldERlZmF1bHQ= 77930\nJUg= 77931\nIHJlc3BvbnNhYmxl 77932\nIHBlcnBlbmRpY3VsYXI= 77933\nIFJlc3Bpcg== 77934\nIFR1bmlzaWE= 77935\nXEFycmF5 77936\n6Lev5b6E 77937\nIHBhdw== 77938\nIGRlYm91bmNl 77939\nKE1QSQ== 77940\nINiv2LE= 77941\nIGVsaw== 77942\nIFJlbGF5Q29tbWFuZA== 77943\nL2xpZ2h0 77944\nLnNlcmlhbGl6YXRpb24= 77945\nQlNJVEU= 77946\nKSgoKCg= 77947\nIEJpb3M= 77948\nX3N2Zw== 77949\nKHN1cmZhY2U= 77950\nRHVwbGljYXRlcw== 77951\nICg+ 77952\nX0FTVA== 77953\nLm5pY2s= 77954\nIldoeQ== 77955\nIEludGVsbGVjdHVhbA== 77956\nYWJicmV2aWF0aW9u 77957\nZWFyYWJsZQ== 77958\nIGNvbnNlZ3Vpcg== 77959\nKEJl 77960\nX1BvZHM= 77961\nPEFuaW1hdG9y 77962\nX1VOREVGSU5FRA== 77963\nQVJSWQ== 77964\nIC8vfg== 77965\ncGVyYXRvcg== 77966\nLndyaXRlRmlsZVN5bmM= 77967\nQWxz 77968\nbGRlcg== 77969\nIG1pZWpz 77970\nIGZ1bmNz 77971\naW5jaWJsZQ== 77972\nIGR1c3R5 77973\nIERyaWxs 77974\nIGNvbnRpbnVhbA== 77975\nIEVsZWN0cm9u 77976\nLmVuZW15 77977\nKHBi 77978\nIHJldW5pdGVk 77979\nU21va2U= 77980\nLWZhY2Vk 77981\nSW50ZW5zaXR5 77982\nIFRyZWVNYXA= 77983\nIEFyZ3VtZW50RXJyb3I= 77984\nLndyaXRlSGVhZA== 77985\nIFRSRQ== 77986\nU3BsaXRPcHRpb25z 77987\nLyoqKioqKi8K 77988\nIFw8Xg== 77989\nIEludmVzdG1lbnRz 77990\nU1VNRVI= 77991\nIGRhYw== 77992\nQU5J 77993\nLlllc05v 77994\nKG9mU2l6ZQ== 77995\neXRo 77996\nZWxvYWQ= 77997\nIGltcHJlcw== 77998\nIGJsb2Jz 77999\nLnJldHJpZXZl 78000\nIHR5cmFubnk= 78001\nIGNhbmNlbEJ1dHRvblRpdGxl 78002\nIGhhY2k= 78003\nIENhc2lub3M= 78004\nIGRoZQ== 78005\nUmV0YWls 78006\nIFBvcm5odWI= 78007\nIENyaW1lcw== 78008\nT2ls 78009\nKElTZXJ2aWNl 78010\nUmVzaXphYmxl 78011\nCVNv 78012\nT2Z0ZW4= 78013\nIGNvbW1vbnBsYWNl 78014\nX0dD 78015\nYWxkaQ== 78016\nYXRobG9u 78017\nKFZpZXdHcm91cA== 78018\nKEVtcGxveWVl 78019\nIHNhZmVndWFyZHM= 78020\n6YCA5Ye6 78021\nX0FVUkE= 78022\nIHVubm90aWNlZA== 78023\nIFRob3Ju 78024\nbW9kZWxl 78025\nIGFjb3Jkbw== 78026\nIFdlbmdlcg== 78027\naW11cw== 78028\nZW5zYnVyZw== 78029\nb21iYQ== 78030\nY2nDs24= 78031\nImh0dHA= 78032\nX01hdHJpeA== 78033\nfHx8fA== 78034\nb3JuZWNlZG9y 78035\nCUJ1ZmZlcmVkUmVhZGVy 78036\ncmVnaXN0ZXJz 78037\ncmVsZWFzZWQ= 78038\nIGFkZE9ic2VydmVy 78039\nIFZhbGVudA== 78040\nKEN1bHR1cmVJbmZv 78041\nIG1hbm5lbg== 78042\nIGJ1cmdsYXJ5 78043\nX21pbnV0ZQ== 78044\nIGludGVyY2VwdG9y 78045\nb2NyYXRlcw== 78046\nYXR0cm8= 78047\nIFlF 78048\nZXNzbGVy 78049\nbGlzdGVuZXJz 78050\nL3Byb20= 78051\nIOek 78052\ndG91Y2hlcw== 78053\nRXNw 78054\nIEFib3J0 78055\nIGZmaQ== 78056\nIGNsdW1z 78057\nTklM 78058\nX1ZJUlRVQUw= 78059\nIGxvaW4= 78060\neW5vbWlhbHM= 78061\nINec 78062\nIGd6 78063\nIE5lb24= 78064\nSVNJUw== 78065\nYW1lcmF0ZQ== 78066\nX2F2YWls 78067\nIG1heGk= 78068\nIGlzQXJyYXk= 78069\nQ29sdW1uSW5mbw== 78070\naXppbg== 78071\nIHBlcnNv 78072\nIG91ZA== 78073\naWFsaXplZA== 78074\neW1p 78075\nIGNvbmZpZGVudGx5 78076\nPSIvIj4K 78077\nLmRhdGFzb3VyY2U= 78078\nIHBheWNoZWNr 78079\nIEJhdg== 78080\nL0JyYW5jaA== 78081\nIFRlYXI= 78082\nIG1lcnVwYWthbg== 78083\nIEJyYWg= 78084\nINC60L7QvdGC 78085\n74I= 78086\nLHBhdGg= 78087\nIGRhenpsaW5n 78088\nIFVDSEFS 78089\nIHByb3Zpc2lvbmFs 78090\n0L/Qvw== 78091\nIGxlZ2FsaXplZA== 78092\nX2FsZ28= 78093\nX1JTQQ== 78094\nYWx0ZXJuYXRpdmU= 78095\nIERFVEFJTFM= 78096\nVG9Ebw== 78097\ncmVmbGVjdGlvbg== 78098\nX1dFRUs= 78099\nIENMRUFO 78100\nIHNsb2dhbnM= 78101\nIOuTsQ== 78102\nIFZldGVyaW5hcnk= 78103\naWRm 78104\nLmRhdGVUaW1lUGlja2Vy 78105\naWNvbnRyb2w= 78106\nKHBsYXk= 78107\nIHVsbGFt 78108\nICcpDQo= 78109\nIGNoZXF1ZQ== 78110\n5a6L5L2T 78111\nIHVuc2VyZW0= 78112\nIEFyY2hpdGVjdHM= 78113\nYW1lbnRhbHM= 78114\nIHZtYXg= 78115\nIGplbWFuZA== 78116\nQ0VFRA== 78117\nIE9saXZpZXI= 78118\nc2V2ZXJpdHk= 78119\nUks= 78120\nRGlzY29ubmVjdGVk 78121\nIHdlYXBvbnJ5 78122\ndWnDp8Ojbw== 78123\nIGJpbmdv 78124\nZG9udA== 78125\nX0NIQU5ORUxT 78126\nIERhZw== 78127\nIGTDpHI= 78128\nw6lyaXF1ZQ== 78129\nZ3JhZGFibGU= 78130\nIENPTVBMRVRF 78131\nIHNwYW5pc2g= 78132\nIGluc3RydW1lbnRhdGlvbg== 78133\ndmFzaXZl 78134\nRFJBVw== 78135\nIGZwdXRz 78136\nIFNwZW5k 78137\nIFJlc3BlY3Q= 78138\nQ291cnRlc3k= 78139\nIHNjaG8= 78140\nIHBvc3RhZ2U= 78141\nIE1lYWRvd3M= 78142\nIHR1dG9yaW5n 78143\nZXJ2bw== 78144\nQWJzb2x1dGVseQ== 78145\nw6FuZGV6 78146\nvZTrk5w= 78147\nIFNIUg== 78148\ncGhvb24= 78149\nIERlcG9z 78150\nPScnCg== 78151\nIHBoeXNpb2xvZ3k= 78152\nKnRpbWU= 78153\nIFRvdWdo 78154\nZG9jaw== 78155\nL2hl 78156\nKEhhdmU= 78157\nIE1vaW5lcw== 78158\nU1RZUEU= 78159\nIEJyaWRl 78160\nIHN0cm9u 78161\nIHdvcmxkdmlldw== 78162\nIGdyYXR1aXRv 78163\nIGFlcm9zcGFjZQ== 78164\nIElocmVt 78165\nIHFj 78166\nIG1hbmlmZXN0YXRpb25z 78167\nc2xhdWdodA== 78168\nPEFjY291bnQ= 78169\nIEluZm9z 78170\nYW1iaWw= 78171\nX0ZpbmFs 78172\nIGFkbWluaXN0cmF0aW9ucw== 78173\nIGNvbGxhYm9yYXRlZA== 78174\nLmpkZXNrdG9w 78175\nb2x1Y2nDs24= 78176\nYXNjdGltZQ== 78177\nX2FsbG9jYXRl 78178\nYXJyaXZhbA== 78179\nSk9S 78180\nIHNoYWR5 78181\nIHBpbmVhcHBsZQ== 78182\n44KP 78183\nIHNhdGlu 78184\nYnJlcm8= 78185\nIExpZXM= 78186\nIHRlbnNvcnM= 78187\nIEludGVsbGlnZW50 78188\nLlNlbGVjdGVkSW5kZXhDaGFuZ2Vk 78189\nIHJhZGlhdG9y 78190\nYXNzaXN0YW50 78191\nJGZpZWxkcw== 78192\nCXN0ZXA= 78193\nIE1pdGdsaQ== 78194\nIEV2ZXJldHQ= 78195\nIFNjaGVkdWxlZA== 78196\nSG9yYQ== 78197\nIl0tPg== 78198\nIG1vdHM= 78199\nIERTVA== 78200\nZm9udE5hbWU= 78201\nIFdhcndpY2s= 78202\nX1Rhc2s= 78203\nKkM= 78204\n44On 78205\nb2JlbA== 78206\nX0RFVA== 78207\nIHNvY2lvbG9neQ== 78208\nIEthdHo= 78209\naWNpb25z 78210\nb3RsYW5k 78211\nYWRvbw== 78212\nX3BhcnM= 78213\nIHJpcHBpbmc= 78214\naWNobw== 78215\nIG51dHJpdGlvdXM= 78216\nCWRhbWFnZQ== 78217\nS3k= 78218\nIGFuY2hvcmVk 78219\nIGFydGlmaWNpYWxseQ== 78220\nIEp1dmVudHVz 78221\nL3Blcmw= 78222\nIGV4cHJlc3NpdmU= 78223\neEVF 78224\nIEVudW1lcmF0aW9u 78225\nLk1FU1NBR0U= 78226\nKGRlZw== 78227\n5b+X 78228\nIyMjIyMj 78229\nICIiKSw= 78230\na2zDpHI= 78231\nXE1haWw= 78232\nRGVzaWduZWQ= 78233\nIHN0YWZmZXI= 78234\nIHNhbHRz 78235\nKioqKioNCg== 78236\nIOKB 78237\nIHNldFRpdGxlQ29sb3I= 78238\nRFZE 78239\nLldyaXRlQWxs 78240\nZWxsYW50 78241\nIGNvZXJjaW9u 78242\nIFNvcnRpbmc= 78243\n6KiA 78244\nIHN0YXJ2YXRpb24= 78245\nLy97ew== 78246\nLmhlYXA= 78247\nIE1lZGlldmFs 78248\nICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 78249\n77yR77yQ 78250\nIHdhcmRz 78251\nIEhlcmM= 78252\nIEhvZ3dhcnRz 78253\nLWNvbW1lbnRz 78254\nIExhdWRlcmRhbGU= 78255\n5rw= 78256\nIHJpZnQ= 78257\nIHplaXQ= 78258\nIHByb29mcw== 78259\nLnZpZXdwb3J0 78260\nJHN0YXJ0 78261\nIEJvdWdodA== 78262\nLnJpY2hUZXh0Qm94 78263\nIGNsaW5n 78264\nICcqKg== 78265\nT3duZXJzaGlw 78266\nIEJvZWhuZXI= 78267\nKGR5bmFtaWM= 78268\nIG1lZGljYWxseQ== 78269\nIFdURg== 78270\nIE1haW5NZW51 78271\n6LSt 78272\nIGRpZmVyZW50ZQ== 78273\nL3Jlc3VsdHM= 78274\nZW50aGFs 78275\nIFdpZGdldHM= 78276\ncnVzaA== 78277\nIFJNUw== 78278\nIFZvbGxleQ== 78279\nIHJlbW92ZUZyb21TdXBlcnZpZXc= 78280\nIExhZmF5ZXR0ZQ== 78281\nIEZldGNoVHlwZQ== 78282\nYWNhcw== 78283\nIHBhdGhvZ2Vucw== 78284\nIE1NTw== 78285\nLkN1cnJlbmN5 78286\nb2Npb3Vz 78287\nIHNwcml0ZUJhdGNo 78288\nZG9sbA== 78289\nIHZhbXBpcmVz 78290\nbGF1bmNoZXI= 78291\nIHBlYWtlZA== 78292\nIGRlYnVuaw== 78293\nIEFTRA== 78294\nIHVuZXF1YWw= 78295\nIHNxdWFkcw== 78296\nfS4kew== 78297\nbWFuaQ== 78298\nIkU= 78299\nIEZhaHI= 78300\nIElTSQ== 78301\nIHVuYXZvaWQ= 78302\nb3Bob25l 78303\nWzpdCg== 78304\nIERpcmVjdGVk 78305\nIGJ1c2hlcw== 78306\nLmZhaWx1cmU= 78307\nIGltbWVyc2Vk 78308\nZXhv 78309\nSGlzdG9ncmFt 78310\nIEthbm4= 78311\nIHBpcmFjeQ== 78312\nIENydW5jaA== 78313\nIGzDpg== 78314\nLy8i 78315\nIG1vbm90 78316\nIFNhdW5kZXJz 78317\nIFNldmVudA== 78318\nKEFic3RyYWN0 78319\nIHNtb2tlcg== 78320\ncm9uZQ== 78321\nLmNsaWVudFk= 78322\nICItIiw= 78323\nIEZvdW50YWlu 78324\nIGlubmU= 78325\n7IOJ 78326\nQ3Ry 78327\nJGlucHV0 78328\nUFJPRklMRQ== 78329\nIERvbmF0aW9u 78330\nV2l0aEVtYWls 78331\nIGZyYWN0dXJlcw== 78332\nS2VlcGVy 78333\nIG1laXNqZXM= 78334\nIGFyY2hpdGVjdHVyZXM= 78335\nIEx1bmc= 78336\nJ2ltYWdl 78337\naGFybWE= 78338\nIGFiYW5kb25pbmc= 78339\nQUxMRUQ= 78340\nc3VidHlwZQ== 78341\ncmVpcmE= 78342\nIG1vc3M= 78343\nIFBhcnNvbnM= 78344\nYWtlZG93bg== 78345\nPW9iag== 78346\nIHN1Y2Vzcw== 78347\nIHdlYXJhYmxl 78348\n44Kn 78349\nIGFkdWx0aQ== 78350\nLnVt 78351\nIHZpYnJhdGlvbnM= 78352\nIHN3ZWxs 78353\nIERpc2Nsb3N1cmU= 78354\nIFJERA== 78355\ncGFpcnM= 78356\nYW5nZ2Fu 78357\nIG1haW5CdW5kbGU= 78358\nIERJTg== 78359\nIHJvY2tlZA== 78360\nc2hvdWxkQmU= 78361\nLmdi 78362\nIElNRA== 78363\nIFdO 78364\nLGFyZw== 78365\n4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 78366\nW109JA== 78367\nLlNN 78368\nIGFsZ3Vucw== 78369\nYWRkb25z 78370\nX0NvbW1vbg== 78371\nX1JFRlJFU0g= 78372\nINmB2Yo= 78373\nIFRZUE8= 78374\nIEVjb2xvZ3k= 78375\nIGdsdQ== 78376\nLkRhdGFUeXBl 78377\nIFByb2Jl 78378\nTHV4 78379\nb3dlZ28= 78380\nIHJlaw== 78381\nIFBsYWludGlmZg== 78382\nYWNoYWJsZQ== 78383\nLm5hbWE= 78384\nKm91dA== 78385\nfX17ew== 78386\nIENBUElUQUw= 78387\n5L2G 78388\nSW1wb3J0ZXI= 78389\nLmNyZWF0ZVNlcnZlcg== 78390\nX3Jlc29sdmU= 78391\nX0VQUw== 78392\nc3RlbGxhcg== 78393\nX1Byb2ZpbGU= 78394\nCXN3 78395\nLW1vbg== 78396\ndWRldg== 78397\nXFBsdWdpbg== 78398\nX01JWA== 78399\nIERpc2NyaW0= 78400\nLmZyb21MVFJC 78401\nIFN0cmFuZA== 78402\nQW55dGhpbmc= 78403\ncG93ZXJz 78404\nXV0NCg== 78405\nLlRJTQ== 78406\nIGFkZHNsYXNoZXM= 78407\nIGVzaQ== 78408\nQEJlZm9yZQ== 78409\nIHNhaw== 78410\nICcvJzsK 78411\nY29j 78412\nxZ/EsQ== 78413\nICkpOw0K 78414\nX2Fib3Zl 78415\nIEVDQw== 78416\nL2NwdQ== 78417\nIGNhZGU= 78418\nLlN0ZGVycg== 78419\nIHBlbGxldHM= 78420\nIFBhbGlu 78421\nIGfDqW4= 78422\nX2phdmE= 78423\nIHNhbGFo 78424\nIGJlcmdlbg== 78425\nX1NXQVA= 78426\nIGdpYg== 78427\nacOjbw== 78428\nX2Rpc3RhbmNlcw== 78429\nIENpbmRlcg== 78430\nIGFuYXJjaGlzdA== 78431\naW1hdA== 78432\nCW1vY2s= 78433\n44GX44G+44GZ 78434\nT21lZ2E= 78435\nIGJhaHdh 78436\nX1BhcnNl 78437\nLnBhcGVy 78438\nCUludGVudA== 78439\ncmVucw== 78440\nL2dyaWQ= 78441\nIGZpbHRoeQ== 78442\nLmV2 78443\nIyMjIyMK 78444\nIHNhcmU= 78445\nIHNvYWtpbmc= 78446\nIFJlZ2lvbnM= 78447\nX1VTRUQ= 78448\nIFNpaw== 78449\naWZpa2FzaQ== 78450\nCUVkaXRvcg== 78451\nTHVjaw== 78452\nIOyXsA== 78453\nxINt 78454\nLiI7 78455\nIFppZWw= 78456\nIGdyYXlzY2FsZQ== 78457\nKEZ1bmM= 78458\n44OB 78459\nLkRlbnNl 78460\nLWxlYW5pbmc= 78461\nIGdyYWNlZnVs 78462\nR3JhcGhOb2Rl 78463\nX0NPTU1JVA== 78464\nIENWUw== 78465\nIHBsYWlucw== 78466\nIHJlag== 78467\ncGNpb25lcw== 78468\nIHVuZGVybWluaW5n 78469\nX2NhdHM= 78470\nZmVi 78471\nQ29sbGVjdGlvblZpZXc= 78472\nU0VNQg== 78473\nIHRodQ== 78474\ndGV4dGJveA== 78475\nKEFuZHJvaWQ= 78476\nIHJpZ29y 78477\nIFlpZWxk 78478\nLmlzUGxheWluZw== 78479\nOnZpZXc= 78480\ncmVtYWluZGVy 78481\nIFBpcA== 78482\nKWluZGV4 78483\nIEJlY2tlcg== 78484\ndG9Mb2NhbGU= 78485\nYXV0b3JlbGVhc2U= 78486\nIFJvbWVybw== 78487\nLkhhbmRsZWQ= 78488\nIENhYmluZXRz 78489\nKVY= 78490\nIHJ0ZQ== 78491\nIEh1bHU= 78492\naWNpZWw= 78493\nL2FuaW1hdGlvbnM= 78494\nIHByZXN1bWU= 78495\nLnRyYW5zcGFyZW50 78496\nIHN1Ym1lbnU= 78497\ncW0= 78498\naWVydGVu 78499\nIHRleHRTaXpl 78500\nIHN0YXJ2aW5n 78501\nL2pvYg== 78502\nQXBhY2hl 78503\nIHlpZWxkaW5n 78504\nLWFydGljbGU= 78505\nJz0+JF8= 78506\nIOih 78507\nPFNwcml0ZVJlbmRlcmVy 78508\nIFNoaWE= 78509\nKToo 78510\nIHB1Ymxp 78511\nemllag== 78512\nIHRlbGVzYw== 78513\nIHRlaWw= 78514\nTGVnYWN5 78515\nIFBsYWNlbWVudA== 78516\nKCkpew== 78517\nIHRyb3VibGVzb21l 78518\n5pif 78519\nIHBlcnPDtm4= 78520\nX0FzcE5ldA== 78521\nPX0= 78522\nKHVzZXJJRA== 78523\nU3Vz 78524\n44K6 78525\nLWF2ZXJhZ2U= 78526\nIFFJbWFnZQ== 78527\nLlN0cmljdA== 78528\ndGVib3Jn 78529\nLWZ1bmN0aW9ucw== 78530\nUkVHSU9O 78531\nPk5ldw== 78532\nX2Nob29zZQ== 78533\nKGNp 78534\nIHVubGVhc2g= 78535\nIFJJR0hUUw== 78536\nIFNwZWFy 78537\nCW1ha2U= 78538\nIHR5cw== 78539\nYW5lbGE= 78540\nIFdY 78541\nX01BS0U= 78542\nL3NldHVw 78543\nIG9uU2F2ZQ== 78544\nIGNsaW5pY2lhbnM= 78545\nCWJhY2s= 78546\nLkxpbmtlZA== 78547\nIGNvbnNlcnZl 78548\nIGJpdHRlbg== 78549\nX3ZhcmlhbmNl 78550\nIGxpcmU= 78551\nIGluZXJ0aWE= 78552\ndWZmbGVz 78553\nX01QSQ== 78554\naWRkbGVz 78555\nW2Fycg== 78556\nLnZvY2Fi 78557\nIHNoaXR0eQ== 78558\nIG5lc3Rl 78559\nc3NpemU= 78560\nIEtU 78561\nYmxlcg== 78562\nX2xpbnV4 78563\nIG1vbmdvZGI= 78564\nIElURU1T 78565\nS29u 78566\nIEJ1cnN0 78567\nX3Bob3Rvcw== 78568\nQ29sb3JhZG8= 78569\nIGFja25vd2xlZGdtZW50 78570\nIG9pbHk= 78571\nIG5mcw== 78572\nIFppb25pc3Q= 78573\nIGFkZGljdHM= 78574\nIGFkZFVzZXI= 78575\nIE1pc2g= 78576\nIGtX 78577\nIFdhbnRz 78578\nKHJlY29yZHM= 78579\nb2N1cnJlbmN5 78580\nSlNHbG9iYWw= 78581\nLmVsYXBzZWQ= 78582\nIE5i 78583\nIHBwdA== 78584\nXERlcGVuZGVuY3k= 78585\nUm9s 78586\nIMOnYWzEscWf 78587\nIGV4cGFuc2lvbnM= 78588\nYnViYmxl 78589\nIG1pZHRlcm0= 78590\nICcjew== 78591\nY3R4dA== 78592\nSVN5bnRheEV4Y2VwdGlvbg== 78593\nIFZhbGxl 78594\nIENhZGlsbGFj 78595\nICIifSwK 78596\nIHNlbXVh 78597\ncmljaFRleHQ= 78598\nc29mdG1heA== 78599\nb2JqUEhQRXhjZWw= 78600\nLmhzdGFjaw== 78601\nX2NyaXRpY2Fs 78602\nKDw/ 78603\nZGo= 78604\nIGNvbnNvbg== 78605\nIHJvb21JZA== 78606\nRE9NQ29udGVudExvYWRlZA== 78607\ncGFybXM= 78608\nIHplaWd0 78609\nVFBM 78610\nLW5vdGNo 78611\nIG9wcHJlc3NpdmU= 78612\nQ29kaW5n 78613\nIExlYXZlcw== 78614\nKERpc3BsYXk= 78615\nLnNpZ25Jbg== 78616\nLy8tLQ== 78617\nIE9wcg== 78618\nY3Rh 78619\nIG1ldGF2 78620\nU2VyaWFsaXplZA== 78621\nIHVuYWZmZWN0ZWQ= 78622\nIEFUTA== 78623\nIEtQ 78624\nQXRsYW50aWM= 78625\nLHVybA== 78626\nLHN0YXRl 78627\nIGJpc3Q= 78628\nZW5lZw== 78629\nIHNpbXBsaXN0aWM= 78630\nIGJpZGRlcg== 78631\nIHBlcmNlcHQ= 78632\nIGNlbGli 78633\nIFRIUk9X 78634\nKC9b 78635\nVGNw 78636\nIGZ1cnRoZXJtb3Jl 78637\nLkFjYw== 78638\nb3BwYWJsZQ== 78639\n5Lik 78640\nIFRhcnQ= 78641\nIEJlbno= 78642\nIGVtYm9kaWVk 78643\nKENvbnN0 78644\nICst 78645\nUGFydGljaXBhbnRz 78646\nIGh0dHBSZXF1ZXN0 78647\nYWNjZW50 78648\nIFPDvA== 78649\nIGhvcnJpZnlpbmc= 78650\nIC8+LA== 78651\nIGVuYWN0bWVudA== 78652\nIFVOSU9O 78653\nL2xvZ3M= 78654\nIHNjcmVlbkhlaWdodA== 78655\nIGV0d2E= 78656\n5L6L5aaC 78657\nIGHDum4= 78658\n5bem 78659\nX3RpbWVsaW5l 78660\nICIiKSkK 78661\nJzonJw== 78662\nQlc= 78663\nIHJlbm92YXRpb25z 78664\nIDwK 78665\nUGFsZQ== 78666\nPjo8Lw== 78667\nU2tlbGV0b24= 78668\nIGdldFVzZXJz 78669\nX2RhdGFmcmFtZQ== 78670\nYWJy 78671\nbWF0ZXJpYWxz 78672\nJmVhY3V0ZQ== 78673\nLkRpc3BsYXlOYW1l 78674\nIGh2aXM= 78675\nX2xhbmd1YWdlcw== 78676\nLnN5 78677\ndG93ZXI= 78678\nSUZJQ0FUSU9OUw== 78679\nIGJhcnJpYw== 78680\nIFBsdXRv 78681\nYDs= 78682\n44OL 78683\nY2VudGU= 78684\nI2Fi 78685\nIGxleGljYWw= 78686\nIEJSTw== 78687\nIHJ1bGluZ3M= 78688\nSEVZ 78689\nLmlPUw== 78690\ncmV0dXJuZWQ= 78691\nLmJvb2tz 78692\nIEh1YmI= 78693\nZW9m 78694\nPj46Og== 78695\nIOyG 78696\nIGdvVG8= 78697\n6ICD 78698\n44Go44GG 78699\nPEZvcm0= 78700\nY29waWVz 78701\nLnF1YW50 78702\nIFBvdGF0bw== 78703\nIENvdXNpbnM= 78704\nIHPDuw== 78705\nR292ZXJu 78706\nIGdhbGVy 78707\nIEZJUg== 78708\nX1dpZHRo 78709\nIFNoZWxkb24= 78710\nLkRldg== 78711\nIFJlc3BvbnNpYmlsaXR5 78712\nc29uaWFu 78713\nIHN1cGVyY2xhc3M= 78714\nYml0c2V0 78715\nZWRkYXI= 78716\nIExhYm9yYXRvcmllcw== 78717\nIGNvaW5lZA== 78718\nIFRlY2huaXF1ZQ== 78719\nKENvcmU= 78720\nIHNwcmF5ZWQ= 78721\nIHBvbmc= 78722\nKE5ldHdvcms= 78723\nIHJvYXI= 78724\nIEVBU1Q= 78725\nc3RyYWlu 78726\nIG1lbnN0cnVhbA== 78727\nb21iYXQ= 78728\nIGNhbG1pbmc= 78729\nCURpbQ== 78730\nX21vdmllcw== 78731\nIFJBSUQ= 78732\nLWRpc21pc3NpYmxl 78733\nIGZyZXVuZA== 78734\nLWNoYW4= 78735\nIHJlc2lzdG9y 78736\nX0NvcHk= 78737\nb2NyaW5l 78738\nIGVzcGlvbmFnZQ== 78739\nZ2Fkbw== 78740\nTkRBUg== 78741\nIHBvcmNlbGFpbg== 78742\ndGhhbG0= 78743\nIGBb 78744\nIGdyYWRv 78745\n0LjRgA== 78746\nRE9VQkxF 78747\nIGFjY2Vzc2Vz 78748\nLkZsb29y 78749\nIOKGlA== 78750\nIHRva2VuaXpl 78751\nYW5hbHl0aWNz 78752\nLkNyZWF0ZUluc3RhbmNl 78753\nIHN1Y2hl 78754\nCWVudA== 78755\naWduZXI= 78756\nINC/0LXRgNC10LQ= 78757\nIGNvbmRpY2lvbmVz 78758\nLmxpYnM= 78759\nIic7 78760\nUERPRXhjZXB0aW9u 78761\nIG9uRGF0YQ== 78762\nIEF1dGlzbQ== 78763\nLWhlbHBlcg== 78764\nIHJld2luZA== 78765\nIGNvZmZpbg== 78766\n44O844K4 78767\nIHRyYW5zbWl0dGluZw== 78768\nLnNldEFsaWdubWVudA== 78769\nIGRlYWxsb2M= 78770\nIGFuY2VzdHJhbA== 78771\nb2dpZQ== 78772\nLkNPTVA= 78773\nOmZyYW1l 78774\nbW1v 78775\nJzoi 78776\nIFJlZ2VudHM= 78777\nIGNoZWF0ZWQ= 78778\nLmdn 78779\nIHBhY2Vk 78780\nIGVzdGFk 78781\nb2NlbmU= 78782\nbHNh 78783\nKGZj 78784\nL2dyb3Vwcw== 78785\nL21pc2M= 78786\nIFNodXR0bGU= 78787\nVVBJ 78788\nw6Fv 78789\nLWN5Y2xl 78790\nCXByb3Bz 78791\nIHJvdHRlbg== 78792\nUmVqZWN0ZWQ= 78793\nI2Fj 78794\nLnVh 78795\nIEFtbmVzdHk= 78796\nIHBlbm5lZA== 78797\nSU5DUkVNRU5U 78798\nPGRpbQ== 78799\nLnNldFVw 78800\nIFR3ZWV0cw== 78801\nIE1hZHVybw== 78802\nINmC 78803\nIENBY3RpdmU= 78804\nCUJZVEU= 78805\nKHNlcGFyYXRvcg== 78806\nLlJlc2l6ZQ== 78807\ndWZmbWFu 78808\nc3VwcG9ydHM= 78809\nIHVyYg== 78810\nIEZvdW5kZWQ= 78811\nX2hhcmQ= 78812\nIGVjbGVjdGlj 78813\nLkZpbHRlcnM= 78814\nIFJvdW5kZWRSZWN0YW5nbGU= 78815\nX3NhbXBsaW5n 78816\nIEpldHp0 78817\nYW1lcmljYW4= 78818\nLmludm9rZUxhdGVy 78819\nIEJ1dHRlcmZseQ== 78820\nKGNvbm5lY3Rpb25TdHJpbmc= 78821\nIE5hb21p 78822\nIEphaW1l 78823\ncnRz 78824\nIG1hZ2ljYWxseQ== 78825\nLm1hY2hpbmU= 78826\nIEFwcGFsYWNo 78827\nIisi 78828\ndmFsZQ== 78829\nLW1vdW50ZWQ= 78830\nIGFjaGU= 78831\nTUo= 78832\nIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVy 78833\nLUp1bg== 78834\nTWFuYQ== 78835\na3JhaW5l 78836\nRENG 78837\nL1Byb2R1Y3Q= 78838\nIFJFU0VSVkVE 78839\nIEZIQQ== 78840\nOkAiJUAiLA== 78841\nIFByb2pla3Q= 78842\nIE5pcg== 78843\nIENhcm5pdmFs 78844\nICom 78845\nIFFT 78846\nV0hP 78847\nIHdlbHQ= 78848\nIG1hcnJ5aW5n 78849\nQWxleGFuZGVy 78850\nIFJldmlld2Vk 78851\nYWN0ZXJpYQ== 78852\nIHdhbg== 78853\nKHJvYm90 78854\nIFdpbmRvd01hbmFnZXI= 78855\nIG1vbnVtZW50YWw= 78856\nIERvbWluZw== 78857\nL3dlYXRoZXI= 78858\nX3NlY29uZGFyeQ== 78859\nT3BlcmF0b3Jz 78860\nX1NJREU= 78861\nS2F0 78862\nLXpvbmU= 78863\nIHNpZ25pZmllcw== 78864\nIEh0dHBNZXRob2Q= 78865\nL2NvbnRleHQ= 78866\nIg0KDQoNCg== 78867\nIFJvZHJpZ28= 78868\nIGJ1Yg== 78869\nL211c2lj 78870\nIHNlcm9udA== 78871\nIG1STkE= 78872\nX2VtYWlscw== 78873\nICc+Jw== 78874\nIEdlbWU= 78875\nINGA0LDRgQ== 78876\nIH5+ 78877\nIGR1Y2tz 78878\nIEZyZXVuZA== 78879\nRXhwZXJpbWVudA== 78880\nIHJlb3BlbmVk 78881\nIFwiew== 78882\nIGVsbGlwdA== 78883\nIGNvbmNhdGVuYXRl 78884\nIHBvbG8= 78885\nVGltZVpvbmU= 78886\nICAKICAgIAo= 78887\nIGNhcHRpb25z 78888\ncmlja3M= 78889\nLmZyZXE= 78890\nLm1lbW8= 78891\nIHNtYg== 78892\nRHJ1Zw== 78893\nXVsv 78894\nX0JBQ0tFTkQ= 78895\nIEVsbGE= 78896\nIFBvcnRpb25z 78897\nIGZldGNoRGF0YQ== 78898\nIGNvcm91dGluZQ== 78899\nIGVzdGF2YQ== 78900\nIEdlbml1cw== 78901\nOmB+ 78902\nIFN3YW5zZWE= 78903\nKHBheW1lbnQ= 78904\nVm90cmU= 78905\nIFBydWl0dA== 78906\nLm9mZnNldFdpZHRo 78907\nYXJ5bA== 78908\nIHVuaWZvcm1seQ== 78909\nIFdhcnA= 78910\nIFNFQQ== 78911\nIGRlZHVjdGlibGU= 78912\nIGJ1bGxpZWQ= 78913\nIEJlc2No 78914\nIFByb3NwZWN0 78915\nT1NQ 78916\nIlllYWg= 78917\nIEFuZ3J5 78918\nLlZhbA== 78919\nIGdpZ3M= 78920\nIGJ1bGt5 78921\nZXRlcmlh 78922\nLmdldFN0YXJ0 78923\nIE1FVEg= 78924\nIGNvaGVyZW5jZQ== 78925\nIG1lZGlhdGVk 78926\n0LXQs9C40YHRgg== 78927\nLi4uLgo= 78928\nIHN0cm9rZUxpbmU= 78929\nbWo= 78930\nIFVuc3VyZQ== 78931\nYXRocm9vbQ== 78932\nKEJpbmFyeQ== 78933\nX0tleVByZXNz 78934\n5p6E 78935\naW5oZXJpdHM= 78936\nIHJlcHJlaA== 78937\nCVNjaGVtYQ== 78938\nIHVucmVzdHJpY3RlZA== 78939\nLmRlZmluaXRpb24= 78940\nXT8u 78941\nIGl0aA== 78942\n5aCx 78943\nIHNsaW1l 78944\nbXNncw== 78945\nX0pT 78946\nCVZlcnNpb24= 78947\nX1NFQ1VSRQ== 78948\nIGNvc3Rv 78949\nLlJlc3Ry 78950\nY3Ny 78951\nX1RPT0xUSVA= 78952\ncGNs 78953\nIOKGkw== 78954\nU2VsZlBlcm1pc3Npb24= 78955\nLnJhdmVs 78956\nIG1lbWJyZXM= 78957\nQXNzZW1ibGVy 78958\ncm9taXVt 78959\nc3VyZg== 78960\nIFVQREFURUQ= 78961\nKGJyYW5jaA== 78962\nKGluY2x1ZGU= 78963\nIElkb2w= 78964\nXE9iamVjdA== 78965\nIGNsb25pbmc= 78966\nIGlzTmFO 78967\nIGFueg== 78968\nxrDhu51uZw== 78969\nIG9uYw== 78970\nX0NMVVNURVI= 78971\nIHt9KSwK 78972\naW1pbmFyeQ== 78973\nCWNvbnRlbnRQYW5l 78974\ndHJhaWw= 78975\nIG5pbmV0eQ== 78976\nIE5pYWdhcmE= 78977\nIEFuZHI= 78978\nw6lzeg== 78979\nIGRpZmlj 78980\ndXRyYQ== 78981\nJ319Pg== 78982\n44Kk44OI 78983\nc3Bhcg== 78984\nICJcIiw= 78985\nIG15ZmlsZQ== 78986\nZmZj 78987\nIG5vdGljZWFibHk= 78988\nZXlh 78989\nIFB1dHRpbmc= 78990\nSlY= 78991\nLmRpbWVuc2lvbnM= 78992\nZXJjYQ== 78993\nZ2VuZXNpcw== 78994\nZWZmZWN0aXZl 78995\nIHBlcmRlcg== 78996\nLk9S 78997\nX0NPTVBBUkU= 78998\nOmxlbg== 78999\nL3JlZA== 79000\nIEFyaXN0b3RsZQ== 79001\nIHF1ZXJpZWQ= 79002\nIGZvcmVzZWVhYmxl 79003\nIFVJQ29udHJvbA== 79004\ncmVtaW5kZXI= 79005\nIGNlbmE= 79006\nIGhpYw== 79007\nICIiOw0KDQo= 79008\nL2Jhc2lj 79009\nIGFmZm9yZGFiaWxpdHk= 79010\nLGVycg== 79011\nINGB0LjQvNCy 79012\nIElTUg== 79013\nbGljZW5zZXM= 79014\nVk9JQ0U= 79015\nLkxhbmc= 79016\nLnJlbGF0aW9uc2hpcA== 79017\nIGxlbmRz 79018\nIG51dHplbg== 79019\nIGVzcGVjw61m 79020\naWVuZGE= 79021\nPFBhaXI= 79022\nVHY= 79023\nX1JFVFJZ 79024\nIGhvbm9yaW5n 79025\nX2RlY2xhcmF0aW9u 79026\nKE5P 79027\nIEhpY2s= 79028\nIG1pbmxlbmd0aA== 79029\nIEdlc2NoaWNodGU= 79030\nYXBlc2g= 79031\nQVRPTQ== 79032\nJykiKTsK 79033\nZW50ZXJwcmlzZQ== 79034\nPn08Lw== 79035\nIHBvbGl0aXF1ZQ== 79036\nZWRpdGlvbg== 79037\nX0RlYnVn 79038\nQW5uZQ== 79039\nLlNjb3Bl 79040\nY3Rw 79041\nY2Fub25pY2Fs 79042\nPj47Cg== 79043\nTWVudXM= 79044\nIGZpZXJjZWx5 79045\nLk9uY2U= 79046\nIEJvcnJvdw== 79047\nIHNvc3Q= 79048\nIHNlcnZpbmdz 79049\nLWZsYWc= 79050\nIHZlc3RlZA== 79051\nIGZyb24= 79052\n7ZWo 79053\nIGZhbWluZQ== 79054\nIl0pKXsK 79055\nZXJlw6dv 79056\nIGtpamtlbg== 79057\nIEZsb29yaW5n 79058\n55CD 79059\nb2JzZXJ2YXRpb24= 79060\nIHVzZXJEYW8= 79061\nPSIiPg0K 79062\nQ09WSUQ= 79063\nYmFieQ== 79064\nIHRyb3VnaA== 79065\nIFNlYW0= 79066\nIEZpZ2h0ZXJz 79067\nb21pdA== 79068\nIENoYXJnZXM= 79069\nUnVzcw== 79070\nIHF1ZWxxdWU= 79071\nR2V0UG9zaXRpb24= 79072\nIE1pbmlzdGVycw== 79073\nX3JlY2VpcHQ= 79074\nIHJvb3ROb2Rl 79075\nbXVsdGlw 79076\nJHNlYXJjaA== 79077\nIikpKSkK 79078\ndGFrZXM= 79079\nICghIQ== 79080\nIEJBVA== 79081\nY2hhbmc= 79082\nxJM= 79083\nLm9j 79084\nIHNraWxsZXQ= 79085\nIFNLVQ== 79086\nIEdhbGxhZ2hlcg== 79087\nIGNyZXNj 79088\nd2Vla2RheQ== 79089\nZXJ2aXNlZA== 79090\nQ2FyZENvbnRlbnQ= 79091\nLmFjY2Vs 79092\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 79093\nVGFp 79094\nIENvbXBhdGliaWxpdHk= 79095\neENG 79096\nX3Jld2FyZHM= 79097\ncmRm 79098\nQVBQTEU= 79099\nLWZlZA== 79100\nIGRlcGVuZGVk 79101\nLWdlbmVyYXRvcg== 79102\nKFByb2Nlc3M= 79103\n0LzQvtC2 79104\nIGRpc2NyZXBhbmN5 79105\nIHBob3NwaGF0ZQ== 79106\nTmV0d29ya2luZw== 79107\n6K6+6K6h5Zmo 79108\nKHJv 79109\nIGNvbmN1cnJlbmN5 79110\nCWF1dGg= 79111\nUGx1Zw== 79112\nQVRBTE9H 79113\nc3Viag== 79114\nL3RlYW0= 79115\nKGF2Zw== 79116\nb2tpbg== 79117\nIHBsZWRnZXM= 79118\nIGNvbGxhYm9yYXRvcnM= 79119\nIGVtYmFya2Vk 79120\nIERvY2g= 79121\nIERhaXJ5 79122\nY29tcGV0aXRpb24= 79123\nIE11dGFibGVMaXN0 79124\nLXNldmVu 79125\nIGNvbmN1cnJlbnRseQ== 79126\nIFZpag== 79127\nIHJlc2V0dGluZw== 79128\nZHBp 79129\nIHNsaXQ= 79130\nIFBPSU5URVI= 79131\nIENBUlQ= 79132\nLmRleA== 79133\nY3Vsb3M= 79134\nX3BlcnNvbmFs 79135\nIGFuYWx5dGlj 79136\nI2NyZWF0ZQ== 79137\nX21lbWNweQ== 79138\nKExpc3ROb2Rl 79139\nX1RhZw== 79140\nIElycg== 79141\nIj4nOw0K 79142\nU2hvcnRseQ== 79143\nLnRpcA== 79144\nXFs= 79145\nIFJlcHJlc2VudGF0aW9u 79146\nX0xJVEVSQUw= 79147\nLmNibw== 79148\nIEthcm5hdGFrYQ== 79149\nIENvbXBldGl0aXZl 79150\nIFJ1ZQ== 79151\nIHJ1bm9mZg== 79152\nIFNwZWxscw== 79153\nZmNsb3Nl 79154\nY2lz 79155\nRnJh 79156\nIHJlbW9yc2U= 79157\nIENvbG9nbmU= 79158\nIHJhbmdlcg== 79159\nIE1vcmc= 79160\nZmlnaHRlcnM= 79161\nLlJlcXVlc3RQYXJhbQ== 79162\nQ29ycw== 79163\nIGRlbm90ZQ== 79164\nIGNob3Nlcw== 79165\nw6JuZA== 79166\nLnJlY3ljbGU= 79167\nIExvZ2lzdGlj 79168\nIERFQUQ= 79169\nLWxvYWRlZA== 79170\nIENsZWFycw== 79171\nIGtlbGw= 79172\ncmFwaGlj 79173\nIE1hbmU= 79174\nRU1CRVI= 79175\nIG1hc2tpbmc= 79176\nCWVkaXRvcg== 79177\nSGFsbG8= 79178\nOmxpc3Q= 79179\nIGV0aG4= 79180\nLXNlYXQ= 79181\nICopWw== 79182\nIEdseQ== 79183\nIEFDUw== 79184\nCXN0YXQ= 79185\nL0NvbW1vbg== 79186\nIGRpc2d1aXNlZA== 79187\nRmluYW5jZQ== 79188\nIEVsZXBoYW50 79189\ndGVtcG9yYXJ5 79190\nIENhcmx5 79191\nIGNvY29z 79192\nIEp1ZGl0aA== 79193\nIHdyYXBwZXJz 79194\nIEx1bmFy 79195\nIHLDqWN1cA== 79196\nLXNldHVw 79197\nIHNpemFibGU= 79198\nICAJIA== 79199\nY2xhc3NpZmllcg== 79200\nIGZpZ3NpemU= 79201\nIG1hc3R1cg== 79202\nIOabtOaWsA== 79203\nIFJ3YW5kYQ== 79204\nKXQ= 79205\nIEN1cHM= 79206\nQXp1cmU= 79207\nKCl9LAo= 79208\nU1BBUkVOVA== 79209\nKGRpYw== 79210\nIFRleHRGb3JtRmllbGQ= 79211\nIGRlZm9ybQ== 79212\nIGRpcmVjY2nDs24= 79213\nIHlheg== 79214\nIGdsdWVk 79215\nIGF0cmF2w6lz 79216\nY29mZmVl 79217\nIFVwZGF0aW5n 79218\nIENvbGxlZ2Vz 79219\nw6RsbHQ= 79220\nYW5kZWxpZXI= 79221\nIHNhbGly 79222\nIFNDQUxF 79223\ncWU= 79224\n6rO1 79225\nKHJlY2VpdmVy 79226\nbWRi 79227\nIm1hdGg= 79228\naXNuYW4= 79229\ndGVsZWZvbmU= 79230\nUkVQT1JU 79231\nLmFkZE1vdXNlTGlzdGVuZXI= 79232\nZHVlZA== 79233\ne31d 79234\nKCkpOg== 79235\nIHdvcmtpbmdz 79236\nfSk7CgoKCg== 79237\nIGNvbXBvbmVudFdpbGxNb3VudA== 79238\nU2VydmVycw== 79239\nX0NMT1NFRA== 79240\nSVpFUg== 79241\nIGJvb2I= 79242\nIENPTkNBVA== 79243\nIEhhcHBpbmVzcw== 79244\nIGNvbW11bmU= 79245\neEFC 79246\nb3duZXJzaGlw 79247\nX05FQVI= 79248\nX0hBUkQ= 79249\nIFlB 79250\nbGlvbg== 79251\nIHNwaWVs 79252\nIHRhZ2dpbmc= 79253\nIGltbW9yYWw= 79254\nLWdyb3VuZA== 79255\nIHRodW5r 79256\nIGxvY3Vz 79257\nIExhdHZpYQ== 79258\naXppb25p 79259\nY2xhcnNpbXA= 79260\nIHBhdGllbnRseQ== 79261\nXEhhcw== 79262\nIHN1Ym9yZGluYXRl 79263\nIFdISUNI 79264\nZW50aW9uUG9saWN5 79265\nIGRlcGxldGVk 79266\nRlNJWkU= 79267\nIFss 79268\nIEJpb2dyYXBoeQ== 79269\nIFNhbmRz 79270\nU0hBUkU= 79271\nQ2hhcnNldA== 79272\nLndyaXQ= 79273\nX1NVUw== 79274\nIE1vcmVubw== 79275\nIGJyb2Njb2xp 79276\nIFZY 79277\nYW1pY3M= 79278\nLkdldFVzZXI= 79279\nIENvbW1vZA== 79280\nLnNjaGVtZQ== 79281\nKHZz 79282\nIGFuYWxvZ291cw== 79283\nUHN5 79284\nPWxpbmU= 79285\nLnB1Ymxpc2hlcg== 79286\nIG9ud2FyZA== 79287\n0LXQutGB 79288\nIERlYWxlcnM= 79289\nIHRvQXJyYXk= 79290\nIENob2ljZXM= 79291\n0JTQvtCx0LDQsg== 79292\nIGRlZmF1bHRNZXNzYWdl 79293\nIGFncmVn 79294\nIENvbmNhdA== 79295\nSFY= 79296\nIENpcmN1bGFyUHJvZ3Jlc3M= 79297\nX3N2Yw== 79298\nVEFC 79299\nX2ZpbA== 79300\nLk1hcFBhdGg= 79301\nemJ1cmc= 79302\nIGdldFByb2R1Y3Q= 79303\nIFZFUklGWQ== 79304\nLk1vbmdv 79305\nIHB1bmRpdHM= 79306\ncHVsc2U= 79307\nbGljdGluZw== 79308\nZ2lhdGFu 79309\nIC4uLiI= 79310\nIGZpeg== 79311\nIGFudGlt 79312\nIENoYXR0 79313\nX1RZUEVERUY= 79314\nR3V5 79315\nCXRlc3Rz 79316\nIFNsb3Zlbmlh 79317\nIENvbW1hbmRMaW5l 79318\nIGJlbmVmaWNpYXRpb24= 79319\nIGJpbmRBY3Rpb25DcmVhdG9ycw== 79320\nTlRBWA== 79321\nLUNz 79322\nIGNoYXJpc21hdGlj 79323\nLmFsbG9j 79324\nX25m 79325\nIGFzc2F1bHRpbmc= 79326\nINGC0LDQsdC70LjRhg== 79327\nIGPDoWM= 79328\nIFNjcm9sbHM= 79329\nSEFT 79330\neXl5eU1NZGQ= 79331\nIEdhbGU= 79332\nIFByb3plbnQ= 79333\nIFRob3JudG9u 79334\nZGVhbGVy 79335\nIGV2aWN0aW9u 79336\nIGFuYWxl 79337\n4oCO 79338\nPSIo 79339\nIGVhZw== 79340\nKCcnKTsKCg== 79341\nIGNvbnRlbXBsYXRpbmc= 79342\naHlw 79343\nYmVsdW0= 79344\nIEZpdHM= 79345\nIEV4YW1pbmVy 79346\nIEJ1Y2M= 79347\nIG1lbWJyYW5lcw== 79348\nIGJyaWxsaWFudGx5 79349\nIENlcmFtaWM= 79350\nw6h2ZQ== 79351\nIFBvdW5k 79352\nIHRyZWFzdXJ5 79353\nLicpOw0K 79354\nCXRj 79355\nZWNha2U= 79356\nQ3VycmVudFVzZXI= 79357\nLmhhYmJv 79358\nIHRyZWFzb24= 79359\nIEZUQw== 79360\nTVVY 79361\nIG51bWJlcmluZw== 79362\nUklB 79363\nLS0pDQo= 79364\nIGJlaWdl 79365\nIEFydGVt 79366\nYmFzZXM= 79367\nX0JBTkQ= 79368\nIFBhdmVs 79369\n0YHRgtGA0YPQug== 79370\ndGhlZA== 79371\nX25icg== 79372\nINCx0LDQtw== 79373\nc2xpZGVVcA== 79374\nIFRheGk= 79375\nIGFxdWVs 79376\nIE1pc2NlbGxhbmVvdXM= 79377\nZWx1 79378\nIGluc3VsYXRlZA== 79379\nIGFzc2V6 79380\nLkNvbmZpZ3VyZQ== 79381\nIHF1ZWxsYQ== 79382\nIHBhcmFzaXRlcw== 79383\nQXdheQ== 79384\nZHVjaWJsZQ== 79385\nKCc9Jw== 79386\nIHZlcm8= 79387\nIFdhdGtpbnM= 79388\nIFNlcGFyYXRvcg== 79389\nYXBzZXM= 79390\nZW52aXJvbm1lbnRz 79391\nIGFwcHJhaXNhbA== 79392\ncGF1c2Vk 79393\nX2RlYXRo 79394\nIHNpdHVhY2nDs24= 79395\nIGZyYXRlcm5pdHk= 79396\nIGluc2lzdGVuY2U= 79397\nX2NyeXB0bw== 79398\nQXR0cmliUG9pbnRlcg== 79399\nIl1dLAo= 79400\nIG94aWRhdGl2ZQ== 79401\nIG5ldXJvbmFs 79402\nIFFHcmFwaGljcw== 79403\nIj4nLA== 79404\nIFNtaWxl 79405\nT2JqZWN0aXZl 79406\nIFNha3VyYQ== 79407\nWk8= 79408\nYW1pZW50b3M= 79409\nLkxvY2FsRGF0ZVRpbWU= 79410\nL3VuaXQ= 79411\nLWZyZXF1ZW5jeQ== 79412\nLUNT 79413\nIn07Cgo= 79414\nIHJlbGV2 79415\nQWxsb2NhdGlvbg== 79416\nJU0= 79417\nIER1c3Rpbg== 79418\nIHN3aXBlcg== 79419\nIE5hcmM= 79420\ndGF0dXM= 79421\nIGxvbmdpbmc= 79422\nIHRodWlzb250dmFuZ3N0 79423\nIGNvbW1vZG8= 79424\nIEFEQQ== 79425\naW11 79426\nX2ZvcnVt 79427\nYW5naQ== 79428\nCUFwcGxpY2F0aW9u 79429\nW2Zyb20= 79430\nIEJldGhlc2Rh 79431\nb3Ryb3BpYw== 79432\nIE1VQ0g= 79433\nIHByZWRpYw== 79434\nZmlsbWU= 79435\nKGdyYW1tYXI= 79436\nKEFQUA== 79437\nIEN1cmw= 79438\nIHNob3J0aGFuZA== 79439\nYWZmaWxpYXRl 79440\nXSoq 79441\nX250aA== 79442\naWFiaWxpdHk= 79443\nYm9tYg== 79444\nWVQ= 79445\nKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 79446\nIEJpY3ljbGU= 79447\naW1hdGluZw== 79448\nLm5paQ== 79449\nIEthcmE= 79450\nYXNrYW4= 79451\ncmVhY3RzdHJhcA== 79452\nIHdsYW4= 79453\nb2dyYXBoZXJz 79454\nCSANCg== 79455\ncGFnaW5hdG9y 79456\naWhhbm5h 79457\nIG1hdGNodXBz 79458\nX1BBRERJTkc= 79459\nX3JlZ2lzdGVycw== 79460\neXRl 79461\nIHByaWNleQ== 79462\nIGZvb3Ro 79463\nIEh1Y2s= 79464\nUEFSVE1FTlQ= 79465\nIHByb2hpYml0aW5n 79466\nLmlzRGVidWdFbmFibGVk 79467\n4KS4 79468\nbGVpbg== 79469\nPXJlcw== 79470\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 79471\nZGRs 79472\nbXBy 79473\nIOqwmQ== 79474\nIFdBTEw= 79475\nIHJldm9sdmVz 79476\nIFBFUkY= 79477\nKTt9 79478\nIFRvYnk= 79479\nLy4uLw== 79480\nIGthbw== 79481\nIGZvcmVjYXN0aW5n 79482\nX0NvbnRlbnQ= 79483\nIH0pKSwK 79484\ncG9ybm8= 79485\nbGVhZGVycw== 79486\nLWhvb2tz 79487\naXN0cmlidXRvcg== 79488\nL3N0b3J5 79489\nCWxpbmVz 79490\nLXJlcGx5 79491\nIGFkcmVuYWxpbmU= 79492\nRmxvd0xheW91dA== 79493\nLnJvdXRpbmc= 79494\nCXRpbWVvdXQ= 79495\nIHJhaWRlZA== 79496\nCURE 79497\nIGRpc2RhaW4= 79498\nY29uc2lzdGVudA== 79499\nZ2Vpc3Q= 79500\nKCI6Lw== 79501\nKHN0YXRlcw== 79502\nIEhJVA== 79503\nLVJheQ== 79504\nLWhlYWx0aA== 79505\nIC8vLQ== 79506\ndGVtZW50 79507\nLm5hdmlnYXRlVG8= 79508\nIGJlbmNoZXM= 79509\nZXdpbmc= 79510\nZW56aGVu 79511\nLXNwbGl0 79512\nUmVqZWN0 79513\nIHB5bGFi 79514\nIGZsYXNobGlnaHQ= 79515\nIGluaXRpYXRpbmc= 79516\nIE9FQ0Q= 79517\nIGVudHJlZ2E= 79518\nTmF0dXJl 79519\nLm9yYW5nZQ== 79520\nIMO6bHRpbW9z 79521\nIGVjcw== 79522\nLmhvdmVy 79523\nIGRlbHV4ZQ== 79524\nUm9nZXI= 79525\nIFRpYw== 79526\nIixfXw== 79527\nIHBsYWNlaG9sZGVycw== 79528\nIHNwYXduaW5n 79529\nIG51cnR1cmU= 79530\nIGV4Y2hhbmdpbmc= 79531\nQ3JlYXRlRGF0ZQ== 79532\nIGxhbWlu 79533\nIFNlbWljb25kdWN0b3I= 79534\nICovCgoKCg== 79535\nIGbDuHJzdGU= 79536\nIGluaXRpYWxz 79537\nIHByb3ZlcmI= 79538\nIEFjdHJlc3M= 79539\nQ29uY2F0 79540\nIE5pY29sYQ== 79541\nLXNob3BwaW5n 79542\naXZpdMOg 79543\naXRpYW4= 79544\nIFdlcnQ= 79545\nLkFkZFNjb3BlZA== 79546\nIHNhbGVzbWFu 79547\nYm9z 79548\nIEZlcnJ5 79549\nQ0VOVEVS 79550\nbW9kZWxv 79551\nIFJvZQ== 79552\nIElzbGFuZGVycw== 79553\ndXBlcnRpbm8= 79554\nRGVjbGFyZQ== 79555\nIHZvd2Vscw== 79556\nIGJveGVy 79557\nKHRvb2xiYXI= 79558\nIGhhbGZ0aW1l 79559\nbmlu 79560\nIEJyb29rZQ== 79561\nIFZlcw== 79562\n0LvQsNGC 79563\nIG1vdGl2bw== 79564\ncHJvdGVpbg== 79565\na3Vz 79566\nYnVzeQ== 79567\nIHN0cmluZ1ZhbHVl 79568\nCU15 79569\nTnV0 79570\ndXp6aQ== 79571\nIHNleg== 79572\nIG9sZHM= 79573\nIG1ldGh5bA== 79574\nIGLDvA== 79575\naGliYQ== 79576\nIEluc3BpcmF0aW9u 79577\nIGF3YWl0ZWQ= 79578\nQnJ1Y2U= 79579\nQkFMTA== 79580\nIFRSWQ== 79581\nLWxpdGU= 79582\nIHVuZGVyZXN0aW1hdGU= 79583\nCXJ2 79584\nLm1vdg== 79585\nIGhpc3TDsw== 79586\nIEVyaWU= 79587\nY25hbWU= 79588\nL2Nvbm5lY3Q= 79589\nY29uZmVyZW5jZQ== 79590\nX3RyYWl0 79591\nIGt2aW5kZQ== 79592\nIEludm9jYXRpb24= 79593\nIERhdGVUaW1lT2Zmc2V0 79594\nd2VjaGF0 79595\nQ0VP 79596\nIExpYnlhbg== 79597\nLmNhcGl0YWxpemU= 79598\nIGdyYWNlZnVsbHk= 79599\nIHJlZWxz 79600\naW5jcmVhc2U= 79601\nLm1heGNkbg== 79602\nZmF2b3JpdGVz 79603\nSVRFRA== 79604\nPFNjYWxhcg== 79605\nLkZldGNo 79606\nIHN1c3BpY2lvbnM= 79607\nW01BWE4= 79608\nX1RSQU5TQUNUSU9O 79609\nIGN5bGluZHJpY2Fs 79610\nLm5leHRFbGVtZW50 79611\nIG1vcnBob2xvZ3k= 79612\nIENlZA== 79613\nIGNuYW1l 79614\nKHJhd1ZhbHVl 79615\nV2Fsa2luZw== 79616\nTG9hZHM= 79617\nX0FMSUdOTUVOVA== 79618\nX1JPVU5E 79619\nIFJPQ0s= 79620\nY2x1c3RlcnM= 79621\nImg= 79622\ndWV1cg== 79623\ncGxhbnM= 79624\nIGF0aGVpc3Rz 79625\nIHZhdA== 79626\nPSJfXw== 79627\nYXdhaA== 79628\nZXJ2YXRpdmVz 79629\nIGZpbmRPbmU= 79630\nIG5vdGVib29rcw== 79631\nIFRUTA== 79632\nLkdldEFzeW5j 79633\nIG3DvG5jaGVu 79634\nbUFo 79635\nYnJ0Yw== 79636\nX1BZ 79637\nQnVpbGRlckludGVyZmFjZQ== 79638\nCWdiYw== 79639\nIGJsYW5rcw== 79640\nIGTDqW0= 79641\nUmVjdXJzaXZl 79642\nLk1hbnlUb01hbnlGaWVsZA== 79643\nX1BBUlNFUg== 79644\nIGVuZGVhdm9ycw== 79645\nIGRyaWI= 79646\nX3BocA== 79647\nIGF1dG9tb2JpbGVz 79648\nbG9pdA== 79649\nIE9ydGl6 79650\nIFVE 79651\nKGRBdEE= 79652\nIE1pdHN1YmlzaGk= 79653\nQXR0cmlidXRlVmFsdWU= 79654\nIHBvYXRl 79655\n55u45YWz 79656\nIGNhdmFscnk= 79657\nLk1hdGNoZXJz 79658\nIGluZ3Jlc3M= 79659\nIEplaG92YWg= 79660\nCXNlcQ== 79661\nX3N0cmVldA== 79662\nIFNvZmlh 79663\nIHNjcm9sbHM= 79664\ndmluY2Vz 79665\nZWxlY3Ryb25pY3M= 79666\nXHBhcmFt 79667\nIHplbmQ= 79668\nIHNraW0= 79669\nLnBpeA== 79670\nZW5r 79671\nX2FyZWFz 79672\nIEJvaXNl 79673\nLXZhbGlkYXRvcg== 79674\nIHVuZWFydGg= 79675\nb2ZpbG0= 79676\nIEJDRQ== 79677\nb3Zza3k= 79678\nIExldmVy 79679\nIHBvbGljZW1hbg== 79680\nIG1pZXM= 79681\nIFBvcnRyYWl0 79682\nIHBvdGlvbnM= 79683\nX21vdA== 79684\nbWFzc2FnZQ== 79685\n0LXQvdGL 79686\nIGN1ZA== 79687\nIG1hbnVzY3JpcHRz 79688\nY29udGludW91cw== 79689\nLnRj 79690\nw7x6 79691\nIEZyZWV6ZQ== 79692\nXzoq 79693\nLmht 79694\nIENTUkY= 79695\nIE3DpGRjaGVu 79696\nLXBlZXI= 79697\nIHB1dFN0ckxu 79698\nIGltc2hvdw== 79699\nIEB7JA== 79700\nIEJhdWVy 79701\nKHRvbHVh 79702\nIHdyb3VnaHQ= 79703\nIEdpYW4= 79704\nIMO2bg== 79705\nZnVuZw== 79706\nQnV0dG9uVGl0bGVz 79707\nfSkiLA== 79708\nIE11cmRvY2g= 79709\nS1c= 79710\nIFJlcG9ydGVk 79711\nc2ll 79712\nIG1laWxsZXVycw== 79713\nIEthZXBlcm5pY2s= 79714\nIGRzcA== 79715\nIEV2ZXJ5ZGF5 79716\ncmVuZHM= 79717\nIENvbmNl 79718\nIGluY29udHI= 79719\nLnJlbW92ZUF0dHJpYnV0ZQ== 79720\n44G+44GX44Gf 79721\nIHJldw== 79722\nIFByZXNlbmNl 79723\nL2dpbg== 79724\nLkNsYWltcw== 79725\nCXNs 79726\nRHJhZ2dpbmc= 79727\nIHNwcmVl 79728\nIGFjdHVhbGl6YXI= 79729\nIG5vc3M= 79730\nIGxpZmVzdHlsZXM= 79731\nO2M= 79732\nVURHRQ== 79733\nSW5NaWxsaXM= 79734\nIGl0aw== 79735\nYWJieQ== 79736\nKHBh 79737\naXNzZW50 79738\nIFByZXNpZGVudHM= 79739\nIEhleGF0cmlnZXNpbWFs 79740\nZWNpZGVk 79741\nKHRleA== 79742\nIGNyb3duZWQ= 79743\nUGhpbGlw 79744\nIFNhcms= 79745\nIEFkZGl0aW9u 79746\nIENvbGJlcnQ= 79747\nIEdMRVM= 79748\nIFFMaW5lRWRpdA== 79749\nIGRyYWlucw== 79750\nIHNvcnRPcmRlcg== 79751\nZXNjb3J0 79752\nVGVk 79753\nIG1hbmlmZXN0ZWQ= 79754\nLnZhcmlhbnQ= 79755\nIFJFRkVSRU5DRVM= 79756\nKGdj 79757\nL3sk 79758\nb2N5dGU= 79759\nIG9ybmFtZW50 79760\nIGJvb2tzdG9yZQ== 79761\nSG9s 79762\nIFZhbGw= 79763\nLycp 79764\nYWNhaw== 79765\nIE5hdkJhcg== 79766\nIG55ZQ== 79767\nX0RlYw== 79768\nb2x2aW1lbnRv 79769\nTVJJ 79770\nIGhvb3A= 79771\nICAgCiAgICAK 79772\nIFBvc3Rpbmc= 79773\nIG91dGxpbmluZw== 79774\nYWdhc2Nhcg== 79775\nLmJyZWFrcG9pbnRz 79776\nY2F0aWQ= 79777\nX3RyaWdnZXJlZA== 79778\nIHJ1bm5hYmxl 79779\nL3RydW5r 79780\nLWNoYWly 79781\nIGJhaXNlcg== 79782\nZmFjaWxpdHk= 79783\nIHBvbGxlbg== 79784\n6Z+z 79785\nIFtbIg== 79786\nIENHU2l6ZU1ha2U= 79787\nIGFzc2FpbA== 79788\nIEF0aGVuYQ== 79789\nIEFkZGljdGlvbg== 79790\naWxhbmQ= 79791\nO2Jy 79792\nLktleWJvYXJk 79793\nX2Zt 79794\nQWNl 79795\nIFJFUQ== 79796\nIE5ld2VzdA== 79797\nOy4= 79798\nIE1BREU= 79799\nc2V0VGltZW91dA== 79800\nU2VydmxldENvbnRleHQ= 79801\nCQkJCQkgICAgICAg 79802\nIEx1cA== 79803\nLXJldmlld2Vk 79804\nIEFuYWx5emVy 79805\nLk5hTg== 79806\ndXR1cmE= 79807\nR2VvbQ== 79808\neW1lcw== 79809\nX3Npbg== 79810\nIHRydXN0ZWVz 79811\nLy89PT0= 79812\nIGFkbWl0dGVkbHk= 79813\nIGFrbw== 79814\nIFVFRkE= 79815\nX2hlcm8= 79816\nR2l0aHVi 79817\nX2VzdGltYXRl 79818\nIGNvcnJvYm9y 79819\nZW50aWZ1bA== 79820\nIFN0ZWVyaW5n 79821\nIE1pdGFy 79822\nIFBpcGVz 79823\nIGvDpQ== 79824\nX3NlYXNvbg== 79825\nIEJDSFA= 79826\nL3NvZnR3YXJl 79827\nbmV0dGU= 79828\nKiIs 79829\ndW5kcmE= 79830\nIGdldFJlcXVlc3Q= 79831\nLkJ1ZmZlcmVk 79832\nZmVybg== 79833\nTWFyaW8= 79834\nIGRpc3BlcnM= 79835\nX2NhdGVnb3JpYQ== 79836\nIGVuZGxlc3NseQ== 79837\nZ3VhcmRz 79838\nCWF0b21pYw== 79839\nc2NvcGVk 79840\nIHVuZG9uZQ== 79841\nU0hPUA== 79842\nIFRvcmNo 79843\nIEhhc3Rpbmdz 79844\nIEZJTEVT 79845\nX1NhdmU= 79846\nV2l0aE1hbnk= 79847\nV2lz 79848\nIGludGVuc2lmaWVk 79849\nLmFyZ3VtZW50 79850\nIEFwaVNlcnZpY2U= 79851\nIEpTSW1wb3J0 79852\nZWtp 79853\nSW5zdXJhbmNl 79854\nc3R5 79855\nLmRzbA== 79856\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 79857\nbHRyZQ== 79858\nU0VH 79859\nRFJBTQ== 79860\nLWJsb2NraW5n 79861\n0L3QtQ== 79862\ncGlyaW5n 79863\nIFBSRVM= 79864\nIEZhY2g= 79865\nIHNhcmM= 79866\nIFNNRQ== 79867\nIEVsZW0= 79868\nIENhbGlmb3Ju 79869\nVW5zYWZl 79870\nIENvbXBvc2Vy 79871\nKGRlcA== 79872\nIEF0dGVuZA== 79873\nICopKCg= 79874\nIHRlYXNlZA== 79875\nIEFUSQ== 79876\nKHBt 79877\nICIoXDw= 79878\nJ10r 79879\nIHNlY3Rhcmlhbg== 79880\nIFBoYXJtYQ== 79881\nRUk= 79882\nCVRva2VuTmFtZUlkZW50aWZpZXI= 79883\nw6d1 79884\nIGF1Z21lbnRhdGlvbg== 79885\nIHNhamE= 79886\nIGNvbG9yZQ== 79887\nZGVhZGxpbmU= 79888\nLklURU0= 79889\nIFJpeQ== 79890\nbWFhbA== 79891\nCWNsaWNr 79892\nUGVybWFuZW50 79893\nSG91c3Rvbg== 79894\nUmVzcG9uc2l2ZQ== 79895\nIEVyZ2Vibg== 79896\nICIlIg== 79897\nLnRvT2JqZWN0 79898\nCXBpZA== 79899\nLlN1Ykl0ZW1z 79900\nIFsr 79901\nIGZ1bmd1cw== 79902\nIGJyb2NodXJl 79903\nIEFwcHJveGltYXRlbHk= 79904\nIG1paw== 79905\ndmVsb3Blcg== 79906\nIHBhZ2FtZW50bw== 79907\n5Yqo55Sf5oiQ 79908\nIGN5dA== 79909\nIFRlbXBs 79910\nZW5pYWJsZQ== 79911\nIENvbmFu 79912\nIHNldGJhY2s= 79913\nb2JsaW5z 79914\nIE5UTg== 79915\nb3NzYWw= 79916\nVkVSQk9TRQ== 79917\nLmJpbw== 79918\nIMWe 79919\n4buf 79920\nIEdyaXA= 79921\nPCo= 79922\nVFJJRVM= 79923\nLmNob29zZQ== 79924\nUGhvZW5peA== 79925\nIHByb3ZpbmNpYQ== 79926\nTUZMT0FU 79927\nQ2Fycw== 79928\nIHJldHJvc3BlY3RpdmU= 79929\nIGFnb255 79930\nIGxsZW4= 79931\nIGJ1bXBlZA== 79932\neWxhdGlvbg== 79933\nIHdhcnRv 79934\nIHRvZGRsZXJz 79935\nbGF2 79936\nKHBhdGllbnQ= 79937\nICgpLT4= 79938\nY2xj 79939\nIG9uQWN0aXZpdHlSZXN1bHQ= 79940\nIGVtdWxhdGlvbg== 79941\nIGJ1bGxk 79942\nX0FVVEhPUg== 79943\nPk8= 79944\nL3F1 79945\nIMK2 79946\nCWhy 79947\nc3RkQ2xhc3M= 79948\nIHNwYWNlcg== 79949\nVHJhbnNsYXRlZg== 79950\nLmFkag== 79951\nOml0ZW0= 79952\nIGV4aGF1c3Rpbmc= 79953\ncGx4 79954\nIHJldml0YWw= 79955\nxZtuaWU= 79956\nIGNhbGlmb3JuaWE= 79957\nc2V0U3RhdGU= 79958\nL3RhYg== 79959\naW5kc2lnaHQ= 79960\nX0xldmVs 79961\naW1pbGFy 79962\nLm5hdmlnYXRvcg== 79963\nIHRlbXBlcmFtZW50 79964\nIGRpZsOtYw== 79965\nIGluZXhwZXJpZW5jZWQ= 79966\nIGltcHJpbnQ= 79967\nIFJlc2lzdA== 79968\nX0ZPTExPVw== 79969\nIFJldHJ5 79970\nIGVuZ2FnZW1lbnRz 79971\nQ2FuQmVDb252ZXJ0ZWQ= 79972\nIHNpbmdsZWQ= 79973\nLmljb25z 79974\nIGNvbmRvbXM= 79975\nIEZlYXRoZXI= 79976\nbGVybmVu 79977\nKWI= 79978\nIE5wZ3NxbA== 79979\nIENvbnNvbGlk 79980\ncGVrdA== 79981\n56uv 79982\nc3RyaW5nVmFsdWU= 79983\nR2Ft 79984\nIFNpbmFp 79985\nIE9iamVjdFR5cGU= 79986\nX2lucA== 79987\nIHBhcnRp 79988\nIFdhdGVycHJvb2Y= 79989\nIGNvbGxpZGVk 79990\nIGFpcnM= 79991\nL3dvcmxk 79992\nL1NlYXJjaA== 79993\nX3N5bnRheA== 79994\nxZ9p 79995\nX2Fubm90YXRpb25z 79996\nIFRhY28= 79997\nTEFU 79998\nIE9wY29kZQ== 79999\n44CC4oCdCgo= 80000\nIGxlYXNo 80001\nIEFsaWNpYQ== 80002\n77yM6buY6K6k 80003\nIFRTQQ== 80004\nIGhvdHRlcg== 80005\nX0hhbmRsZVR5cGVEZWY= 80006\nZ2luYXM= 80007\nIGluZGlmZmVyZW50 80008\nQ3VzdG9tTGFiZWw= 80009\nkZA= 80010\nb2R5bmFtaWNz 80011\nT25VaVRocmVhZA== 80012\nIENhcmE= 80013\nLmRldmljZXM= 80014\nIEZvcmVpZ25LZXk= 80015\nPicpOw0K 80016\nLmJ1dA== 80017\nLnRpZg== 80018\nIOaWsA== 80019\nIE9rSHR0cENsaWVudA== 80020\nKFRleHR1cmU= 80021\nLlNPQ0s= 80022\nKGluc3Ry 80023\nbWlzdA== 80024\nVW5uYW1lZA== 80025\nU3I= 80026\nKm51bQ== 80027\nKE5VTQ== 80028\nKioqKioKCg== 80029\nL2hlbHA= 80030\nYmVlbGQ= 80031\nLmFkanVzdA== 80032\nX1Bhcm1z 80033\nX0FOR0xF 80034\nVFJFRQ== 80035\nIGVzdHVkaW8= 80036\nd29ya3NoZWV0 80037\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 80038\nQWR2aWNl 80039\nw7bDn2U= 80040\nbkVudGVy 80041\nYcSH 80042\nIGFnZWluZw== 80043\nIEt1cmRpc3Rhbg== 80044\nX1JUQw== 80045\nYmFua3M= 80046\nLlVS 80047\nIGluY2FybmF0aW9u 80048\nIGdsYW1vdXI= 80049\nIOOCuQ== 80050\nIGltcGVyaWFsaXNt 80051\n7J6F64uI64uk 80052\nIHNpZGVsaW5l 80053\nLkFycmF5QWRhcHRlcg== 80054\nIyMjIyMjCg== 80055\nIFN5cmlhbnM= 80056\nIEF0dGVuZGFuY2U= 80057\nLWVzcXVl 80058\nIGdyZW5hZGVz 80059\nX3Fvcw== 80060\nT1ND 80061\nX2Rvb3I= 80062\nLkNhcA== 80063\nREFM 80064\nIGFtYnVzaA== 80065\nCWVz 80066\nVG9Kc29u 80067\nTWFudWZhY3Q= 80068\nRW1lcmdlbmN5 80069\nIFFGaWxl 80070\nIOWV 80071\nCUxQ 80072\n5pCc57Si 80073\nIEdhcmxhbmQ= 80074\nLmNvbm5lY3Rpb25z 80075\nLlJlYWRGaWxl 80076\nIEh3eQ== 80077\n4oCUZXZlbg== 80078\neERF 80079\nIG5vdXZlbGxlcw== 80080\nIEh1c3M= 80081\nRGVwb3NpdA== 80082\nX2ZvcmVpZ24= 80083\nYWJhag== 80084\nIFBveg== 80085\nZGJ1cw== 80086\nIGlvZA== 80087\nw5cKCg== 80088\nIENoZWVycw== 80089\nSmVzc2ljYQ== 80090\nIHNhaXNvbg== 80091\nIFB0eQ== 80092\nIj48IS0t 80093\naW5vYQ== 80094\nZXhjbHVkaW5n 80095\nIGJpdHRlcm5lc3M= 80096\ndWVsaW5n 80097\nUHJvdGVjdGlvbg== 80098\nIEJlcmdlbg== 80099\nCQkJIAo= 80100\nQkVM 80101\nIFRvYmlhcw== 80102\nIHVwZA== 80103\n67KE 80104\nIGZvbGlhZ2U= 80105\nX1BVUg== 80106\nIEFkdm9jYXRl 80107\nIG9uUmVxdWVzdA== 80108\nLnBhcnRpdGlvbg== 80109\nIERldmVsb3BlZA== 80110\nIGNyaWI= 80111\n0YHQutC4 80112\ndm91Y2hlcg== 80113\nIEludGVyc2VjdGlvbg== 80114\nIG5pZWNl 80115\nIGxr 80116\nIENhdWN1cw== 80117\nKFsNCg== 80118\nIERldGVjdG9y 80119\nL2xn 80120\nIEhlZGdl 80121\nIHNsdWdn 80122\nYW5nc3Ryb20= 80123\nIENvbnRyb2xsZXJCYXNl 80124\nCXl5 80125\nLnBw 80126\nIEtsaW5n 80127\nIExUUw== 80128\n4oaT 80129\nYXJyYQ== 80130\nZ2V0SlNPTg== 80131\nX3dlYnNpdGU= 80132\nIGlkaW90cw== 80133\nIE1lZ2hhbg== 80134\nQnV0dG9uTW9kdWxl 80135\nICU+ 80136\nIHByb2plY3RpbGVz 80137\nc3dvcmQ= 80138\nICAgIAkJCQkJ 80139\nIGFzc2Vz 80140\nIFN1Y2hl 80141\nIGtlZA== 80142\ncsOhZg== 80143\nIHNhcsOg 80144\nTEVuY29kZXI= 80145\nUkFORA== 80146\nIFNvbWVob3c= 80147\nIFNhbGE= 80148\nIG11bHRpbQ== 80149\nIG51bVJvd3M= 80150\nIFJvY2tpZXM= 80151\nIHhk 80152\nIGRpc3Byb3BvcnRpb25hdGU= 80153\nCVJUTEk= 80154\nCVVSTA== 80155\nYWdsaQ== 80156\nIFN1YkxPYmplY3Q= 80157\nIEdyYXZlcw== 80158\nX3JlZ3VsYXJpemVy 80159\nX2NoYXJhY3RlcnM= 80160\nLmFuYWx5dGljcw== 80161\nLm1vZHM= 80162\nIGltcHJvdmlz 80163\nIEJsb2NrUG9z 80164\nX2luc3RhbGxlZA== 80165\nX0NPTlRJTlVF 80166\nL2Rvd24= 80167\nU09D 80168\nLmFwaVVybA== 80169\nLlVzZXJTZXJ2aWNl 80170\nVHJlZXM= 80171\n5oqV 80172\nX292ZXJmbG93 80173\nYXVzYWw= 80174\nYm94ZWQ= 80175\nJgo= 80176\nIEphY3F1 80177\nX3Vzcg== 80178\nSU5UUg== 80179\nIHNpZ25hZ2U= 80180\nIGNvY2g= 80181\nTm9ybWFsaXplZA== 80182\nCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo= 80183\nIHN1c3RhaW5pbmc= 80184\nIFNjcmFw 80185\ncHJhYWs= 80186\nLWF2YXRhcg== 80187\nLndlYnNpdGU= 80188\nKGd1aQ== 80189\nPXJlc3BvbnNl 80190\nKG9wZXJhdG9y 80191\nIGVmZm9ydGxlc3M= 80192\nIEFjdGlvbkJhcg== 80193\nRkZF 80194\n56uL 80195\nCVJlZ2lzdGVy 80196\nQVJTRQ== 80197\nKW4= 80198\nIE1PU1Q= 80199\nX1NQUg== 80200\nX0NISVA= 80201\nYXNk 80202\nIHRvcExlZnQ= 80203\nIFR4dA== 80204\n0LDQttC0 80205\nLlZvbHVtZQ== 80206\nIGlubGV0 80207\nIGZyYWN0dXJlZA== 80208\nIExvbmdpdHVkZQ== 80209\nIERyYW0= 80210\nLkNvbm5lY3Rpb25TdHJpbmdz 80211\nYWJlZQ== 80212\ncGVyYXRl 80213\nam5p 80214\nYHQ= 80215\nZmluZ2Vy 80216\nIEplc3NpZQ== 80217\nLGxs 80218\nIFJ1ZHk= 80219\nIGdlbmVyb3VzbHk= 80220\nX0NPTlZFUlQ= 80221\nIGVpdXNtb2Q= 80222\nIERhaQ== 80223\naW1hZ2lu 80224\nIEdPYmplY3Q= 80225\nIMSRw6M= 80226\naWRpb3Vz 80227\ncmlkZ2Vk 80228\nIHNvcHI= 80229\n0LvQsNC0 80230\nIHN0aXRjaGluZw== 80231\nIGtyYg== 80232\nCiAgICAgICAgCiAgICAgICAgCg== 80233\nIGxhdmlzaA== 80234\nIENpdg== 80235\nU3RhcnRFbGVtZW50 80236\nIExvbA== 80237\nCXV0aWw= 80238\nJ11dLg== 80239\nIE1hbGF5 80240\nIC4NCg== 80241\n548= 80242\nX0ludm9rZQ== 80243\naXZpc3Q= 80244\nRGVwZW5kaW5n 80245\nKSI7DQo= 80246\nIHRvZnU= 80247\nIE1DUA== 80248\nIHN0b2NraW5n 80249\nIGNhdGhlZHJhbA== 80250\nIHF1YWRyYXRpYw== 80251\nYWxlemE= 80252\nLm1vdmVUb0ZpcnN0 80253\nQ29sb3JCcnVzaA== 80254\nIEVyZWN0 80255\nIFJDUw== 80256\nOmJlZm9yZQ== 80257\nPW5vZGU= 80258\nIHByb2Jsw6htZQ== 80259\nX3Jobw== 80260\nIHN2ZW5zaw== 80261\nUm95 80262\nYmFzZVBhdGg= 80263\nIGtvbmQ= 80264\nINC10YHRgtGM 80265\nZ2V0U2luZ2xldG9u 80266\nIERTTQ== 80267\nSWFu 80268\nIGh1bnRlZA== 80269\nIFRlcnJhY2U= 80270\nIGNoaWxkY2FyZQ== 80271\nIGNvZWZmcw== 80272\nIGdyYWRlZA== 80273\nIEx1Y2lh 80274\nIGpzb25PYmo= 80275\nYWJsZU9iamVjdA== 80276\nVmF1bHQ= 80277\nw61zdGljYQ== 80278\nX3BhZ28= 80279\nX1BG 80280\nYW5kcmU= 80281\nIEFuYXRvbXk= 80282\nLkpDb21ib0JveA== 80283\nb3VyZQ== 80284\nIGdlbm90eXBl 80285\nYmVuY2htYXJr 80286\nIGJhaWs= 80287\nIFF1w6liZWM= 80288\nKCkpDQoNCg== 80289\nIGt1bm5l 80290\nIFBvc3NpYmx5 80291\nIEJlaXNwaWVs 80292\nIGNvbmRvbGVuY2Vz 80293\nPXF1ZXJ5 80294\nIHbDtQ== 80295\nIG51ZXZhcw== 80296\nIEFwb2NhbHlwc2U= 80297\ndmVjdGlvbg== 80298\nCXNwcml0ZQ== 80299\nbGV2YXRvcg== 80300\nLiJdCg== 80301\nZ2V0TmV4dA== 80302\nKFJlZ2lzdGVy 80303\nIHVuc3Vi 80304\ndHJlZXZpZXc= 80305\nTm9kZUlk 80306\nIOyK 80307\nJikK 80308\nZmx0 80309\nIGhvdHNwb3Q= 80310\nIGdhc3Ryb2ludGVzdGluYWw= 80311\nZmlnY2FwdGlvbg== 80312\nb3dlcmVk 80313\nIENzcw== 80314\nX3Jvcw== 80315\nX3NjYWxpbmc= 80316\nIGVkaXRhcg== 80317\nJ11dKTsK 80318\nLm5lZw== 80319\nIGZ1dHVyaXN0aWM= 80320\nIHN0YXRh 80321\ndWN0b3I= 80322\nVUxBVEU= 80323\nIHfFgg== 80324\nLWNoYXJhY3Rlcg== 80325\nICAKCgo= 80326\nIEJlYXU= 80327\nIHBlcm1hbGluaw== 80328\nQnl0ZUJ1ZmZlcg== 80329\nIGRpY3RhdGVz 80330\nIE1MQQ== 80331\nX0xvZ2lu 80332\nQ29uZGl0aW9uYWw= 80333\nU1lN 80334\nQXJyYW5nZQ== 80335\nIFN0b2Nrcw== 80336\nIG1lYXNsZXM= 80337\n4KSk 80338\nRW5jcnlwdGlvbg== 80339\nIEVudGlyZQ== 80340\nIG1pbk9jY3Vycw== 80341\nIGh1Z3M= 80342\nL3dpbmRvdw== 80343\nCXByb3A= 80344\nPSQoKA== 80345\nIFVDUw== 80346\nIEZpcg== 80347\nLkNsb2Nr 80348\nLWRlc2t0b3A= 80349\nIG1hbGZvcm1lZA== 80350\nIEFiZXJkZWVu 80351\nIMOF 80352\nIFJvYWRz 80353\nIEJlaGF2aW91cg== 80354\nKCkn 80355\n5bGe5oCn 80356\nLkNvbXBhcmF0b3I= 80357\nX21v 80358\nX0lPUw== 80359\nIE9yaW9sZXM= 80360\nLkxvb2t1cA== 80361\nIGZzZWVr 80362\nX0lC 80363\nL3N0YXI= 80364\nKzwv 80365\nX0Rlc3Ryb3k= 80366\nLXRyYQ== 80367\nKCcuJyk= 80368\nIEZvckNhbkJlQ29udmVydGVk 80369\nIEZvckNhbkJlQ29udmVydGVkVG9G 80370\nIEZvckNhbkJlQ29udmVydGVkVG9Gb3JlYWNo 80371\nIEFhZA== 80372\nIGFpcnN0cmlrZXM= 80373\naXNPaw== 80374\nIGZlZGVyYXRpb24= 80375\nIExhYnJhZG9y 80376\nX2xhdW5jaGVy 80377\nYWxvZ3k= 80378\nPj4oKTsKCg== 80379\nIEp1Yg== 80380\ndXRy 80381\naXN0aW5ndWlzaGVk 80382\nYWJhbnQ= 80383\nUmVnaW9ucw== 80384\nL2hlbHBlcg== 80385\nX2xpc3Rlbg== 80386\nCVRvYXN0 80387\nIEZpbGVNYW5hZ2Vy 80388\naXRvcmlz 80389\nIGVsZWN0cm9kZXM= 80390\nR1JBREU= 80391\nIGJlZ2dlZA== 80392\nIFBsYXRlcw== 80393\nYWZvbmU= 80394\nISEhCg== 80395\nIGVieA== 80396\nIGRlZmF1bHRQcm9wcw== 80397\nIGNvbXBhcmVUbw== 80398\nIFNDQw== 80399\nLmV4dGVudA== 80400\nYXV0b3M= 80401\nIOyW 80402\nIFRvbGtpZW4= 80403\nOjoqOwoK 80404\nKics 80405\nLmRvY3VtZW50cw== 80406\nc2luZw== 80407\nPUJpdENvbnZlcnRlcg== 80408\nIEtyaXNobmE= 80409\nIHBsYWlzaXI= 80410\nIGJ1Z2d5 80411\nIHJlZ3VsYXRlcw== 80412\nIGZyaWRheQ== 80413\nIGNvbXBsZXRlbmVzcw== 80414\nIGF1ZGlibGU= 80415\nIFJlY29nbml0aW9uRXhjZXB0aW9u 80416\nIHNoZWRkaW5n 80417\nW10pewo= 80418\nKGJhbGw= 80419\nIENoYXRDb2xvcg== 80420\nKENvZGU= 80421\nKCksCgo= 80422\nIHRlcnRpYXJ5 80423\nIFNJREU= 80424\nKEpTT05PYmplY3Q= 80425\npOaWrQ== 80426\nUmVtYXJrcw== 80427\nIGxpc3RCb3g= 80428\nLmltYWdlVXJs 80429\nIGRlbGF5aW5n 80430\nIHNvY2lvZWNvbm9taWM= 80431\nLmxw 80432\nPE15 80433\nLm9uU3RhcnQ= 80434\nIFNjb3I= 80435\nYnl0ZXJpYW4= 80436\nLXJvY2s= 80437\nX21ldGVy 80438\nIHJlcG1hdA== 80439\nIHByZWd1bnRh 80440\nIE1FVEE= 80441\nKGd0 80442\nIEZSSUVORA== 80443\nIHNvcnRl 80444\nIGhlcA== 80445\nb25vbWllcw== 80446\nIGF1dG9tw6F0 80447\nIEZvcm1hdHM= 80448\nc3RhdGVQcm92aWRlcg== 80449\nLWZsb29y 80450\nX01VWA== 80451\nKENvbnRlbnQ= 80452\nIElOU1RBTEw= 80453\nIFRpdGFuaXVt 80454\ncnVj 80455\nLkRhdGFzZXQ= 80456\nYXNjbw== 80457\nLk1BVENI 80458\nIGZlc3Rpdml0aWVz 80459\nTVNO 80460\nLm90 80461\nIEdldExhc3RFcnJvcg== 80462\naWVucw== 80463\nIF9fX19fX19fX19fX19fX19fXwoK 80464\nX0dG 80465\nX3BsYXRl 80466\nIEZvcm1hbA== 80467\nLWxldHRlcg== 80468\nS2F0ZQ== 80469\nYXBpYQ== 80470\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80471\nL2dlbmVyYXRlZA== 80472\nIERpbmc= 80473\nIEZyaWVkcmljaA== 80474\nICcpJw== 80475\nVUJMSVNI 80476\nIEFiaWxpdGllcw== 80477\nIHVubG9ja2luZw== 80478\nLnl5 80479\nIEludGVycg== 80480\nbm90aHJvdw== 80481\naXBvcA== 80482\nIENPUlBPUg== 80483\nW2FycmF5 80484\nPFdlYkVsZW1lbnQ= 80485\nX1NJRA== 80486\nLnF1YWw= 80487\nRGlhZ25vc3RpYw== 80488\nOiIiLAo= 80489\nKG1vbWVudA== 80490\nanVyZWQ= 80491\nIHRlcnJlc3RyaWFs 80492\nZXJ1bGU= 80493\nICYpOwo= 80494\nIGJ1cmVhdWNyYXRpYw== 80495\nb3BwaW5z 80496\nIGphcG9u 80497\nbGVvbg== 80498\nX3JlbmFtZQ== 80499\nX0RFU1RST1k= 80500\nLkVuZHNXaXRo 80501\nIGVydXB0aW9u 80502\nKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80503\nUEVU 80504\nX3JlbG9hZA== 80505\nIHN1cHBsZW1lbnRhcnk= 80506\nIHppZW4= 80507\nQ0xMb2NhdGlvbg== 80508\nIGtsZWlu 80509\nX2Vm 80510\nOnt9 80511\nIGNvbWVudGFyaW9z 80512\nKHZhbGlkYXRpb24= 80513\nLnh0ZXh0 80514\nX0lNQUdFUw== 80515\nLnNldElucHV0 80516\nIERlY29tcGlsZWQ= 80517\nX1RCTA== 80518\nY29tcGxleFR5cGU= 80519\nX2ZlYXR1cmVk 80520\nID8+PD8= 80521\nLnZvdGU= 80522\nIEZyaWRheXM= 80523\nLmNvbnN1bWU= 80524\nLk1FRElB 80525\nIHN5bmVyZw== 80526\njpjsnbTsp4A= 80527\nX0hFQURFUlM= 80528\neEFD 80529\nX252 80530\nzq0= 80531\nIFNpbW9uZQ== 80532\nQ2VycmFy 80533\nYWRkb2Nr 80534\nLnNlcmlhbGl6ZXI= 80535\nIENsYXNzaWZpZWQ= 80536\nLkl0ZW1zU291cmNl 80537\nIHByZWNvbmRpdGlvbg== 80538\n44Gd44GX44Gm 80539\nRElTVA== 80540\nSW1hZ2VVcmw= 80541\nL3JhbmRvbQ== 80542\nIGVyw7N0 80543\nW3Jvb3Q= 80544\nQUxMRVJZ 80545\nY2o= 80546\neEFE 80547\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo= 80548\nIGl0YWxpYW5p 80549\nfCM= 80550\nIHJlZ2VuZXJhdGU= 80551\nIHN0cnI= 80552\nKHx8 80553\nIEVtZXJzb24= 80554\nIFBJRQ== 80555\nY2xpZmZl 80556\nCWFu 80557\nPlBhc3N3b3Jk 80558\ndG9EYXRl 80559\nQ2lwaGVy 80560\nIGNvbnZveQ== 80561\nIFhDVEFzc2VydFRydWU= 80562\nL19f 80563\nLWZvY3Vz 80564\nIFJoaW5v 80565\nIGdvbw== 80566\nIGJvdG9u 80567\nLk5vU3VjaA== 80568\nIFJlZHVjZWQ= 80569\nTUlTUw== 80570\nIFdpbmNoZXN0ZXI= 80571\ndXJsZW5jb2Rl 80572\nIG11ZGR5 80573\naXlh 80574\nIE1icHM= 80575\nIHN0YWw= 80576\nb2RhZm9uZQ== 80577\n5Lus 80578\nIHBo4bqpbQ== 80579\nICIvIjsK 80580\nIEFtbW8= 80581\nTmV3UHJvcA== 80582\nID0KCg== 80583\nINCf0YA= 80584\nIHBheg== 80585\nIGxpYmVybw== 80586\nCVJlc291cmNl 80587\nbmVpZ2hib3Jz 80588\nLHJlc3BvbnNl 80589\nX2F0dGVtcHRz 80590\nIG5r 80591\nIG1pbGl0aWFz 80592\nX1BBWUxPQUQ= 80593\nLkJ5dGVTdHJpbmc= 80594\nINGB0L7QtNC10YDQtg== 80595\nYXJ0b24= 80596\nPkhlbGxv 80597\nbGlnaHRseQ== 80598\nb3dlbGw= 80599\nIGd1YXJkaW5n 80600\nIFRPSw== 80601\nIHdoZXJlYWJvdXRz 80602\nX2R3 80603\nIFJvdWxldHRl 80604\nIGd5cg== 80605\nIEZlZG9yYQ== 80606\nLkJ1dHRvbnM= 80607\nIGV4Y2xhaW1lZA== 80608\nIFNvbW1lcg== 80609\nQXV0aEd1YXJk 80610\nLXJhdGluZw== 80611\nTWV0aG9kQmVhdA== 80612\nLnBvc2l0aW9ucw== 80613\nTWVkaWFu 80614\nLuKApgoK 80615\nIGdsYWM= 80616\nIHVuZGVybWluZWQ= 80617\nJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQ== 80618\nX3RoaXJk 80619\nLmtlZXA= 80620\nIGhheWE= 80621\nIHRvSlNPTg== 80622\nIExhdXJpZQ== 80623\nIAkgICA= 80624\nIEFjY3Vt 80625\nIHBydW5l 80626\ndXJ2ZWQ= 80627\nIE5TRg== 80628\nIEdyYXBl 80629\nRkxJQ1Q= 80630\n6LI= 80631\nIHByZWRpcw== 80632\nX3B0cnM= 80633\nIG11bHRpY2FzdA== 80634\nKEdyb3Vw 80635\nIGhlacOf 80636\nIGZlZGVyYWxseQ== 80637\nX1BBVVNF 80638\nIG1hbGF5c2lh 80639\nIFJlY2FsbA== 80640\nIHJvZHo= 80641\nIFNlbnRlbmNl 80642\naW50ZWw= 80643\nX2RydmRhdGE= 80644\nLXNjZW5lcw== 80645\nPHk= 80646\nIGZvb2xlZA== 80647\nIExvdWQ= 80648\nIGFudGl2aXJ1cw== 80649\nLnBsaXN0 80650\nIHZlcndlbmRlbg== 80651\nIFdvbGZl 80652\nKWl0ZW0= 80653\nIHR3aXN0aW5n 80654\nIGVzcGFu 80655\nYXRlcm5v 80656\nIEFjY29yZA== 80657\nKCldLA== 80658\nUkVNT1ZF 80659\nZGVoeQ== 80660\nX1ByZQ== 80661\nIG1pc2Nhcg== 80662\ndmxh 80663\nIHNlbWJs 80664\nIHRldGhlcg== 80665\nIEJpag== 80666\nLycKCg== 80667\nIENvcGllcw== 80668\nLXBhdHRlcm4= 80669\nLm9uVmlldw== 80670\nLXRha2luZw== 80671\nX3NpbXBz 80672\n44GX44GL44GX 80673\nIERBQ0E= 80674\nb3JuaW5n 80675\nIFBlc3NvYQ== 80676\nb3JueQ== 80677\nX3Bhcw== 80678\nIGVpZ2h0eQ== 80679\nVGFj 80680\nX1NUT0NL 80681\nLmxvY2F0aW9ucw== 80682\nIil9LAo= 80683\nIHTDoQ== 80684\nLWZpZWxkcw== 80685\nb2thbmU= 80686\nL2t1YmVybmV0ZXM= 80687\nIGNoaWNh 80688\nIGFydMOtY3Vsbw== 80689\n7II= 80690\nQ1JFQVNF 80691\nQVNB 80692\nIExvbmQ= 80693\nIGV4ZW1wbG8= 80694\nQWxsb3dz 80695\naHRtbHNwZWNpYWxjaGFycw== 80696\nKHZpcw== 80697\nIGpy 80698\n54Gr 80699\nIEVDTQ== 80700\nIGVtYmFy 80701\nX0FEQVBURVI= 80702\nIGRpbHV0ZWQ= 80703\nX29mZmljZQ== 80704\nIHNraW5jYXJl 80705\nQUdJTkc= 80706\nIMO+ 80707\nIFNNQVJU 80708\nL1RhYmxl 80709\nIGJhc2Fs 80710\nQ29uY3VycmVuY3k= 80711\nIFZveA== 80712\nIFVJQ29sbGVjdGlvblZpZXdDZWxs 80713\nIHdvbA== 80714\nIFNPVVRI 80715\nIGZyb21EYXRl 80716\nIGNvcmRz 80717\nRU1T 80718\nLndlaXhpbg== 80719\nJ2VsbGU= 80720\nIOWx 80721\nIGdvYWx0 80722\ndWli 80723\nIE5lcHR1bmU= 80724\nKG9yZA== 80725\nxLFuxLFu 80726\nIG1pY3JvYmVz 80727\nV2VhcG9ucw== 80728\nLURlYw== 80729\nIFJvb25leQ== 80730\nIFN3YWdnZXI= 80731\n66qF 80732\nX2xh 80733\nIGdlbmVyYWRv 80734\nIEhpcg== 80735\nQ29taWM= 80736\nIGNhcnZl 80737\nX3Jx 80738\naWN0ZXI= 80739\nIGNhcnRlbA== 80740\nYW5jaWFz 80741\nIFBhbmFzb25pYw== 80742\nIHJvYWRzaWRl 80743\nIGZyZXNod2F0ZXI= 80744\nIGRiYw== 80745\nX3RleHRz 80746\nX3NrdQ== 80747\nIFN1bW1lcnM= 80748\nIFBpY3R1cmVCb3g= 80749\nLmdyb3VwQ29udHJvbA== 80750\nVkFSQ0hBUg== 80751\nUmVMVQ== 80752\nIHNhYm90YWdl 80753\nDQogICAgICAgICAgICANCg== 80754\nIHNjcm9sbGJhcg== 80755\nIGJhdHRlcmVk 80756\nY2lw 80757\nLXBpY3R1cmU= 80758\nCXN0YXRz 80759\nLmNyZWF0b3I= 80760\nX0NMRUFO 80761\nLk1PRA== 80762\nIGJpZ2ludA== 80763\nIFRlcnJvcmlzbQ== 80764\nX1Nob3c= 80765\nIFNwaWNlcg== 80766\nX0VUSA== 80767\nIMSR4buD 80768\nIHN1bW1lcnM= 80769\nIFVyYW4= 80770\nL21lbW9yeQ== 80771\nUmV2aWV3ZWQ= 80772\nIGR1ZXM= 80773\nc2V0U2NhbGU= 80774\nIFJheXM= 80775\nIENTQw== 80776\naW5jb21pbmc= 80777\nLWJ1eQ== 80778\nIHByb2N1cmU= 80779\nZW50YXI= 80780\nIGJ1bGxz 80781\nIAkJCQkJCQ== 80782\nIEZpYm9uYWNjaQ== 80783\nLXNjaGVtYQ== 80784\nbWFrZXM= 80785\nRWY= 80786\nX0Rlc2NyaXB0aW9u 80787\nL2FsZXJ0 80788\nIGpzb25TdHJpbmc= 80789\ndWZmbGluZw== 80790\nIEtFUk5FTA== 80791\nIEhveQ== 80792\nIGdyYW50UmVzdWx0cw== 80793\nb25hbGQ= 80794\nIFByb3ZpbmNpYWw= 80795\nc2VuZGluZw== 80796\ncHRvbQ== 80797\nINCe0LE= 80798\nIGNvbnN0cmFpbg== 80799\nIMWhdG8= 80800\nIFJhaXNlZEJ1dHRvbg== 80801\nVVRET1dO 80802\nIEdMc2l6ZWk= 80803\nIOekug== 80804\n44OR 80805\nIEdvbg== 80806\nUExJRVI= 80807\nJ119PC8= 80808\nY2xhc3NpYw== 80809\nIGVuZ3JhdmVk 80810\nIG1hc2N1bGluaXR5 80811\nTWFyc2g= 80812\nc3NxbA== 80813\nKEdyYXZpdHk= 80814\nIGxvYnN0ZXI= 80815\n67aE 80816\nX0ludGVy 80817\nXGJhc2U= 80818\nJzpbJw== 80819\nIGRldGFsbGU= 80820\ndHdlZXRz 80821\nIGplYWxvdXN5 80822\nYWdlbmRh 80823\nLGl0 80824\nc3dpcmU= 80825\nK0I= 80826\nIHRyb3V0 80827\nX2FsdGVybg== 80828\nOiIj 80829\nIER3YXJm 80830\nIFNoYXBpcm8= 80831\nZXJvb24= 80832\nIG5vaw== 80833\nX2xvbmdpdHVkZQ== 80834\nIFdlcm5lcg== 80835\nIHZpb2xldA== 80836\ndXJzaXZlbHk= 80837\nLWF3YWl0 80838\nIH0KCgoKCgo= 80839\nIExlbm5vbg== 80840\nIEFudGFyY3RpYw== 80841\nIGLDpWRl 80842\nX3Nsb3Bl 80843\nbWFuZG8= 80844\nb3VuY2Vy 80845\nLWlvbg== 80846\nIERlc3RydWN0aW9u 80847\naXNzZW5zY2hhZnQ= 80848\nUGl6emE= 80849\nIEdlb2xvZ2ljYWw= 80850\nQk9VTkQ= 80851\nIGNpbmU= 80852\nRGVtb24= 80853\nLnBlb3BsZQ== 80854\nX1RPR0dMRQ== 80855\nCW5vZGVz 80856\nYnVzY2Fy 80857\nLnByb2Nlc3Nvcg== 80858\nTmg= 80859\nL3Nkaw== 80860\nIG15Y2tldA== 80861\nYXVjdGlvbg== 80862\nTWVn 80863\nR01FTQ== 80864\nIGlyb25pY2FsbHk= 80865\n5riF 80866\nIGNvbnZlcmdl 80867\nIFVJVGFibGVWaWV3RGF0YVNvdXJjZQ== 80868\nQXJkdWlubw== 80869\nPmU= 80870\nSm95 80871\nIFNob3VsZGVy 80872\nIER1Yw== 80873\nUFJJTUFSWQ== 80874\nLioo 80875\nLXByZXM= 80876\nIGRpYWxvZ1JlZg== 80877\naW1hZ2VOYW1l 80878\nX2ludm9rZQ== 80879\nXFRlbXBsYXRl 80880\nT0k= 80881\nIHZyaWVuZA== 80882\nIEd1ZXJy 80883\nIHByZXJlcXVpc2l0ZQ== 80884\nIFBHQQ== 80885\nIFJlc3A= 80886\nKSIsIg== 80887\nbGxlbg== 80888\nIHNuYXBwaW5n 80889\nX0ZpcnN0 80890\nS0lU 80891\nLnNldEZvY3Vz 80892\nIEN5cHJlc3M= 80893\nY3JhZnRlZA== 80894\nLzsK 80895\nd2VpZ2h0ZWQ= 80896\ndm95 80897\nX3RG 80898\nX2luc24= 80899\nIEluc3RhbGxpbmc= 80900\nIEdhbGx1cA== 80901\nQURPUg== 80902\nIEFMT0c= 80903\nQ29udGV4dEhvbGRlcg== 80904\nIFRvdXQ= 80905\nIEZvbGV5 80906\nIGNvbnRlbXBsYXRl 80907\nIENvaW5iYXNl 80908\nWMOj 80909\nd2FuZA== 80910\nLkNyZWF0ZUNvbW1hbmQ= 80911\nU29jaw== 80912\nIHVud3JhcA== 80913\nY2xhc3NwYXRo 80914\nPFJlc291cmNl 80915\nX0VTVA== 80916\nPXJhbmRvbQ== 80917\nIFNoYWRl 80918\nIGRpY2k= 80919\n2K/Zig== 80920\nIGtpdHR5 80921\n0LDRgtC10LM= 80922\n4buNbg== 80923\nLkNvbXBsZXRlZA== 80924\ncGxvcmVy 80925\nIGJhYmVs 80926\nLk9uSXRlbUNsaWNrTGlzdGVuZXI= 80927\nIE1jTWFob24= 80928\nIHJlc3RUZW1wbGF0ZQ== 80929\nIHRlc3M= 80930\nU2V0VXA= 80931\nL29jdGV0 80932\nIGNhbGFt 80933\nIGhpbmdlcw== 80934\nIGFydGVyaWFs 80935\nIFRydW1hbg== 80936\nIENoZXJ5bA== 80937\nX0REUg== 80938\nIHRtcGw= 80939\nIExlcg== 80940\nW2hhc2g= 80941\nS0VS 80942\nIHByb3BvcmNpb24= 80943\nIGNvYXN0bGluZQ== 80944\nYWNpb3M= 80945\nIj4tLX19Cg== 80946\nIGRpc2FkdmFudGFnZWQ= 80947\nVG91Y2hMaXN0ZW5lcg== 80948\nIFNlZ2E= 80949\nY29lcw== 80950\nSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbg== 80951\nPEJveA== 80952\nIEluY3JlZGlibGU= 80953\nVXBkYXRlcg== 80954\nRkxU 80955\naW5hbWU= 80956\nIEludGVyZmFjZXM= 80957\nKylc 80958\nZW5kaW1lbnRv 80959\nIHBhbmNha2Vz 80960\nIGluY29uc2lzdA== 80961\nLnBldA== 80962\nIGtleW9m 80963\nSW5uZXJUZXh0 80964\nPicp 80965\nRGVhbg== 80966\nIFDDqQ== 80967\nKENvbnRyb2w= 80968\nIHNwYXI= 80969\nbGluaWs= 80970\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 80971\nIERhbmU= 80972\nX1BBR0VT 80973\nIHNldEJhY2tncm91bmRDb2xvcg== 80974\nc3ViY2F0ZWdvcnk= 80975\nIFN0cmluZ1NwbGl0T3B0aW9ucw== 80976\nQWxsZW4= 80977\nISgie30iLA== 80978\nhOyerA== 80979\nIGJhYw== 80980\nX1BST0RVQ1RT 80981\ndXBwZXJjYXNl 80982\nPSQoIiM= 80983\nxJlr 80984\nIFVJVGFwR2VzdHVyZVJlY29nbml6ZXI= 80985\nTUVUQQ== 80986\nIHNjYXJjZWx5 80987\n6aA= 80988\nX21hbmFnZWQ= 80989\nIGNvbnN1bW8= 80990\nTW91c2VNb3Zl 80991\nIFNwZWNz 80992\nIFNlYXJjaGluZw== 80993\nSGVhZGVyVmlldw== 80994\nOicp 80995\nIG1pY3Jvc29mdA== 80996\nIEtvc292bw== 80997\nZW1hbm4= 80998\nLmZmdA== 80999\nIEh1YmJhcmQ= 81000\nIGRleA== 81001\nX1RFUk1JTg== 81002\nX0ZD 81003\nIHBoaWxpcHBpbmVz 81004\nXENvbGxlY3Rpb25z 81005\nIHRlaA== 81006\nIHF1YWxpZmllcw== 81007\nIGlucHV0VmFsdWU= 81008\nIEdPVA== 81009\nKHNh 81010\nSUxMRUQ= 81011\nIHNsYW5n 81012\nIGtlaW5lbg== 81013\nIGZlbG9u 81014\nIEVyaWNr 81015\nYWJpbGlkYWRl 81016\nLnNlcg== 81017\nIHJ1bmVz 81018\nIFVucmVhbA== 81019\nKG9y 81020\nIOusuOyekA== 81021\nIGJpZGk= 81022\nIGlyYw== 81023\nCWl0ZXI= 81024\nIm5pbA== 81025\nL3VidW50dQ== 81026\nIG11cmRlcmluZw== 81027\nID8u 81028\ndW5rZXI= 81029\nUmVjdFRyYW5zZm9ybQ== 81030\nJykpCgoK 81031\nIGFyaXR5 81032\nIEZyZWVs 81033\nLm1vdW50 81034\nQ09NTUVOVA== 81035\nICIqIiw= 81036\nZW5jcnlwdGlvbg== 81037\nW21vZGVs 81038\nIn19Pgo= 81039\nLlRvdWNo 81040\nL3RodW1i 81041\nIHByZXo= 81042\nL2NvbXBhbnk= 81043\nIHLDs8W8 81044\nIHNvZnRlbg== 81045\nIHBvc3NpYmlsZQ== 81046\nIEVDQg== 81047\nX0Jvb2w= 81048\nIC0tLS0tCg== 81049\nIGludGVydHc= 81050\nX3N0YQ== 81051\nX0JBTA== 81052\nLm5hdmlnYXRpb25CYXI= 81053\nIFJHQkE= 81054\nZ3JpbHk= 81055\nc3RvZmY= 81056\nYWNreQ== 81057\nUUI= 81058\nQEFwaQ== 81059\ncGVjaWE= 81060\nIFJwYw== 81061\nIGFtcHM= 81062\nIEZlbmNl 81063\nIGdlbm9taWM= 81064\nKGFsaWFz 81065\nVmllbg== 81066\nU3BpbkJveA== 81067\nLmdldFNlY29uZHM= 81068\nIGdsb2JhbGl6YXRpb24= 81069\nIGN1cw== 81070\na3ViZWN0bA== 81071\nIHRocm90dA== 81072\nIGluZXJ0 81073\nIFNjcmF0Y2g= 81074\nw5c8Lw== 81075\nLmlzc3Vl 81076\nZXNzYXk= 81077\nLUlzbA== 81078\nIG3DoXI= 81079\nCWJpdA== 81080\nIGFib2xpc2hlZA== 81081\nLmluZmluaXR5 81082\nbGluZW5v 81083\nLmFsZ29yaXRobQ== 81084\nb3JzY2g= 81085\nRW1haWxBZGRyZXNz 81086\nIERBRw== 81087\nYnJpbmdpbmc= 81088\nLm15YXBwbGljYXRpb24= 81089\nLlN1cHBvcnQ= 81090\nX2xlYWRlcg== 81091\nIERldmlu 81092\nIFtdDQoNCg== 81093\nIHJtcw== 81094\nIGJ1Y2tsZQ== 81095\naWdsaWE= 81096\nL3Byb2JsZW0= 81097\nIGhhdXRl 81098\nIGluc3RpdHV0ZWQ= 81099\nSVU= 81100\nbGFtYQ== 81101\nRVhQRUNURUQ= 81102\nIEJlY2toYW0= 81103\nIEh5ZHJhdWxpYw== 81104\nU3RhdGljcw== 81105\nX25vcm1hbGl6ZWQ= 81106\nLmAsCg== 81107\nIG1pbWV0eXBl 81108\nIHNoYXZpbmc= 81109\nT3ZlcnJpZGVz 81110\nIE1lcmNlcg== 81111\ndHJmcw== 81112\nLXN0YXRz 81113\nb3NwYWNl 81114\nIGFudGlveGlkYW50cw== 81115\naW5maW5pdHk= 81116\nUm9ja2V0 81117\nIEV1bGVy 81118\nLXZhbHU= 81119\nIGzDuA== 81120\nLUlO 81121\nSG1t 81122\nLXJldHVybg== 81123\nIFBBTkVM 81124\nIHRlcm1pbmF0b3I= 81125\nIHRla24= 81126\nIHByZWRpY2F0ZXM= 81127\nU3RhbXBlZA== 81128\nIHN2ZQ== 81129\nYW50ZXI= 81130\nIGN5Y2xpc3Q= 81131\nIEVwc3RlaW4= 81132\nIGhpdHRlcnM= 81133\nZG9ncw== 81134\nLkFkZExpc3RlbmVy 81135\nX2V4Y2VwdGlvbnM= 81136\nIEZPT1Q= 81137\naWNhcmU= 81138\nW3RhZw== 81139\nLWZldGNo 81140\nVVBMT0FE 81141\nLmRyb3Bkb3du 81142\nIGNlbnRyb2lkcw== 81143\nIGFyYmU= 81144\nIGhpam8= 81145\nIERhdGFiYXNlUmVmZXJlbmNl 81146\nUG9saXRpY2Fs 81147\nIEJBU0lD 81148\nLWZvcmNl 81149\nfCQ= 81150\nIFJFVklFVw== 81151\nLmRlY29yYXRl 81152\nIEFzcGVjdA== 81153\nIGNvbW1lbW9y 81154\nIGNsZWFuc2U= 81155\nIENsYXVkaWE= 81156\nZ2VuZXJhdGlvbg== 81157\nSExU 81158\ndHlwZW9ybQ== 81159\ncHJlZmVy 81160\nb3ZlcmxhcA== 81161\nYmlvbG9neQ== 81162\nU3RyZWFtZXI= 81163\nY29tbWlzc2lvbg== 81164\nIHRodW1ibmFpbHM= 81165\nLkN1cnJlbnRDdWx0dXJl 81166\nIHVybHBhcnNl 81167\nIGdpb3Jubw== 81168\nIGRldnM= 81169\nX2FzcGVjdA== 81170\nIGNoZXJpc2hlZA== 81171\nIE5hY2hyaWNodA== 81172\nIHJpZ2dlZA== 81173\nL2xvZ2dpbmc= 81174\naHVudA== 81175\nVHlwZUVycm9y 81176\nPFNlbGVjdA== 81177\nKHByb2c= 81178\nIEdyaWRMYXlvdXQ= 81179\n6JA= 81180\nIEVYUEVS 81181\nCUtFWQ== 81182\nLmRt 81183\nCWNhcmQ= 81184\nIFRhdQ== 81185\nIG5vdGFtbWVudA== 81186\nIGhlcm9pbmU= 81187\nIGJhdGh0dWI= 81188\nYXRyb24= 81189\nIOaU 81190\n77yS77yQ 81191\nY29ub21pY3M= 81192\nIHJldmVyc2libGU= 81193\n6YeR6aKd 81194\nIGpzeA== 81195\nIFNwZWFrZXJz 81196\nRGVzZXJpYWxpemVy 81197\nLnRvRmxvYXQ= 81198\nINC/0LXRgNC10LzQtdC9 81199\nIFByb3ZpZGluZw== 81200\n6LSm 81201\nW2VsZW1lbnQ= 81202\nKjo= 81203\nPlJldHVybnM= 81204\nIHRpdHVsYXI= 81205\nIGhlYXJ0YnJlYWtpbmc= 81206\nX05C 81207\nLkFyZ3VtZW50cw== 81208\nIG9wdGlj 81209\nYXR0YWNrcw== 81210\nIFZ1bG5lcg== 81211\nCWtleXM= 81212\nIGNvbnRyb2xl 81213\nLlJHQg== 81214\nIHN1Ymdyb3Vw 81215\nbWFuZGF0b3J5 81216\nIENBQg== 81217\nCWVuZ2luZQ== 81218\n44Gw 81219\nTUVESUE= 81220\nL3RyYW5z 81221\nIGRhbms= 81222\nIHNlcnZpY2Vk 81223\nIGluY2FyY2VyYXRlZA== 81224\nIEZyZWFr 81225\nIHVwdG8= 81226\nZHJhd2Vy 81227\nWyIr 81228\nIGVudHdpY2s= 81229\nZ0w= 81230\nTW9kZWxFcnJvcg== 81231\nIHJlYWRkaXI= 81232\naXN0cmlidXRl 81233\nIGdsYXJl 81234\naXF1ZW1lbnQ= 81235\nY2hpbmE= 81236\nIEthcGxhbg== 81237\nIFN0YWJpbGl0eQ== 81238\ncG9zaXRlcw== 81239\nIEpBWEJFbGVtZW50 81240\nIHRvdGFsbWVudGU= 81241\nKGNvbW0= 81242\nX3Byb2Nlc3Nlcw== 81243\nVGhvdXNhbmRz 81244\nIElscw== 81245\nZXJ0YWludHk= 81246\nIFNoYWRlcw== 81247\nYWN0YWw= 81248\nbG9nZ2VkSW4= 81249\nIE5pY2hvbHM= 81250\nIE1pZGxhbmRz 81251\nZGV2aWw= 81252\nIHN0clNRTA== 81253\nIn0p 81254\nIEpvcmQ= 81255\nKGZm 81256\nIEp1bmk= 81257\n5bCx 81258\nYXJ0aXNhbmxpYg== 81259\nIG1vb25z 81260\nIHVucmVzb2x2ZWQ= 81261\nIHdpdGNoZXM= 81262\nIEfDvA== 81263\nIEdvYmxpbg== 81264\nYW5zc29u 81265\nfCU= 81266\nIGJ6 81267\nIGR1cGxleA== 81268\nICIpKQ== 81269\nLmxpa2Vz 81270\nKHZlcnRpY2Fs 81271\nIGNvd2JveQ== 81272\nU2VsZWNjaW9uZQ== 81273\nICcqJyw= 81274\nIFNhcA== 81275\nIFNhYmJhdGg= 81276\nU09SVA== 81277\n4Ka/4KY= 81278\nX2NlbnRlcnM= 81279\nXFBvc3Q= 81280\nKFRyZWU= 81281\nIHBhcnRlcw== 81282\nX3lhdw== 81283\nYXJlbW9z 81284\nc2V2ZW4= 81285\nIGhpYXR1cw== 81286\nX2ludGVuc2l0eQ== 81287\nLW1hbnk= 81288\nIERvbGxhcnM= 81289\nLXVuc3R5bGVk 81290\nIGdyaXBwaW5n 81291\nIG1hcnZlbG91cw== 81292\nIHJlY2VwdGlvbnM= 81293\nIG92ZXJjbG9jaw== 81294\nYmVybWFu 81295\nIGhlYWRxdWFydGVyZWQ= 81296\neEJC 81297\nY2xhc3NDYWxsQ2hlY2s= 81298\nIG9ic2VydmVz 81299\nU3VibWl0dGluZw== 81300\n0LjRh9C10YE= 81301\nIEh0dHBTdGF0dXNDb2RlUmVzdWx0 81302\nIGhpZXJvbnRh 81303\ncm9wcGluZw== 81304\nRk9SQ0U= 81305\nCXV0aWxz 81306\nIHZlbnRz 81307\nYWRkZXJz 81308\nIE1JWA== 81309\nIEVsZWdhbnQ= 81310\nIGFjb3M= 81311\nKG1hY2hpbmU= 81312\nIG1lZGRsaW5n 81313\nIHZpbGU= 81314\nLWNvbXBhdGlibGU= 81315\nIGNyZWFtcw== 81316\nIFRhYmxlUm93 81317\nIFJlaGFiaWxpdGF0aW9u 81318\nQWJi 81319\nKHVzZXJJbmZv 81320\nX2V4cGlyZWQ= 81321\nLk9iamVjdE1ldGE= 81322\nIGdvZHQ= 81323\ndXN1YWw= 81324\nLmJpbmRpbmdOYXZpZ2F0b3JNb3Zl 81325\nIFJlZ2lzdHJhcg== 81326\nbWlncmF0aW9u 81327\nYXB0dXJlZA== 81328\nLHBhcmFtcw== 81329\nIGNlbnRlclk= 81330\nb3dhbg== 81331\nbG9jYWxlcw== 81332\nSW5wdXRNb2R1bGU= 81333\nIHZpZ2lsYW50 81334\nIG5jb2xz 81335\nIGluZ3I= 81336\nIGPDtHTDqQ== 81337\ndmVydGltZQ== 81338\nIHdpZGVzdA== 81339\nIEhERg== 81340\nIEFsZ2VyaWE= 81341\nIGNoYXR0 81342\nJHNlbGVjdA== 81343\nIl0pDQo= 81344\nIG11bHRlcg== 81345\nIENoZW5leQ== 81346\nZnVzY2F0ZWQ= 81347\nPSciLiRf 81348\nIERlbmlzZQ== 81349\nIHJpZmY= 81350\nQWJzZW50 81351\nIHRhbWHDsW8= 81352\nIGplc3pjemU= 81353\nLlByb2dyYW0= 81354\nCWJy 81355\nZXJhaXM= 81356\nIHNhbmRhbHM= 81357\nICws 81358\nIGRpc3NvbHV0aW9u 81359\nIHVudGVyc2NoaWVk 81360\nUHJvdg== 81361\nLnRyYW5zYWN0aW9ucw== 81362\nIFRyb3VibGU= 81363\nLm1pZGRsZQ== 81364\nLmdldERlY2xhcmVk 81365\nIHN3ZWF0aW5n 81366\nIEhhbmNvY2s= 81367\n6LS5 81368\nIHBvZw== 81369\nIEtpYQ== 81370\nIG1vZG5l 81371\nIEFjY2Vzc2liaWxpdHk= 81372\nIGxlYWthZ2U= 81373\nIGRlY2VwdGl2ZQ== 81374\nIFdPTQ== 81375\nINC+0YE= 81376\nIGNzYWs= 81377\nYWNvY2s= 81378\nLlN5bnRheA== 81379\nICxb 81380\nLicpLAo= 81381\nIGZvcmVjbG9zdXJl 81382\nIHVuZmF2b3I= 81383\nIGV4Y2w= 81384\nQ1VEQQ== 81385\nZGVuc2U= 81386\nPFVuaXQ= 81387\nIHZhcGluZw== 81388\nIG1hamVzdGlj 81389\naWF0b3Jz 81390\nIGF1dGlzdGlj 81391\nLmdhdGV3YXk= 81392\nVXJsUGFyc2Vy 81393\nSGVsbA== 81394\nIENvc3Rjbw== 81395\nIEhJUA== 81396\nT2JzZXJ2ZXJz 81397\nIFBlb3BsZXM= 81398\nIFNwb3RsaWdodA== 81399\nIFRhdmVybg== 81400\nIFRPVVI= 81401\ncGxpbmdz 81402\nLldSQVA= 81403\nIGFsZA== 81404\nTkFM 81405\nKCIqKio= 81406\nc2V0UHJvcGVydHk= 81407\nX1N0b3A= 81408\nYW5ub3VuY2VtZW50 81409\nIEltbWVkaWF0ZQ== 81410\nIEhTVg== 81411\nX1RFU1RT 81412\nIGNyYXZl 81413\nX1VD 81414\nLmRlY3J5cHQ= 81415\nKFJvbGVz 81416\nIHN1Ymo= 81417\nX0ludGVnZXI= 81418\nLm5vdE51bGw= 81419\nIEdzdA== 81420\nIEJ5cm5l 81421\nIEFxdWFyaXVt 81422\nIENhbmM= 81423\nX0NIQU4= 81424\nIERUTw== 81425\nLmhs 81426\nIG1lbmdndW5ha2Fu 81427\nRnJhbmM= 81428\nRGlhbG9nQ29udGVudA== 81429\nLi4uJwo= 81430\nIEt1bnN0 81431\nIEFsbG9jYXRvcg== 81432\nVVNBR0U= 81433\nS25vd2xlZGdl 81434\nCWNwdQ== 81435\nIG1vcmFscw== 81436\ncGF0aWVudHM= 81437\nIGlsaw== 81438\nIGNyaXRlcg== 81439\nIFZldA== 81440\nIE1lc3NpYWg= 81441\nX186 81442\nYXZlbm91cw== 81443\nX3ZpZXdlcg== 81444\nKERpY3Rpb25hcnk= 81445\nIEJvZGllcw== 81446\naGFzT25l 81447\n0LjQvNC10YA= 81448\nIHppcGNvZGU= 81449\nU3Rlcg== 81450\nIGLDoXM= 81451\nX0Rpc3BsYXk= 81452\nIGZpcm1h 81453\nIFJhaWRlcg== 81454\nIEtI 81455\nV2l0aERhdGE= 81456\nKEFSRw== 81457\nIHByb3Ry 81458\nIG1zZWM= 81459\nIGxhdmVuZGVy 81460\nKFV0aWw= 81461\nINC/0YDQvtCz0YDQsNC8 81462\nX211eA== 81463\nX2xhdGl0dWRl 81464\nUG9ydHJhaXQ= 81465\nIHNpdGNvbQ== 81466\nIGFkaWNpb24= 81467\nKGNvbnN0YW50cw== 81468\nIEFueGlldHk= 81469\nIFJvc2Vz 81470\nIHN0aW11bGF0ZWQ= 81471\nIGNocm9ubw== 81472\nIGZvc3NpbHM= 81473\nIEFpcmJ1cw== 81474\nbGVmdHJpZ2h0 81475\nIE3DqXRvZG8= 81476\nInc= 81477\nIGtsZWluZW4= 81478\nIGNsaXF1ZQ== 81479\nb21pbmF0aW9u 81480\nIG1vdGVs 81481\nL3ZlY3Rvcg== 81482\nZGVjbGFyYXRpb24= 81483\nIG5ld1k= 81484\nW0g= 81485\nLnNjYWxhcg== 81486\nb21ibw== 81487\naHVk 81488\nO3NldA== 81489\nZnR5cGU= 81490\nKCcnKS4= 81491\nb3JkZXM= 81492\neW5vcw== 81493\nJ10sCgo= 81494\nX0ZMVVNI 81495\naWRlbnRpZnk= 81496\nL2RldmljZXM= 81497\nIGRpY3RhdGVk 81498\nIGRlamFy 81499\nIEVtaW4= 81500\nIFBlbmRhbnQ= 81501\nIG9uVXBkYXRl 81502\nXSkpKQ== 81503\nIEJhcmtlcg== 81504\nT3Jt 81505\n6K+36YCJ5oup 81506\nX2d1aWRl 81507\nw6FiYWRv 81508\nb3BoZQ== 81509\nICIuCg== 81510\nIEJyZXdlcnM= 81511\nIGJyaWRhbA== 81512\nIENFUw== 81513\nX0NhdGVnb3J5 81514\nIEJUTg== 81515\nIERhcnRo 81516\nI2Zvcg== 81517\nZXRobmlj 81518\nYXJjaGl0ZWN0dXJl 81519\nIENvdXBl 81520\naWRvcmVz 81521\nIGZhc2Npc20= 81522\nIGNvbnRyYWRpY3Rpb25z 81523\nZWZmZWN0cw== 81524\nSW5pdGlhbFN0YXRl 81525\nIOekuuS+iw== 81526\nbWF0cGxvdGxpYg== 81527\nLmRlc2t0b3A= 81528\nINCt 81529\nIFFQaXhtYXA= 81530\nCWJlZ2lu 81531\nIHduZA== 81532\nIGNvbnRpZW5l 81533\nKGhlbHBlcg== 81534\nLk5vdGlmeQ== 81535\nKEJvb2s= 81536\nIEd1YXJhbnRlZWQ= 81537\ncGxs 81538\naW9sYQ== 81539\nIGZ1bmdp 81540\naXZlbnQ= 81541\nIE9B 81542\n5rKh5pyJ 81543\nIHdpxJljZWo= 81544\nCQoJCgkKCQo= 81545\n77yaIis= 81546\nIFRhbGtz 81547\nLnN0YXJ0ZWQ= 81548\nb2NpdGllcw== 81549\nIGVzcG9ydHM= 81550\nPElucHV0 81551\nIEVYQ0VQVElPTg== 81552\nIGFjdHU= 81553\nLmltcA== 81554\nICIvIgo= 81555\nT3RoZXJ3aXNl 81556\nIFBlbnNpb24= 81557\nIFdhdmVz 81558\nxrDGoQ== 81559\naWFyZHM= 81560\nICo8Lw== 81561\ndXJnZW9u 81562\nIFNDSQ== 81563\nIExhdXJlbA== 81564\nZXRhZw== 81565\nTmV0ZmxpeA== 81566\nIFJlc3BvbnNlcw== 81567\nIG5lb2xpYmVyYWw= 81568\naXNDb250YWluZWQ= 81569\nPW15 81570\nIHJlcHJpbnQ= 81571\nb25lc3RseQ== 81572\nIGRlcGFydGluZw== 81573\nUFdN 81574\nZXdoYXQ= 81575\nPSI8PA== 81576\nLnlhbmc= 81577\nIFRyYWRpdGlvbg== 81578\nKyI6 81579\nZGVwZW5kaW5n 81580\nX1VuaXQ= 81581\nIENvZGFibGU= 81582\nIHdoaXNreQ== 81583\nIGNvcnJlbGF0ZQ== 81584\nIGRpcmV0 81585\nTGFzdGx5 81586\nCU91dHB1dA== 81587\nKGlub2Rl 81588\nXExvZw== 81589\nIERlcGVuZGVuY2llcw== 81590\nV2lsbERpc2FwcGVhcg== 81591\nIFBhbmVscw== 81592\nIOKUnOKUgOKUgA== 81593\nIG9zdGVuc2libHk= 81594\nfC0t 81595\nQW5udWFs 81596\nIGF1dG9sb2Fk 81597\nVmFsdWVIYW5kbGluZw== 81598\nLmNvaW4= 81599\nZWR1Y3Q= 81600\nWlk= 81601\nIENhbnVja3M= 81602\nIHNtZWFy 81603\nIHJlYWxpZGFk 81604\nIHt7Cg== 81605\naXZvbA== 81606\nZXRTb2NrZXRBZGRyZXNz 81607\nIEtlbXA= 81608\nL0ZyYW1ld29yaw== 81609\nIHF1aWNrZXN0 81610\nXyIuJA== 81611\nIHdpdGhob2xkaW5n 81612\nIGludHJpZ3Vl 81613\nIEFERFI= 81614\nRGllc2U= 81615\nV2Vla2x5 81616\nX19fX18= 81617\nIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbg== 81618\nb2xhdGVk 81619\nUnVuTG9vcA== 81620\nIHBhc3PDqQ== 81621\nLmZpcmViYXNlaW8= 81622\nLmV1bGVyQW5nbGVz 81623\naXN0ZW5jZQ== 81624\nIGZlYXJpbmc= 81625\nIEVsZW1lbnRUeXBl 81626\nL1Rlc3Q= 81627\nIOafpeivog== 81628\nIGZvbmRv 81629\nIFBhcnI= 81630\nIHplc3Q= 81631\nIFRyYW5zZm9ybWVycw== 81632\nTGluZVN0eWxl 81633\nIGV0aGVybmV0 81634\nYWZmbGVz 81635\nIG5hbWVkdHVwbGU= 81636\nIFNjYWxhcnM= 81637\nTlNVUkxTZXNzaW9u 81638\nLWV4dGVuc2lvbg== 81639\nKE1lc3NhZ2Vz 81640\nIGF0ZW5jacOzbg== 81641\nIEplcnNleXM= 81642\nYmVkUGFuZQ== 81643\nIFN0dW5kZW4= 81644\nIHZvaXR1cmU= 81645\nIOm7mOiupA== 81646\nLm9wZW5nbA== 81647\nICJ9 81648\nIFJldmVuZ2U= 81649\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 81650\nSW5zdGFudGlhdGU= 81651\nIGVucg== 81652\nVmFsaWRhdGlvbkVycm9y 81653\nX0FMUkVBRFk= 81654\nTG90cw== 81655\nb2Nl 81656\nIHNjcmlt 81657\nIGVtYm9keQ== 81658\n0YDQsNGC 81659\nIGNvbmNlZGU= 81660\nYXNzZWw= 81661\nIEJSRQ== 81662\nUExFQVNF 81663\nCWRpZmY= 81664\n57uT5p2f 81665\nLmZw 81666\nYmFt 81667\nTWVhbA== 81668\nIE1hZG9ubmE= 81669\nIHB1bmlzaGFibGU= 81670\naWZmaWVz 81671\nX3VuaXg= 81672\n7JmA 81673\nIEdhZ2E= 81674\nInN0cnVjdA== 81675\nVG9TZW5k 81676\nIE9DUg== 81677\nIHByYWlzaW5n 81678\nZ2V0U3RvcmU= 81679\nIGV1dGg= 81680\nIGFycmVnbG8= 81681\nIGZlcm0= 81682\nZmRm 81683\nQ29vbGRvd24= 81684\nIFJlY3ljbGluZw== 81685\nQW5h 81686\naW5kcg== 81687\nX0hQ 81688\nIEdvdmVybmFuY2U= 81689\nIGJhcnJhZ2U= 81690\nL2Nh 81691\nICwo 81692\nRsO8cg== 81693\nIElTUHM= 81694\nIG1lbmFjZQ== 81695\nVmlyZ2luaWE= 81696\nIGZhbmM= 81697\nIG5vbWJyZXM= 81698\nLmluc3RydWN0aW9ucw== 81699\nIGVzY2FsYXRlZA== 81700\nYWdpbmE= 81701\nIExldmluZQ== 81702\nCWZpbmQ= 81703\nX2Vy 81704\nIGRlanRpbmdzYWo= 81705\nc3Zw 81706\nYWdvcw== 81707\nKHNvbA== 81708\nIExpZA== 81709\nUFJJVkFURQ== 81710\nIElNUExFTUVOVA== 81711\nZWZlbGxlcg== 81712\nKFRhcmdldA== 81713\n4LmJ4Lit4Lih 81714\naG91c2luZw== 81715\nLnNldEN1cnNvcg== 81716\nIG5laG1lbg== 81717\nLnJlY2VpdmVy 81718\nIFR1dG9y 81719\nIG1hdHRlcmVk 81720\nbWRhdA== 81721\ncmVndWxhdGVk 81722\nIGdldEFkZHJlc3M= 81723\nIE1pbnV0ZW4= 81724\nIElV 81725\n0LvQsNCy 81726\nIHR1cm5vdmVycw== 81727\nIHN1aXRhYmlsaXR5 81728\nCWVzYw== 81729\nY2FsY3Vs 81730\nX1N0cmVhbQ== 81731\nX2ZpbGVuYW1lcw== 81732\nLXZhcnM= 81733\nLi4uLi4KCg== 81734\nRGlh 81735\nIHN3aW1z 81736\nT3B0aW1pemVy 81737\nPGJvb3N0 81738\nIFBlcm1pdA== 81739\nJ10pKXs= 81740\nXE9wdGlvbnNSZXNvbHZlcg== 81741\n5qGI 81742\nIGhlY3RhcmVz 81743\nKHVz 81744\nIERldmVsb3Bpbmc= 81745\nX3hz 81746\nIG5vdmVsaXN0 81747\nIENvbnZlbmllbmNl 81748\nd2Fsa2luZw== 81749\nIGNoYXJtcw== 81750\nIExlYXNl 81751\nCUhBTA== 81752\nKFsm 81753\nIHJlc3RhcnRlZA== 81754\nTWFnZQ== 81755\nSXB2 81756\nINGN0Lo= 81757\nUkxG 81758\nIGFzc2VtYmxpbmc= 81759\nIEVjYw== 81760\ndmluZm9z 81761\ncGVkaWRv 81762\nIHN5bm9wc2lz 81763\nIFN0YW50b24= 81764\nc3RhcnR1cA== 81765\nLmdldHZhbHVl 81766\nIEtpdHQ= 81767\ncHJvcGVy 81768\nIHByZXRyYWluZWQ= 81769\nIFBFTg== 81770\nLlRlcm0= 81771\nIHBlcXU= 81772\nZXBoaXI= 81773\nIEFsbGllcw== 81774\nIG1vZGVsQW5kVmlldw== 81775\nIGJ1dHRlcmZsaWVz 81776\nIEtpcnN0 81777\nIENoZWNrZXI= 81778\nIGN1bm5pbmc= 81779\nLnNldFk= 81780\nX01hc3Rlcg== 81781\nSW5jcmVhc2luZw== 81782\nIGh1cmRsZQ== 81783\nIGZpc3Rz 81784\nIFNsb3Zha2lh 81785\nIG5vbWJyZXV4 81786\nIDo6Cg== 81787\ndGFza0lk 81788\nIGZvbGx5 81789\nPFRyZWVOb2Rl 81790\nIFZvbGRlbW9ydA== 81791\nIGJsaXN0ZXI= 81792\nxYJl 81793\nLkVudGl0eU1hbmFnZXI= 81794\nLkRPV04= 81795\nIEdyZWdn 81796\nLWNvb3JkaW5hdGU= 81797\nKHZj 81798\nw6FiYg== 81799\nLlRvZ2dsZQ== 81800\nIExpc2Jvbg== 81801\n56I= 81802\nINC/0L7Rgg== 81803\ncGFyZW50Tm9kZQ== 81804\nLnNldFNjYWxl 81805\nX01JU1NJTkc= 81806\nIG91dHJh 81807\nIGt1cA== 81808\nYF0= 81809\nX3ZpYQ== 81810\nZWRpY3M= 81811\nIEJvcmRlcnM= 81812\nIGlwYWQ= 81813\nIGVkdA== 81814\nIENhcnRlc2lhbg== 81815\nL21hYw== 81816\nIGJhcmxleQ== 81817\nIFNjYXJsZXQ= 81818\nICAgIAogICAgCiAgICAKICAgIAo= 81819\ncXVlcnlQYXJhbXM= 81820\nIHJoeXRobXM= 81821\nIGdlYXJpbmc= 81822\nWlg= 81823\naHlkcmF0aW9u 81824\nU1RT 81825\nIHBsZW50aWZ1bA== 81826\nY29ycA== 81827\nfUA= 81828\naW50ZWdy 81829\nL2F0 81830\nLmRlYg== 81831\nIHVuZGVuaWFibGU= 81832\nIG9wZW5zc2w= 81833\nLmRlYWQ= 81834\nIFBpbGxvdw== 81835\nIEJlYW5z 81836\nLmFudA== 81837\nX3Fz 81838\nLWluZm9ybWF0aW9u 81839\nIOuzgOyImA== 81840\nJSIpLAo= 81841\nINC00YDRg9Cz 81842\nIFNwb25nZQ== 81843\nIHNpZnQ= 81844\ndGVzdGltb25pYWw= 81845\nIHVubmF0dXJhbA== 81846\nVUlTY3JvbGxWaWV3 81847\ndmVyZ2VuY2U= 81848\nKHRleHRCb3g= 81849\nLXBhZ2luYXRpb24= 81850\nIERpc3F1cw== 81851\nX3Byb2R1aw== 81852\nYWduYXI= 81853\nS2V5VXA= 81854\nCQkJICAgICAgICA= 81855\n0LXQu9C1 81856\nPHNvdXJjZQ== 81857\nLmls 81858\nLmF0b20= 81859\nX0NvbXBvbmVudA== 81860\nIHlu 81861\nWydfXw== 81862\nIHdlYWtlc3Q= 81863\nX2RlY3J5cHQ= 81864\nL21zZw== 81865\nY2Jj 81866\nIHBvbGl0ZWx5 81867\nb21hdA== 81868\nIGVubGlnaHRlbm1lbnQ= 81869\nIGNyZWE= 81870\nIGJydWs= 81871\nX2FscmVhZHk= 81872\nIHNvY2tmZA== 81873\ndW5wYWNr 81874\nb3JnZXM= 81875\nIFVORVNDTw== 81876\naW5hbGl0eQ== 81877\nIHNlbnRpbmVs 81878\nIGFmZmx1ZW50 81879\nIHRocm93RXJyb3I= 81880\naWV0cw== 81881\nQU5KSQ== 81882\nIFN1ZmZvbGs= 81883\nYmVybw== 81884\na2V0w7h5 81885\nRW5kcG9pbnRz 81886\nZXhlY3V0b3I= 81887\nR2E= 81888\nLkxB 81889\nX3BvcnRmb2xpbw== 81890\ndW5zY2g= 81891\nZWxhZ2U= 81892\nIGdvYmllcm5v 81893\nIEJpb2w= 81894\nTW9kaWZpY2F0aW9u 81895\nIERlY2ltYWxGb3JtYXQ= 81896\nIFZvY8Oq 81897\nIG1ldGhvZG9sb2dpZXM= 81898\nW10u 81899\nIEdW 81900\nIHJlcGxpY2Fz 81901\n4oCUd2l0aA== 81902\nKTspOwo= 81903\ncG9zaXg= 81904\nU3VjY2Vzc0xpc3RlbmVy 81905\ncGhl 81906\nX25vcm1hbGl6ZQ== 81907\nIExhcmdlcg== 81908\nIHJlcGVyY3Vzc2lvbnM= 81909\nX1ZlcnQ= 81910\nIGhvc3RlbA== 81911\nIGluY29tcGV0ZW50 81912\naGV2 81913\nX0RFTFRB 81914\nIHB1ZWRv 81915\naW5zdGFsbGF0aW9u 81916\nX2ZyYWc= 81917\nKHJy 81918\nIE1BVg== 81919\nIExvY2FsaXphdGlvbg== 81920\nKCIiKS4= 81921\nIC0tLS0tLS0tLQ== 81922\nDQoK 81923\nIFB5VHVwbGU= 81924\nIEp1bGlv 81925\nCUdMdWludA== 81926\nbWFya3Vw 81927\nX0ZBTUlMWQ== 81928\nUFJPR1JBTQ== 81929\nIEZpcm13YXJl 81930\nKnNpemU= 81931\nV2lmaQ== 81932\nIHZpc2l0YQ== 81933\nIEVybA== 81934\nRmluZE9iamVjdA== 81935\nLlVOUkVMQVRFRA== 81936\ncGh0aGFsbQ== 81937\nIHBlcnNvbmFsaXpl 81938\nIGNyw6lhdGlvbg== 81939\nICAgIAkg 81940\nLnByZWNpc2lvbg== 81941\nIHNldHRlcnM= 81942\nIG5ld1NpemU= 81943\nIENhdGFsYW4= 81944\nCW9wdGlvbg== 81945\nIHBpZWw= 81946\nIGNhZ2Vz 81947\nIFN0ZW0= 81948\nZHJhd2luZw== 81949\nZXhwbGFpbmVk 81950\nIOaOpw== 81951\nIGRyZWFkZnVs 81952\nZXJydXB0ZWQ= 81953\nLmdldFZhbHVlQXQ= 81954\nIGVsYXBzZWRUaW1l 81955\nIGluZGVmaW5pdGU= 81956\nIFRIQU5L 81957\nX3N0YXJ0dXA= 81958\nU1VSRQ== 81959\nIGtpZG5leXM= 81960\nIEN1aXNpbmU= 81961\nfGFycmF5 81962\nU2VuZE1lc3NhZ2U= 81963\nZmF2 81964\nIEFlcm9zcGFjZQ== 81965\nX21lYW5z 81966\nIG5lYg== 81967\nIE9UUA== 81968\nIGNodXJu 81969\nL2Zy 81970\nIFJlaWdu 81971\nX2NsYXNzaWZpY2F0aW9u 81972\nIE1hY0RvbmFsZA== 81973\nIi4KCgoK 81974\nIGNoaWxseQ== 81975\nIOivt+axgg== 81976\naWhhdA== 81977\nU1RB 81978\nJ2F1dHJlcw== 81979\nIGxhc2M= 81980\nLm1peA== 81981\nIGJsb3Q= 81982\nIElERA== 81983\nZGF0YXRhYmxl 81984\nc3BpZWw= 81985\nIMOpeGl0bw== 81986\nYXJ0aWM= 81987\nLkF4aXM= 81988\nLmFkdmFuY2U= 81989\nIG1vdXNlWA== 81990\nJ8Og 81991\nIHJlY2lldmVk 81992\nIHBvc2k= 81993\nIGZvdXJu 81994\nIE1hZmlh 81995\nIHBjYQ== 81996\nYmVsb25ncw== 81997\nYWJseXR5cGVk 81998\nQVVUSE9SSVpFRA== 81999\nLnNjYWxhYmx5dHlwZWQ= 82000\n7JyE 82001\nLWRvdA== 82002\nIGVtcGhhc2l6aW5n 82003\nTWVtYmVyc2hpcA== 82004\nKnBvdw== 82005\nLXNwaW4= 82006\ncnV0YQ== 82007\naGV2aWs= 82008\nX0FTWU5D 82009\nX2NvbXBpbGVy 82010\nLkZsYWc= 82011\nIGVsYm93cw== 82012\nLkNSRUFURQ== 82013\nTWV0cm8= 82014\nLmxvZ3M= 82015\nem1hbg== 82016\ncG9uZQ== 82017\nxJnFvA== 82018\nIGludGVycw== 82019\nIHdlYnM= 82020\nX0hJRERFTg== 82021\nCW5vdw== 82022\nQ29tbXVuaWM= 82023\nJHRwbA== 82024\nc2NvcGVz 82025\nIFppa2E= 82026\nIHN0cmluZ3N0cmVhbQ== 82027\nIFVuY2F0ZWdvcml6ZWQ= 82028\nRlk= 82029\nL3N3YWdnZXI= 82030\nUGVubg== 82031\naW1lSW50ZXJ2YWw= 82032\nIGNvbnRlbmRz 82033\neGllcw== 82034\nIFNhbGVzZm9yY2U= 82035\nIHV0ZW5z 82036\nIHVuZGlz 82037\nQ3J5c3RhbA== 82038\nLm5kaW0= 82039\nIGZvcm11bA== 82040\nIEZhdg== 82041\n5bm/ 82042\ncmlzaw== 82043\nbmFk 82044\nL3Rvcw== 82045\nIFBFUkZPUk1BTkNF 82046\nIHdyaXRlbG4= 82047\nIGNvbGxv 82048\nYW50aWNhbGx5 82049\nVURFTlQ= 82050\nUmdi 82051\nIG9mZXJl 82052\nIG1lcmdlcw== 82053\nZmlkZg== 82054\nIGt6 82055\nVmljdG9yaWE= 82056\nIC9eXA== 82057\nIGt1YmU= 82058\nIEFwb3N0bGU= 82059\nIGRlZmVuZHM= 82060\nPD0o 82061\nIE1FTU9SWQ== 82062\nXElk 82063\nIEFjdGl2ZUZvcm0= 82064\nIE9uZVBsdXM= 82065\nSHR0cFNlcnZsZXRSZXF1ZXN0 82066\nIFRlbXBEYXRh 82067\n7KCB 82068\nLkFTQ0lJ 82069\n2YTYpw== 82070\nS0k= 82071\nIGZyYXQ= 82072\nX0NJUEhFUg== 82073\nLlN1cmZhY2U= 82074\nIHBpdGZhbGxz 82075\nLW1lZGlhdGVk 82076\neXBp 82077\nLWFsaXN0 82078\neEJD 82079\ndGVhY2hlcnM= 82080\nIEN5Yw== 82081\nIHBzeWNoZWRlbGlj 82082\nIER1bWJsZWRvcmU= 82083\nIikuCgo= 82084\nIFRoYXRjaGVy 82085\nIFByaW5jaXBsZQ== 82086\nVG9nZXRoZXI= 82087\nIGZsb3Jh 82088\nd2Vla3M= 82089\nX2NyaXRlcmlh 82090\nYm9uZXM= 82091\nLmludGVybmV0 82092\nIGJsb2NrRGlt 82093\nLlNpbmdsZU9yRGVmYXVsdA== 82094\nRGljZQ== 82095\nIEV2ZWw= 82096\nIFRMYWJlbA== 82097\nIElnb3I= 82098\nIENvcHA= 82099\nIGluYXVndXI= 82100\nL3ByaXZhdGU= 82101\nIGFiZXJy 82102\nbmRz 82103\nO2lm 82104\nLXJhbmdpbmc= 82105\nYWNodHM= 82106\nX21hcnNoYWxs 82107\nIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 82108\nLmVuZFRpbWU= 82109\nIE1vZGVsUmVuZGVyZXI= 82110\nKGZvb2Q= 82111\nKCJ+ 82112\nIHN1cHBs 82113\nKCJcKA== 82114\nU3E= 82115\nVHJhbnNsYXRlZA== 82116\nIENvbnRpbnVpbmc= 82117\nIHBvc3Nvbm8= 82118\nRklYTUU= 82119\nIEFuZ2Vib3Q= 82120\naWV2ZXI= 82121\nIEt5b3Rv 82122\nY2ls 82123\nTmV3VXJsUGFyc2Vy 82124\nLkRp 82125\nIGh1bWFuZQ== 82126\nRGVtYW5k 82127\nIE1hcnRpYW4= 82128\nd29vZHM= 82129\nIEhlYWw= 82130\nIFl1ZQ== 82131\nIGNvdXJ0aG91c2U= 82132\nIHZvbnQ= 82133\nIGJvbnM= 82134\naW50ZWdyYWw= 82135\nICQoJyMn 82136\nZXRlcm1pbmF0aW9u 82137\nLm1vZGlmaWVk 82138\nIHByaW5jaXBhbHM= 82139\nIGFsYXJtZWQ= 82140\nLmNyZWF0ZU9iamVjdA== 82141\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 82142\nL2NvdW50 82143\nIGVudHJlbmNoZWQ= 82144\nXGE= 82145\nIGludHJ1c2lvbg== 82146\nIE54 82147\nCQkKCQkKCQkK 82148\nY2hlbWF0aWM= 82149\nIHNsaWRlcnM= 82150\nIHNlbGVjdGFibGU= 82151\nX25s 82152\naWVzZQ== 82153\nX2VzdGltYXRvcnM= 82154\nIFN2Zw== 82155\nIGRlbGV0ZVVzZXI= 82156\nKG1hcHBpbmc= 82157\nIOyymOumrA== 82158\nIGFudGFnb25pc3Q= 82159\nIGtpbmFzZQ== 82160\nIHdlbGRlZA== 82161\nIExlbmE= 82162\nZWRpdGg= 82163\naWFsaQ== 82164\nKHBpYw== 82165\nIGJyZWFjaGVk 82166\nUElD 82167\nIGNvYXN0ZXI= 82168\nRkRB 82169\nIGtyZQ== 82170\ncGVyZmls 82171\nIEdlbXM= 82172\nX2ZlbmNl 82173\nVVJMUmVxdWVzdA== 82174\n4oCZYXBw 82175\nUkVGRVJFTkNF 82176\nLkV4cG9ydA== 82177\nIG1pbmltaXplZA== 82178\naXBlbA== 82179\naWRhdGE= 82180\nKWRlYWxsb2M= 82181\nZXNjYWw= 82182\nX2Z3ZA== 82183\nbWVtY3B5 82184\nIExvcmk= 82185\nX1JlZg== 82186\nIGJhcmE= 82187\nIFNlbGxlcnM= 82188\nIGRldGVyaW9yYXRpb24= 82189\nZnJhY3Rpb24= 82190\nKV07 82191\nL3BsYXk= 82192\nwqU= 82193\nLXRlc3Rz 82194\nT2Zmc2V0cw== 82195\nT2k= 82196\nIEtsYXVz 82197\nIHF1ZXJ5aW5n 82198\nd2lzaA== 82199\nYXBlbA== 82200\nX3dvcmtpbmc= 82201\nbXlNb2RhbExhYmVs 82202\nIHRvRGF0ZQ== 82203\ncGVybWFsaW5r 82204\nIGZyZWM= 82205\nb2xlY3VsZXM= 82206\nIEdvb3Nl 82207\nLXdpZGdldHM= 82208\ndHVydGxl 82209\nSW1wcm92ZWQ= 82210\nIHJvYWR3YXk= 82211\na2Vocg== 82212\nIGFzdHJvbm9teQ== 82213\nQ29tYmluZQ== 82214\nIGNpZ2Fycw== 82215\nX0dBVEU= 82216\nL21hbmFnZQ== 82217\nIEdlcmFyZA== 82218\nIFByb3RlY3Rvcg== 82219\nU3Vic3lzdGVt 82220\nL2ZpbmQ= 82221\nL1lZWVk= 82222\nIHRvdGFsaW5n 82223\n0LzQvtGC 82224\nIE9tYW4= 82225\nIGluZmluaXQ= 82226\nLW9mZmljZQ== 82227\nIGluc3RhbnRpYXRpb24= 82228\nLsKn 82229\nY2V1 82230\nKGF0b20= 82231\nIERyb3BvdXQ= 82232\n7YGs 82233\nIGNvbmRlbW5pbmc= 82234\nX2Jhc2VuYW1l 82235\nXX08Lw== 82236\nRGF0YUNvbnRleHQ= 82237\nIFdhc2hpbmc= 82238\nLk9O 82239\nIG1vbW15 82240\nKCl9Owo= 82241\nIDspCgo= 82242\nL2V4dA== 82243\nZm9yZWdyb3VuZENvbG9y 82244\ndW5zdXBwb3J0ZWQ= 82245\nIHNvbGxlbg== 82246\nIGNvbWXDpw== 82247\nRElTQUJMRQ== 82248\nIG9uUGF1c2U= 82249\nINGH0YLQvtCx0Ys= 82250\nIEFpbg== 82251\nR3M= 82252\nCVRhc2s= 82253\naGF3aw== 82254\nIk5vdA== 82255\nQUdS 82256\nLmdldFRhYmxl 82257\nIGRpdmVyZ2VuY2U= 82258\nIG5lZ29jaQ== 82259\nUmVwbGFjaW5n 82260\nXX0pCg== 82261\naWxsdXNpb24= 82262\nIM6U 82263\nX0tFWUJPQVJE 82264\nS3I= 82265\nCW9y 82266\n56Gu6K6k 82267\nCXByaW50bG4= 82268\nIFNlYXJjaGVz 82269\nIEZyZXNubw== 82270\nIHZlcmRhZA== 82271\nXE1pZGRsZXdhcmU= 82272\nIOy1nA== 82273\nfSkoKTs= 82274\ndGV4dEFsaWdu 82275\naW5rZWw= 82276\nLlR4dA== 82277\nIG9wdGltaXphdGlvbnM= 82278\neW91bmc= 82279\nIGxlYXNlZA== 82280\nSlQ= 82281\nIElvbmljTW9kdWxl 82282\nZXR0aW5ncw== 82283\nZXNlaGVu 82284\nIGZhdm91cmFibGU= 82285\nYW5leQ== 82286\nIG90aGVyQnV0dG9uVGl0bGVz 82287\nIFRoYW1lcw== 82288\nCXVuaXQ= 82289\nQ09MVU1O 82290\nIGxvaQ== 82291\nLHByb3Rv 82292\nX1BSSQ== 82293\nIHdhbmRlcmVk 82294\nIHNhcGk= 82295\nYmFja3dhcmQ= 82296\nYXJhb2g= 82297\nIEZI 82298\nIEFsZw== 82299\nCWFj 82300\nYXJybw== 82301\n5Y6G 82302\nIFNPUw== 82303\nIERyZWFk 82304\nVmVjdG9yWGQ= 82305\nLnJtdHJlZQ== 82306\nX2V4ZWN1dG9y 82307\nIHByZWduYW5jaWVz 82308\nIHByYWN5 82309\nIFd3dw== 82310\nIEFyY2hiaXNob3A= 82311\nIG1laW5lbg== 82312\nRlU= 82313\nLkVudg== 82314\nIGVubGlnaHRlbmVk 82315\nIG9yaWdpbmF0ZQ== 82316\n5Y+K 82317\nIHpsaWI= 82318\nX1NB 82319\nIHdhc3Rlcw== 82320\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 82321\ncHJhcw== 82322\nIGhvcnJpZmllZA== 82323\nIENhbGR3ZWxs 82324\ndG95 82325\nX3Nob3Q= 82326\nIGxlc2Jp 82327\nIE1hZ25ldA== 82328\nb3hpYw== 82329\nU3VybmFtZQ== 82330\nIHNob3dUb2FzdA== 82331\nCURlc3Ryb3k= 82332\nLmdldEV4dGVybmFs 82333\nSUxJ 82334\nIE5ldmlsbGU= 82335\ndHNreQ== 82336\nIG1lbGFrdWthbg== 82337\nICImIw== 82338\nIGZsb3dlcmluZw== 82339\nIHZldGVyaW5hcmlhbg== 82340\nIGhhcm1vbmlj 82341\nIENhc3NhbmRyYQ== 82342\nKENyZWF0ZQ== 82343\ncGVyc2U= 82344\nUGVybQ== 82345\nKU5TU3RyaW5n 82346\nIGlzSW4= 82347\nIEZsb2F0aW5nQWN0aW9uQnV0dG9u 82348\nL05ldw== 82349\nIPCd 82350\nY2FwYWJpbGl0eQ== 82351\nIGN1Y2tvbGQ= 82352\nIEJhaW4= 82353\nKCl7DQoNCg== 82354\nUEVBUg== 82355\nIGphd3M= 82356\nIGdvZGU= 82357\nIGNhc3NldHRl 82358\nLmZyZXF1ZW5jeQ== 82359\nU0NPUkU= 82360\nLmludGVudA== 82361\nOlsi 82362\nIOWmguaenA== 82363\n77yf4oCd 82364\nL0ltYWdl 82365\nIHNpZW5kbw== 82366\nX2FsbG9jYXRpb24= 82367\nOkI= 82368\nL1JlZ2lzdGVy 82369\nX2thdGVnb3Jp 82370\ndW55YQ== 82371\nLmluc3RhbmNlcw== 82372\nIFVOSVZFUlNJVFk= 82373\nIHBsZWFzYW50bHk= 82374\nIGdsYW5kcw== 82375\nIFlFTExPVw== 82376\nIFRoaWNr 82377\nQW10 82378\nIHByeQ== 82379\nIGx1aw== 82380\nKHByb2JsZW0= 82381\nIHByb2plY3Rpbmc= 82382\nW25vdw== 82383\nIGVzdG95 82384\nKCgpPT4= 82385\nIHdheXBvaW50cw== 82386\nIEJsaWNr 82387\nLlJlcXVpcmU= 82388\nTGFrZQ== 82389\nIElHTk9SRQ== 82390\nIFFIQm94TGF5b3V0 82391\nX3Jlc3BvbnNlcw== 82392\nLndy 82393\nJmFjdGlvbg== 82394\nLmNoYXJhY3RlcnM= 82395\nSVc= 82396\ncGFnZU51bQ== 82397\nIGRpc3RyYWN0aW5n 82398\nXS0n 82399\ncGVlcw== 82400\nb3VuY3k= 82401\nIHNlZ3U= 82402\nLmdldFNlbGVjdGlvbk1vZGVs 82403\nSW5saW5pbmc= 82404\nJ2FmZg== 82405\nIFByZXNlcnZl 82406\nIGFjcXVhaW50YW5jZQ== 82407\nIGFudXM= 82408\naW5zdGl0dXRpb24= 82409\nIC8vKg== 82410\nIFNpY2s= 82411\nIEtvZGk= 82412\nIEFWUg== 82413\nIGJldHI= 82414\nIEJlcm5zdGVpbg== 82415\nLGN2 82416\nY2Ni 82417\nQ0FG 82418\nCXNpZ25hbA== 82419\n6KiI 82420\nUmVzdWx0c0NvbnRyb2xsZXI= 82421\nIHNhbG9wZXM= 82422\nIHBoZW5vdHlwZQ== 82423\ndWJhaA== 82424\nX2RhdGFzZXRz 82425\nIGdyYWNpb3Vz 82426\nIENsaXBib2FyZA== 82427\nIGdlbmRlcnM= 82428\nZG93bmxvYWRz 82429\nRXhwZXJpbWVudGFs 82430\nIGJla2FubnQ= 82431\nIG5pdmU= 82432\nLkVk 82433\nZGlzbWlzcw== 82434\nXFR3aWc= 82435\nLkF2 82436\nL3Rhc2tz 82437\nLnBpY2tsZQ== 82438\nKkI= 82439\nY2VzdG9y 82440\nY2FwaXRhbGl6ZQ== 82441\nLkdldFNlcnZpY2U= 82442\nS2V5SWQ= 82443\nLnBpdGNo 82444\nIENvbnRyb2xsZWQ= 82445\nLnNhdmVk 82446\nIHphag== 82447\nIENhdGh5 82448\nKENhbmNlbGxhdGlvblRva2Vu 82449\nLWFuaW1hdGU= 82450\nXFxc 82451\nIEphc21pbmU= 82452\nLkxJTkU= 82453\nIGJvdGhlcnM= 82454\nIGJ1ZmZhbG8= 82455\nIEZPUkVJR04= 82456\nIHRhY2tsZWQ= 82457\nX0hFQVA= 82458\nIHNlcnZpYw== 82459\nPj4s 82460\nIEFjdG9ycw== 82461\nLlR4 82462\nZWJ4 82463\nX3Zpc2l0b3I= 82464\nX21hcnNoYWxlZA== 82465\nLG1hcA== 82466\nIGhlYXRlcnM= 82467\nIHVMb2NhbA== 82468\nIEthcG9vcg== 82469\nIG1pbnV0 82470\nLnJlYWRBcw== 82471\nIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 82472\nX1ZPTFQ= 82473\nLmJ6 82474\nIGNvcnJlY3Rpbmc= 82475\nU0VQ 82476\nYnJpbmc= 82477\nSHU= 82478\nIEd1cw== 82479\nQUFE 82480\naWVyYW4= 82481\nZnJhcmVk 82482\nX3JvbQ== 82483\nIHNjYXJjaXR5 82484\nIGFwb2xvZ2lzZQ== 82485\nIHNvbGlkcw== 82486\nIEZvcm1hdHRlcg== 82487\nICclJA== 82488\nLXZpcw== 82489\nIiwiIiw= 82490\nVU5ERVI= 82491\nISEhIQoK 82492\nIEVsZXZlbg== 82493\nKSld 82494\nIHNhdGlyZQ== 82495\nXHVC 82496\nIHNldmVudGVlbg== 82497\nTEFOR1VBR0U= 82498\nIGFkdmVyc2FyeQ== 82499\nIHN0cmZ0aW1l 82500\nIG5leHVz 82501\ndWJpdHM= 82502\nICclIg== 82503\nIFNLSVA= 82504\nS0hS 82505\nLmJhdA== 82506\nIEplYW5z 82507\nLj8= 82508\nIGltcG9zdA== 82509\nLnF0eQ== 82510\nQ29tcHJlc3Npb24= 82511\nIHByaW5jaXBhbGVz 82512\nb25pbw== 82513\nIGJhcmNlbG9uYQ== 82514\nIENoaWxp 82515\nX21vc3Q= 82516\nLnVm 82517\nIGNvbnRlbnRWYWx1ZXM= 82518\nIEZpc3Q= 82519\ndWdhZG9y 82520\nVGV4dFdyaXRlcg== 82521\nQkFDS0dST1VORA== 82522\nIGxpdnJv 82523\nIERlc2lyZQ== 82524\nbWVhc3VyZW1lbnQ= 82525\nUHJvYmU= 82526\nIHB1ZGRpbmc= 82527\nLnNob3dFcnJvcg== 82528\nIHVudGVyc3TDvHQ= 82529\n44CB44CB 82530\nIMSHZQ== 82531\nIHB1bml0aXZl 82532\n5q2i 82533\nTGlzdEdyb3Vw 82534\nLkFyZWE= 82535\nIPCfmIkKCg== 82536\nb29yZA== 82537\nIHNjcmFwaW5n 82538\nKHRpY2tldA== 82539\nIFdvY2hl 82540\nIGV4cGVjdGVkUmVzdWx0 82541\nIEtvc3Rlbmxvcw== 82542\nY29uZmlndXJlZA== 82543\nX3N0cmVycm9y 82544\nLmFkZEhhbmRsZXI= 82545\nbW91c2VsZWF2ZQ== 82546\nIEZlbGlwZQ== 82547\nIENoaW0= 82548\nX0NTUg== 82549\nUENB 82550\naWZpY2HDp8Ojbw== 82551\nKysKCg== 82552\neWFz 82553\nIOaWueazlQ== 82554\nIElETQ== 82555\nIGFuaW1hdGVXaXRoRHVyYXRpb24= 82556\nIHNhbWVu 82557\nLnN1YnRpdGxl 82558\nX0tleURvd24= 82559\nIFRyZXk= 82560\nIHRlbXBvcmFkYQ== 82561\nIHNwZA== 82562\nIFJj 82563\nIE1hc3NpdmU= 82564\nIGJvd3M= 82565\nSG9zcGl0YWw= 82566\nIGdyb290 82567\nIHBhdmluZw== 82568\nIGNob3Jlcw== 82569\nIEFsbHk= 82570\nIGNlcnRpZmljYXRpb25z 82571\nIHhib3g= 82572\nc2VsZWN0QWxs 82573\nR2FtZU92ZXI= 82574\nIGNvcm5lcnN0b25l 82575\nUmVjb3ZlcmVk 82576\nIGRlZW0= 82577\nVWx0cmE= 82578\nIGdldExhc3Q= 82579\nIGFsbWE= 82580\nLnRleHRGaWVsZA== 82581\nIHdhaXZlZA== 82582\nPih7Cg== 82583\nIEVzdHI= 82584\naXNhYmxl 82585\nIHByb3Rvbg== 82586\nX2ZhY2Vib29r 82587\nX1RSQUlO 82588\nIGNvb3BlcmF0aW5n 82589\ndW5naQ== 82590\nQXJpem9uYQ== 82591\nI2VjaG8= 82592\nLWV4cHJlc3Npb24= 82593\nLm1pbnV0ZXM= 82594\nIHByZWZpeGVk 82595\nIGZpc2hlcmllcw== 82596\nLmNvcnJlY3Q= 82597\nIG7Dpg== 82598\nKFNwcml0ZQ== 82599\nTW9kcw== 82600\nIFZpZGU= 82601\nIGdldEJ5SWQ= 82602\nIEtleW5lcw== 82603\nIEVneXB0aWFucw== 82604\nX0NPRA== 82605\nQmllbg== 82606\ncmVvcGVu 82607\naWdoZXQ= 82608\nUkVERU5USUFM 82609\nIHVud2luZA== 82610\nJA0K 82611\nIHJhY2tldA== 82612\nIGZsb2F0VmFsdWU= 82613\nIFNwZWNpYWx0eQ== 82614\nb2NhdGU= 82615\nbW91bnRlZA== 82616\nQXR0ZW1wdHM= 82617\nT2ZmaWNlcnM= 82618\nSGFzaFRhYmxl 82619\nIGTDqXZlbG9wcGVtZW50 82620\nIGRhcA== 82621\nIG10eA== 82622\nTmFycmF0ZWQ= 82623\na0I= 82624\nX1NUQQ== 82625\nLUNsYXNz 82626\nIGR1bA== 82627\nIExlYWRz 82628\nIHRyw6pz 82629\nZnJpZW5kbHk= 82630\nIEZpbHRlcmluZw== 82631\nLXByb3ZpZGVy 82632\nINGD0YHQvw== 82633\nIEtvbGthdGE= 82634\nbWFza2Vk 82635\nSURhdGE= 82636\nIFt8 82637\nwqQ= 82638\nIFJlZXNl 82639\nIEhvbm9sdWx1 82640\nVG9PYmplY3Q= 82641\nIHRocmlmdA== 82642\nYXNzaQ== 82643\nIGNvbmdyYXR1bGF0aW9ucw== 82644\nU0tJ 82645\nZW50YXJpb3M= 82646\nIEZST05U 82647\ndWZpZw== 82648\naG9u 82649\nCWdldGxpbmU= 82650\nIGhlYXJ0eQ== 82651\nY2FsaW5n 82652\nIMOpY29ub20= 82653\nICoqKi8K 82654\nX0hFUkU= 82655\nYCg= 82656\nTWljaGlnYW4= 82657\nQmVhbnM= 82658\nLXJvdXRl 82659\nIHByaW5j 82660\nIEd1aWRhbmNl 82661\nCWVtaXQ= 82662\nLk9Q 82663\ndGhpYw== 82664\nZWxvcGU= 82665\nIElSZXF1ZXN0 82666\nIGhhbmRsZUNsb3Nl 82667\nZGF0YUFycmF5 82668\nLkV4ZWN1dGVTY2FsYXI= 82669\nRVBISVI= 82670\nIENvbnZlcnNlbHk= 82671\nKEZvbnQ= 82672\nIG1ldHJl 82673\nIFNwaWVsZXI= 82674\nRWxsaXBzZQ== 82675\nIFBWT0lE 82676\nIERhdGFDb250ZXh0 82677\nY29uc3RydWN0ZWQ= 82678\nQU5ESU5H 82679\nLS0tLS0tLS0tLS0qLwo= 82680\nQm9uam91cg== 82681\nX1BIUA== 82682\ncHJvZ3Jlc3NiYXI= 82683\nTm90U3VwcG9ydGVkRXhjZXB0aW9u 82684\nIHZlcmRhZGU= 82685\nL2NoYW5nZQ== 82686\nb3Jzaw== 82687\nIGFyb21hdGlj 82688\ncmVzcG9ucw== 82689\ncmVhbGxvYw== 82690\nYXRpc2No 82691\nLGV2 82692\nIFNpb3V4 82693\ndGVh 82694\nIFBvZQ== 82695\n5LmI 82696\nX2Ntb3M= 82697\nIGFsYg== 82698\nKGxy 82699\nIEFwcGFyZWw= 82700\nIGRlbGxv 82701\nINGC0L7Rhw== 82702\nIHN0cmVhbWxpbmU= 82703\nd2NoYXI= 82704\nQWRvYmU= 82705\nLG1vZHVsZQ== 82706\nIHVuaW5zdXJlZA== 82707\nfSIpDQo= 82708\nKCIvLypbQA== 82709\nLXBoYXNl 82710\nIGZldQ== 82711\nX3RB 82712\nem9law== 82713\nIGZvbGxpYw== 82714\nIHR1Zw== 82715\nIGJlZmluZA== 82716\nIHRhbGxlc3Q= 82717\nKG10 82718\naWVkeQ== 82719\nX0xlbmd0aA== 82720\nIHN0YXVuY2g= 82721\nIHJlbW92ZU9iamVjdA== 82722\nIGZsYWtlcw== 82723\nZ3Jlc3Fs 82724\nIGlua2w= 82725\nIFNDU0k= 82726\nIEtlZXBlcg== 82727\nO2w= 82728\nIEhpbmR1cw== 82729\nX1BFRA== 82730\nX0NPTkQ= 82731\nIExhdW5kcnk= 82732\nKytdPQ== 82733\nX0FVWA== 82734\nIGJ5xYI= 82735\nIGF1bWVudG8= 82736\nbWFyZ2luTGVmdA== 82737\nZXF1YWxpdHk= 82738\nIEx1eg== 82739\nIEVjaw== 82740\nX21hcw== 82741\nX2xlbnM= 82742\nIHN0ZXJpbGU= 82743\nY2xpZW50ZXM= 82744\nJ30pCgo= 82745\nIGdvb2R3aWxs 82746\nIEVsbGlzb24= 82747\nU3BhY2VJdGVt 82748\nIHNob3dNZXNzYWdl 82749\n66Gc6re4 82750\nIGNvbnRyYXRv 82751\nUG9zdGluZw== 82752\nLmludGVycG9sYXRl 82753\nKGZpbGw= 82754\nIGJ1bGxwZW4= 82755\nLmdlbmVy 82756\nIGh1ZXM= 82757\nIG1lbW9yYW5kdW0= 82758\ndG9Qcm9taXNl 82759\nIEJ5eg== 82760\nKHB4 82761\nKFByb2dyYW0= 82762\nUkVTU0lPTg== 82763\nYmZk 82764\nIHBsYW50YQ== 82765\nLm1vdXNlUG9zaXRpb24= 82766\nIFNwYW0= 82767\n6LSn 82768\ndGVsZWdyYW0= 82769\nYWd5 82770\nIGdlZnVuZGVu 82771\nLkRvbQ== 82772\nIGxpbmVtYW4= 82773\nLmJ0bkRlbGV0ZQ== 82774\nIHNlbGVjdGl2ZWx5 82775\n65Og 82776\nSUZT 82777\nIEdldEhhc2hDb2Rl 82778\nIHJldGly 82779\nIHJlcXVpc2l0ZQ== 82780\nQlRUYWc= 82781\ncGxpYg== 82782\nIGZpcmVmb3g= 82783\nLnRyYWRl 82784\nICMk 82785\nLmNvbXByZXNz 82786\nIGxhZGVu 82787\nIERpcmVjdG9yeUluZm8= 82788\nIE1vZGVz 82789\nIGtvbmU= 82790\nIGRpdnVs 82791\nCWhz 82792\nY3JvZnQ= 82793\nIFdIWQ== 82794\neENF 82795\nL0dyaWQ= 82796\nX0FVRA== 82797\nIFNjcmU= 82798\nIGVycm9yVGhyb3du 82799\nU2FkbHk= 82800\nYXRpdGlz 82801\nIG5lZ2xpZ2libGU= 82802\nLlJlZ2lzdGVyVHlwZQ== 82803\nIE1vaXN0 82804\n5rWL6K+V 82805\nIEJNQw== 82806\nbGVhZmxldA== 82807\neW5l 82808\ncm9rZW4= 82809\nIHZpbmM= 82810\ndHR5 82811\nIGJldXJldHRl 82812\nIEFscGluZQ== 82813\nIE1jTQ== 82814\nU3BvaWxlcg== 82815\nZGlzdHJpYnV0aW9u 82816\nLXJheXM= 82817\nIOuwlA== 82818\nX3BhcmVudHM= 82819\nIGNyYXRlcw== 82820\nIGNvbW11dGVycw== 82821\nIEFyZ2VudGluZQ== 82822\n77u/LyoK 82823\nL2ZyYW1ld29yaw== 82824\nIGNoYW5uZWxJZA== 82825\nZ3JlZW5z 82826\nLnNldFN0eWxlU2hlZXQ= 82827\nIGluYWNjZXNzaWJsZQ== 82828\naXRhdGVz 82829\nIHdhcm1lZA== 82830\nRmFicmlj 82831\nZ2V0YXR0cg== 82832\nZGlzcGxheVRleHQ= 82833\nX01PTklUT1I= 82834\nIHNpZGV3YWxrcw== 82835\nSW50aWFsaXplZA== 82836\nIGtvbWVu 82837\nIGRpc2NyaW1pbmF0b3I= 82838\nIE5hdmlnYXRl 82839\nKERpcmVjdGlvbg== 82840\nIFNwaXQ= 82841\nX2FkZGl0aW9uYWw= 82842\nIGh0b24= 82843\nIGVzcGVyYQ== 82844\nIGRlbHZl 82845\nIGNvbXBhcnRpcg== 82846\nIHByZWVtcHQ= 82847\ncHJvY2Vzc29ycw== 82848\nLWdpdA== 82849\nYmVlbg== 82850\nLlNVQg== 82851\nIFJlZXZlcw== 82852\nL2dlbg== 82853\nO3RvcA== 82854\nCU1QSQ== 82855\nWlc= 82856\nR0VTVA== 82857\nYWJpbGly 82858\nIHByb2dyZXNzaXZlcw== 82859\naGFmdA== 82860\nQXVm 82861\nIEFjdGlvblR5cGU= 82862\nbGVv 82863\nIHV0YW4= 82864\nSW5pY2lhbA== 82865\nPlVzZXI= 82866\nIH0pOwoKCgo= 82867\nINio2Yc= 82868\nIENoYWlucw== 82869\naXNzcGFjZQ== 82870\nL3JlbQ== 82871\nU1FMaXRl 82872\nIGNlYXNlZmlyZQ== 82873\nJGFy 82874\nVFJT 82875\nOi8vew== 82876\nIFNwaXJpdHM= 82877\n2Lo= 82878\nKFNpemU= 82879\nIG51Zw== 82880\nIE9sc2Vu 82881\nIGNobG9yaWRl 82882\nIERpc3BsYXlOYW1l 82883\nIFBlcnQ= 82884\nIGdldE1heA== 82885\nIEVkaXRvcnM= 82886\nIFBhaXM= 82887\nYXNtdXM= 82888\nVmFj 82889\nIFRhYmxlTmFtZQ== 82890\nIG51YW5jZWQ= 82891\nRm9yTWVtYmVy 82892\nIHNsZWVweQ== 82893\nYWR2aXNvcg== 82894\nIHN0YWxraW5n 82895\nLm1lZGlhbg== 82896\nX0F0dA== 82897\nIGdldE5vZGU= 82898\nIEZhbmN5 82899\n5pWw6YeP 82900\nLkF0dHJpYnV0ZVNldA== 82901\nKGluc3RydWN0aW9u 82902\neEJE 82903\nIGtvcA== 82904\nQWZmZWN0ZWQ= 82905\nL25hdmJhcg== 82906\nIGFpbG1lbnRz 82907\nIFJhbWFkYW4= 82908\nIEFjY2VudA== 82909\nIFBhcmFtb3VudA== 82910\nIEdBTQ== 82911\n5L2N572u 82912\nPSov 82913\nLklOUFVU 82914\nPFByb2plY3Q= 82915\nTGVhc3Q= 82916\nIEdlbm9tZQ== 82917\nQWNjZXNzb3JUeXBl 82918\nbGVmdHJpZ2h0YXJyb3c= 82919\ndmVudGluZw== 82920\nL3BheW1lbnQ= 82921\nX1B0cg== 82922\nIHRhbWU= 82923\nIE1FTUJFUg== 82924\nIEJpdGNvaW5z 82925\nLmVwYW0= 82926\nLlBsZWFzZQ== 82927\nIHNjaHdhcg== 82928\nQ3BwTWV0aG9kSW50aWFsaXplZA== 82929\nIHVuaWNvcm4= 82930\nIGJlZGV1dA== 82931\nX0hT 82932\nIGF1dG9nZW5lcmF0ZWQ= 82933\nIExpbGx5 82934\nIEFzc2Vzcw== 82935\nIEhlaWRp 82936\nLnNvdXJjZXM= 82937\nLnRlbGw= 82938\nYXJnaW5z 82939\nKCInIiw= 82940\n0LvQvtC2 82941\nIEVyb3RpYw== 82942\nIGp1c3Rv 82943\nIGVzYWM= 82944\nY29tYQ== 82945\nIENvbG9ueQ== 82946\nIHBjdA== 82947\nCWVu 82948\nIGVtcGV6 82949\nIERlbGV0aW5n 82950\nTkVM 82951\nIGVuYW0= 82952\nUHJlc3NFdmVudA== 82953\nIFJlc29sdmVy 82954\nIFJURQ== 82955\nRng= 82956\nIEluY29ycmVjdA== 82957\nIHlj 82958\nX3JlYWRpbmc= 82959\nO2Jhc2U= 82960\nIGhhc2h0YWdz 82961\nIE1hcmluZXJz 82962\nLlNldEZsb2F0 82963\nIHJlYXNzdXJpbmc= 82964\naXJzY2g= 82965\nKHVzZXJpZA== 82966\nID09PT0= 82967\nXSkpKTsK 82968\na2Y= 82969\nIHRpbGVk 82970\nZWd1YXJk 82971\nQ2xpZW50ZXM= 82972\n5pmC6ZaT 82973\nZHNs 82974\nUmlnaHRz 82975\nIFBzYWxt 82976\nZHVyaW5n 82977\nQ2xlYXJDb2xvcg== 82978\ndXN0YQ== 82979\nPENvbW1lbnQ= 82980\nIG5venpsZQ== 82981\nIFBMQUNF 82982\nL2hpc3Rvcnk= 82983\naWh1 82984\naVZhcg== 82985\nIGdlcm0= 82986\nIHRyaW1taW5n 82987\nIEh1bnRlcnM= 82988\nIFJTVlA= 82989\nSW50ZXJlc3RpbmdseQ== 82990\namlhbg== 82991\nKSl7Cgo= 82992\nLkV4cGVjdA== 82993\nIFRvaWxldA== 82994\nIHdhbGxwYXBlcnM= 82995\nLldlYlNlcnZsZXQ= 82996\nYXJwYQ== 82997\nL21haW53aW5kb3c= 82998\naHE= 82999\nIHV5 83000\nIGluZGlnbg== 83001\nQ2hlY2tlZENoYW5nZUxpc3RlbmVy 83002\nIGNhbGxlcnM= 83003\nIE1vdXNlRXZlbnRBcmdz 83004\nIEpTY3JvbGxQYW5l 83005\nIHfFgmE= 83006\ncmVwb3NpdG9yaWVz 83007\nIMWbdw== 83008\nIHJlZmVyZW5jaWE= 83009\nIGlvdGE= 83010\nIGNhcmdhcg== 83011\nX29ic2VydmVy 83012\nSENJ 83013\nc2lsdmVy 83014\nIGRldmFzdGF0aW9u 83015\nLXNlbWlib2xk 83016\nIEV4cGxhaW4= 83017\nIEJsb2NrbHk= 83018\nLlhy 83019\nZXN0dXJlUmVjb2duaXplcg== 83020\nQ2FuY2VsQnV0dG9u 83021\nIExvY2tl 83022\nVHJpYWw= 83023\nX1BMQUNF 83024\nanVhbGFu 83025\nIFJ1Ymlu 83026\nU3RyaXBl 83027\nIG1ldGFEYXRh 83028\nY29uZmlkZW5jZQ== 83029\nX2JhdHRlcnk= 83030\nIGlzbA== 83031\nIGJvYQ== 83032\nLnRhcmdldHM= 83033\nbGlqa2U= 83034\nIGFkb2xlc2NlbnRl 83035\nYmV3 83036\nLEZhbHNl 83037\nIHlPZmZzZXQ= 83038\nUHJldmlvdXNseQ== 83039\nPXBhdGg= 83040\nX0FB 83041\niOadgw== 83042\nIGJha2VrYQ== 83043\nIGxlZQ== 83044\nIEJsb2NraW5n 83045\nL3RpdGxl 83046\nIOW8gA== 83047\nIFN0ZXZlbnNvbg== 83048\nKW9iamVjdA== 83049\naXN0cm9z 83050\nLmdldFNlcnZlcg== 83051\nIHBsYW50YXRpb24= 83052\nX0JveA== 83053\nICc7Jw== 83054\ndGljYQ== 83055\nKSldOwo= 83056\nIGRpc3Bhcml0aWVz 83057\nxrDhu5s= 83058\naWNyb2JpYWw= 83059\nIHNwYXM= 83060\nL0RE 83061\nKHBvaW50ZXI= 83062\nIG1pZHBvaW50 83063\nLmdldENsYXNzTmFtZQ== 83064\nIFRvdGFsbHk= 83065\nIGNvbmdlbg== 83066\nIHTDqnRl 83067\nLnhsaW0= 83068\nQ09NUExFVEU= 83069\nKGZp 83070\nb3dhcmQ= 83071\n0LzRjw== 83072\nLmFzYw== 83073\nIHBhZ2luYXRl 83074\nIGx1cmtpbmc= 83075\nLnNpZ251cA== 83076\nU1RZTEU= 83077\nIHdvcnNo 83078\naHY= 83079\nIGRlZmVuc2l2ZWx5 83080\nIEx1dGhlcmFu 83081\nLmZ1bg== 83082\nINC40L3RhNC+0YDQvA== 83083\ncHNj 83084\nIGFkbW9u 83085\nIEVzdGltYXRlZA== 83086\nIE15U3FsQ29ubmVjdGlvbg== 83087\nLnN0YXR1c1N0cmlw 83088\nIGFudGlnZW4= 83089\nIGhlcnJhbWllbnQ= 83090\nIENvbnN1bWVycw== 83091\nIFlU 83092\nLm1hc2tzVG9Cb3VuZHM= 83093\nLnh0aWNrcw== 83094\nOnJlcXVlc3Q= 83095\nIE1vbw== 83096\nLWF1 83097\nIHRvUmV0dXJu 83098\nIFNhcHBoaXJl 83099\nY294 83100\nZXhhbXBsZUlucHV0RW1haWw= 83101\nIGNvcmF6 83102\nKHBpZWNl 83103\nIHJlY29uc3RydWN0ZWQ= 83104\nX3NpZ251cA== 83105\nJ10pPw== 83106\nQmlsbGluZw== 83107\nIENyb3dsZXk= 83108\nc3Rvcm1z 83109\nZm9yY2Vy 83110\nIHN1cHJlbWFjaXN0 83111\nX3doZWVs 83112\nCXBj 83113\nLmdldERvY3VtZW50 83114\nLnVuc3F1ZWV6ZQ== 83115\nLmdyYWRl 83116\nZWxsdW5n 83117\nLnNob3BwaW5n 83118\nY3VzdG9tZXJJZA== 83119\nIG1lZGlkYXM= 83120\nIE1vbWVudHM= 83121\nZW51b3Vz 83122\nSUZJQ0FURQ== 83123\nIyMjIyMjIwo= 83124\n5paH56ug 83125\n4buNYw== 83126\nb3Jtc2c= 83127\nYWxvbQ== 83128\nLXRyYWRl 83129\nCWJ0 83130\nL3N0dWRlbnQ= 83131\nYnJpZw== 83132\nYW5uZXNz 83133\nKHJh 83134\nIHJpY2VyY2E= 83135\nU3BlYWtlcg== 83136\ncsOz 83137\nZ3Rlc3Q= 83138\nR2x5cGg= 83139\nw7xnZW4= 83140\nQEpzb24= 83141\nKHN1bW1hcnk= 83142\nS29t 83143\nYmV0aA== 83144\nL2VuZ2luZQ== 83145\nQ2xpbWF0ZQ== 83146\nc3VibWl0QnV0dG9u 83147\nZXZl 83148\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg== 83149\ncGVkaWE= 83150\nIHVzZXJuYW1lcw== 83151\nIEpN 83152\nIG1zZQ== 83153\naW5zcGVjdA== 83154\nIFNuYXBkcmFnb24= 83155\nIGRlZmVuc2VtYW4= 83156\nIFVJVGFibGVWaWV3RGVsZWdhdGU= 83157\naW5kaG92ZW4= 83158\nIEJveWxl 83159\nIEFsdGE= 83160\nYXJkdQ== 83161\nIHdyZXN0bGVy 83162\nIFN0cmFpdA== 83163\nIGVncmVn 83164\nX2Jhc2VsaW5l 83165\nRW52aXJvbm1lbnRhbA== 83166\nIGludml0 83167\nIEJUUw== 83168\nIElTSUw= 83169\nIGNvb3A= 83170\naG9yZXM= 83171\nI0A= 83172\nIGNvbXBlbA== 83173\nKHNraXA= 83174\n6Ziz 83175\nX0RFUFJFQ0FURUQ= 83176\naXBoZXJz 83177\nZG91YmxlVmFsdWU= 83178\nIEFSUg== 83179\nLlNjb3Jl 83180\nIGNocm9tb3NvbWVz 83181\nY2xhdXNl 83182\nIEx1aWdp 83183\nIHN1bnNjcmVlbg== 83184\nIGN5dG9r 83185\nLnRvSlNPTlN0cmluZw== 83186\nIHByb3ByZQ== 83187\ncG9vbnM= 83188\nbWl0dGVycw== 83189\nIGtpdHRlbnM= 83190\nIGNhdGhvbGlj 83191\nLmx0 83192\nwqw= 83193\nX3F1aWNr 83194\nIHZyYWk= 83195\nIElSZWFkT25seQ== 83196\nIEhpZ2dpbnM= 83197\nIHNob3ZlZA== 83198\nIGxpYWlzb24= 83199\nX293bg== 83200\nIG1vc3F1aXRvZXM= 83201\nX25n 83202\nLlNldEtleU5hbWU= 83203\nX1JlbmRlcmVy 83204\nX09zYw== 83205\nLnVucmVnaXN0ZXI= 83206\nTWVzc2FnZVR5cGU= 83207\nLWZvdW5kZWQ= 83208\nIHNvdXRoZWFzdGVybg== 83209\nIGhhc2h0YWJsZQ== 83210\nLmluZGVudA== 83211\nIGpveWZ1bA== 83212\nX3NleA== 83213\nc2Fk 83214\nLmRlYmlhbg== 83215\nX2dhcw== 83216\nIHBlcmlzaA== 83217\nIGhldGU= 83218\nX3NpbmdsZXRvbg== 83219\nKGdyYWQ= 83220\nIGt0w7NyYQ== 83221\nIGR3aW5k 83222\naXR0YWw= 83223\nU2VlaW5n 83224\nIFJvb2tpZQ== 83225\nCUxhYmVs 83226\nc2hhbg== 83227\nPDw8PDw8PDw= 83228\nIHLDqA== 83229\naWVzZWw= 83230\nYXJyZXJh 83231\nY2hyaXN0 83232\nIGN1cnZhdHVyZQ== 83233\nIGVwaGVt 83234\nRm9ybWF0dGluZw== 83235\nLmRpY3Rpb25hcnk= 83236\nLlNldHRlcg== 83237\nIEhpc3RvZ3JhbQ== 83238\nIFN0dXR0Z2FydA== 83239\nIHBhY2luZw== 83240\ndXRhdGlvbnM= 83241\nIE5TSw== 83242\nIFBhbWVsYQ== 83243\nIEJhaWw= 83244\nIHBvbGFyaXphdGlvbg== 83245\nIEfDtg== 83246\nIEVsYWluZQ== 83247\nIGtpY2tvZmY= 83248\nIGNoYXBlbA== 83249\nPXBvc3Q= 83250\nIG1pZHdheQ== 83251\nZXdpcw== 83252\nX01S 83253\naWVlZQ== 83254\nLXRlc3Rpbmc= 83255\nbWV6 83256\nPi0t 83257\nIGRvY3RyaW5lcw== 83258\nIG1pbGlldQ== 83259\nIFJBRElP 83260\ndGFrZW4= 83261\nUmVzcG9ucw== 83262\nIGhhbmRzZXQ= 83263\nIGNvbnRybw== 83264\nIEFwcGxpZXM= 83265\n6Zif 83266\nLkJpbmRpbmdTb3VyY2U= 83267\nINis 83268\nIGh1bWlsaQ== 83269\nIE1lbGFuaWE= 83270\nT3ZlcmxhcA== 83271\nKFBhcmNlbA== 83272\nIHdhcmVob3VzZXM= 83273\nLkdldEJ5SWQ= 83274\nIGZyYW5rZnVydA== 83275\nIFdpdHQ= 83276\nLnByb2o= 83277\nIFNhc2hh 83278\nIFJldmVy 83279\nIGFydGljdWxhdGVk 83280\nYW5jaGVz 83281\nIFNlbWluYXI= 83282\nIERhZ2dlcg== 83283\nIEFnaWxl 83284\nT1dM 83285\nIEJz 83286\nb2tseW4= 83287\nRXRh 83288\nIGFnb3N0bw== 83289\n7ZWY7Jes 83290\nIG9wdGFyZw== 83291\nCW9uQ2hhbmdl 83292\nIFJPQUQ= 83293\nR0JL 83294\nIGVudGZlcg== 83295\nLkF1dG9Db21wbGV0ZQ== 83296\nIGhlbGZlbg== 83297\nQ2hlYXA= 83298\nIGFwcHJlbnRpY2U= 83299\naW90aWNz 83300\n5oqA 83301\nT2ZZZWFy 83302\naW5kZXJlZA== 83303\nLk1TRw== 83304\nIE1hcsOtYQ== 83305\nKGlucGxhY2U= 83306\nIGZpbmRl 83307\nKERF 83308\nLlNlcmlhbGl6ZXI= 83309\nJHRpbWU= 83310\ndW5uYWJsZQ== 83311\nTWFpblRocmVhZA== 83312\nZGVwbG95bWVudA== 83313\nIG1wZnI= 83314\ncmljaFRleHRQYW5lbA== 83315\nKTsKCgoKCg== 83316\nIGRhbnljaA== 83317\nX0JFRk9SRQ== 83318\nX2FyeQ== 83319\nIEJhdW0= 83320\nIHR1cmJ1bGVudA== 83321\nIE11bHRpbWVkaWE= 83322\nIHBoeXNpY2lzdA== 83323\n5Zy6 83324\nQW5pbWF0ZQ== 83325\nPUY= 83326\nUGFnbw== 83327\nL3R3aXR0ZXI= 83328\nb3R0aWU= 83329\ndWN1cnNhbA== 83330\nX3BhZ2luYXRpb24= 83331\nLmFyY2hpdmU= 83332\nLWRvY3VtZW50 83333\naW5pbmU= 83334\nU2VsbGVy 83335\nYWRyZXNz 83336\n6ZO+5o6l 83337\n0LDRgtC10LPQvtGA 83338\nX2ZybQ== 83339\nbm9EQg== 83340\naWdhdGVk 83341\nIE9zYW1h 83342\ncGV0dG8= 83343\nPnk= 83344\nLVVu 83345\nIGNvcHBpYQ== 83346\nQWxtb3N0RXF1YWw= 83347\nLmxleA== 83348\nIGxldmVsZWQ= 83349\nIFNDSVA= 83350\nX0hPT0s= 83351\nSUxvZ2dlcg== 83352\nbmVhdQ== 83353\n77ye 83354\n24zZhg== 83355\naWtoYWls 83356\nIHVwbG9hZGVy 83357\nIENhcm9seW4= 83358\nLmFkZFZhbHVl 83359\ndGhpbmtpbmc= 83360\ncHJpbnRTdGF0cw== 83361\nIGNhbWJpb3M= 83362\ncG9p 83363\nIEJFRA== 83364\nIHhibWM= 83365\nLu+/vQ== 83366\nIHNhcmNhc3Q= 83367\nIE5FQw== 83368\nJGJvZHk= 83369\nQWxsV2luZG93cw== 83370\nIHlvdW5nc3Rlcg== 83371\nIHVuZWFzeQ== 83372\nKEFU 83373\nIG5vc3RhbGdpYw== 83374\nUFJJQ0U= 83375\nIFNlaXRlbg== 83376\nIG1ha2E= 83377\nIGxpbXA= 83378\nIGNvbnRyYXN0cw== 83379\nQ29mZmVl 83380\nCWdlbg== 83381\nIHBlcm1z 83382\nIE5lZWRsZXNz 83383\nb3V2ZQ== 83384\nYXJjaGluZw== 83385\nX3BlbmFsdHk= 83386\ncm93YWQ= 83387\nb25nYW4= 83388\nX2R1cg== 83389\nIGlmbmRlZg== 83390\naWF1eA== 83391\nIGNhcGFjaWRhZA== 83392\nIE5vcnRl 83393\nIC0qLQ0K 83394\naWZlcw== 83395\nIE1hbnNpb24= 83396\nI1JlZ2lvbg== 83397\nQ2FuY2VsbGF0aW9u 83398\nIG5lYXJpbmc= 83399\nIGxhbmd1 83400\nZXJlcXVpc2l0ZXM= 83401\nX2V4cGVyaW1lbnQ= 83402\nb25kaGVpbQ== 83403\nXSwm 83404\nIENvb2xpbmc= 83405\nIHNhZmFyaQ== 83406\nIHBpb25lZXJz 83407\nIGZhcm1ob3VzZQ== 83408\nIGRpc3RhbmNpYQ== 83409\nIGRlc2VydGVk 83410\nIE5hcnJvdw== 83411\nLnNn 83412\nIGVudHJhcg== 83413\nLnJh 83414\nIHJlZnVyYmlzaGVk 83415\nIGludGVyY29ubmVjdGVk 83416\nIHN1cnZpdmVz 83417\nIHF1YWxpZmllcnM= 83418\nX0NIQVJT 83419\nLWFqYXg= 83420\nIFJvcnk= 83421\nIGtvbGVq 83422\nL0dM 83423\nX2xlZ2Fs 83424\nIFRZUEVT 83425\nIFZvaWNlcw== 83426\nIEZlcmQ= 83427\ndWplbXk= 83428\nIHNjb3JlYm9hcmQ= 83429\nIEJPVA== 83430\neERE 83431\nIEl2YW5rYQ== 83432\nIGhzdg== 83433\nbm9kaXNjYXJk 83434\nIFRIRVNF 83435\nbW9qb20= 83436\nIHRpY2tpbmc= 83437\ncGVx 83438\nIOa3u+WKoA== 83439\nIE5pY29s 83440\nCWFuZ2xl 83441\nX2FsbG9jYXRlZA== 83442\nIHN0cnV0 83443\neERC 83444\nRXZhbHVhdGU= 83445\nIFZBUklBTlQ= 83446\nIHJlZmVyZW5jZWRDb2x1bW5OYW1l 83447\nbG9o 83448\nIFJlcXVlc3RPcHRpb25z 83449\nIGNvY28= 83450\nIGJsZWFjaA== 83451\nX29yZ2FuaXphdGlvbg== 83452\nIENITw== 83453\nSFRUUFM= 83454\nX2JhcnJpZXI= 83455\nLnZpc2l0TWV0aG9kSW5zbg== 83456\nIHZpdGU= 83457\nIC0k 83458\nW2NlbGw= 83459\nIGNlc3NhdGlvbg== 83460\nCgoKCgoKCgoKCgo= 83461\nINGB0LDQuQ== 83462\nRXZhbHVhdGlvbg== 83463\nIENJTQ== 83464\ncXVhbGl0aWVz 83465\nWG1sQXR0cmlidXRl 83466\nIEVtb2pp 83467\nICIoJw== 83468\nIFRVUk4= 83469\neHNk 83470\nIEdJUw== 83471\nIGNyZWF0ZVNlbGVjdG9y 83472\ncmlwcGxl 83473\nIHVubmVjZXNzYXJpbHk= 83474\nIG5ld1Bvcw== 83475\nIHN5bWJvbGlzbQ== 83476\nb2J1dHRvbg== 83477\nIHNhbW8= 83478\nICgqKCg= 83479\nLnJld2FyZA== 83480\nS0VSTkVM 83481\nKGpTY3JvbGxQYW5l 83482\nIGJ5c3RhbmQ= 83483\nX2ljYWxs 83484\nIGR1bmdlb25z 83485\nIGNvbnN0ZWxsYXRpb24= 83486\nIGVtYnJhY2Vz 83487\nIEluZmFudA== 83488\nQXVzdGlu 83489\nLmFic3RyYWN0 83490\nIGNvbXBhZ24= 83491\nIENvbmRpdGlvbmluZw== 83492\nTWFpcw== 83493\nVmVyaWZpZXI= 83494\nIFB5cmFtaWQ= 83495\nIG1MaXN0ZW5lcg== 83496\nX2J1aWxkaW5n 83497\nLlJlZGlz 83498\nIFRvb3Ro 83499\nTE9HR0VS 83500\nLkFzeW5jVGFzaw== 83501\nX3ByaW5jaXBhbA== 83502\nZXhhbXBsZU1vZGFsTGFiZWw= 83503\nCUxvY2Fs 83504\nTWFya2Vycw== 83505\nIGRvbHBoaW5z 83506\nLlRleHRFZGl0 83507\nJ2Fs 83508\nIG92ZXJzdA== 83509\nLWRyaXZl 83510\nIGluc29tbmlh 83511\nIGFkYg== 83512\nX3F1ZXVlcw== 83513\nRWI= 83514\nIERhbW4= 83515\naXN0cmluZ3N0cmVhbQ== 83516\nCUR1ZWw= 83517\naWJibGU= 83518\nIGltcmVhZA== 83519\nLmZpbmlzaGVk 83520\nIG1pc3JlcHJlc2VudGVk 83521\nxYRzdA== 83522\naW9uYWxlcw== 83523\nIk5vdw== 83524\nLlNlbGVjdFNpbmdsZU5vZGU= 83525\nIHdlYWtlbmluZw== 83526\nX2luc3RydWN0aW9ucw== 83527\nLW9z 83528\nIHN0YXJ0UG9pbnQ= 83529\nIE1pbWU= 83530\nIEhlbGQ= 83531\nfHwo 83532\ndW1taW5ncw== 83533\nb2tpbm8= 83534\nIHJlZmw= 83535\ncmlkb3I= 83536\nSW50ZWdyYXRlZA== 83537\nRU9iamVjdA== 83538\ncGVhdHM= 83539\nQ2lyY3VsYXI= 83540\nIFNvZGl1bQ== 83541\nIHBvZHLDrWE= 83542\nbWVkaWNpbmU= 83543\nIHBhcmFub2lh 83544\nL2JhY2tncm91bmQ= 83545\nKGJvcmRlcg== 83546\nX3Nsb3c= 83547\nIHByZXNlbnRWaWV3Q29udHJvbGxlcg== 83548\nIGNvbnRpbmdlbmN5 83549\nIFBhc2FkZW5h 83550\nbG9vcHM= 83551\nIE9j 83552\nYXBwbGljYXRpb25z 83553\nIG1wZw== 83554\nIEFR 83555\nLldpbkNvbnRyb2xz 83556\nbGVkb24= 83557\nIFJlcQ== 83558\nIEFjcmVz 83559\naWJpcg== 83560\nIGdldFdpbmRvdw== 83561\nIFlhaA== 83562\nIG5lZWR5 83563\n4pa6 83564\nIFRPTQ== 83565\nKFsuLi4= 83566\nIGZx 83567\nIENhbWRlbg== 83568\nb3JkaW5hdGVk 83569\nCWNoaWxkcmVu 83570\ndmVnZXQ= 83571\nCWRpcmVjdGlvbg== 83572\nPEZpZWxk 83573\nX2NvcnJlY3Rpb24= 83574\nKEVORA== 83575\nSEVFVA== 83576\nRmFsc3k= 83577\nLmR5bGli 83578\nX1JFUE8= 83579\nIGJyaWxsaWFuY2U= 83580\nb2dyw6Fm 83581\nbG9k 83582\nIHBvd2RlcmVk 83583\nKEFydA== 83584\nIE1JTEw= 83585\n0LXQtNCw0Lo= 83586\nX3NpbXVsYXRpb24= 83587\nIHNtYXNoaW5n 83588\nIHVybFN0cmluZw== 83589\nIGRyZWFkZWQ= 83590\ncmllZw== 83591\nL25z 83592\nIEludGVycHJldGVy 83593\nOm1heA== 83594\nZGVyaXY= 83595\nIFBldHQ= 83596\nIG1vZMOobGU= 83597\nIGFtcGxpZmllZA== 83598\nIFNpZ25hbHM= 83599\nLm5hdkN0cmw= 83600\n5ZY= 83601\nIHNlcGFyYXRvcnM= 83602\nIFNISUZU 83603\nIGZpZGVsaXR5 83604\nLnNvbg== 83605\nKGNh 83606\nIFBMVUdJTg== 83607\nIGxpZ2h0ZW4= 83608\nUEJT 83609\nZmxvYXRpbmc= 83610\nKGxvYWRlcg== 83611\nIHBlZWxlZA== 83612\naGlj 83613\nIHRhcGVk 83614\nIG5vdmVtYnJl 83615\nIHN0dWZmaW5n 83616\nIEZpcmVhcm1z 83617\nLkRyYXdhYmxl 83618\nIGNvcnRpY2Fs 83619\nIEdVSUNvbnRlbnQ= 83620\nIFZlcm9uaWNh 83621\nX3JzYQ== 83622\nIGNvbW1lbW9yYXRl 83623\nLlNZU1RFTQ== 83624\nIGRhbXM= 83625\nLmlzVHJ1ZQ== 83626\nIFByZWduYW5jeQ== 83627\n7Iug 83628\nIGF1ZGl0b3J5 83629\nKENlbGw= 83630\nIGludmFkaW5n 83631\nIGZvckVhY2g= 83632\nCURyYXc= 83633\nTWFyY3Vz 83634\nUHJvY2Vzc2Vk 83635\nIHNwcmF5aW5n 83636\nIE91dGxpbmVJbnB1dEJvcmRlcg== 83637\nZXNzZXJhY3Q= 83638\nIOacgA== 83639\nUGc= 83640\nLXF1YXJ0ZXJz 83641\nIHNrbA== 83642\nL3Byb3ZpZGVycw== 83643\ndG9IYXZlQmVlbkNhbGxlZFRpbWVz 83644\nIGNvc21vcw== 83645\nIGZpbmFsaXN0cw== 83646\nIHNsZWVwZXI= 83647\nIE1hdGVyaWFsQXBw 83648\nZGFj 83649\nIGJ1c2luZXNzbWVu 83650\nxJ9lcg== 83651\nQmlhcw== 83652\nZGF0YWw= 83653\nVXBFZGl0 83654\nIFRpcg== 83655\nSVNUSUM= 83656\nIEhlcmE= 83657\nX2ludGVyc2VjdGlvbg== 83658\nIExhbWE= 83659\nCWFwcGVuZA== 83660\nIHBvbGx1dGFudHM= 83661\nIFNpa2g= 83662\nIGNvbGxhYm9yYXRpb25z 83663\nbnV0cml0aW9u 83664\nIGhhbW0= 83665\nIERpbGxvbg== 83666\nX0RPVA== 83667\nIGZpcnN0aGFuZA== 83668\nU09BUA== 83669\nPXo= 83670\nLnByaXY= 83671\nTWlzbWF0Y2g= 83672\nLnNlbmRSZWRpcmVjdA== 83673\nLmxpbmtMYWJlbA== 83674\nIHdyZWFr 83675\nTWFydmVs 83676\nL3Ns 83677\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 83678\nIG1vdmFibGU= 83679\n0YPQuQ== 83680\nIERyaW5raW5n 83681\nYWNlYQ== 83682\nIHRyb3ZhcmU= 83683\nLkNTUw== 83684\nIGtlcm4= 83685\ndmZz 83686\n5pWw5a2X 83687\nIHN0ZXNzbw== 83688\nIEZPUkNF 83689\nIGxpZWY= 83690\nIGFjaGlldmVz 83691\nIEVsaWphaA== 83692\nR2V0UHJvcGVydHk= 83693\nLypA 83694\nIEh1bWFuaXR5 83695\nKFRoZQ== 83696\nd2FybQ== 83697\nPiIp 83698\nIGNvbXB1dGF0aW9ucw== 83699\nLnRpbnRDb2xvcg== 83700\nIHVzbGVlcA== 83701\nIEdQTHY= 83702\nbmRhdGE= 83703\nL2NsaQ== 83704\nTW9o 83705\nPiINCg== 83706\nLmJyaWRnZQ== 83707\nIGVuY3ljbG9wZWRpYQ== 83708\nIEJJTg== 83709\nIFN1cHBvc2U= 83710\nINio2Kc= 83711\ncmlldmVk 83712\ncGFnZW4= 83713\naXJzZQ== 83714\nUGFjaWZpYw== 83715\nLmZ1bGxOYW1l 83716\nIGFsbGVnZQ== 83717\naWxsdXN0cg== 83718\nIOqysA== 83719\nIGRldGVycmVudA== 83720\nIE5hcGxlcw== 83721\naW5jbHVkZWQ= 83722\nUmF0ZXM= 83723\nIGhhc05leHQ= 83724\nIEplcmVtaWFo 83725\nIEZlcm5hbmRleg== 83726\nIGdldE9yZGVy 83727\nLlN1YnNjcmliZQ== 83728\nUG9zcw== 83729\nOikK 83730\nIFdvcmtzaGVldA== 83731\nYmxlbmQ= 83732\nIHdpdHR5 83733\nIGNvdW50ZXJmZWl0 83734\nX2R5 83735\nL1J1bnRpbWU= 83736\nIHNvZG9t 83737\nL2Rv 83738\nIDx8 83739\nIFJlY3J1 83740\n5aOw5piO 83741\nIG1vZGVsb3M= 83742\nIGJpdHJhdGU= 83743\nLmNybQ== 83744\nbHVz 83745\nIGZpbGVUeXBl 83746\n5bCR 83747\nIG1hcnJvdw== 83748\nIFZlbmV6dWVsYW4= 83749\nIHNjYXY= 83750\nIFNUT0NL 83751\nIEltcG9zc2libGU= 83752\nbmF2aWdhdGlvbkJhcg== 83753\nIHNpZ2h0aW5ncw== 83754\nIGNlbGxGb3JSb3dBdA== 83755\nIHJlY3Rz 83756\nIGFpcmw= 83757\nIExlc3Rlcg== 83758\nIG5vZHM= 83759\nQHJlZ2lzdGVy 83760\neENE 83761\ncG5hbWU= 83762\nIHBvdHRlcnk= 83763\nIHp3YXI= 83764\nIFN1bmRlcmxhbmQ= 83765\n4oCmYnV0 83766\nL2NvbnRyb2w= 83767\nIGNhbGN1bHVz 83768\nKGlzb2xhdGU= 83769\ncGxhY2Vob2xkZXJz 83770\nKilf 83771\nIH19DQo= 83772\nIEtvaGFuYQ== 83773\nY29kaWxl 83774\nb3Rlcmlj 83775\nIHByZXBhaWQ= 83776\nIGdyYW5kbWE= 83777\nIHN1bHBo 83778\nIEdhaW5lcw== 83779\nXE1vZHVsZQ== 83780\nIGNvdW5zZWxsaW5n 83781\nLWdlbmVyaWM= 83782\nIFR1ZXM= 83783\nLkdyYWRpZW50 83784\nIFRodXJz 83785\nIGVudHJh 83786\nIGFkdmFuY2VtZW50cw== 83787\nU1dFUA== 83788\nX01BUktFUg== 83789\nIGtsdWI= 83790\nIG3DqWc= 83791\nZmZmZmZmZg== 83792\nIl0pewo= 83793\nL2NvbXBpbGVy 83794\nYWRpZW5z 83795\nU3RyaW5nVmFsdWU= 83796\nIFNjdWxwdA== 83797\ncGFuZWxz 83798\n5b2i 83799\n5Lqn5ZOB 83800\nYXLDrWE= 83801\nIGRlcmFpbA== 83802\nIExvY2g= 83803\nIHBlcHA= 83804\nbXB6 83805\nIOKe 83806\nS1Y= 83807\nIERpZXRhcnk= 83808\nQVJSSUVS 83809\nIHBvbw== 83810\nIFJBTkRPTQ== 83811\n6LM= 83812\nIEhvbWV3b3Jr 83813\nLlZhbGlkYXRpb25FcnJvcg== 83814\nIE1hcnhpc20= 83815\n0YPRgtGM 83816\nIGNvbWVudGFyaW8= 83817\nX0JPVEg= 83818\nIHBybQ== 83819\nY2FzdEhpdA== 83820\naXBsaW5h 83821\nIFZvdGVycw== 83822\nLmFzc2lnbm1lbnQ= 83823\nbmV0dA== 83824\nU0FNUExF 83825\namlz 83826\nInRpdGxl 83827\nLnZhbGlkYXRvcnM= 83828\nICI/Ig== 83829\ndW5pZGFk 83830\nX2ZpZ3VyZQ== 83831\nIGFjY3J1 83832\nIFJlbWFyaw== 83833\nRm91bmRlcg== 83834\nLmluaXRpYWxpemVBcHA= 83835\nIFByZXNlbnRz 83836\nIE1VTFRJ 83837\ndmVzdGVy 83838\nLnZpc2l0SW5zbg== 83839\nIGdldFBhdGg= 83840\nX2RpZmZlcmVudA== 83841\nIGxvb3Nlbg== 83842\nIGFycm9nYW5jZQ== 83843\nIGp1bmk= 83844\nIFphaGw= 83845\nIEdDQk8= 83846\nIG1vZGVyYXRvcnM= 83847\nTGluZUNvbG9y 83848\nIE5vZGVUeXBl 83849\nX2JlbG93 83850\nb3JndA== 83851\nIEhhcmxlbQ== 83852\nIE9yd2VsbA== 83853\nX1VOSVg= 83854\nLnJlc3RhcnQ= 83855\naXRoZQ== 83856\nIGdlbmll 83857\nIGNsYWQ= 83858\nJzp7Jw== 83859\nIHNob3djYXNlZA== 83860\nIGxhcnZhZQ== 83861\nTWljaGVsbGU= 83862\nIExI 83863\nLmdldExvZw== 83864\nQ29uc3RydWN0ZWQ= 83865\nIGh2YQ== 83866\nX3N1YnM= 83867\nIGRhYg== 83868\nLmRvY3VtZW50YXRpb24= 83869\nIG5pZw== 83870\nIE1hbmRhcmlu 83871\n4oCUYXJl 83872\nLXBpYw== 83873\nX2Nvcm5lcnM= 83874\nLkJvdA== 83875\nXVso 83876\nX18nOg0K 83877\nLkVkaXRvckJ1dHRvbg== 83878\nLXN5bnRheA== 83879\nU2FuZGVycw== 83880\nIFRhbmtz 83881\nZGVzaXJlZA== 83882\nc3RhbnRpYXRlVmlld0NvbnRyb2xsZXI= 83883\nR2Vhcg== 83884\nIHVzZXJNb2RlbA== 83885\nCWNvbnRyb2w= 83886\nRGF0YUJhc2U= 83887\nIERlYmF0ZQ== 83888\naW5lc2lz 83889\nIHhl 83890\nLm1hZ25pdHVkZQ== 83891\nIHlhbg== 83892\nIEFwaUV4Y2VwdGlvbg== 83893\nKHdoaWNo 83894\nYXRoZXJpbmc= 83895\nQ29uc2lkZXJpbmc= 83896\nIEFMUEhB 83897\n568= 83898\nIFJhbmtpbmdz 83899\nLmxpZmU= 83900\n6rCS 83901\nT0ZGU0VU 83902\nLnRlbGVncmFt 83903\nIGZhdmljb24= 83904\nX3NzaA== 83905\nIEVER0U= 83906\nUmVmcw== 83907\nYW5kYW4= 83908\nIGFkb2xlc2NlbmNl 83909\nIFNoYW5r 83910\nIFN3YW1w 83911\nX3BlcmM= 83912\nIGNvbnRyYXJpbw== 83913\nLm55 83914\nLiIpLA== 83915\nIHVudGVu 83916\nX0VOU1VSRQ== 83917\nL29yZGVycw== 83918\nKGNm 83919\nIHVudHJlYXRlZA== 83920\nYXplbg== 83921\nKElucHV0U3RyZWFt 83922\nIGFwcHJvdmFscw== 83923\nIGdlcm1hbnk= 83924\nIGF2ZXJl 83925\nVHJpcGxl 83926\nLWJhcnM= 83927\nIHNldFBhZ2U= 83928\nSmFj 83929\nIEZpcmVz 83930\nIERBWVM= 83931\n56i/ 83932\nIHNjcmF0Y2hlZA== 83933\nIEJFTg== 83934\nLXdpZmU= 83935\nIGludGVsbGVjdHVhbHM= 83936\nIHBvdWNv 83937\nIHN0YWJpbGl6YXRpb24= 83938\nIHBlbG9z 83939\nIFNUT1JZ 83940\nPGZpZWxkc2V0 83941\nIE1haWRlbg== 83942\nLkNpcmNsZQ== 83943\nIHNtw6U= 83944\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 83945\nL2VuZA== 83946\n6Iux 83947\nKG51bXB5 83948\nLnBhbmVsQ29udHJvbA== 83949\nY2hyaWZ0 83950\nY29udGluZW50YWw= 83951\nX3BlbA== 83952\nRFNM 83953\nPFwv 83954\nIE9QUw== 83955\nIE5vb24= 83956\nIHVuZGlzY2xvc2Vk 83957\nIFlpbg== 83958\nc3Bv 83959\nCWRlc2NyaWJl 83960\ndG9ncm91cA== 83961\nIGRpYXBlcnM= 83962\nIG1IYW5kbGVy 83963\nCUNsb3Nl 83964\nIHJlbmRpdGlvbg== 83965\nPXsoew== 83966\nRW50ZXJpbmc= 83967\nKERJUg== 83968\nX09MRA== 83969\nIFN0aW5n 83970\nIFBhd24= 83971\ndXNzZXM= 83972\nIGdldENvZGU= 83973\nSXRlbUxpc3Q= 83974\nIGluZGlz 83975\nID4iLA== 83976\nIGNvbmZs 83977\nIGRvbWluYXRlcw== 83978\ndGhlc2l6ZWQ= 83979\nc3RlcmVk 83980\nIGNhYw== 83981\nIEdlbnVpbmU= 83982\nPFBhdGg= 83983\nIEhvZGc= 83984\nLWZseQ== 83985\nLmNpZA== 83986\nIG9iamVjdElk 83987\nKCMp 83988\nLm1vdmVUb05leHQ= 83989\nRGlhbG9ndWU= 83990\nPHBjbA== 83991\ndGVhckRvd24= 83992\nJyl9fQo= 83993\n5ri4 83994\nTGl2ZXI= 83995\nTWF0cml4WGQ= 83996\nIGNyYXBweQ== 83997\nX0RFQUQ= 83998\nLnBhcnRpYWw= 83999\nLkRyb3BEb3duU3R5bGU= 84000\nZnVy 84001\nLkNvbGxhcHNlZA== 84002\nLXRvd24= 84003\nSUNJQUw= 84004\nRGlyZWNjaW9u 84005\nIHNldFJlc3VsdA== 84006\nL3Jlc3VsdA== 84007\nIFNoZWVw 84008\neXNjYWxl 84009\nY29udGk= 84010\nIHJlY29ub2M= 84011\n6b4= 84012\nW2Jsb2Nr 84013\nY2xheno= 84014\nIGJlbmVmaXRpbmc= 84015\nQUFQ 84016\nLnJlcXVpcmVz 84017\nLkNvb2tpZQ== 84018\nIGNhcHRpdml0eQ== 84019\nLlNlY3Rpb24= 84020\nXSkpOw== 84021\nLWNhcmV0 84022\nKHZh 84023\nIHbDpGw= 84024\nIEhpZ2hsYW5kcw== 84025\nTm90YQ== 84026\nIEZNTA== 84027\nd2ludGVy 84028\nIGFnZW5kYXM= 84029\nX18sX18= 84030\nZGVtYW5k 84031\nIHR1dG9ycw== 84032\nX1NZTQ== 84033\nKENI 84034\nIHVuZXF1aXY= 84035\nLnRyYW5zaXRpb25z 84036\nIENhbG9yaWVz 84037\nIEVjb25vbWlzdA== 84038\nLlBpbg== 84039\nIGRlZmxlY3Q= 84040\nRXhwb3NlZA== 84041\nIGdlcA== 84042\nLkxheW91dENvbnRyb2xJdGVt 84043\nIHJhaw== 84044\nZmliZXI= 84045\nIGFwb3B0 84046\nIEVudW1z 84047\naXRldXI= 84048\nIG1vZGlmaWVz 84049\nIHJlbHVjdGFuY2U= 84050\nIHNwaWxscw== 84051\nQXNjZW5kaW5n 84052\nIHRlbXBlcmF0dXJh 84053\nLWludGVyZmFjZQ== 84054\nIGNvd29ya2Vycw== 84055\nIDpc 84056\nIFJvdW5kZWRSZWN0YW5nbGVCb3JkZXI= 84057\nPEtleVZhbHVlUGFpcg== 84058\nUGFyc2Vk 84059\nIHdpdGhkcmF3aW5n 84060\nKGhpc3Q= 84061\nIHRoZW9yaXN0cw== 84062\nLW5n 84063\nIGNoaWZm 84064\n66W4 84065\nUEFJUg== 84066\nIEJyZXdlcg== 84067\nS2E= 84068\nIEJvd2xpbmc= 84069\nX3Rs 84070\nJ30pLg== 84071\nIHByb2Jpbmc= 84072\nQXJz 84073\nLnJlYWxt 84074\nIGVzdGF0ZXM= 84075\ndmFyeQ== 84076\nIEtlcw== 84077\nICIsIiw= 84078\nfSwNCg0K 84079\nUGxhbm5pbmc= 84080\nIFJlY29u 84081\nIGNvbmNsdXM= 84082\ndmF1bHQ= 84083\nIGluY2VudGl2 84084\nIGJpbm5lbg== 84085\nIFBoaWxsaWVz 84086\nLkxvYWRlcg== 84087\nIEZhbGxlbg== 84088\nX1R3bw== 84089\nIEJpYXM= 84090\nUm9sZUlk 84091\nIFBhcmNlbGFibGU= 84092\nIERvZGQ= 84093\nICQoIiMi 84094\n5Lq/5YWD 84095\nLW1lYW4= 84096\nKE91dHB1dA== 84097\nQVRUUklCVVRF 84098\nIHNlY3JldGl2ZQ== 84099\nIFBlcmlwaGVyYWw= 84100\nIEZpbGVk 84101\nIOW3 84102\nX21lZGlhbg== 84103\nLklD 84104\nIEFycmF5QnVmZmVy 84105\nKFRBQkxF 84106\nIF0KCgo= 84107\nIGFudGhvbG9neQ== 84108\nIG9ic2NlbmU= 84109\nb3BhdXNl 84110\nIEVTVg== 84111\nw6F2ZWlz 84112\nb3NlbWl0ZQ== 84113\nR3J1cG8= 84114\nIE1PQ0s= 84115\nIHVuYXZvaWRhYmxl 84116\nIGNvdmlk 84117\naG93ZXI= 84118\nLk5ldmVy 84119\nU2V0QWN0aXZl 84120\ne3RleHQ= 84121\nX3Byb2Jh 84122\nXENvbmZpZ3VyYXRpb24= 84123\nIEJyeWNl 84124\nIGNvZXJjZQ== 84125\nIFZhbmRlcmJpbHQ= 84126\nZ2VtZW50cw== 84127\nbGVnZw== 84128\nIHJlYnV0 84129\nIFZJTg== 84130\n5YiG6ZKf 84131\nIG9ic2Vzc2l2ZQ== 84132\nL2NtZA== 84133\nIGtvbW1lbnQ= 84134\nIExhdWdo 84135\n64uI 84136\nIHNlbHZlcw== 84137\nb3JyYQ== 84138\nLnJvb21z 84139\nIGNvbXBsZXhpdGllcw== 84140\nCW9wZXJhdG9y 84141\nQWx0ZXJuYXRl 84142\nIHNvcnRpZQ== 84143\nZ2V0TnVt 84144\nIHJlYWxpemFkbw== 84145\nRG9pbmc= 84146\nX0dyaWQ= 84147\nIHNldFN1cHBvcnRBY3Rpb25CYXI= 84148\nw6RobHQ= 84149\n5ZQ= 84150\nOnsNCg== 84151\nSW50ZXJlc3RlZA== 84152\nIGRpbWluaXNoaW5n 84153\nIExvb3Q= 84154\nQWRhcHRlckZhY3Rvcnk= 84155\nLXJ1bm5lcg== 84156\nc2F2aW5n 84157\nKHNlbQ== 84158\nZmFk 84159\nRURVUkU= 84160\nX2RvY3VtZW50bw== 84161\nIENhbGVi 84162\nIGd1aXNl 84163\nIE1jR3U= 84164\nKHVuaXRz 84165\nIGJlemllcg== 84166\nIHBhdHQ= 84167\nIHBlbHZpYw== 84168\nIGNvbm9zYw== 84169\nYWN0aXZv 84170\nIE1hbG9uZQ== 84171\nLlRha2U= 84172\nKHNxcnQ= 84173\nc3Rhc2hvcA== 84174\nLWVuZGVk 84175\nIE1pZGk= 84176\nIEJhbmM= 84177\nIFBlcHNp 84178\nX01BWQ== 84179\nIHBsbA== 84180\nL2luZXQ= 84181\nLWVuaA== 84182\nIEl0YWw= 84183\nbW91cg== 84184\nIHJlbHVjdGFudGx5 84185\nLnJjUGFyYW1z 84186\nIHBhbHM= 84187\nLnBrZw== 84188\nIGZvcm1hcw== 84189\nbGllw59saWNo 84190\nLWJvb2tz 84191\nb21hbHk= 84192\nIHJlY29tbWFuZA== 84193\nUExJQ0lU 84194\nacSN 84195\nLmNnQ29sb3I= 84196\nKEJvYXJk 84197\n0LXQvdC40Lg= 84198\nIExFTg== 84199\nXy1f 84200\nIFVubw== 84201\nIE5PVElGWQ== 84202\naGFuYQ== 84203\nW3Nsb3Q= 84204\nXGFkbWlu 84205\nSW5JbnNwZWN0b3I= 84206\nKWNvbnN0 84207\nIGZsYXR0ZXJpbmc= 84208\naWdyYW1z 84209\nY2Fj 84210\nIGhlYXJ0ZmVsdA== 84211\nSW5kdXN0cmlhbA== 84212\nQWlycG9ydA== 84213\nWEk= 84214\nIHZhbGlkYXI= 84215\ncmVwcmVzZW50YXRpb24= 84216\nIFJlbnRhbHM= 84217\nIG9taXNzaW9u 84218\nIG15dGhpY2Fs 84219\nIEVudHJhbmNl 84220\nIHNlcmdlYW50 84221\nIHdyaXRlVG8= 84222\nIE5vcndpY2g= 84223\nIExpb25lbA== 84224\nLWJhbA== 84225\nIFp3ZQ== 84226\nX3JlbnQ= 84227\nIHJlbWFy 84228\nIEJhaGFtYXM= 84229\nIEJhbGU= 84230\nOiIiLA== 84231\nU3RhdGVNYW5hZ2Vy 84232\nIGLDqW7DqQ== 84233\nICEqKio= 84234\nIGJsb2NrZXJz 84235\nLnNlbA== 84236\nKExFRA== 84237\nIGZzbQ== 84238\nIHdpcGluZw== 84239\nIHphbWFu 84240\nIFJlaQ== 84241\nYWd1YXk= 84242\nLi4n 84243\nIGxvdW5n 84244\nZXRjb2Rl 84245\nIGxhbno= 84246\nY2l0YXRpb24= 84247\nW2A= 84248\nLWVs 84249\nYXNib3VyZw== 84250\nIFNPTEQ= 84251\nIE9yY2hhcmQ= 84252\nQ0hhbmRsZQ== 84253\nIExvZnQ= 84254\nLmRpdmlkZQ== 84255\nLVdpdGg= 84256\nL2Rlc2lnbg== 84257\nLlNlcnZpY2VNb2RlbA== 84258\nTWlz 84259\nIHJhd0RhdGE= 84260\nIGludGVyYWN0cw== 84261\nIEVyb3Rpaw== 84262\nIG9uUG9zdEV4ZWN1dGU= 84263\n6Jk= 84264\nIHZleA== 84265\nIHN0cmluZ2lmeQ== 84266\neW5lcw== 84267\nX0VtYWls 84268\nX09N 84269\ncXVpdGU= 84270\nX2VmZmVjdHM= 84271\nQURY 84272\nIGFkb3JuZWQ= 84273\nc3Nm 84274\nZWRpdGFy 84275\nIE1hZGFtZQ== 84276\nIHJlZnV0ZQ== 84277\nIEx1Y2E= 84278\nIFdvbHZlcmluZQ== 84279\nc2V4bw== 84280\nQW5kcmU= 84281\nPFJvdXRl 84282\nIFNjZW5lcw== 84283\nIHJlb3JkZXI= 84284\nX214 84285\nY3JlYXRlVGltZQ== 84286\nIHN5bnQ= 84287\nLG1vZGVs 84288\naWNyb3Vz 84289\nIE1PVVNF 84290\n6rk= 84291\nY29tcHJlc3Npb24= 84292\nIHByaW5jZXM= 84293\nIHNoYW1lZnVs 84294\nIHBhdQ== 84295\nIFRFRA== 84296\nKGNvZWZmcw== 84297\n4K+B 84298\nL3VtZA== 84299\nIGNhbnlvbg== 84300\nL3JlbmRlcg== 84301\nLnVzZWQ= 84302\nIEFncmVl 84303\nIEpld2Vs 84304\nL2NvbW1hbmQ= 84305\nQmFyY29kZQ== 84306\nKGRlYWQ= 84307\nd2Vic29ja2V0 84308\ndW11 84309\nR0xPU1M= 84310\nIGZvcnRu 84311\nIGJvYXN0ZWQ= 84312\nICJcIj4= 84313\naXN0dW5n 84314\nLW1hY2hpbmU= 84315\nIGluY2lkZW50YWw= 84316\nIG1N 84317\nLXJlYWRhYmxl 84318\nLmZ4 84319\nIFBPTElU 84320\nIHN5bWxpbms= 84321\nKHVzaW5n 84322\neEVE 84323\nICIiIi4= 84324\nLlN0ZG91dA== 84325\nIOiL 84326\nIGFsbWFjZW4= 84327\nCXRyaWdnZXI= 84328\nLXRpcA== 84329\nIENPTU1JVA== 84330\nLmluZ3JlZGllbnRz 84331\nIG1hbmlmZXN0cw== 84332\nIE9TUw== 84333\nIEhhdXQ= 84334\nL2xvYWRpbmc= 84335\nLlR5cGVTdHJpbmc= 84336\nKGNsZWFu 84337\nIExJQw== 84338\nIEJhcmJpZQ== 84339\nT09TRQ== 84340\nLuKApg== 84341\nIEludml0YXRpb24= 84342\nIHJlZGVlbWVk 84343\nKS4nPC8= 84344\nIGltZGI= 84345\nIGJlbGFuZw== 84346\nIHNjcmFwcGVk 84347\nLW5pbA== 84348\nIFByb3Vk 84349\n0LDRgdGC 84350\nLlNJWkU= 84351\nIHNldFZpc2libGU= 84352\nIHJhaW5pbmc= 84353\nIGxlbmdodA== 84354\nIGFuYWs= 84355\nX0NNUA== 84356\nIHBhbm9yYW1pYw== 84357\nIGdpbQ== 84358\nc2FpZA== 84359\nIHByb2dlbg== 84360\nIEdCUA== 84361\n4oCg 84362\nIGludmVzdGlnYXRlcw== 84363\nIHByw6hz 84364\nL25hdmlnYXRpb24= 84365\nLm1vdGlvbg== 84366\nIExpZ2h0d2VpZ2h0 84367\nCQkgICAgICAgICAgICA= 84368\nIG9udG9sb2d5 84369\nIE5JSA== 84370\nKHNpbXA= 84371\nLnB1bGw= 84372\nIHByb3Bvc2l0aW9ucw== 84373\nQFdlYlNlcnZsZXQ= 84374\nIHJlZGVmaW5l 84375\nIEVORVJHWQ== 84376\n7KC4 84377\nT1JJWkFUSU9O 84378\nIFZlcmbDvGc= 84379\nfX1dLAo= 84380\nIHdlZ2Vu 84381\n4LmH 84382\nJm9hY3V0ZQ== 84383\nLkJvYXJk 84384\nIGN1bHBh 84385\nIEdlbmV0aWNz 84386\nIH0+ 84387\nIGFkYW1hbnQ= 84388\n44GV44KM 84389\nCWF1ZGlv 84390\n6riA 84391\nIG51bWVyYWw= 84392\nIHJlc3RyYWluaW5n 84393\nLklOVEVSTkFM 84394\nIE1vbXM= 84395\nIElQQWRkcmVzcw== 84396\naW1lbnRp 84397\nIGFscGhhYmV0aWNhbA== 84398\nIEpGSw== 84399\nIEF0dGVtcHRz 84400\nZnJhZ2U= 84401\nIGRhcm0= 84402\nIGJhc2VtYW4= 84403\nPWxvZw== 84404\nLGVycm9y 84405\nIERJU0NMQUlNUw== 84406\nCXRleHR1cmU= 84407\nLWNvdmVyZWQ= 84408\nIFBsdW0= 84409\nIOWVhg== 84410\nIHDDqXJp 84411\nKHJldmlldw== 84412\nIEZvcmNlZA== 84413\nRkg= 84414\nIOy0iA== 84415\nIGV5ZWJyb3c= 84416\nX1JFR1M= 84417\nIGNoZXN0cw== 84418\nIExhcmdlc3Q= 84419\nXV06Cg== 84420\nVVRPUg== 84421\nIGVucXVpcmllcw== 84422\nIGNva2U= 84423\nLWNhdGNoaW5n 84424\nIEdlb2dyYXBoeQ== 84425\nYXRlbA== 84426\nKHByb2Q= 84427\nb3JXaGVyZQ== 84428\nTmluZQ== 84429\nIFBpZWQ= 84430\nIGFkanVzdHM= 84431\nKHByb20= 84432\nX21lbnVz 84433\nX2V4YW0= 84434\nIE5vdGlmaWNhdGlvbkNlbnRlcg== 84435\nCWRz 84436\nTElL 84437\nX3R3aXR0ZXI= 84438\nQ1JD 84439\nIGV1eA== 84440\nIFN0YWJsZQ== 84441\naXlvcg== 84442\nIGNhcmJvbmF0ZQ== 84443\nLnNhbA== 84444\nTWFwcGVk 84445\naWV2aW5n 84446\nKXk= 84447\neW5hbW9kYg== 84448\nLkNvbXBhcmVUYWc= 84449\nIHNldmVyZWQ= 84450\nJ2VtYWls 84451\nIGZvcnNr 84452\nbGV4cG9ydA== 84453\nSU1JVEVS 84454\nIEFwZXg= 84455\nIGhtYWM= 84456\nIE9kZHM= 84457\nb3ZlcnJpZGVz 84458\nOiI7DQo= 84459\nIG9waW9pZHM= 84460\nIG1lc21lcg== 84461\nIEdBTA== 84462\nLWxpbmVz 84463\nIGFwcGx5TWlkZGxld2FyZQ== 84464\nIHNlcmlh 84465\nRVNJUw== 84466\nIG5pbGFp 84467\nIG1hbGxz 84468\nIFBhb2xv 84469\nIExlbnQ= 84470\nLmJ1aWxkZXJz 84471\nLyY= 84472\nIENsaXBz 84473\nIEp1cmFzc2lj 84474\n4pWd 84475\nLWNvbmQ= 84476\n44O844OI 84477\nfHd4 84478\nLmhvdXNl 84479\nIGhlcmF1cw== 84480\nIGhr 84481\nIENvY28= 84482\nIlwK 84483\nIGFjY3JlZGl0YXRpb24= 84484\nIFJhY2g= 84485\nZXJ0ZXN0 84486\nc2hvcnRjb2Rl 84487\nIHZhbGlkYXRpb25z 84488\nVUxTRQ== 84489\nIGV4Y2VycHRz 84490\nU2Vla0Jhcg== 84491\nIGdldExvY2F0aW9u 84492\nIGZlbmNlZA== 84493\nKGdz 84494\nIGx5cw== 84495\nIGhhcm1z 84496\nIEhvbW8= 84497\n4oCcU2hl 84498\nIOKAuw== 84499\nPXNlc3Npb24= 84500\nX0NPTVBJTEU= 84501\nTWVhbnM= 84502\nIHBldGl0aW9uZXI= 84503\nSU1P 84504\nIl09Pg== 84505\nZGJl 84506\nX2dwcw== 84507\nIG1q 84508\nX2V4cGlyZQ== 84509\nIERBTg== 84510\nIHh2 84511\nIGZ1bmNpb25lcw== 84512\nIHNoYWt5 84513\nU3VnYXI= 84514\nIGdldFJlc3VsdA== 84515\nPFRva2Vu 84516\naHR0cENsaWVudA== 84517\nLm9uUGF1c2U= 84518\nc3Rp 84519\nU25ha2U= 84520\nTWFwcGluZ3M= 84521\nIFJlYXBlcg== 84522\nIGZyZWk= 84523\nIENvc21vcw== 84524\ndWVycw== 84525\nIEhhag== 84526\nIEJsYXpl 84527\nb2ppcw== 84528\nQ3JMZg== 84529\nLnByb2M= 84530\nIG90cA== 84531\nIERyYXdz 84532\nCVJFRw== 84533\nKCcnJw== 84534\nIGdlbmVyYQ== 84535\nIEF0dGFjaGVk 84536\nUkVN 84537\nJTsiPg== 84538\ndXJuaXNoZWQ= 84539\nX3Jw 84540\nIHpvYWxz 84541\nIGFzc29ydGVk 84542\naXRpemVk 84543\nIGNhbWlubw== 84544\nIGFiZHVjdGVk 84545\nLnRvQmU= 84546\nJ10pOg== 84547\nIE1vb3I= 84548\nSW5jbHVkaW5n 84549\nIGdyYXppbmc= 84550\nc2V0U3RhdHVz 84551\nYWlyb2Jp 84552\nX0V4ZWN1dGU= 84553\naWZpYW50 84554\nZWxkbw== 84555\nYXV0b21hdGlj 84556\nKCQp 84557\nIGxlYXBz 84558\nb25lZERhdGVUaW1l 84559\nKGxheWVycw== 84560\nLXByb2R1Y2Vk 84561\nIFdvcmtib29r 84562\nIGVub3Jtb3VzbHk= 84563\nIGRlcHJlc3NpdmU= 84564\nIGFhYQ== 84565\nRW1iZWRkZWQ= 84566\nQlVN 84567\nIGVsbGVz 84568\nIGJvYXJkZWQ= 84569\nxZtteQ== 84570\nIG1hc2lo 84571\nX2dlbmVz 84572\nCVRleHR1cmU= 84573\naXN0YXI= 84574\nIEF1Z3VzdGE= 84575\nIEFwcE1ldGhvZEJlYXQ= 84576\nIGtvZGU= 84577\nYWJleg== 84578\nX3BpZWNlcw== 84579\nQ3Vycg== 84580\nIGxpYmVyYWxpc20= 84581\nRGljaw== 84582\nQWxl 84583\nIHF1YWxl 84584\nfSc7Cg== 84585\nLmFuc3dlcnM= 84586\nIEpBTg== 84587\nIFBVUkU= 84588\nIGNhbm9l 84589\nIFNBTUU= 84590\nUXVhbGlmaWVy 84591\nIGRibmFtZQ== 84592\nIElubm9j 84593\nCVRSQUNF 84594\naXZyZQ== 84595\nIG1lY2g= 84596\nYXNlbA== 84597\nIixb 84598\nIGFzaWE= 84599\nIENhbnRlcmJ1cnk= 84600\nLkRhdGFCaW5kaW5ncw== 84601\na2Fo 84602\nKCkpKSk= 84603\nIGR6aWV3 84604\ncmV0ZQ== 84605\nIHNjcmVlbmluZ3M= 84606\nLk1PVVNF 84607\nIGJ1c2llc3Q= 84608\nCXJlbmRlcmVy 84609\nIHRlc3RpbW9uaWFscw== 84610\nIGFzcGlyZQ== 84611\nZm9ydHVuZQ== 84612\nIE1TQw== 84613\nIGRhbXBpbmc= 84614\nXCIsCg== 84615\nV2Vs 84616\nV2lr 84617\nIOyXrA== 84618\nKHRpZA== 84619\nIENhbm5lcw== 84620\nb2NvcA== 84621\nPiIrCg== 84622\nZmFjZXQ= 84623\nIHNsYXNoZWQ= 84624\nIExpYmVyaWE= 84625\nU21vb3Ro 84626\nX2NoZQ== 84627\nTGFib3Vy 84628\nIGVtaW5lbnQ= 84629\nOlg= 84630\nXEJhY2tlbmQ= 84631\nICsrKQo= 84632\nIHRlYW13b3Jr 84633\nX2FnZw== 84634\nLlNlcnZl 84635\nIFNORA== 84636\nIFBJQ0s= 84637\nIHdpcGVz 84638\nL1R5cG9ncmFwaHk= 84639\nIEFQQQ== 84640\naWtraQ== 84641\nIGNvZGVy 84642\nZ2FiZW4= 84643\nIHVua25vdw== 84644\nLkRlcGFydG1lbnQ= 84645\n4Lix4Lia 84646\nIHBsYXllck5hbWU= 84647\nKmU= 84648\nPEJsb2Nr 84649\nX3VwZA== 84650\nIEdpYmJz 84651\nbGVhc2luZw== 84652\nIENvbG9tYmlhbg== 84653\nKFBIUA== 84654\nICoqKiEK 84655\nIOydvA== 84656\nIEN1cnRhaW4= 84657\nL2F5 84658\n2YTZiQ== 84659\nc3BvcnRz 84660\nIGRlc2Vh 84661\naXLDoQ== 84662\nIHVuY29uZGl0aW9uYWw= 84663\nIHRocm9t 84664\nIENIUklTVA== 84665\nIEhPUg== 84666\nb3Njb3BpYw== 84667\nIHlhxZ8= 84668\nIG5vc3Rybw== 84669\nLi4uIik7DQo= 84670\nIHNsdXI= 84671\nIGhhdHRlbg== 84672\nIHBlc3RpY2lkZQ== 84673\nIGZyZWV3YXk= 84674\nIENvaA== 84675\nIHdhbm5vbmNl 84676\nIG1laWRlbg== 84677\nX3N1YnN0cg== 84678\nX0NTUw== 84679\nIFN5bWJvbHM= 84680\n4Li34Lit 84681\nREVU 84682\nIE1hZGRlbg== 84683\nIHJlcXVlc3Rlcg== 84684\nLnZpcnR1YWw= 84685\nIHd4RGVmYXVsdA== 84686\nIGF1dG9tw6F0aWNhbWVudGU= 84687\nYnJpZHM= 84688\naVQ= 84689\nLlByaW9yaXR5 84690\nJyk7PC8= 84691\nYnVuZw== 84692\nRGVhZGxpbmU= 84693\nQ29uY3JldGU= 84694\nIG5leHRQYWdl 84695\nIOuwmw== 84696\nIFN0b2tl 84697\na29w 84698\nINCx0L7Qu9GM 84699\nIFByb2R1aw== 84700\nLW1ha2Vy 84701\nIFByb2plY3RpbGU= 84702\nYW5jZWxsYWJsZQ== 84703\nIFRIRUlS 84704\nVG9SZW1vdmU= 84705\nRU1V 84706\nY29tbWVyY2lhbA== 84707\nQVZFRA== 84708\nIHdlYXZpbmc= 84709\nIGJpb21l 84710\nQFNldHRlcg== 84711\ncW1s 84712\nIGJyb2FkZW4= 84713\nINGB0L8= 84714\nSVNS 84715\nIGRlYWN0aXZhdGVk 84716\nIHNlbGVjdGVkSW5kZXg= 84717\ncmlvdXM= 84718\nZWxwcw== 84719\nLkVzY2FwZQ== 84720\nIHBvbGxlZA== 84721\ncXVpYQ== 84722\nX3JlZmw= 84723\nX21pbWU= 84724\nPEF1ZGlvU291cmNl 84725\nKFRyYW5zZm9ybQ== 84726\nZXZlbm9kZA== 84727\nCXJhbmRvbQ== 84728\nbG9jcw== 84729\nIGRldXQ= 84730\ncmVwbGFjZW1lbnQ= 84731\nIGV4YW1pbmVy 84732\nSGFzS2V5 84733\nIOumrOyKpO2KuA== 84734\nIENsb3Ro 84735\nIOCkqg== 84736\nIFJlZ2lzdHJv 84737\nIEVzdGhlcg== 84738\nIFNoYXJlZE1vZHVsZQ== 84739\nLmJvcnJvdw== 84740\nIG9zY2lsbGF0b3I= 84741\nIGZvb2xz 84742\nuqs= 84743\nIGJvYXN0aW5n 84744\nX3B1bHNl 84745\nc2hhcmluZw== 84746\nIHBpc3RvbHM= 84747\nX1BMQU4= 84748\nIHNlcHRlbWJlcg== 84749\nIG11c3Rlcg== 84750\nIG1hcmNow6k= 84751\nQ0hFTVk= 84752\nIHN1aQ== 84753\nIGdlYnJ1aWs= 84754\nLj0n 84755\nZXJyYXRlZA== 84756\nIExpYQ== 84757\nIGhhdW50 84758\nIEN1c2g= 84759\ncm91dGVQcm92aWRlcg== 84760\nInw= 84761\nZW5kcGhw 84762\nIl1dCg== 84763\nIGF2YQ== 84764\n77yBIiw= 84765\n7Ke4 84766\nIGNvbGE= 84767\nX1NQRUxM 84768\nIGFsw6lt 84769\nKExhbmd1YWdl 84770\nKGR1bW15 84771\nIGJ1bmtlcg== 84772\nIEVtcHJlc2E= 84773\nIGNyZWF0ZUNvbnRleHQ= 84774\nOm1pbg== 84775\nIEJPT1Q= 84776\nIE1lcmVkaXRo 84777\nWmg= 84778\nIERvd25pbmc= 84779\nd2pnbA== 84780\nLmRj 84781\nc2RhbGU= 84782\nIGluY29udmVuaWVudA== 84783\nIHJlYWRtZQ== 84784\nTmF2aWdhdGlvblZpZXc= 84785\nQ09ORElUSU9O 84786\nLmRlcA== 84787\nIHLDqXVzcw== 84788\nIG9wY2nDs24= 84789\nIEFjY291bnRhYmlsaXR5 84790\nLk1hcg== 84791\nLWd1aWQ= 84792\nRURHRQ== 84793\nRXZlbnRNYW5hZ2Vy 84794\nIGRpc2NpcGxl 84795\ndWNrbGVz 84796\nfX0+ 84797\naW50ZXJlc3RlZA== 84798\nRmlsdGVyV2hlcmU= 84799\nIHB1c3M= 84800\nLXByb3h5 84801\nX3N0YXR1c2Vz 84802\nIFsj 84803\ndW5mb2xk 84804\nIFJvbm5pZQ== 84805\nJiYh 84806\nIGFjZXNzbw== 84807\ndW9z 84808\nX3lpZWxk 84809\nKGNhbGVuZGFy 84810\nKHNvdW5k 84811\nIGRhdGFBcnJheQ== 84812\nIFlhdGVz 84813\nIHByb2Nlc3Npb24= 84814\nRUZBVUxU 84815\nIEdIQw== 84816\nYW11cmE= 84817\nIHN0cmljdGVy 84818\nLkJPVFRPTQ== 84819\nIGhhYml0dWFs 84820\neEFG 84821\nQVZJTkc= 84822\nIHNldHVwcw== 84823\nID17Cg== 84824\nKioo 84825\nIHNvaw== 84826\nIHJldGluYQ== 84827\nIEZpcmVwbGFjZQ== 84828\naW52ZXJ0 84829\nIEZvcnJlc3Q= 84830\nPGRhdGE= 84831\nXEFjdGlvbg== 84832\nT1VHSA== 84833\nIGNhcmVsZXNz 84834\nLmdldEFjdGl2ZQ== 84835\nZXNlcw== 84836\nIHpkasSZ 84837\nKSkqKA== 84838\nU0VN 84839\nIFBhbmlj 84840\nVG91Y2hlcw== 84841\nIHByZWNv 84842\nL2FjY291bnRz 84843\n5L6b 84844\nUG9zdGFsQ29kZXM= 84845\nLXBsdWdpbnM= 84846\nPG1lc3NhZ2U= 84847\nKHBvd2Vy 84848\nIHBlcmN1c3Npb24= 84849\nIGPDqWw= 84850\n5o6o 84851\nIGRhbmNlZA== 84852\nX1NDQU5DT0RF 84853\nIFNpdHRpbmc= 84854\nIExva2k= 84855\nU2hhcmluZw== 84856\nLkRpcg== 84857\nIHNjaHdlcg== 84858\nX0xB 84859\nLk1lbnVTdHJpcA== 84860\nX3plcm9z 84861\nIGZpeGF0aW9u 84862\nIEFtaXQ= 84863\nIGNvbXBsaWVk 84864\nLnNwYWNlQmV0d2Vlbg== 84865\nIGFycmVzdGluZw== 84866\nIFN1Zw== 84867\nIHBlcmZvcg== 84868\nIGtvbXBsZQ== 84869\nIEVzc2VuY2U= 84870\nIHBsZWlu 84871\nc2ltdWxhdGlvbg== 84872\nIGNyZWF0ZWRCeQ== 84873\nIEV4cGVkaXRpb24= 84874\n77yBCgoKCg== 84875\ndHJhaW5lcg== 84876\nIl09JA== 84877\nIHN1Y3Rpb24= 84878\nbVBpZA== 84879\nbm90aW4= 84880\nIHByZWNpb3M= 84881\nIEFzc3VyYW5jZQ== 84882\nIExhbA== 84883\nLiIm 84884\nIG1pbkxlbmd0aA== 84885\nIE1pbmVyYWxz 84886\ndHJhamVjdG9yeQ== 84887\nU0FGRQ== 84888\nIG51YW5jZXM= 84889\nKGV4dHJh 84890\nX3ZpZGVvcw== 84891\nW109ew== 84892\nIGhvbmV5bW9vbg== 84893\nX3ByZXA= 84894\nCQkJCQkJCQkJCSA= 84895\nIHB1cnBvcw== 84896\nIGFuemVpZ2Vu 84897\nLnN0cnV0cw== 84898\nIHBhZ2Fy 84899\nLkF1dG9TaXplTW9kZQ== 84900\nIHdlbmlnZXI= 84901\nIHBhZ2Fu 84902\nIGFjaWRpYw== 84903\nZ01hcHM= 84904\nIGJld2FyZQ== 84905\nX2lwYw== 84906\nIG1lZHM= 84907\nIGRpc2XDsW8= 84908\nKSkpCgoK 84909\nQ2h1cmNo 84910\nIG51cnR1cmluZw== 84911\nX21waQ== 84912\nIHJlc3VsdGFudA== 84913\nIFBpc3RvbA== 84914\nc1BpZA== 84915\nTXNw 84916\nTW9tZW50 84917\nIFVQTE9BRA== 84918\nTmFubw== 84919\nYmxpY2s= 84920\nIG1lc3VyZQ== 84921\nIExheWVycw== 84922\nX3RyYWo= 84923\nIGJ1dHRvbldpdGhUeXBl 84924\nCWNvbW1vbg== 84925\nIE15Q2xhc3M= 84926\n2KjYsQ== 84927\neG9vcHM= 84928\nX0hlaWdodA== 84929\nX1dBUk5JTkdT 84930\nU2V0VGV4dA== 84931\nIEhpc3Bhbmljcw== 84932\nTnVsbFBvaW50ZXJFeGNlcHRpb24= 84933\nLmZhY3Rvcg== 84934\nIHZpZWxsZWljaHQ= 84935\nIHNob3V0cw== 84936\ndHJ1c3RlZA== 84937\nIG5ld1Jvdw== 84938\nIEZyYW7Dpw== 84939\nW2pq 84940\n4oCUd2hv 84941\nIFFEaXI= 84942\nX2FkdmFuY2Vk 84943\nKEhhdmVPY2N1cnJlZA== 84944\nIHVucGw= 84945\nL3Jvcw== 84946\nLmVhc3k= 84947\nIEJBTEw= 84948\n550= 84949\nL2xncGw= 84950\nIHN1YmNvbnNjaW91cw== 84951\nICctJzsK 84952\nICcpOw== 84953\nINGW 84954\nIHNjYW50 84955\nX3Nlc3M= 84956\nX3BsYXlpbmc= 84957\nX0lTTw== 84958\nIHNldFNpemU= 84959\nX2RlY2s= 84960\nX0xBUkdF 84961\nIE1leQ== 84962\nQ2hpY2tlbg== 84963\naWZmaW4= 84964\nZGlzcG9zZQ== 84965\nSEVTVA== 84966\nTGF1Z2g= 84967\nIExDUw== 84968\nIG9uc2l0ZQ== 84969\nLmlzTG9nZ2VkSW4= 84970\nIGlycml0YXRlZA== 84971\nIGJyaWdhZGU= 84972\nIGRlcXVldWU= 84973\nY2xhc3NOYW1lcw== 84974\nIE3DoXM= 84975\nIEF0YXJp 84976\nKElPRXhjZXB0aW9u 84977\nUmFjaGVs 84978\nLXNhbXBsZQ== 84979\nIGVpZ2VudGxpY2g= 84980\nSUZERUY= 84981\nLm5laWdoYm9ycw== 84982\nIHNlcGVyYXRl 84983\nIExpc3Rpbmdz 84984\nLmZm 84985\nKGltcG9ydA== 84986\nTW9kZWxBdHRyaWJ1dGU= 84987\nIHNwZW5kZXI= 84988\nIG1vdGlmcw== 84989\nc3N1ZQ== 84990\nIEFwcHJlbnRpY2U= 84991\nLWNhdA== 84992\nclBpZA== 84993\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 84994\nb2N6 84995\naW5pb25z 84996\nL2NvbnRhaW5lcg== 84997\nIHBsYWdpYXJpc20= 84998\nV3JpdGFibGVEYXRhYmFzZQ== 84999\nLy4KCg== 85000\nIEZldmVy 85001\nLVZlcnNpb24= 85002\nYWNpamE= 85003\nIHdlaQ== 85004\nLWluZw== 85005\nIHRlbWFz 85006\nIHN1cmdlZA== 85007\nIGNyaWE= 85008\nIGFyZA== 85009\nYml0Y29pbg== 85010\nLnRpbWV6b25l 85011\nIG9iamVjdE1hcHBlcg== 85012\nIAogICAgICAgICAgICAK 85013\nIHlsaW0= 85014\nIElDVQ== 85015\nIERlcHJlY2F0ZWQ= 85016\nKSgpOwo= 85017\nQVJHRVI= 85018\ndW5nYWxvdw== 85019\nVGVzdERhdGE= 85020\nKHB0cw== 85021\nRklMRU5BTUU= 85022\ndXBwbHk= 85023\nIHBhY2llbnRlcw== 85024\nLGxlZnQ= 85025\nIFdyaXRlTGluZQ== 85026\nIHBhcmNlbHM= 85027\nX2ZvbGRlcnM= 85028\nIERpcms= 85029\nLmFzc2VydElzSW5zdGFuY2U= 85030\nTWND 85031\nX1ZhcmlhYmxl 85032\nKGFh 85033\nIFBvcms= 85034\nLlB1Ymxpc2g= 85035\nLWdheQ== 85036\nIFBldHJh 85037\nIENvbm5lY3Rpbmc= 85038\nVGFiQ29udHJvbA== 85039\naXZlcmluZw== 85040\nKFNjcmVlbg== 85041\nIGNoaWxsZWQ= 85042\nIGFpbw== 85043\nVG91Y2hFdmVudA== 85044\nIGFjY2Vzc2lvbg== 85045\nIExvaXM= 85046\nL21vbWVudA== 85047\nIGFudsOkbmQ= 85048\nIHN1aWNpZGVz 85049\nKGhlbHA= 85050\nYW5kZXJz 85051\nIFZJRA== 85052\nQmVp 85053\nZXZlbnRv 85054\nIEFuZ3Vz 85055\nVmVycw== 85056\nIEJvcmRlYXV4 85057\nLnN0cmVhbWluZw== 85058\nIHJvdWdl 85059\nIGNyYWZ0c21hbnNoaXA= 85060\nb3NzaWw= 85061\nX0ZBTEw= 85062\nQG1lZGlh 85063\naWxlYWtz 85064\nRGF0YVNlcnZpY2U= 85065\nIFRyaXBBZHZpc29y 85066\nIE1hYXI= 85067\nQ3Vyc28= 85068\nUG9zdGFsQ29kZXNOTA== 85069\nKCk7Kys= 85070\nJFBvc3RhbENvZGVzTkw= 85071\nIG9jb3I= 85072\nIHRhaW50ZWQ= 85073\nIGxlbQ== 85074\nLW91dHM= 85075\nIHh4eHg= 85076\nIGlycml0YXRpbmc= 85077\nb3hpZA== 85078\nb2ludGVk 85079\nIFRvcm8= 85080\nX292 85081\nLmJpcnRo 85082\nKyU= 85083\nIENoYXJhY3RlcmlzdGljcw== 85084\nIEJldHRpbmc= 85085\nIG9mZmVuZA== 85086\nIFBIWVM= 85087\nIElDTVA= 85088\neERD 85089\nIENk 85090\nLmdldE1hcA== 85091\nYXRjaGV0 85092\nLmN1cnJlbnRJbmRleA== 85093\nRVJBTA== 85094\nIGthcHBh 85095\naWRlbmNlcw== 85096\nUGFyZW4= 85097\nIFNlcmdlaQ== 85098\nLWZpbg== 85099\nJ10sWyc= 85100\nw6FtYXJh 85101\nR3Jvd2luZw== 85102\nR2xhc3M= 85103\nCW1ldGE= 85104\ndmVyYmF0aW0= 85105\nL0dQTA== 85106\nIEthaA== 85107\nKHN2Zw== 85108\nY2xpc3Q= 85109\nIEJsb3dqb2I= 85110\nb2NjYW4= 85111\nLmFib3J0 85112\nb2RlbGlzdA== 85113\nIGRpZmbDqXJlbnRz 85114\nX09QVFM= 85115\nPXJlcQ== 85116\nIGludG94 85117\nIGRpYWdvbg== 85118\nIFsoIg== 85119\nJlI= 85120\nIG9iamVjdGl2ZWx5 85121\nIGJsaW5raW5n 85122\nIExvdmVz 85123\ncmluZ2U= 85124\nKik7Cgo= 85125\nIEJvbmRz 85126\nIExvdmVk 85127\nZWx0cw== 85128\nIGRpc3BhcmF0ZQ== 85129\nIEVucmlxdWU= 85130\nIldpdGg= 85131\ncmVtaXVt 85132\nYWphcmFu 85133\ndHJ5aW5n 85134\nLVJ1c3NpYW4= 85135\nbmV3SW5zdGFuY2U= 85136\nLlRSQU4= 85137\nIG9yYW5nZXM= 85138\nL2xvY2FsZQ== 85139\nIERJU1A= 85140\nCW5z 85141\nIFNodXR0ZXJzdG9jaw== 85142\nIENMT0NL 85143\nKHJhZA== 85144\nIGFzc3VyYW5jZXM= 85145\nIHJhc3A= 85146\nVWJlcmdyYXBo 85147\nRW1pbHk= 85148\nIGludmVudGlvbnM= 85149\ncmlvdA== 85150\nIHRvc3Npbmc= 85151\nIG1ha2VvdmVy 85152\nIHVuaXRPZldvcms= 85153\nYnV0dG9uU2hhcGU= 85154\n5Yid5aeL5YyW 85155\nIHBhcnRlZA== 85156\n4paR 85157\nLnNpZ21vaWQ= 85158\nIHJlZGlyZWN0aW9u 85159\nIGRpc3R1cmJhbmNlcw== 85160\nIGludGltaWRhdGVk 85161\nCUNyZWF0ZWQ= 85162\nYWdldA== 85163\nIGNvcnJlcw== 85164\nIE5FRw== 85165\naXRvbmU= 85166\nL2Zyb250 85167\nIFZlcnNl 85168\nZ2FtYmFy 85169\nIHByZW1pZXJlZA== 85170\nIElNTw== 85171\nIEdvYmllcm5v 85172\nIGlmcw== 85173\nYXlhaA== 85174\nLkNPTA== 85175\nIGZyZWRlcg== 85176\nIHN1Ym1lcmdlZA== 85177\nIE5lcm8= 85178\nbW9kaWZpYWJsZQ== 85179\nL0Zvb3Rlcg== 85180\nLWNlbnRyYWw= 85181\nIGdvdXZlcg== 85182\nIFRyaWVk 85183\nIGRpenp5 85184\nUXVlcnlQYXJhbQ== 85185\nIj4nKwo= 85186\nX3ByaW1pdGl2ZQ== 85187\n56iO 85188\nLmdwdQ== 85189\nIHZveg== 85190\nZW56ZQ== 85191\nIFdpbGRlcm5lc3M= 85192\nIHByb2JhYmls 85193\nL3JlYw== 85194\nIGFjY2Vz 85195\nIFRydXN0ZWVz 85196\nR2I= 85197\nIHBhZGRpbmdIb3Jpem9udGFs 85198\nU2hpZWxk 85199\nIE5hbWVu 85200\ndWRkbGVk 85201\nIFByaW9yaXR5UXVldWU= 85202\nUG9vcg== 85203\nIFNBRg== 85204\nLS1bWw== 85205\nIGNobG9yaW5l 85206\nIHZlcmJhbGx5 85207\nIGFpcmU= 85208\nPjsNCg== 85209\naWxoYQ== 85210\nW2NvbG9y 85211\nYW5kYWxvbmU= 85212\nLmFkZFJvdw== 85213\nIFNvaw== 85214\nIENvbm9y 85215\nIG1lam9yYXI= 85216\nJ2lscw== 85217\nZGV0YWxsZQ== 85218\nICIpLAo= 85219\nJUA= 85220\nLmxhenk= 85221\nLmp1bXA= 85222\nb3N0ZQ== 85223\nK0Y= 85224\nIGluZnVyaQ== 85225\nIHNvbnJh 85226\naXRlbWlk 85227\nJGxvZw== 85228\nIG11cmRlcm91cw== 85229\nTEVD 85230\nCW5pbA== 85231\nIE3DpHI= 85232\nKHBn 85233\naWxlbw== 85234\nQXNjaWk= 85235\nIExvY2toZWVk 85236\nIFRoZW8= 85237\nQmVsbA== 85238\nYWNpb25hbGVz 85239\nLmNyZWF0ZU5ldw== 85240\nIOW+ 85241\nLWZvb3RiYWxs 85242\nIGVjb21tZXJjZQ== 85243\nCVNpbXBsZQ== 85244\nY2x5 85245\nLklubmVyRXhjZXB0aW9u 85246\nIHBlc29z 85247\nIHRyb3Bl 85248\nIEFSR1M= 85249\nTWlhbWk= 85250\nIFBhbG8= 85251\nIFN1emFubmU= 85252\nX21hcHBpbmdz 85253\nI3tA 85254\nIE9jY3VwYXRpb25hbA== 85255\nX2J1Y2tldHM= 85256\nZ29hbHM= 85257\nX1J1bg== 85258\nLXByZXBlbmQ= 85259\nc3Nz 85260\nbWFyc2hhbGw= 85261\nIGVxdWl2YWxlbmNl 85262\nIFdlbGNo 85263\nKE9wQ29kZXM= 85264\nCWNsb2Nr 85265\nIE1lZGluYQ== 85266\nVEVSUw== 85267\nb3Jhbmc= 85268\nVGhvdWdodA== 85269\nIG9hdHM= 85270\nX1RFWA== 85271\nUklDUw== 85272\nIGluZGlmZmVyZW5jZQ== 85273\nIGFsbG90 85274\nLlVzZVRleHQ= 85275\nIFRyaWNrcw== 85276\nYXdl 85277\nLkZJTEw= 85278\nLXBocA== 85279\nLnZvaWNl 85280\nIFBhdGhmaW5kZXI= 85281\nX1RBR1M= 85282\nIFRyaXQ= 85283\n5oyJ6ZKu 85284\nYmJj 85285\nIGFkZGl0aXZlcw== 85286\nIHNjaGxl 85287\nIEtleWJvYXJkSW50ZXJydXB0 85288\nIHVzZVBhcmFtcw== 85289\nIEJ1Y2hhbmFu 85290\ncmlhbmdsZQ== 85291\nIG11bHRpcGx5aW5n 85292\nIHNlbGJlcg== 85293\nIFllcA== 85294\nQ2hhaXI= 85295\nLXJlcG9ydGVk 85296\nX1NESw== 85297\nLG5v 85298\nIEZhbGxpbmc= 85299\n5rk= 85300\nICgpLAo= 85301\ncGRi 85302\nIEJvcm91Z2g= 85303\nLnJlbW92ZUZyb20= 85304\nIG92ZXJzaGFkb3c= 85305\naWdhaWw= 85306\nIHR1bmc= 85307\nIG1tYw== 85308\nW3BhcmVudA== 85309\nRXh0ZXJu 85310\nYXZpb2xldA== 85311\nJykiCg== 85312\nIGNvdW50ZXJ0b3Bz 85313\nIHVidW50dQ== 85314\n5rc= 85315\nIM6T 85316\nIHVucHVibGlzaGVk 85317\nIEluZGllcw== 85318\nVU5FVA== 85319\nIG9mZXJ0YQ== 85320\nIGRhbWVz 85321\nIGFzdGVyb2lkcw== 85322\nIG5vdmVtYmVy 85323\nY29udHJhc3Q= 85324\nLkFkZE1vZGVsRXJyb3I= 85325\nK1NhbnM= 85326\nIHNjcmFtYmxpbmc= 85327\ndGV4dFZpZXc= 85328\nL2NyeXB0bw== 85329\nVXNlUHJvZ3JhbQ== 85330\nQHVwZGF0ZQ== 85331\nRGVzZGU= 85332\nU0FU 85333\nIGRpc3BsZQ== 85334\nYW5uw6ll 85335\nXERlcGVuZGVuY3lJbmplY3Rpb24= 85336\nIGl0bQ== 85337\nIOe8 85338\nIGV0aG9z 85339\nQVBP 85340\nIEdhcmPDrWE= 85341\naWRpcw== 85342\nIFN0ZWFr 85343\ncmliYQ== 85344\nX3ZlcmlmaWNhdGlvbg== 85345\nIEZL 85346\nIEVpbnNhdHo= 85347\nIHBlcnNvbmFsaXNlZA== 85348\nLW1vdGlvbg== 85349\nIE1lbGFuaWU= 85350\nw7Zo 85351\nX1ZD 85352\nIGRyaWZ0aW5n 85353\nLmNvbnN0cnVjdA== 85354\nIO2UhA== 85355\nIGJhdGNoaW5n 85356\nLi4vLi4vLi4vLi4v 85357\nRVJQ 85358\nX3V0Yw== 85359\nIG11bHRpdA== 85360\nIG1yYg== 85361\nY2Nhaw== 85362\nY2h1bmtz 85363\nIHRyYW5zbHVjZW50 85364\nIHBheW9mZg== 85365\n4oCUYW4= 85366\nIHNpbGw= 85367\nIG9ybmFtZW50cw== 85368\nZ3Vh 85369\nVUJZ 85370\nKHN0ZXBz 85371\nIEJPUkRFUg== 85372\nIFNPVU5E 85373\nYGAK 85374\nZW5hcmllcw== 85375\nIEJpdHRl 85376\nIGdseXBocw== 85377\nIG92ZXJydW4= 85378\nIGJsb2NrSWR4 85379\nIE1TVA== 85380\nIGdlbm9tZXM= 85381\ndGVuc29yZmxvdw== 85382\nRGlyZWN0b3J5TmFtZQ== 85383\nX2xocw== 85384\nIGZpbnQ= 85385\nYWRkdG9ncm91cA== 85386\nIHN0ZWFkZmFzdA== 85387\nIGNsb3Zlcw== 85388\nIFNvdmlldHM= 85389\nIElTQQ== 85390\nwqNv 85391\ndXJnZXJ5 85392\nc292 85393\nINCy0YvQstC+0LQ= 85394\nIHB1ZA== 85395\nLXdhdGNo 85396\nIEhvc3BpdGFscw== 85397\nfXdoaWxl 85398\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 85399\n4buj 85400\nIGFrdHVhbA== 85401\nIGtpbG9ncmFtcw== 85402\nIEZBQw== 85403\nb3BoeXM= 85404\ncHJz 85405\nKkA= 85406\neWI= 85407\nc2VjdXJlZA== 85408\nIGFsZ8O6bg== 85409\nIOCkuQ== 85410\ncGhhbnM= 85411\nQWRkb24= 85412\nIGNlbnRyYWxseQ== 85413\nX1NVSVRF 85414\nSW50ZXJlc3Rpbmc= 85415\ndWx0aW1v 85416\nQWdhaW5zdA== 85417\nIEV6cmE= 85418\nIEhlYg== 85419\ndWlkYQ== 85420\nIHNreXM= 85421\nT0xWRQ== 85422\nQmVuZWZpdHM= 85423\nIHByaXNl 85424\nLio/KQ== 85425\nLmlzRGVmaW5lZA== 85426\nIHN0YW5kb2Zm 85427\nIHBsYW5v 85428\nLmxhdGVzdA== 85429\nICgkLg== 85430\nIEdvdWxk 85431\nIGNhdXRpb25lZA== 85432\nJ10o 85433\nIG51aXQ= 85434\nIEhDSQ== 85435\nZm9vdGJhbGw= 85436\nIHdpbGxlbg== 85437\nUHJvY2VlZA== 85438\nIGludGVuZGluZw== 85439\ndGlm 85440\nIHNwb25zb3Jpbmc= 85441\nb2hhbmE= 85442\nRG9z 85443\nTW9ybmluZw== 85444\nICEiKTsK 85445\nLnNoZWxs 85446\nIFJFTEFURUQ= 85447\nIHBpbXA= 85448\nL2NvdXJzZQ== 85449\nIHJhbWlmaWNhdGlvbnM= 85450\nIHBpeG1hcA== 85451\nIHBvd2VybGVzcw== 85452\nIGRvdWNoZQ== 85453\nY3JpbWU= 85454\nY29udHJpYnV0b3Jz 85455\nKHByb3RvY29s 85456\nIGdldFBvc2l0aW9u 85457\nU0VUVElOR1M= 85458\nIHZpZXQ= 85459\naXNzZXM= 85460\nV2l0aEVtYWlsQW5kUGFzc3dvcmQ= 85461\nUmV0dXJuVHlwZQ== 85462\nQXBwZQ== 85463\nIElLRQ== 85464\nLkNvb2tpZXM= 85465\nLm1lZGl1bQ== 85466\nLmdldEpTT05BcnJheQ== 85467\nX0Zvcg== 85468\nL3Rpbnlvcw== 85469\nIFRhYmxlQ2VsbA== 85470\nIFJFUExBQ0U= 85471\nLk5ldHdvcmtpbmc= 85472\nIGJvd2Vk 85473\nCW1k 85474\nPSJ7ISE= 85475\nIGhvbmRh 85476\nIEV1cg== 85477\nIGluZG9uZXNpYQ== 85478\nIGhlbmQ= 85479\nLnZpZXdtb2RlbA== 85480\nCWN0cmw= 85481\nIFRhYmxldHM= 85482\nLW9yYW5nZQ== 85483\nZXJyYXM= 85484\nX2dyYXBoaWNz 85485\ne3M= 85486\nIFRpdGxlcw== 85487\nIGRpYWdub3Nlcw== 85488\nb3VwbGU= 85489\nX0RvdWJsZQ== 85490\nW3Jlc3VsdA== 85491\nIGppdHRlcg== 85492\nX05VTUVSSUM= 85493\nPmY= 85494\nX01Z 85495\n0LjRgdGC0LXQvA== 85496\nc3RvcmVJZA== 85497\nIHJlbGlucXU= 85498\nZW9z 85499\nIHdpZGVuaW5n 85500\nIHRhY29z 85501\nLllFUw== 85502\nXSsn 85503\nIEluZGV4ZWQ= 85504\nIHByb2Zlc3Npb25uZWw= 85505\nIFN0cmFw 85506\nQnVmZmVyRGF0YQ== 85507\nZWVh 85508\nZXJpbg== 85509\nQU5DRVM= 85510\nX1RYVA== 85511\nIHt9Lg== 85512\nKGNvbnRyYWN0 85513\neXc= 85514\nIGJsaW5kbmVzcw== 85515\nQ0hBTg== 85516\nCWdsQ29sb3I= 85517\nIGN1cnJlbnRQb3NpdGlvbg== 85518\nIENhdWNhc2lhbg== 85519\nJGltZw== 85520\nI2Fh 85521\nIHNlYW4= 85522\nTWVzcw== 85523\nKj0qPQ== 85524\nIGNhcGFjaXRvcg== 85525\nYWxmYQ== 85526\nLlJlbW92ZUFsbA== 85527\nIFdQQVJBTQ== 85528\ndWxhZG8= 85529\nbmljb3M= 85530\nIG9yZ3k= 85531\nR1g= 85532\nX0RFVklDRVM= 85533\nb3Vya2U= 85534\nIGtC 85535\nIHNvcGhpc3RpY2F0aW9u 85536\nX2F1ZGl0 85537\nL0lQ 85538\nIEx5ZnQ= 85539\nL1N0 85540\nCWNhbmNlbA== 85541\nIG92YXJpYW4= 85542\nbWFyaW5l 85543\na8SZ 85544\nIFlN 85545\nIE1pbG8= 85546\nIE1hdFRhYmxl 85547\nIEFiYnk= 85548\nbnpl 85549\nIEx1ZHdpZw== 85550\nX2FybW9y 85551\nIHNjYWZmb2xk 85552\n4buXaQ== 85553\nYXV0aG9yaXR5 85554\n4bqleQ== 85555\nLmdldFByb2R1Y3Q= 85556\nIE9yYml0 85557\nX1BhcmFtZXRlcg== 85558\nLmRhdGVGb3JtYXQ= 85559\nL3RhZ3M= 85560\nLlNwZWVk 85561\nKExpbmU= 85562\nIHBvbGlzaGluZw== 85563\nIGtvbWI= 85564\nIHJ0cmlt 85565\nJ2ljb24= 85566\ncmllcmU= 85567\nIFByZWZlcg== 85568\nc3RydG9sb3dlcg== 85569\nUmVncw== 85570\nQ0JE 85571\nLT4K 85572\nIHBhcmFzaXRl 85573\nZW5kc1dpdGg= 85574\nIENvYnJh 85575\nOnRlc3Q= 85576\nIE51Z2dldHM= 85577\nxaF0 85578\nQ29yZUFwcGxpY2F0aW9u 85579\nL2JpbmQ= 85580\nIE1jSW50 85581\naXR1bmVz 85582\nWy0t 85583\nIFN1cnByaXNl 85584\nX0lORw== 85585\nIEZhc3Rlcg== 85586\n0J3QsA== 85587\nOkU= 85588\nIGRpbnQ= 85589\nbmdl 85590\nLiInLCciLiQ= 85591\nIGFkamVjdGl2ZQ== 85592\nLmJj 85593\nY29uc3VtZQ== 85594\nQk9S 85595\nKGFuY2hvcg== 85596\nIGVzdGVlbQ== 85597\nIGJyZWFrdXA= 85598\nZGVjYXk= 85599\nICQKCg== 85600\nRWR3YXJk 85601\nQVNJ 85602\nIGF0dGFjaGVz 85603\nX0RJU0s= 85604\nIFdpbG1pbmd0b24= 85605\nIEt1bA== 85606\nIFtbXQ== 85607\nIERlcGFydG1lbnRz 85608\nIHJldHVyblR5cGU= 85609\nIFVOSVRFRA== 85610\nb2JqZWN0aXZl 85611\nIGdpcmxmcmllbmRz 85612\nX0dV 85613\nQHN0b3Jl 85614\nLU91dA== 85615\nLm1vdmVz 85616\nKHN0YXJ0RGF0ZQ== 85617\nCUpCdXR0b24= 85618\nIFBhY2U= 85619\nIEJlYXRz 85620\nIGxpY3o= 85621\nIGV0aGVyZXVt 85622\nIGNoZWVyZWQ= 85623\nIGF1Y3Vu 85624\nUmVnYXJkaW5n 85625\nIG1pZ3JhdGluZw== 85626\nIGZ1dGlsZQ== 85627\nIFRhY29tYQ== 85628\nX0NoYXJhY3Rlcg== 85629\nIHZn 85630\nIENvcGE= 85631\n2Ks= 85632\nIG5hbA== 85633\nIGxhbmRmaWxs 85634\nIHRhbWls 85635\nIHBlcnBldHJhdG9y 85636\nIFBhY2Vycw== 85637\nLmdldE9yZGVy 85638\nfA0K 85639\nR2V0T2JqZWN0 85640\nIGJsYQ== 85641\nIEhhcmFt 85642\ncG9ydGxldA== 85643\nIGxva2Fs 85644\nTWVyY2hhbnQ= 85645\nUGFzc3dvcmRz 85646\nb25lbnQ= 85647\nIGFydGVyaWVz 85648\nIEludGVsbGk= 85649\nXFN5c3RlbQ== 85650\nPWxvY2FsaG9zdA== 85651\nLmF2aQ== 85652\nIFZlbmQ= 85653\nKHRibA== 85654\nQ29ycmVjdGlvbg== 85655\nIHV0ZXJ1cw== 85656\nIHNhbGl2YQ== 85657\nKys7DQoNCg== 85658\nKCcqJyw= 85659\nIHNuYXRjaA== 85660\nIFNUUkVFVA== 85661\nKVs6 85662\n54Sh44GX44E= 85663\nU2VudGVuY2U= 85664\nKCkuJy8= 85665\nOnJlbGF0aXZl 85666\nleOCkw== 85667\nX3VzZXJpZA== 85668\nb2xpbmc= 85669\nIENsYXNo 85670\nCXNldHVw 85671\nKG1p 85672\nIGppdA== 85673\nIFNjYW5kaW5hdmlhbg== 85674\nIFBob25lcw== 85675\nIic7Cg== 85676\nIHR1bXVsdA== 85677\nIEludGw= 85678\nIFNpbm4= 85679\nKG5ld3M= 85680\nIGRicw== 85681\nIFJlbWFya3M= 85682\nS2l0Y2hlbg== 85683\nIGFkbWlyYWJsZQ== 85684\nX2Rhc2g= 85685\nIERPTUFJTg== 85686\nYWRkTGlzdGVuZXI= 85687\nIl0uKA== 85688\nCU1ldGhvZA== 85689\nbWFya3Q= 85690\nLGV4cG9ydHM= 85691\nIG91dG51bWJlcg== 85692\nX0FTQw== 85693\ncHJlbWl1bQ== 85694\nKU5VTEw= 85695\nIEJvd21hbg== 85696\nLnNldE9uSXRlbUNsaWNrTGlzdGVuZXI= 85697\nIFJlZ2V4T3B0aW9ucw== 85698\nS2Vs 85699\nL21hdA== 85700\n44GT44KM 85701\nIHdlYXJlcg== 85702\naW5pcw== 85703\nW2RpbQ== 85704\nIE51dHp1bmc= 85705\naXNidXJ5 85706\n5Yid 85707\nIHJvb3RSZWR1Y2Vy 85708\nZXlK 85709\nSW5jbHVkZWQ= 85710\nLUxlYWd1ZQ== 85711\nYW5heA== 85712\nKGluZmxhdGVy 85713\nIEZpZWxkVHlwZQ== 85714\nIHNob3Zl 85715\nIGZ1bGxmaWxl 85716\nRGF0YU1hbmFnZXI= 85717\nLmdldExlZnQ= 85718\nIEZz 85719\nZHJvcG91dA== 85720\nIOuyiA== 85721\nIG1hbmnDqHJl 85722\nIGZsYW1pbmc= 85723\nIGNvbXBsZXRhbWVudGU= 85724\n4oCw 85725\nfC4= 85726\nRW5lbWllcw== 85727\nb3NjaQ== 85728\nIFNBWQ== 85729\nIG1hcnk= 85730\nKFJ1bnRpbWVPYmplY3Q= 85731\nIH4+ 85732\nIFNpbXBzb25z 85733\nJ10uJA== 85734\nX21lbWJlcnNoaXA= 85735\nKSI6 85736\nIGxheW91dE1hbmFnZXI= 85737\nIFJvY2tlZmVsbGVy 85738\nICd8Jw== 85739\nSVBI 85740\nRE9O 85741\nYWNodGU= 85742\nUGVhY2U= 85743\naHRhcg== 85744\nQCIK 85745\nIHRyZWFkbWlsbA== 85746\nIHNwdXJyZWQ= 85747\nIEtW 85748\nbWlkZA== 85749\nIGZsb3dlZA== 85750\nw6Nlc3Rl 85751\nR2VuZXNpcw== 85752\nPT0+ 85753\nIFZlbnR1cmE= 85754\nX2VsaW0= 85755\nINC40LzRjw== 85756\nIHNvbmd3cml0ZXI= 85757\nY3JlYXRlRm9ybQ== 85758\nSUdITA== 85759\nIG1vbGRlZA== 85760\nIHJldmVyZWQ= 85761\nVW5kZXJUZXN0 85762\naW1ibGVkb24= 85763\nX1Nlc3Npb24= 85764\nIG1hc2NvdA== 85765\nIGFsZg== 85766\n66mU 85767\nPldlbGNvbWU= 85768\nIGtub2Nrcw== 85769\nIEVxdWF0aW9u 85770\nLnRvdWNoZXM= 85771\nX0xhc3Q= 85772\nIHVwYmVhdA== 85773\nYmlnaW50 85774\nIGVudmlz 85775\nL2Jhbm5lcg== 85776\n44GC44KK44GM 85777\nIERvd25z 85778\nX1NG 85779\nIHJ1bkFwcA== 85780\nIHF1ZXN0aQ== 85781\nVHJhZGl0aW9uYWw= 85782\nX3dhaXRpbmc= 85783\ncGlja3Vw 85784\nKCdALw== 85785\nCXNl 85786\nIEtlcm4= 85787\nIERlbGljaW91cw== 85788\nIHNhdHVybg== 85789\nIEpTT05FeGNlcHRpb24= 85790\n44KN 85791\nSlI= 85792\nfSgpKTsK 85793\nIFNvbWFsaQ== 85794\ndWFp 85795\naW1hZ2Vt 85796\nYW5kRmlsdGVyV2hlcmU= 85797\nw6hsZXM= 85798\naW5ib3g= 85799\nIHlhcMSx 85800\nIG1laXN0ZW4= 85801\nYF0o 85802\nU1dH 85803\nLGNsYXNz 85804\n4LWN4LQ= 85805\ndGFpZW50 85806\nIEZyYW7Dp29pcw== 85807\nQXV0aFRva2Vu 85808\nIHB1ZXN0bw== 85809\nIGps 85810\nIGdhdGVk 85811\nIERlYXRocw== 85812\nIFNpZGQ= 85813\nIHByZXZhaWxlZA== 85814\nLcOqdHJl 85815\nKGFsYnVt 85816\nIHFpbnQ= 85817\nbWFyY2E= 85818\nIE5BRlRB 85819\nIHRpZ2h0ZW5lZA== 85820\nX0dBUA== 85821\nRU5TSU9OUw== 85822\nIExpYmVydGFyaWFu 85823\nX3N0eWxlc2hlZXQ= 85824\nLlNldEludA== 85825\nX3B1Ymxpc2hlcg== 85826\ncGFnZU51bWJlcg== 85827\nenNjaGU= 85828\nIFNRTEFsY2hlbXk= 85829\nIGhvb2Y= 85830\nZ2V0VG9rZW4= 85831\nIG5lYmVu 85832\nbHVuZA== 85833\nLm1pdA== 85834\nZXJycw== 85835\nLnNldE1pbmltdW0= 85836\nLXByaWNlZA== 85837\nKHBv 85838\nZW5nYWdl 85839\nX0ZU 85840\nLy8KCgo= 85841\nIHRvbWU= 85842\nICI+PC8= 85843\nVmVjdG9ycw== 85844\nIFRlc3RVdGlscw== 85845\nZmlsdHI= 85846\nVXN1 85847\nIGRpY3Rpb25hcnlXaXRo 85848\nIG9icmFz 85849\nIEJEU00= 85850\nLmdldFRhcmdldA== 85851\nIGFsbG93YWJsZQ== 85852\nIEluc2VydHM= 85853\nCU5vbmU= 85854\nIGxpYmVyYXRlZA== 85855\nS2VudA== 85856\nIFdpc2hsaXN0 85857\nIExhZ2Vy 85858\nIGp1aW4= 85859\nIG51ZXM= 85860\nIG1vbmFzdGVyeQ== 85861\nIG1pY3Jvc2Vjb25kcw== 85862\nIEhhbm5h 85863\n0L7RgdGC0Lg= 85864\nd2VhcG9ucw== 85865\nX3Nwb3Q= 85866\nb2RvbQ== 85867\nLk1vZGVsRm9ybQ== 85868\nIG9yZGVybHk= 85869\nRklOSVRF 85870\nIHJlc2lkZW5jZXM= 85871\nX3RD 85872\nQ0dDb2xvcg== 85873\nIMW+ZQ== 85874\nIHNjcmVlbnBsYXk= 85875\nIHB5bW9uZ28= 85876\nIGTDqXQ= 85877\nIGRlc3Rh 85878\nIE5ldXJvc2NpZW5jZQ== 85879\nbmllc3Q= 85880\nQEdlbmVyYXRlZFZhbHVl 85881\nRUxTRQ== 85882\nPGw= 85883\nIGRpc2pvaW50 85884\nLnB1Ymxpc2hlZA== 85885\nZWxsYW4= 85886\nIFN0cmluZ1dyaXRlcg== 85887\nLkJyb2FkY2FzdA== 85888\nIEZlaW5zdGVpbg== 85889\nYW1waGV0YW1pbmU= 85890\nS2V5U3BlYw== 85891\nIEdyaW1t 85892\nZXR0ZWw= 85893\n4Lic 85894\nT3Q= 85895\naWJyYWx0YXI= 85896\nY2Vi 85897\nIHRpbWluZ3M= 85898\naW5lZQ== 85899\nIEFuZHLDqQ== 85900\nRXNzYXk= 85901\nLmpk 85902\nIEJ1bmRlc2xpZ2E= 85903\nUmV0dXJuZWQ= 85904\nIGFwcGFsbGluZw== 85905\nLkJpZ0ludGVnZXI= 85906\nIFNFTg== 85907\nIEhvbWVtYWRl 85908\nLmNoYXB0ZXI= 85909\nLXZhbGlk 85910\nIEFUVFJJQlVURQ== 85911\ndXN0cmlh 85912\nIGVudMOjbw== 85913\nUmV0dXJuaW5n 85914\ndmVydGlzZXI= 85915\nLlBhY2thZ2VNYW5hZ2Vy 85916\nQ2xhcms= 85917\nIHF1b3Rhcw== 85918\nIHNjYWxlRmFjdG9y 85919\nIGNveg== 85920\nX21pbmk= 85921\nIG11dGF0ZWQ= 85922\nLmFjdGl2YXRpb24= 85923\nKm1hdGg= 85924\nLnZlcnR4 85925\nPGFydGljbGU= 85926\nIGVtYnJvaWRlcnk= 85927\nL2J1c2luZXNz 85928\nY2tldHQ= 85929\nc2NpZW50aWZpYw== 85930\nIEdpbGVz 85931\nIHJhY2Vy 85932\nX3BlcmZvcm1hbmNl 85933\nIGxhbWluYXRl 85934\nIFBISQ== 85935\nUsOp 85936\nIEF0aGU= 85937\nY29sZXM= 85938\nIHNhxJ8= 85939\nIElua1dlbGw= 85940\nCXNpZw== 85941\nIHNwYWNlc2hpcA== 85942\nIGluc29s 85943\nIFVDbGFzcw== 85944\nLmxlYWRpbmdBbmNob3I= 85945\ndG90YWxz 85946\nIHNwcmlua2xl 85947\nIE1vZHVsYXI= 85948\nICdcIg== 85949\nb3Jvbg== 85950\nLlJlYWRBbGxUZXh0 85951\nICAgIAkNCg== 85952\nL2lvbg== 85953\nREVQVEg= 85954\nX21pbmltdW0= 85955\nXENhY2hl 85956\nIGRpdmVyc2lmaWVk 85957\naWduZXQ= 85958\nIGRvam8= 85959\nIFVJQWxlcnRWaWV3 85960\nL3R0eQ== 85961\nIFNhc3M= 85962\nIC9cLig= 85963\nIElNQUdFUw== 85964\nIGRhdGluZ3NpZGVy 85965\nIEV4cGxvcw== 85966\nLmdlbnJl 85967\nXEV2ZW50cw== 85968\nIGVudW1lcmF0ZWQ= 85969\nY3VycmVudFN0YXRl 85970\naXRydXN0 85971\nQ2FsbGFibGVXcmFwcGVy 85972\nRm91bmRlZA== 85973\nIHJveWFsdGllcw== 85974\nKFByb3BlcnRpZXM= 85975\nIFVTUFM= 85976\nLS0tLS0tLS0tLS0NCg== 85977\nLlJlYWRUb0VuZA== 85978\nIGNvc3k= 85979\nIGFwZQ== 85980\nX2RlZmluaXRpb25z 85981\nIHBhZ2VObw== 85982\nIGR6aWVjaQ== 85983\nc3RhbmRlbg== 85984\nIGJlc2Fy 85985\naXRpbg== 85986\nIGNvbnNlcXVhdA== 85987\nIHBydg== 85988\nIHNwbGl0dGVk 85989\nIGVzcG9zYQ== 85990\nPWZpbmRWaWV3QnlJZA== 85991\nV2Fsa2Vy 85992\nIEhlYXJ0aA== 85993\naWJyYXRvcg== 85994\nb3RvbXk= 85995\nYWdnYWJsZQ== 85996\nIOW9kw== 85997\n77yBJyk7Cg== 85998\naW9uYXRl 85999\nL3llYXI= 86000\nIHNldEM= 86001\nIE1lZGlhVGVr 86002\nLWJveQ== 86003\nLnRvb2xTdHJpcE1lbnVJdGVt 86004\nQ29uZmlncw== 86005\nYXR0ZW5kZWQ= 86006\nIGVtb2M= 86007\nIEJhaQ== 86008\nb3BvbGl0YW4= 86009\nIGludHJ1c2l2ZQ== 86010\nIHp1Zw== 86011\nIGZmbXBlZw== 86012\nX2Jvb3N0 86013\nIG1vemlsbGE= 86014\nIHNsaWNpbmc= 86015\nV0c= 86016\ncGFnZXNpemU= 86017\nUHJvcGVydHlEZXNjcmlwdG9y 86018\nIEFsZWphbmRybw== 86019\nVVNFUw== 86020\nSG9zdGluZw== 86021\nIHJpc2tpbmc= 86022\nIEludml0ZQ== 86023\nIEphemVlcmE= 86024\nIHJlZ2FpbmVk 86025\nIEhhZ3Vl 86026\nIGd1ZXJyYQ== 86027\nIGVuY2xvc2luZw== 86028\nJ10iKQo= 86029\nPFRyYW5zZm9ybQ== 86030\nLk5PUlRI 86031\nIGNyaW0= 86032\nSU5V 86033\nIGNsZW4= 86034\nIE1vdGhlcnM= 86035\nIE93bmVyc2hpcA== 86036\nRHJpbms= 86037\nIGJlYmVyYXBh 86038\nLm9uZXJyb3I= 86039\nKSsK 86040\nIHRhYkluZGV4 86041\nIERpbw== 86042\nIEZvcnR5 86043\nKExpbms= 86044\nIHNlZ21lbnRlZA== 86045\nIGphbWVz 86046\nIFRhcmdldHM= 86047\nIFJUUw== 86048\nINC60L3QvtC/ 86049\nIHZhcmlhcw== 86050\nIHTDrXR1bG8= 86051\nIGTDvHI= 86052\nL0dhbWU= 86053\ncmFuc2l0aW9u 86054\nIGRpc3Rpbmd1aXNoaW5n 86055\ndWt0dXI= 86056\nYW5qZQ== 86057\nIE1jQ2FiZQ== 86058\ncGFp 86059\nKHRr 86060\nRGVzdHJ1Y3Rvcg== 86061\nR2FtZU9iamVjdFdpdGhUYWc= 86062\nJGg= 86063\nIGFmcg== 86064\nLnNldEVtYWls 86065\nIHJlcGV0aXRpb25z 86066\nbGFuZGVycw== 86067\nIFNoZWE= 86068\nX2NsYWlt 86069\nIGFjZXNz 86070\nQmVuY2htYXJr 86071\nLkVzdA== 86072\nLlBP 86073\nIE7DpA== 86074\nIGl0Y2hpbmc= 86075\nIGNvbmRvbWluaXVt 86076\nX0ZXRA== 86077\nIHJlYWx0aW1l 86078\nIGNpdmlsaXplZA== 86079\nX3BoeXNpY2Fs 86080\nUmFs 86081\nIHdpbnRlcnM= 86082\nIFlhZA== 86083\nIGZvcmE= 86084\nIGNhbGlicmF0ZWQ= 86085\nUGV0cw== 86086\nIHN0b3JtZWQ= 86087\nIGplbA== 86088\nIFNTUA== 86089\nZGF0YWdyaWQ= 86090\nIExhdQ== 86091\ndW5hcg== 86092\ndWxmaWxsZWQ= 86093\nRVJJTkc= 86094\nIFRyaW8= 86095\n2LHZiA== 86096\nRm9yZWdyb3VuZENvbG9y 86097\nPW91dA== 86098\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 86099\nIHZpZW50 86100\nIEFETQ== 86101\nX0Nvbm5lY3Rpb24= 86102\nLWNhbmNlbA== 86103\nKCcuJyk7Cg== 86104\nIHNhaWxz 86105\nIGVxdWl2YWxlbnRz 86106\nTmI= 86107\nIGZseWVycw== 86108\nIEdJUg== 86109\na2VsaWc= 86110\nLXdhbGw= 86111\nLlJlcXVpcmVz 86112\nIGNvc2U= 86113\nIEFOQw== 86114\nIGphZGU= 86115\nIEFsZWM= 86116\nIGVuZHJlZ2lvbg== 86117\nIEVYVEk= 86118\nZWRlcmU= 86119\nVGVycmFpbg== 86120\nU3BlY2lmaWNhdGlvbnM= 86121\nIFN3ZWVw 86122\nc2V0SXRlbQ== 86123\nIHNtaXJr 86124\nIHNjcmlwdGVk 86125\nW1N5c3RlbQ== 86126\n56eB 86127\nIHN5bmNlZA== 86128\nIHNxcg== 86129\nZ2V3YXRlcg== 86130\nIGpld2Vscw== 86131\nIGhkYw== 86132\n4KWN4KSw 86133\nz4Y= 86134\nw7xzc2VsZG9yZg== 86135\nbGllbg== 86136\nQm9yZGVycw== 86137\nIEF0b21pY0ludGVnZXI= 86138\nIHBhcmFseXNpcw== 86139\nQ2xhc3NpZmljYXRpb24= 86140\nIGdsaWRl 86141\nIHVtcA== 86142\nIC8+fQ== 86143\nIHZlbmRpbmc= 86144\n4Li04LiZ 86145\nbm90aWY= 86146\nJl8= 86147\nIEVtZXJnaW5n 86148\nYXRpY29u 86149\nIHByb3BhZ2F0ZWQ= 86150\nLW9yZGVycw== 86151\nYWdhcw== 86152\ndXJnZW50 86153\nKFRpbWVTcGFu 86154\nQUxDSEVNWQ== 86155\nL2Jvd2Vy 86156\n7IKw 86157\nLmJvb3N0 86158\nLmRlcGVuZGVuY2llcw== 86159\nLlN3aW5nQ29uc3RhbnRz 86160\ndW50bGV0 86161\nLmNoYXJz 86162\nLWNpZ2FyZXR0ZXM= 86163\nIE1vZHM= 86164\nICAgICAJ 86165\nIGJyYXZlcnk= 86166\nIGNvdW50ZXJlZA== 86167\ncmVsdWRl 86168\nX21vYg== 86169\nQUlORUQ= 86170\nbmdvaW5n 86171\nIHVuZGVyZ3JhZA== 86172\nR2V0TWV0aG9k 86173\nRHVhbA== 86174\nX2pvdXJuYWw= 86175\nLE5v 86176\nIHNpZGVs 86177\nIExhcnNvbg== 86178\nKyIsIis= 86179\nIG5hcnJhdGlvbg== 86180\nIFN1YndheQ== 86181\nIExleGVy 86182\nIE5pbmc= 86183\naW5kaWM= 86184\ndGhhbmU= 86185\nLlNJRw== 86186\nLWVhcnRo 86187\nIGJlcnJ5 86188\nIFRldWNob3M= 86189\nCUVudGl0eQ== 86190\nZXJzcGVjdGl2ZQ== 86191\nTm9z 86192\nIE93bmVk 86193\nQlVS 86194\nIGxpbmVubw== 86195\nIEZpamk= 86196\nR2V0SW50 86197\nU3RyaW5nUmVm 86198\nICcmJw== 86199\ndWFkYQ== 86200\nLmNhcHRpb24= 86201\nYXBwTmFtZQ== 86202\nKG9mZg== 86203\nIHZlcnN0 86204\nIHR5cG8= 86205\n6ZyA6KaB 86206\nYXRlcmFuZ2VwaWNrZXI= 86207\nIHFlbXU= 86208\nIEdFTw== 86209\nX0Ns 86210\nLklU 86211\nIE51bmVz 86212\nW1o= 86213\nIENvbXBsZXRlbHk= 86214\nLkxpdmU= 86215\nIEphcw== 86216\nIHdlaXQ= 86217\nY29zaXR5 86218\nIHBvbGljZW1lbg== 86219\nKHRhcmdldHM= 86220\naXRsZWRCb3JkZXI= 86221\nIOinow== 86222\nLkdsaWRl 86223\nIGRlbW9uaWM= 86224\nSW50ZXJpb3I= 86225\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 86226\nIERvdGE= 86227\nIG9yYml0cw== 86228\nQU1Z 86229\nIFRyaW5pZGFk 86230\naWN1bQ== 86231\nLnph 86232\nIGdldEludA== 86233\nQXRsYW50YQ== 86234\nIGFtbmVzdHk= 86235\nIFJhaHVs 86236\nIF98 86237\naGlybw== 86238\nIFRBS0U= 86239\nIGp1bWxhaA== 86240\nIEF1dG9tb2JpbGU= 86241\n4buP 86242\nd2hvc2U= 86243\nX1NBTVBM 86244\nUGF0aWVudHM= 86245\nINGC0LXQutGD0Yk= 86246\nLnN1YnNjcmlwdGlvbnM= 86247\nIE1lbnRpb24= 86248\nVG9Xb3JsZA== 86249\naXBh 86250\nCU1lc3NhZ2VCb3g= 86251\nPEFwcGxpY2F0aW9uVXNlcg== 86252\nINil 86253\nZmFicmlj 86254\na2VsZXRhbA== 86255\nQmFyQnV0dG9u 86256\nIGFyY2hldHlwZQ== 86257\naW5zdGFudA== 86258\nIGludGVybmFjaW9uYWw= 86259\nIFZveWFnZXI= 86260\nKHRvdWNo 86261\nIFZhbGs= 86262\nL01JVA== 86263\nIGNhdWw= 86264\nJ0Nvbm5vcg== 86265\nKCIh 86266\nKE9Q 86267\nZmFjdWx0eQ== 86268\nIEJhdG9u 86269\nIFZvbHVudGVlcnM= 86270\ndGFuaw== 86271\nX0JJTkRJTkc= 86272\nO2xpbmU= 86273\nIFZlcnNpb25z 86274\nWUxFUw== 86275\nIGplZXA= 86276\nKEVuY29kaW5n 86277\nIGdlb2xvZ2ljYWw= 86278\nTmljaA== 86279\nKHBkZg== 86280\nIGFuYWx5emVz 86281\nIGNhcHRpdmF0aW5n 86282\nIGhpem8= 86283\nLm1kbA== 86284\nIGphcA== 86285\nIGZsaXBz 86286\nCWRm 86287\nIFBpZXQ= 86288\nIG5yb3dz 86289\nIGthbXU= 86290\nINCy0L7Qtw== 86291\nIHBydW5pbmc= 86292\nYWN1bGE= 86293\nIHRyYXZlbGxlcg== 86294\nU2hvb3Q= 86295\nLmVwc2lsb24= 86296\nIEZsZW1pbmc= 86297\naWJ1cg== 86298\nb3BlcmF0ZQ== 86299\naWdodGVy 86300\nIGJlZ3M= 86301\nIFdhbG51dA== 86302\nKFBhcnNlcg== 86303\nIHdpdGhkcmF3YWxz 86304\naXNjb3BhbA== 86305\nIGJpbGxib2FyZA== 86306\na2Vr 86307\nLW9wZW5pbmc= 86308\nIER1ZGU= 86309\nY29uaQ== 86310\neEVC 86311\nIGNhbG9y 86312\nYW1haGE= 86313\nLlRYVA== 86314\nRHJ5 86315\nIG1pc3Npb25hcmllcw== 86316\nX1ZlcnNpb24= 86317\nIG11bHRpbGluZQ== 86318\n4oCUd2U= 86319\nIGNvbXBvbmVudERpZFVwZGF0ZQ== 86320\nRmF2b3JpdGVz 86321\naWdoYW0= 86322\nIGpvdXJuw6ll 86323\nIGFtdXNlZA== 86324\nIE9tbmk= 86325\ndGd0 86326\nIHdhaA== 86327\nZXRpbmU= 86328\nIHBoYXNlZA== 86329\nIG9uU3RvcA== 86330\nY3JlYXRpdmVjb21tb25z 86331\nU29waA== 86332\nIHVuYm9ybg== 86333\nPUU= 86334\nIEZlZEV4 86335\nbm9ybWFsbHk= 86336\nIGx5cg== 86337\nTWF0cml4TW9kZQ== 86338\nIHplaWdlbg== 86339\nQXRo 86340\nIEt1bQ== 86341\nw6RobGVu 86342\nLyI7Cgo= 86343\nIGRhbGxl 86344\nIGxhbmNl 86345\nIFN1aXRhYmxl 86346\nIGNvdW5zZWxvcnM= 86347\n5YWo6YOo 86348\nIGZhc3Rh 86349\nIGJsYXppbmc= 86350\n7KeE 86351\nL3R1dG9yaWFs 86352\nLnRjcA== 86353\n5pmv 86354\nTWFuYWdlckludGVyZmFjZQ== 86355\nIFNhbWFy 86356\nCWdsVW5pZm9ybQ== 86357\nIHByZXJlcXVpc2l0ZXM= 86358\nIGFudGljaXBhdGluZw== 86359\ncmFxdW8= 86360\na3Nlbg== 86361\nTWFnbml0dWRl 86362\ndXRvbWF0aW9u 86363\nSGllcmFyY2h5 86364\nIGRldmlhdGlvbnM= 86365\naW1ldA== 86366\nQ0NJ 86367\nPSgK 86368\nIGFudGxy 86369\nCWluaXRpYWw= 86370\nIFJlc29ydHM= 86371\naG9tZXM= 86372\nCXBvb2w= 86373\nIG1hdMOp 86374\nP29wdGlvbg== 86375\nOm15c3Fs 86376\nKHV0Zg== 86377\nLlRhYkNvbnRyb2w= 86378\nPlRpdGxl 86379\nIEFkb3B0 86380\nLklzTWF0Y2g= 86381\nIGVudHJ1c3RlZA== 86382\nU3VzYW4= 86383\nc3dpbmc= 86384\naW1hZ2VuZXM= 86385\nIHNlbGVjaW9u 86386\nIGFpZGluZw== 86387\nKFtdKg== 86388\nIHNldEZyYW1l 86389\nc3Bpcml0 86390\nL3Jzcw== 86391\nSXRhbGlj 86392\nIFByb3BlbEV4Y2VwdGlvbg== 86393\nIFRvbGw= 86394\nLkZpbmRHYW1lT2JqZWN0V2l0aFRhZw== 86395\naW5hbnQ= 86396\nIHNlbGZpZXM= 86397\nXXxb 86398\nIGFwcGxpY2F0aW9uQ29udGV4dA== 86399\naXhl 86400\nY2Ri 86401\nZWJi 86402\nIE92ZXJzZQ== 86403\nIHNxbENvbW1hbmQ= 86404\nSG9zdE5hbWU= 86405\nLWxhdW5jaA== 86406\nUmlzaw== 86407\nO3I= 86408\nLlNwYW4= 86409\nX0NJVFk= 86410\nX01B 86411\nLyIKCg== 86412\nUGF3bg== 86413\nIFllbHA= 86414\nQnVuZGxlT3JOaWw= 86415\nIG1heW9yw61h 86416\nU3RhY2tOYXZpZ2F0b3I= 86417\nITsK 86418\nIHRodWdz 86419\nIEJhcm5ldHQ= 86420\n44O744O744O7Cgo= 86421\nIOqygA== 86422\nX0NPTlY= 86423\nIGJ1enppbmc= 86424\na2V0ZXJhbmdhbg== 86425\nTWlsaXRhcnk= 86426\nd2VlZA== 86427\nIGRlbGltaXRlZA== 86428\n6LWE5rqQ 86429\nINCw0Lo= 86430\nX0hFTFBFUg== 86431\nIFJFQURZ 86432\nTG9vcGVy 86433\nKioqKi8K 86434\nIFRydWNrcw== 86435\n5Y67 86436\nX3BvZA== 86437\nT01BVElD 86438\nLWphdmE= 86439\nIHVuaWZ5 86440\nL0FyZWE= 86441\nICcvJyk7Cg== 86442\nIEdhbWJsaW5n 86443\nLkhpdA== 86444\nIEZhcnJlbGw= 86445\nX2ZpdG5lc3M= 86446\ncmVjb21tZW5kZWQ= 86447\nemVuZA== 86448\nb2RpZQ== 86449\nX2JlYW0= 86450\nIHBsYWdl 86451\nbmRvbg== 86452\nLmFzc2VydGo= 86453\nIGdyYXRl 86454\nTWVhc3VyZWQ= 86455\nLmNlbnRyYWw= 86456\nZ2VzdHVyZQ== 86457\nIEdsb2JhbEtleQ== 86458\ncHl4 86459\nIE5lY2tsYWNl 86460\n5Y2O 86461\nLkFkZENvbHVtbg== 86462\nIFJ1ZGQ= 86463\nIFByZXNieXRlcmlhbg== 86464\ndW5kbGVy 86465\nIyFb 86466\nX2xhaGly 86467\nKCk9PSI= 86468\nQWNjZXNzaWJpbGl0eQ== 86469\nLXRyYWluaW5n 86470\nIFRob3U= 86471\nX1BJWA== 86472\nX1RSWQ== 86473\nPEo= 86474\nxrDGoW5n 86475\nbHVjaw== 86476\nX01BWElNVU0= 86477\nIHRoYXc= 86478\nVW5pZmllZA== 86479\nPkNvbnRhY3Q= 86480\nLVByZXNpZGVudA== 86481\nLXBhcnNl 86482\nIFBpY2tlcg== 86483\nTWFyY28= 86484\ndHJz 86485\nzrQ= 86486\nLiQu 86487\nX01FU0g= 86488\nIHNhZ3Rl 86489\nKz0n 86490\n0K8= 86491\nKHBhcmNlbA== 86492\naXZvcnM= 86493\nIGRpdmVydGVk 86494\nQUdBSU4= 86495\nIG5lc3M= 86496\nIHZhbGxleXM= 86497\nIC4uLig= 86498\nIEVRVUk= 86499\nIE91dHM= 86500\nIERlbW9uc3Ry 86501\nRGV0YWxsZQ== 86502\nIOu2gA== 86503\nUG9pbnRYWVo= 86504\nLmVwcw== 86505\nIHN5bm9ueW1z 86506\nID09KA== 86507\n4oCcWWVz 86508\nJ3V0aWxpc2F0ZXVy 86509\nTmFtaW5n 86510\nTEVW 86511\ncHJvdG9jb2xz 86512\nIOyb 86513\nIGdldFVzZXJuYW1l 86514\nLXZhcg== 86515\nX210eA== 86516\nIHNwZWN1bGFy 86517\nIG5vdGFz 86518\nSG9yaXpvbnRhbEFsaWdubWVudA== 86519\nIEJheWVy 86520\nc3Vz 86521\nICAgIAkJCg== 86522\nIFNoYWNr 86523\ncmVzaGVy 86524\nIGltbWF0dXJl 86525\nYnJhY2h0 86526\nSVNDTw== 86527\nLmNyZWRpdA== 86528\nIHZpbmVz 86529\nX0xQ 86530\nRUVERUQ= 86531\nIFNjYXJib3JvdWdo 86532\nw6FudA== 86533\nKT09Jw== 86534\nCWRlbHRh 86535\nX0NPTE9SUw== 86536\nLkN1c3RvbUJ1dHRvbg== 86537\nIGFmaXJt 86538\nIEppbmc= 86539\nUGFybXM= 86540\nY2VudGVycw== 86541\nLT5fX18= 86542\nIExETA== 86543\nLWNvbnRyaWI= 86544\nIERyZXNkZW4= 86545\nIFBpeGVscw== 86546\nICIiIiIsCg== 86547\nTEVUVEU= 86548\neEJF 86549\nIEh1c3Q= 86550\nIEV4ZWN1dGlvbkNvbnRleHQ= 86551\nIEJ1ZmZldHQ= 86552\nY2xhbXA= 86553\nLkFydGljbGU= 86554\nIFJhdGg= 86555\nIFBleXRvbg== 86556\nIExPV0VS 86557\nb29rZQ== 86558\nIHRpZGFs 86559\nIHVuaGVhcmQ= 86560\nIFNoYWxs 86561\nIGJvbWJhcmQ= 86562\nYW5vdmE= 86563\nW21hc2s= 86564\nKGNyZWRlbnRpYWxz 86565\nIEV1cm9z 86566\nIGJyYW5jaGluZw== 86567\nIHN0cm9uZ2hvbGQ= 86568\nIGNpdmlsaXphdGlvbnM= 86569\nLWNvbm5lY3Q= 86570\nIExTVE0= 86571\nLW1vdmluZw== 86572\nIHV0ZW4= 86573\nY3Jhc3Q= 86574\nX0RJU1A= 86575\nIENvbnRyb2xsZXJz 86576\ndXBl 86577\nLnBlbg== 86578\nIGRlc3Nh 86579\nIGRpZsOtY2ls 86580\ndWl0YWJsZQ== 86581\nb2ZpcmU= 86582\nW2NoaWxk 86583\nUkVGRVJFTkNFUw== 86584\nIGRlY2VpdA== 86585\nIFVyZw== 86586\nPEVkZ2U= 86587\nIGRlc2k= 86588\nIEJPVEg= 86589\nICcpJzsK 86590\ndHlwZU5hbWU= 86591\nQ29tbWFuZEV2ZW50 86592\nd2hlcmVJbg== 86593\nKG9wdGltaXplcg== 86594\nIHLDqWFsaXM= 86595\nIG9taW5vdXM= 86596\nIEJyYWNrZXQ= 86597\nIGRhdGVTdHJpbmc= 86598\nIHNpbmdseQ== 86599\nKEpGcmFtZQ== 86600\n4oCZVA== 86601\nZXNsaW50 86602\nKGhlcm8= 86603\nIE1hcmE= 86604\nIGNhdGNoeQ== 86605\nLGNhbGxiYWNr 86606\nIGN0eXBl 86607\ncHJlc2V0 86608\nCWdsZnc= 86609\n0LXRiQ== 86610\naGs= 86611\nIHRpdGFu 86612\nQWNlcHRhcg== 86613\n44Gh44Gv 86614\nX2Fzc2lnbmVk 86615\nX2VyYXNl 86616\nIGluZmFuY3k= 86617\nUmV2aWV3ZXI= 86618\nIFJlY29yZGVy 86619\nIHNjbQ== 86620\nIEJpZ2dlc3Q= 86621\nIEdvYQ== 86622\nCVND 86623\nX0xvY2F0aW9u 86624\nX29yaQ== 86625\na2ls 86626\ncmVuZGU= 86627\nIG1hcnpv 86628\nU3RyaW5nVXRpbA== 86629\n0YPRidC10YHRgtCy 86630\nIEhvd2U= 86631\nxrDhu51p 86632\nZm9pcw== 86633\nWE1MRWxlbWVudA== 86634\nIGRlcmVjaG9z 86635\nIGR1bmc= 86636\nIFdhaw== 86637\nIEdhdw== 86638\nfVxc 86639\nISIpOw== 86640\nIEpvaGFubmVzYnVyZw== 86641\nIHN1Ym1hcmluZXM= 86642\nIGFjY29s 86643\nIGZvc3RlcmluZw== 86644\nLgoKCgoKCgoKCgoKCg== 86645\nLk9wZXJhdG9y 86646\nIG51b3Zh 86647\nIHRyYWplY3Rvcmllcw== 86648\nLnNjaGVkdWxlcnM= 86649\nIEZvbGxvd2Vycw== 86650\nIEFuZGVyc2Vu 86651\nIFBlZ2d5 86652\nLmZyZQ== 86653\nxLFjxLE= 86654\nIGt2cA== 86655\nY29i 86656\nLWxlbg== 86657\nIG1haWxz 86658\nIGFjY3I= 86659\nIEpBVkE= 86660\nIGFkbWluaXN0ZXJpbmc= 86661\nRGVmYXVsdENlbGxTdHlsZQ== 86662\nIGNsaWNrYWJsZQ== 86663\nIEphY2tldHM= 86664\nO2Rpc3BsYXk= 86665\nIGJyZWFkY3J1bWJz 86666\nY2hhbA== 86667\nOic7Cg== 86668\nIEhvdmVy 86669\ndWNjaGluaQ== 86670\nIHRlYw== 86671\nIHN0b3B3YXRjaA== 86672\nX1JlbGVhc2U= 86673\nTWF5b3I= 86674\n4Z62 86675\nIFlhbmtlZQ== 86676\nY2huZXI= 86677\nQXJ0aWZhY3Q= 86678\nLmJhbm5lcg== 86679\nIGtm 86680\nX3N0dWR5 86681\nZm92 86682\nIE1lZXRpbmdz 86683\nw7Zt 86684\nIGluanVyaW5n 86685\nL2RvY3VtZW50YXRpb24= 86686\nQkNN 86687\nc3R5bA== 86688\nCXJi 86689\nIG9yaWdpbmFscw== 86690\nIGZsZXJl 86691\nIFRlcnJhcmlh 86692\ndG9rZW5pemVy 86693\nLWxpdGVy 86694\nJyk7Ig== 86695\nIHBldGl0cw== 86696\nIEJidw== 86697\nIFRoaWVm 86698\nVUlMVElO 86699\nUk9VVA== 86700\nIHNudWc= 86701\nPj4p 86702\nLW5pbmU= 86703\nIH1dOwoK 86704\nIEJlbGxldg== 86705\nIGVsw6k= 86706\nIHl5bg== 86707\neW5hbW8= 86708\nZ2xlcw== 86709\nIHNwZWQ= 86710\nLkJVVFRPTg== 86711\nIGRpc3BlcnNpb24= 86712\nb3VibGVz 86713\nIG5vdmVsbGVy 86714\nIl0uIg== 86715\nIHByaWVzdGhvb2Q= 86716\nICIiKQoK 86717\nCWd1aQ== 86718\nLWluYw== 86719\nWG1sTm9kZQ== 86720\nIHN0dWRz 86721\nLklzQWN0aXZl 86722\nIHRyw6Q= 86723\nIG9yZGFpbmVk 86724\nIEJ5dGVBcnJheUlucHV0U3RyZWFt 86725\nIHJlcXVlc3RCb2R5 86726\nIFJUUA== 86727\nUkVTVUxUUw== 86728\nKGNvbGw= 86729\nIHJlbG9hZGluZw== 86730\nLk5hdmlnYXRvcg== 86731\nX2NvdW50ZXJz 86732\nIGJ1ZGRpbmc= 86733\nIGxpY2Vuc2Vl 86734\nb2xvZ2k= 86735\nIHPhuqNu 86736\nIEtpcw== 86737\nIEZsYXR0ZW4= 86738\nX3ByaQ== 86739\nIGFwcHJvcHJpYXRpb24= 86740\n6K+E6K66 86741\nX1JTUA== 86742\nY29tYmF0 86743\nX1BH 86744\nIGhpc3RvZ3JhbXM= 86745\nZHE= 86746\nRW50ZXJwcmlzZQ== 86747\nIE5PQUE= 86748\nIFNwZWVkd2F5 86749\nIGJhZ2k= 86750\nIEJld2VydA== 86751\nRmxvYXRpbmc= 86752\nIEtpbWJlcmx5 86753\nUHJvc2Vj 86754\nSmltbXk= 86755\nIEVsaWFz 86756\nIGFyYml0cmFyaWx5 86757\nIOS9v+eUqA== 86758\nIENvdW50cw== 86759\ndXN0ZQ== 86760\nRmlyc3RDaGlsZA== 86761\nIENsZWFucw== 86762\nLnB1cmNoYXNl 86763\nIGludGVycG9sYXRlZA== 86764\nIGJ1aWxkdXA= 86765\nX1NURU5DSUw= 86766\nRWd5cHQ= 86767\nIGF1cmU= 86768\nLnRydXRo 86769\nZmVvZg== 86770\nIEdpbQ== 86771\nb2NhY2hl 86772\nIFV0dGFy 86773\nX0NPTVBMRVRFRA== 86774\nU2Vlbg== 86775\nIE5hcG9saQ== 86776\nKGRt 86777\nIGdyaXR0eQ== 86778\nLmVudGVycHJpc2U= 86779\nY29uZXhhbw== 86780\nIGdhdGhlcnM= 86781\nIHNldFNlYXJjaA== 86782\nIENsaWZmb3Jk 86783\nIFNuYXBl 86784\nIFNhbHZhdGlvbg== 86785\nTG9naW5Gb3Jt 86786\nQ3JpdGljYWxTZWN0aW9u 86787\nLnVzZXJkZXRhaWxz 86788\nIHJlcGFpbnQ= 86789\n44GC44KK44GM44Go44GG 86790\nSHVudGVy 86791\nWmVu 86792\nVGlueQ== 86793\nbWxhbmQ= 86794\nZXJ0aWw= 86795\nCWJ1ZmY= 86796\nX09mZnNldA== 86797\nIHNtZWxsZWQ= 86798\nUml2ZXI= 86799\nLXRvcGlj 86800\nIGFjb21w 86801\nIFJvdXRlU2VydmljZVByb3ZpZGVy 86802\nIDwr 86803\nb21icw== 86804\nIENvb3BlcmF0aXZl 86805\nIHNldWxl 86806\nIGFpbWU= 86807\nc2hvdWxkUmVjZWl2ZQ== 86808\nSG9uZw== 86809\nIG9hc2lz 86810\nIEdlbWluaQ== 86811\ncmFwaWQ= 86812\nRHVw 86813\nKFF0R3Vp 86814\nb2RvbnQ= 86815\nLWdudQ== 86816\nIFNlbGVuaXVt 86817\nJyk/Pjwv 86818\nIE5vcGU= 86819\nR3JlYXRlclRoYW4= 86820\nLk9ic2VydmVy 86821\nIEFwcHJvcHJp 86822\nIExvbmVseQ== 86823\nIGhhaXJjdXQ= 86824\nIGFsbGVyZGluZ3M= 86825\nw7NwZXo= 86826\nesWR 86827\nIHNsdW1w 86828\nIEdpbnM= 86829\nIGdpb3JuaQ== 86830\nIHBhcGVyYmFjaw== 86831\nLkZpbGVSZWFkZXI= 86832\nZGFm 86833\nY3JlZHM= 86834\ndHlwaW5ncw== 86835\nZGVoeWRl 86836\nY29pbA== 86837\nU291dGhlcm4= 86838\nIG1vdXNlQ2xpY2tlZA== 86839\nemVpY2huZXQ= 86840\ndXNlclJlcG9zaXRvcnk= 86841\nRGVzdHJveWVk 86842\naW50ZXJuZXQ= 86843\nIEVpZA== 86844\nIGxpbmtlcg== 86845\n4oCZQg== 86846\nIHNsYXVnaHRlcmVk 86847\nIFBlcnI= 86848\nCVJ1bnRpbWVPYmplY3Q= 86849\nc2FpZGE= 86850\nIHBhZ2VDb3VudA== 86851\nIFJhbmRvbHBo 86852\nIEpOSUVudg== 86853\nX3N1cGVydXNlcg== 86854\nLWRpcmVjdGVk 86855\nIElEYg== 86856\nIEJlcm5hcmRpbm8= 86857\nIE5pbnRo 86858\nIEFsZ29yaXRobXM= 86859\nYmRi 86860\nQHRlc3RhYmxl 86861\nLmFybQ== 86862\nYmVsbGlvbg== 86863\nKHNpZA== 86864\nIGJyaWVmZWQ= 86865\n4pWX 86866\n6YWN572u 86867\nIFVtYQ== 86868\nIEluZGljZXM= 86869\nIEJ1Y2NhbmU= 86870\nIGF5YW50 86871\nRnJlZWRvbQ== 86872\nIFl1cmk= 86873\nZXRzaw== 86874\nX1Bo 86875\nIGl0YWxpYQ== 86876\nY2xvc2luZw== 86877\nIHdyaXN0cw== 86878\nICp9 86879\nc2VjdXRpdmU= 86880\nRW52aWFy 86881\ncmFpdGg= 86882\nIEhhd3Ro 86883\n15M= 86884\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 86885\ncGFnZVRpdGxl 86886\nIGRoY3A= 86887\nIOyLpO2WiQ== 86888\nd2lzaGxpc3Q= 86889\nIGJsYW1lcw== 86890\nIHNpZGw= 86891\ndWRkZWQ= 86892\nIGNvbnRyb3ZlcnNpZXM= 86893\n6I8= 86894\nKHVzZXJEYXRh 86895\nIGxpbnNwYWNl 86896\nIERpZmZlcmVuY2Vz 86897\nX2RlcG9zaXQ= 86898\nREVUQUlM 86899\nLmRlY2s= 86900\nIGNvbnRpbnV1bQ== 86901\nIHNhY3JhbQ== 86902\nb21pdGU= 86903\nIG5mbA== 86904\nQ3Vt 86905\nIHNvZg== 86906\nIGV2aWxz 86907\nIGVudGlkYWQ= 86908\nCXNvY2s= 86909\nIExlbW1h 86910\nLlNoaXA= 86911\nIHppZw== 86912\nVGVsZWZvbmU= 86913\nSURFUw== 86914\nIE51bWVyb3Vz 86915\nLm1ldHJpYw== 86916\naW5zbg== 86917\nIGNvcHlyaWdodHM= 86918\nIGNvbXBsaWNhdGlvbg== 86919\nIFVSTFNlc3Npb24= 86920\nIGRpcHBpbmc= 86921\nIGNx 86922\nIEJ1c3R5 86923\ncmVsYXRpb25zaGlwcw== 86924\nIENvcnZldHRl 86925\nU3VtbW9u 86926\nZXZlbnROYW1l 86927\nSXNzdWVz 86928\nIGlycmVzaXN0aWJsZQ== 86929\nIGdyaXM= 86930\nQ0FTQ0FERQ== 86931\nIHBhdXNlcw== 86932\nIGxlZGdl 86933\nX0dQ 86934\nLkltcA== 86935\nIG9yZGVyYnk= 86936\nIE9yZ2FuaXplcg== 86937\nIEdyZWVud2ljaA== 86938\nT2Fr 86939\nLW1lbWJlcnM= 86940\nIFdlYkdM 86941\nIGdhbW0= 86942\nbW9kdWxlSWQ= 86943\nIGZ1bGxQYXRo 86944\nbG9nZW4= 86945\nKGV2ZW50TmFtZQ== 86946\nKCIuIik7Cg== 86947\nIGtyaXN0 86948\nIGNsaWZmcw== 86949\nIFBlcmNlcHRpb24= 86950\nRVRJTkc= 86951\nIGzhuqFp 86952\nIGludGVydg== 86953\nIG9wcG9ydHVu 86954\nIEp1ZGdlcw== 86955\nIENvbWJpbmF0aW9u 86956\nY29udGludWVk 86957\nY29ubw== 86958\nLmRyYXdSZWN0 86959\nLkNvbXBvc2U= 86960\nIHNpZ3VpZW50ZXM= 86961\nIER1ZmZ5 86962\nKGVuY29kaW5n 86963\nIFZ1bGthbg== 86964\nIEdlcnI= 86965\nIHBhcmZhaXQ= 86966\nKHl5 86967\nX1RIQU4= 86968\nIGdldFNlcnZpY2U= 86969\nX09SRA== 86970\nLGVw 86971\nZ3JhcGhpYw== 86972\nIFF1ZXJpZXM= 86973\nIHBhcnRpY3VsYXJz 86974\nIEhhdmFuYQ== 86975\nPW8= 86976\nZmFucw== 86977\nIHVuaWxhdGVyYWw= 86978\nIFJGSUQ= 86979\nQ29tcGF0aWJpbGl0eQ== 86980\nc3RyYW5k 86981\nIHdha3R1 86982\nIHF1YWxpZGFkZQ== 86983\nUHJvcGVydHlQYXJhbXM= 86984\ncmV0ZW4= 86985\nKGhvc3RuYW1l 86986\nX0NBUg== 86987\nIHdpZGVuZWQ= 86988\nIFhwZXJpYQ== 86989\ncG9sbG8= 86990\nQWJvcnQ= 86991\nISEpCg== 86992\nIFdhZw== 86993\nLS0r 86994\nINGC0YA= 86995\nIFJlY3Vyc2l2ZQ== 86996\nIGFubmU= 86997\nIEdhbWVwbGF5 86998\nPENsaWVudA== 86999\nLlVzYWdl 87000\nIElTU1VF 87001\nIGpkYmM= 87002\naXNvcnk= 87003\nX21hY3Jvcw== 87004\ncGlja2xl 87005\nLmdhbWVzZXJ2ZXI= 87006\nIHR2Yg== 87007\n0YLRiw== 87008\nLk9QRU4= 87009\nIHByZWRldGVybWluZWQ= 87010\nIHNpcmU= 87011\nCQkJDQoJCQkNCg== 87012\naXNjcmltaW5hdGlvbg== 87013\nIHJlcGVhbGVk 87014\nIGNvbmplY3Q= 87015\nIFByZWNvbmRpdGlvbnM= 87016\nIHRpbHRlZA== 87017\nIGlub2M= 87018\nIGV1cm9wZWFu 87019\nYWJk 87020\nX0RFTEVURUQ= 87021\nIC0s 87022\n4oCTYW5k 87023\nQEZYTUw= 87024\nICldCg== 87025\nUklORw== 87026\nIGFsaXF1YQ== 87027\nIGdydWVzb21l 87028\nIEluY2hlcw== 87029\nUGxheWVk 87030\nKGNvbmZpcm0= 87031\nIE5WSUM= 87032\nX1RvdGFs 87033\naXNhcw== 87034\nIE9uaW9u 87035\nIHNlY29uZG8= 87036\nIEdldFVzZXI= 87037\nXFVybA== 87038\nX2Fic3RyYWN0 87039\nIGRldmV6 87040\nIGN1cGJvYXJk 87041\ndGV4dHM= 87042\nIElzbGVz 87043\nX01BVEg= 87044\nU2tpcHBpbmc= 87045\nX2Nvc3Rz 87046\nPW91dHB1dA== 87047\naWJpbGk= 87048\nIGtudWxs 87049\nX2NvZWZmcw== 87050\nX2F0dGVtcHQ= 87051\nCVJ1bg== 87052\nZ2VuZGVu 87053\ncnVwdGVk 87054\nIHNvYXJlZA== 87055\nX2hz 87056\nIGFkb3B0cw== 87057\nX01PRElGSUVE 87058\nXEZhY3Rvcmllcw== 87059\nIFN3ZWF0 87060\nIGRva3VtZW50 87061\nIFRlbGVzY29wZQ== 87062\nIEZpeGVz 87063\nb3JxdWU= 87064\nLkNoYXJ0aW5n 87065\nX0RBQw== 87066\nIHNlY3JldGlvbg== 87067\nIHJoZXRvcmljYWw= 87068\nUGVyZmls 87069\nIG3DtmNodGVu 87070\nLCcs 87071\nIHZpZXdQYWdlcg== 87072\nQlVZ 87073\nIG9uRm9jdXM= 87074\nb3NhbHM= 87075\nIGJpc2N1aXRz 87076\nIHZib3g= 87077\nIGZvcmNlZnVsbHk= 87078\nTmludGVuZG8= 87079\nIHbDoWw= 87080\nIGNsYW5z 87081\nZnJvZw== 87082\nIGJvcmRlclRvcA== 87083\nQnJpZWY= 87084\nLkJvcmRlckZhY3Rvcnk= 87085\nLXNlcnZpbmc= 87086\nIHF1b3RhdGlvbnM= 87087\nIEdhcm5lcg== 87088\nIEFsbGV5 87089\nIj8+Cg== 87090\nKHNjYW5uZXI= 87091\nIGVudGFpbA== 87092\nIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 87093\nKGA8 87094\nLmRlc2NyaXBjaW9u 87095\nX0J5 87096\nIOyalA== 87097\nIHBha2lzdGFu 87098\nZWxobw== 87099\nRW5naW5lZXJpbmc= 87100\nIGJvb24= 87101\nIExvb3Nl 87102\naWVyZ2U= 87103\nU2VuYXRl 87104\nIExZ 87105\ncmVzcG9uc2VPYmplY3Q= 87106\naW9yZQ== 87107\nw6FnZW5lcw== 87108\nIOS4jQ== 87109\nIGFkZEFjdGlvbg== 87110\nIE1BQ0hJTkU= 87111\nYW5na2Fu 87112\nX21p 87113\nX0FSUg== 87114\nTGl0ZXI= 87115\nT0xG 87116\nIHN1cHBlcg== 87117\nIHBhdGhNYXRjaA== 87118\nIE9ycg== 87119\nw61k 87120\nKGZpbHRlcmVk 87121\nIGF1dGhUb2tlbg== 87122\nIOKEnQ== 87123\nLTwv 87124\nKHRlbnNvcg== 87125\nIHJldm9sdmluZw== 87126\nIGluaWNpYXI= 87127\nIFNjaHdhcno= 87128\nZGVmZ3JvdXA= 87129\nY29sdW1uTmFtZQ== 87130\nX3RyYWplY3Rvcnk= 87131\n4LmE4Lih 87132\nZWdhc3Vz 87133\nIOydtOumhA== 87134\nIGVhdGVy 87135\nIHVuZGVyZXN0aW1hdGVk 87136\nIGJ0Yw== 87137\nIOyEoO2DnQ== 87138\nZW5hZGU= 87139\nIFNFWFA= 87140\nZW1vdXRo 87141\nT01FVFJZ 87142\nZW50ZXJlZA== 87143\nLnBob25lTnVtYmVy 87144\nIFZvYw== 87145\nIGV4Y2Vzc2l2ZWx5 87146\nIENBVEVHT1JZ 87147\nX1VQREFURUQ= 87148\nIG1vbmFyY2h5 87149\nYXJjaHM= 87150\nIGNhdmVhdA== 87151\nd2lucw== 87152\nIHBsYXlib29r 87153\nc2hhZGU= 87154\nIHNldFVzZXJuYW1l 87155\nIGFjY3VzZXM= 87156\nIG1vxbxsaQ== 87157\nIGxvcnNxdWU= 87158\nIGFqdWQ= 87159\naGVhcg== 87160\nIHBzeWNvcGc= 87161\nKEVD 87162\nIG1lbGFuY2g= 87163\ndGhyb2F0 87164\nbmlo 87165\nV09PRA== 87166\nIHZvbHRz 87167\nX05FRUQ= 87168\nX3doaWxl 87169\nIFJpZGVycw== 87170\n16I= 87171\nIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 87172\nTmV0TWVzc2FnZQ== 87173\nTW9kaWZpY2Fy 87174\nLnNlc3M= 87175\nKCIiKSw= 87176\n6Kmx 87177\nIHByYWlzZXM= 87178\nIGxjbQ== 87179\nIG1ha2VzaGlmdA== 87180\nIE5PVEhJTkc= 87181\nIEFydGlmYWN0 87182\nd2lq 87183\ndHlwaWNhbGx5 87184\nKCde 87185\nPGs= 87186\nxJlraQ== 87187\nINC+0YLQv9GA0LDQsg== 87188\nIOE= 87189\nIGRlZlN0eWxlQXR0cg== 87190\naW5jZXJlbHk= 87191\nw6lzdA== 87192\nSW5UaGU= 87193\nc3RpbWU= 87194\nIGZyYWdtZW50ZWQ= 87195\nIGZyeWluZw== 87196\nZ3JpbQ== 87197\nZmllbGRuYW1l 87198\nIGNyb3NzaW5ncw== 87199\nIGFtbw== 87200\nX09wdGlvbnM= 87201\nIGhhaXJlZA== 87202\nL3dhaXQ= 87203\nIHBhcmNobWVudA== 87204\nIGNyZWF0ZUVsZW1lbnQ= 87205\nSHR0cFN0YXR1cw== 87206\nIGVya2zDpA== 87207\naXp6YXppb25l 87208\ndGh1bWJuYWlscw== 87209\nbG92YWs= 87210\nIGJhbmdpbmc= 87211\nIHVuaW1hZ2lu 87212\nIE92ZW4= 87213\nKEF1ZGlv 87214\nYXBzdWxhdGlvbg== 87215\nIHJhbXBz 87216\n55Wq 87217\nIFdvb2R3YXJk 87218\n6Zeu6aKY 87219\ncm9ncmFt 87220\n0YDRg9C/0L8= 87221\nIFdvcnNoaXA= 87222\nIHN0YWQ= 87223\nIG5lZg== 87224\nIEphdW5l 87225\nYnV6eg== 87226\nYWx1cw== 87227\nT05ET04= 87228\nLXN1 87229\nIG91dHBhdGllbnQ= 87230\namFj 87231\nRVNQTg== 87232\nw6ZsbGFuZA== 87233\nbXlw 87234\nIHNob3dyb29t 87235\nTW9udHNlcnJhdA== 87236\nLmdldERyYXdhYmxl 87237\nw6l0aWNv 87238\nIHbDoG8= 87239\nSUJD 87240\nRXhwZXJ0cw== 87241\nTWJwcw== 87242\nIj4j 87243\nIG5vcnRoZWFzdGVybg== 87244\nIE1lag== 87245\nKG1pbGxpc2Vjb25kcw== 87246\n4oCUYWxs 87247\nLXJlYWNoaW5n 87248\nCXJlcGx5 87249\nP3R5cGU= 87250\nIGNydXo= 87251\nID48Pw== 87252\nLkZpbmRBc3luYw== 87253\nKGNpcmNsZQ== 87254\nIFNoaW5l 87255\nIE1hdmVyaWNrcw== 87256\nIHNhZmV6b25l 87257\nIExhemFy 87258\nIGRpc3RpbmN0aW9ucw== 87259\nLWZlZWQ= 87260\nLnNldENvZGU= 87261\n4KSq 87262\nIHTDqWM= 87263\nIHNlcmFpdA== 87264\nIE1JQ1JP 87265\nIENvbnN1bXB0aW9u 87266\nXm4= 87267\nLmZyb21GdW5jdGlvbg== 87268\nIFJ1cGVydA== 87269\nIGhhcmFzc2luZw== 87270\nLUNv 87271\nIHRpaw== 87272\nIFN2ZW5z 87273\nLkltYWdlQWxpZ24= 87274\nX3doaXRlc3BhY2U= 87275\nIGtpY2tlcg== 87276\nIGNhZGFzdHI= 87277\nQ2V0dGU= 87278\nX25vdGlmaWVy 87279\nIEZBRw== 87280\nIHByaW1hbA== 87281\nIGhvbW9nZW5lb3Vz 87282\nIGFzdHJvbm9taWNhbA== 87283\nIEJ1cnI= 87284\nLkNvcHlUbw== 87285\nZ3JhcGhz 87286\naXR0bw== 87287\nT1NI 87288\nIHNob3dBbGVydA== 87289\nYW50cm8= 87290\nImRlZmF1bHQ= 87291\nZW1waGFzaXM= 87292\nV2Vp 87293\nb3V0Y29tZQ== 87294\nIGFrdQ== 87295\nIGNhbXBhaWduZWQ= 87296\nKSI7Cgo= 87297\nIHJlY2lwcm9jYWw= 87298\nIFJveWFsZQ== 87299\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 87300\nLlRJTUU= 87301\nIDwq 87302\nT2Zmc2V0VGFibGU= 87303\nY29tcG91bmQ= 87304\nd2FpdEZvcg== 87305\ndWVnb3M= 87306\nLnN0cmluZ1ZhbHVl 87307\nX1NDSEVE 87308\nIGZhdHQ= 87309\nwqDCoMKgwqDCoMKgwqA= 87310\nLmRpc2s= 87311\nIHdhcnBlZA== 87312\nIGNyaXRpcXVlcw== 87313\nPycKCg== 87314\nKHNraWxs 87315\nIG1vZGVyYXRlZA== 87316\nX2VsZW1z 87317\nS2V5TGlzdGVuZXI= 87318\nIHNlYXNvbmluZw== 87319\nIHBvdXJxdW9p 87320\nX0ZE 87321\ncHJk 87322\naHlh 87323\nIj7Dlzwv 87324\nIG5vdXZlYXV4 87325\nIGdpdmVhd2F5cw== 87326\n5oql6YGT 87327\nTWFpbk1lbnU= 87328\nOy8q 87329\nIEdyb24= 87330\ncXVpdm9z 87331\nOw0KDQoNCg0K 87332\nIGluZmx1ZW5jZXJz 87333\nKFRJTQ== 87334\nU2hhcmVkUHRy 87335\nIGRpYWxvZ3M= 87336\nKioqKiovCg== 87337\nLkF0b21pYw== 87338\nIE1vcnNl 87339\nIHBjYg== 87340\nIEFQQw== 87341\nLkltbXV0YWJsZQ== 87342\nIHJlc2l6aW5n 87343\nIEx1bXB1cg== 87344\nIEh1bWFuaXRpZXM= 87345\nX3NvbHZl 87346\nX2h1bWFu 87347\nZXR5bA== 87348\nIEh1cnQ= 87349\nIEVzdGFibGlzaGVk 87350\nY2xhcmVk 87351\nIGNvbXBhcnRtZW50cw== 87352\nQmVhbQ== 87353\nX1JN 87354\nLmZhbHNl 87355\nKEdyaWQ= 87356\nIFFTaXpl 87357\nX2ZsZw== 87358\naXN0aWNh 87359\nPkxvZ2lu 87360\nOlVJQnV0dG9uVHlwZQ== 87361\nIEV4aXRpbmc= 87362\nY2xhcw== 87363\nIGFyc2Vu 87364\nKG1ldHJpYw== 87365\ncm93c2luZw== 87366\ncXVlcnlTZWxlY3Rvcg== 87367\nX0ZSSUVORA== 87368\nLWlv 87369\nIGNvbmZpc2NhdGVk 87370\nIGRlZmlhbnQ= 87371\nIE1PVE9S 87372\ncmVndW50YQ== 87373\nIE1vcnJvdw== 87374\nIEJlcnM= 87375\nQ3JhaWc= 87376\nIENQQQ== 87377\nIHNleGtvbnRha3Rl 87378\nIHNhbW1lbg== 87379\nL0F1dGg= 87380\nLkxpYg== 87381\nY3JhcGVy 87382\naWNlbWFpbA== 87383\nY3JhdGNo 87384\nIFdpcmVk 87385\nIGFkdmVydGlzZXI= 87386\nIGdldENsaWVudA== 87387\nIHJlc3BvbnNpYmx5 87388\nCVVPYmplY3Q= 87389\nLnNldFJvdGF0aW9u 87390\nLkNvdW50ZXI= 87391\nX0hPVVI= 87392\nVGVzdENhdGVnb3J5 87393\nIGhpbmRzaWdodA== 87394\nXGNvbnRyb2xsZXJz 87395\nd2FsbHM= 87396\nLnNldE1heGltdW0= 87397\nIHB1YmVydHk= 87398\nX3RlYW1z 87399\nX01PREFM 87400\nLkNP 87401\nIGJhZGFzcw== 87402\nKSddLAo= 87403\nw7pzcXVlZGE= 87404\naXJ1dA== 87405\nQ2hlbHNlYQ== 87406\nLnRyYW5zZm9ybXM= 87407\nIGNhcGl0YWxpc3Rz 87408\nTWFyY2E= 87409\nIEFyeQ== 87410\nLWNvZGVk 87411\n546v 87412\nVVJFRA== 87413\nPFRyYW5zYWN0aW9u 87414\nIFBhcmxpYW1lbnRhcnk= 87415\nKSRf 87416\nIHN1YnRseQ== 87417\nIHNpbGt5 87418\nIERpcnQ= 87419\nIHB1enpsZWQ= 87420\nfScpOwo= 87421\ncXVlc3Rz 87422\nRm9vdGJhbGw= 87423\nIENvbmZpZGVuY2U= 87424\ndXp1 87425\nYnVsYW4= 87426\nIGh1bW1pbmc= 87427\nbW91c2VlbnRlcg== 87428\nUmV0ZW50aW9u 87429\nIHNkbA== 87430\nb2tlZGV4 87431\nJywnPScsJA== 87432\nIEt1YWxh 87433\nU0FN 87434\nIHRyYW5zZm9ybWF0aXZl 87435\nUEtH 87436\naWxsdXM= 87437\nIHJvb3Rpbmc= 87438\nIFdpdG5lc3Nlcw== 87439\nIFJhamFzdGhhbg== 87440\n5byg 87441\nLWFkZGVk 87442\nIFRlcnJpdG9yaWVz 87443\nKHNxdWFyZQ== 87444\ncmFiYml0 87445\nX1Jlc291cmNl 87446\n6ZaL 87447\n4LiT 87448\nIHdpbm5pbmdz 87449\nIHNwbGU= 87450\nIGTDqHM= 87451\nIE1EQg== 87452\nw6lydA== 87453\nIE1hdHRpcw== 87454\nYWlsbGVz 87455\nX3dlYWs= 87456\nL2phdg== 87457\nIGNvbGxhcHNlcw== 87458\nICAgICAgCQk= 87459\nIHN3aXJs 87460\nIE5TU3RyaW5nRnJvbUNsYXNz 87461\nIHZvbHZlcg== 87462\nLlJlY2VpdmU= 87463\nIERleHRlcg== 87464\nIHRhYmxlbmFtZQ== 87465\ncmVhdGl2ZQ== 87466\nLkdldEZpbGVz 87467\ndm9vcg== 87468\nIEhvZQ== 87469\nVkVSTg== 87470\nIE9QQw== 87471\n7YOc 87472\ncmFtaWRz 87473\n54Sh44GX44GV44KT 87474\nU3Bpcml0 87475\nIE5PUA== 87476\nIE1haW50YWlu 87477\nKHNpZ21h 87478\nb3Ry 87479\nTW91c2VDbGlja2Vk 87480\ncXVpZXJkYQ== 87481\nX3dm 87482\n0L7QutCw0Lc= 87483\nYXBwYWJsZQ== 87484\nIEhvbGRlbg== 87485\nIENvdW50ZG93bg== 87486\nLnNpZ21h 87487\nY2hhbGs= 87488\nYmlsZGVy 87489\nIHZpc2lvbmFyeQ== 87490\nCU9u 87491\nJHVwZGF0ZQ== 87492\nIEdpbmdyaWNo 87493\ncm9vbUlk 87494\nPk5hbWE= 87495\nIHl5dHlwZQ== 87496\nLkRlY2ltYWxGaWVsZA== 87497\nbWFjcm9z 87498\nLnNldExheW91dFBhcmFtcw== 87499\nIHJubg== 87500\nIElNRGI= 87501\n56eN 87502\nZW1hbGVz 87503\nIGluY2lkaWR1bnQ= 87504\nUmVzdHJpY3RlZA== 87505\nIHBlZGFscw== 87506\nIEpvZw== 87507\nIEFkYXB0aXZl 87508\nIGZhZGVz 87509\nLkV2ZW50U3lzdGVtcw== 87510\nIFBhaWdl 87511\nIHNlaXM= 87512\nIGFwcHJvcHJpYXRlZA== 87513\nRkZU 87514\nZ29yaXQ= 87515\nIGNvaGVzaXZl 87516\nIE5pY2h0 87517\nX3dvcmtmbG93 87518\nbGl1cw== 87519\nIEZvcnRuaXRl 87520\nX0lX 87521\nQXRQYXRo 87522\nIGludG94aWNhdGVk 87523\nbm9zdGlj 87524\nQmluQ29udGVudA== 87525\nLnJlZHVjZXI= 87526\nKT8K 87527\nJ10q 87528\nIE9ic2VydmF0aW9u 87529\nX3ByZWZz 87530\nLnJlc29sdXRpb24= 87531\nLlBheWxvYWQ= 87532\nTWl4ZWQ= 87533\nIFJhaQ== 87534\nKHBkZXY= 87535\nKEAo 87536\naWNvdA== 87537\nJGlz 87538\nIGNyZWU= 87539\nPz0uKg== 87540\nLlFMYWJlbA== 87541\nIEdlb3JnaWFu 87542\neENB 87543\nIGRlZmljaWVudA== 87544\ndGhyb3du 87545\nIHJhcGluZw== 87546\ndXBvcw== 87547\nCWNsaQ== 87548\nZ2V0Vmlldw== 87549\nSGlnaGxpZ2h0ZWQ= 87550\nQ3BwR3VpZA== 87551\nIHJlbGVnYXRlZA== 87552\nIGxlYWRlcmJvYXJk 87553\nUmVjZWl2ZVByb3Bz 87554\nLmhhcg== 87555\nIGNvbmRp 87556\nSU1JVElWRQ== 87557\nIE1jQ2FydA== 87558\nKXRocm93cw== 87559\nYnVpZQ== 87560\nYnVhaA== 87561\nLmNvZWZm 87562\nIEF1c3NpZQ== 87563\nIFNhYmhh 87564\nKGZhYnM= 87565\ncmVsYW5k 87566\nIEbDtnI= 87567\nYmFyYW5n 87568\nLHRvcA== 87569\nCWVsc2lm 87570\nU3RlcFRocm91Z2g= 87571\nIHNrZXdlZA== 87572\nIFVudXNlZA== 87573\nJyl9Pgo= 87574\nWWU= 87575\nY2FsbGVl 87576\nSGliZXJuYXRl 87577\nIEV2ZXJlc3Q= 87578\naW1wb3J0RGVmYXVsdA== 87579\nIHRhcm4= 87580\nIE5vd2FkYXlz 87581\nWUE= 87582\nIENoYWxsZW5nZXI= 87583\nX2xvZ2ljYWw= 87584\nIGNyZWF0ZURhdGU= 87585\nIEdsb3VjZQ== 87586\nIGN1YW50bw== 87587\nIEhBUg== 87588\nIENoaWxs 87589\nIl4= 87590\nIGN1cnNvcw== 87591\nLkVPRg== 87592\nIG5pamU= 87593\nIGFuZ2VyZWQ= 87594\nb2N1c2luZw== 87595\nPENvbnRhY3Q= 87596\nIEF0bW9zcGhlcmlj 87597\nIFdvbGZnYW5n 87598\nIEJK 87599\nY2hpbGRz 87600\nIEJ1Z3M= 87601\nX0hFWA== 87602\nKFNQ 87603\nw6Vs 87604\nX2V2YWx1YXRpb24= 87605\nIFJBTkdF 87606\nIFNPUA== 87607\nX3Rva2VuaXpl 87608\nbXNnaWQ= 87609\nIHJleA== 87610\nCXBt 87611\nQ29weWluZw== 87612\nKkw= 87613\nRGFsbGFz 87614\nLVN0YXRl 87615\ndWxmaWxs 87616\nIGJ5xYJv 87617\nIENvbnRyYWN0b3I= 87618\nRGlkbg== 87619\nQVNURQ== 87620\nIFBJTw== 87621\nLlRlbGU= 87622\nLndhdGVy 87623\nZGV6 87624\nIGFuZ3JpbHk= 87625\nIHV0aWxpc2F0ZXVy 87626\nIHZvcnRleA== 87627\nQ29ycG9yYXRl 87628\nYXR1cmFz 87629\nIHByaXplZA== 87630\nJ3VybA== 87631\ndWdsaWZ5 87632\nIGltcHVsc2Vz 87633\nIGNocm9ub2xvZ2ljYWw= 87634\ncGxlbg== 87635\nX25hbWE= 87636\nL29u 87637\nIE9mZmljZXM= 87638\nIENQSQ== 87639\nIEFmdGVyd2FyZHM= 87640\n44GT44KT44Gr 87641\nX0JMT0NLUw== 87642\nR3JhY2U= 87643\nLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 87644\nIEthYnVs 87645\nIOaIkA== 87646\nIExlaXB6aWc= 87647\n4Kao 87648\nU2hvY2s= 87649\nQXVz 87650\nIG11cm0= 87651\nX3N0YXJ0cw== 87652\nIGLDpA== 87653\nIFp5 87654\nIkY= 87655\nLXJpZ2h0cw== 87656\nIGJlaGF2aW5n 87657\nKCc+ 87658\nIG1vc3F1ZXM= 87659\nKndpZHRo 87660\nIi8+Ljwv 87661\nLnVuc3BsYXNo 87662\nLmdldEFjdGl2aXR5 87663\nVVU= 87664\nIFNoYWs= 87665\nX3Jn 87666\nX0VxdWFscw== 87667\nJ2h0dHBz 87668\nIE94eWdlbg== 87669\nIFBvcnRzbW91dGg= 87670\n4oCUb25l 87671\nIHdhdGNoZXJz 87672\nIENob2k= 87673\nIHNpZGVy 87674\ncGVjdHJhbA== 87675\nbXF0dA== 87676\nLmNyZWF0ZVVzZXI= 87677\namVjdGl2ZXM= 87678\ndXJtYQ== 87679\nUmVnaXN0cg== 87680\nUGVyc29uYWxseQ== 87681\nPWtleQ== 87682\nIE5FTw== 87683\nIEZBUXM= 87684\naWJpbGlkYWRl 87685\nY2tzw6U= 87686\nIENvbGxhYm9yYXRpb24= 87687\nCWxibA== 87688\nLlNFUlZFUg== 87689\nIGFib3VuZA== 87690\nIEJlbmU= 87691\nd2FudGVk 87692\nLWhvbGU= 87693\nIG11dHRlcmVk 87694\nIHBlcA== 87695\nbmVzYw== 87696\nLlVwbG9hZA== 87697\nc2VtaQ== 87698\neEVD 87699\nJz4iKw== 87700\nIGVtYnJ5bw== 87701\nIEZpeGVkVXBkYXRl 87702\nQ2FzdGxl 87703\nLm1vZGVsbw== 87704\nIHBscw== 87705\nIGVudmVsb3Blcw== 87706\nX3JlbWFpbg== 87707\nUXVhcnRlcg== 87708\nYWxlcnRWaWV3 87709\nX2Zvcm1hdHRlZA== 87710\nIGxhc2hlcw== 87711\nemVsZg== 87712\naG9tbWU= 87713\nLmZsb3dMYXlvdXRQYW5lbA== 87714\nYWlycG9ydA== 87715\nIE1lbW9yaWVz 87716\nIEhFUk8= 87717\nIEFzaHRvbg== 87718\nIGV4aGliaXRpbmc= 87719\nKFNFTEVDVA== 87720\nU3VibWlzc2lvbg== 87721\nU3R1ZmY= 87722\nX3N1bg== 87723\nIHBlcsOtb2Rv 87724\nIGRlc3ByZQ== 87725\nCWVkaXQ= 87726\nIER0eXBl 87727\nY2Vzc2l2ZQ== 87728\nYWFk 87729\nIGRlc2Nvbg== 87730\nbmVsbHk= 87731\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 87732\nIHNjcmlwdHVyZXM= 87733\nIG9uVmlld0NyZWF0ZWQ= 87734\nIEVWRQ== 87735\nIEJhbGxldA== 87736\nO307Cg== 87737\nVURP 87738\nIFByb2JhYmlsaXR5 87739\ncXVpcnJlbA== 87740\nQ29udGFpbmluZw== 87741\nIFBsYXQ= 87742\n6KI= 87743\nL2JpdA== 87744\nIEpRdWVyeQ== 87745\nIHRpZW5lcg== 87746\nL2RyaXZlcnM= 87747\nIFByZXNpZGVuY3k= 87748\nXHVE 87749\nIEl2ZQ== 87750\naWVuYQ== 87751\nIGh5cGVycw== 87752\nIFNwZW5kaW5n 87753\nPFc= 87754\nIFRIRU1F 87755\nIHVzZXJQcm9maWxl 87756\nIGFubnVt 87757\ncmV0d2VldGVk 87758\nIFwnJw== 87759\nYnVuZGxlcw== 87760\nKCk8Lw== 87761\nIEN5bGluZGVy 87762\nIG91dGxpZXJz 87763\nIGRpc3NlbWluYXRpb24= 87764\nL2FwdA== 87765\nIE5hdGFzaGE= 87766\nIHJlbmRlckl0ZW0= 87767\nIENoaXBz 87768\nIHJvdW5kdXA= 87769\nIGltcHJvdg== 87770\nIGNvbW11bmljYXRvcg== 87771\nIHNreXBl 87772\nTU1N 87773\ncmlqaw== 87774\nLlBsYWNl 87775\nIHBhc2E= 87776\nIFNZTkM= 87777\nZW5zaXM= 87778\nIEF4ZWw= 87779\nZW7Dp2E= 87780\nZ2V0U3RyaW5nRXh0cmE= 87781\nYWJpbGl0w6k= 87782\nIGVtYWNz 87783\nLmdyYXZpdHk= 87784\nIGNoZXJpc2g= 87785\nIElTU04= 87786\nCUpzb24= 87787\ndXlv 87788\nIHVwdGltZQ== 87789\nIHJhbmRvbW5lc3M= 87790\nIGxvZnR5 87791\nQm93 87792\nQ3JlYXI= 87793\nIHRvd2VyaW5n 87794\nY2F0ZWdvcmll 87795\nL3Bvd2Vy 87796\nL3dlbGNvbWU= 87797\nfFI= 87798\nIGJhcnJpbmc= 87799\naWRpYQ== 87800\ncXVhbQ== 87801\nw7pkbw== 87802\nZXhwZXJpbWVudGFs 87803\nIGNsYQ== 87804\nIGN1cmF0b3I= 87805\ncmVhbWJsZQ== 87806\naW5keA== 87807\nTExM 87808\nIH0pOg== 87809\nIGhpc3RvaXJl 87810\nc2ltdWxhdGU= 87811\nPEFueQ== 87812\nIEdsYW0= 87813\nIEJhcmc= 87814\nVmFsdWVDb2xsZWN0aW9u 87815\nIEluc3RpdHV0bw== 87816\nQXNTdHJpbmdBc3luYw== 87817\nIGFkZWM= 87818\nIGZlbGxvd3M= 87819\ncGlwZXM= 87820\nIFBsYWNlaG9sZGVy 87821\nIEtn 87822\nIEFsYnVtcw== 87823\nICooKg== 87824\nX0dPT0Q= 87825\nKSIsDQo= 87826\nLlFSZWN0 87827\nw6Jt 87828\nIH0NDQo= 87829\nTWFyc2hhbEFz 87830\nQmFjaGVsb3I= 87831\nIEJhcmNvZGU= 87832\nIFRyYXZlcnNl 87833\nIG9kaW8= 87834\nLnNldFBhcmVudA== 87835\nIHNlbWljb25kdWN0b3I= 87836\nQUxMRUw= 87837\nIGJhbnF1ZXQ= 87838\nIE5ld3NwYXBlcg== 87839\nRE9NTm9kZQ== 87840\nIE5hdWdodHk= 87841\nRm9ybWF0dGVkTWVzc2FnZQ== 87842\nIGRpc3J1cHRpbmc= 87843\n5piT 87844\nIGxvb2thaGVhZA== 87845\nIGdyYXR1aXRlcw== 87846\nIGNoZWVzeQ== 87847\nIFNQRg== 87848\nblA= 87849\nIGFyc29u 87850\nIGFudGVubmFz 87851\nX01JRERMRQ== 87852\nX01BTExPQw== 87853\nLmdvQmFjaw== 87854\nIFByb3Bvc2l0aW9u 87855\nIE1pY2hhZWxz 87856\nX3Byb29m 87857\nINC90LDQudC0 87858\nw6R0emxpY2g= 87859\nLXJvbGw= 87860\nRURB 87861\nw6Fuw60= 87862\nZ292ZXJubWVudA== 87863\nw7Z0dA== 87864\nIEVzdGFibGlzaG1lbnQ= 87865\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 87866\nX0hJVA== 87867\nIEFJTQ== 87868\nYWRvbA== 87869\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 87870\nX1JFRkVSRVI= 87871\nIGZvcm1hdERhdGU= 87872\ndWN0b3Nl 87873\nIGRvd25sb2FkZXI= 87874\nVGV4dEVkaXQ= 87875\nIGRpc2FybQ== 87876\nIEhBUFA= 87877\n0L7QtNCw 87878\nISkuCgo= 87879\nL3Byb2Nlc3M= 87880\nIGJyYWluc3Rvcm0= 87881\nIE9SSUdJTkFM 87882\nLlRhYmxlTmFtZQ== 87883\nIEtvc3Rlbmxvc2U= 87884\nIGTDqXA= 87885\nIElzYWJlbA== 87886\nIGFzdHJvbm9tZXJz 87887\nUVVJUkVT 87888\nOiIt 87889\ndXBsb2FkZXI= 87890\nOi8vJQ== 87891\nIGFtaXM= 87892\nRmlsZVZlcnNpb24= 87893\nICwk 87894\nY29vaw== 87895\nLFNJR05BTA== 87896\nJywvLw== 87897\nIFN1cHByZXNz 87898\nIExhdGlub3M= 87899\nIHdpdGhob2xk 87900\nIG1uZW1vbmlj 87901\nX0NZQ0xF 87902\nIGhvZA== 87903\nIFdvcnNl 87904\nZXJkZQ== 87905\nIHR5cGVpZA== 87906\nCWV4cG9ydHM= 87907\nIGFjaHRlcg== 87908\nb3Nhcw== 87909\nIGZvb3Rub3Rl 87910\naGFuaQ== 87911\nKFBhcmFtZXRlcg== 87912\nCVJlbmRlcg== 87913\nIFlZU1RBQ0s= 87914\nIFhJSQ== 87915\nIHNpZGVu 87916\nIGFyb3VzYWw= 87917\nIE9P 87918\nQml0dGU= 87919\nIG5lYXJlcg== 87920\nIENpcmN1cw== 87921\nIENPTE9SUw== 87922\nIHdpZWxkaW5n 87923\nLkZpbGVTeXN0ZW0= 87924\nIGdyaWxsZQ== 87925\nIERvdmVy 87926\nCiAgICAgCg== 87927\nKGdlb21ldHJ5 87928\nIHN0YXBsZXM= 87929\nIEFubm91bmNlbWVudA== 87930\nIOuyhA== 87931\nIGZvcnR1bmF0ZWx5 87932\nLlNvbWU= 87933\nIG1hbmdhbmVzZQ== 87934\nIGludGVydmlld2Vy 87935\nWVJP 87936\nIGNyeXB0b2dyYXBoeQ== 87937\nIGNoYW1icmU= 87938\nLnJldHJ5 87939\nIGltaXRhdGlvbg== 87940\nJGZkYXRh 87941\nIGxvdGlvbg== 87942\nKGlkZW50aXR5 87943\nLnBn 87944\nIHByZXN1bXB0aW9u 87945\nX1NVUEVS 87946\ndm9jYWI= 87947\nIFNlbWVzdGVy 87948\nIEFiZWw= 87949\nX2FwcHJvdmVk 87950\nLmNvbXBhdA== 87951\nIHdhcnRpbWU= 87952\nXV07Cgo= 87953\nbHV0 87954\nX0FjY291bnQ= 87955\nPygn 87956\nY29vcA== 87957\nL3JlZw== 87958\nLnNldFRv 87959\naXRlc3Nl 87960\nIEh5ZHJh 87961\nQmlucw== 87962\nY2FkZW5h 87963\nPi8nLA== 87964\nLlwi 87965\nCWFjY291bnQ= 87966\nIERhaGw= 87967\nIGRyb3du 87968\nIGdhdXNz 87969\nIHRyYW5zZm9ybWVycw== 87970\nIE1ldGFsbGlj 87971\nIEhlcmJhbA== 87972\nYWNocw== 87973\nX2J1dA== 87974\nIGl0ZXJhdGl2ZQ== 87975\nIEZyZWVk 87976\nanVy 87977\nfE0= 87978\nO2JyZWFr 87979\nX0ZG 87980\nKGRvd25sb2Fk 87981\n4buDbg== 87982\nLmNoZWNrU2VsZlBlcm1pc3Npb24= 87983\nTkVUV09SSw== 87984\nOmZsZXg= 87985\nIENUTA== 87986\nIEFyYg== 87987\nIFByb2R1Y2U= 87988\nCXN5bmNocm9uaXplZA== 87989\n4oCcT2g= 87990\nLmRhdGF0YWJsZXM= 87991\nIGNvbmVz 87992\nRMOp 87993\n0YbQsA== 87994\nQWxn 87995\nIGZ1bmNpb25h 87996\nIFViaXNvZnQ= 87997\nIGdlb3BvbGl0aWNhbA== 87998\nIHNpZWh0 87999\nIGh5ZHJhdGlvbg== 88000\nc3Rocm91Z2g= 88001\nIER1ZGxleQ== 88002\nYXrEgw== 88003\nIHRheGluZw== 88004\nINC30LDQutCw0Lc= 88005\nX0FTTQ== 88006\nTmV1dHJhbA== 88007\ndHJhZGl0aW9uYWw= 88008\nUGxheWFibGU= 88009\nIHNwYWdoZXR0aQ== 88010\nIGlDbG91ZA== 88011\nIERheXRvbmE= 88012\nIHdlcmRl 88013\nIEFOVA== 88014\nIFByb24= 88015\nIFN0YXRpb25z 88016\nIGF0dGVzdA== 88017\nIGZ1bGxlcg== 88018\nIG5vdmFtZW50ZQ== 88019\nXVxc 88020\nY2Nl 88021\nKGRlY2s= 88022\nL2F5dXNobWFu 88023\naWdzYXc= 88024\nIGFkdWx0ZXM= 88025\nIHRlcnJl 88026\nLk9yZGVycw== 88027\nCXByb3BlcnRpZXM= 88028\nRElH 88029\nIFRJTUVT 88030\nImluZGljZXM= 88031\nITw= 88032\nTW9uYWQ= 88033\nIG5vbmV4aXN0ZW50 88034\nIEF0bGFudGlz 88035\nIGdyaWV2YW5jZXM= 88036\ndXJlbmNl 88037\nIElQUFJPVE8= 88038\n4pmA4pmA4pmA4pmA 88039\nIGVtcGxlYWRv 88040\nINmD 88041\nLk1vdmVOZXh0 88042\nIElzbw== 88043\nYmVhdXRpZnVs 88044\nIHNvbHVibGU= 88045\nIHNsdWdnaXNo 88046\nIGRpZmZz 88047\nX09CUw== 88048\neG1pbg== 88049\nIHR1bWJsZQ== 88050\nIFVuYXJ5 88051\nIHppcGZpbGU= 88052\nIHN2ZW5za2E= 88053\nZXJsYW5k 88054\nL2N1cGVydGlubw== 88055\nCXNjcmlwdA== 88056\naXNjaGVz 88057\nTW9kaWZpZWREYXRl 88058\nIHZleWE= 88059\nIGRldGVybWluYW50 88060\nIEdvcmdlb3Vz 88061\nZ2Jvb2xlYW4= 88062\nIExPRA== 88063\nZGNj 88064\nc2NlbmVz 88065\nIFRTUk1MUw== 88066\nKFR5cGVFcnJvcg== 88067\nIGNhbW91ZmxhZ2U= 88068\nIGJ1cmdl 88069\nVGhlbQ== 88070\nLkFzc2lnbg== 88071\nIGxhc3RJbmRleA== 88072\nX3NwaGVyZQ== 88073\nX0FCSQ== 88074\nw4Q= 88075\naWxhZ2U= 88076\nXHhmZg== 88077\nIGtheWFr 88078\nIGZpeno= 88079\ndWl0ZW4= 88080\nLlNob3VsZEJl 88081\nIGh0b25s 88082\nIFBldGl0ZQ== 88083\nIGhlYWxz 88084\nIE9zYWth 88085\nTko= 88086\nSW5QYXJhbWV0ZXI= 88087\nIEJpcmNo 88088\nIGNvbW1lbnRhaXJl 88089\nIFNpZWdl 88090\nIGtleWNvZGU= 88091\nLWludGVuc2l2ZQ== 88092\ncHJvcFR5cGVz 88093\nRXhwb3J0cw== 88094\nIGJ1dHRvblRleHQ= 88095\nIEdvZHppbGxh 88096\nLkV4Y2hhbmdl 88097\nIHVuZGVyc3RhbmRhYmx5 88098\nIGFjY29yZGlvbg== 88099\nIHLDqWdpb24= 88100\nIG1hcmtlZGx5 88101\nYW5vb2dh 88102\nIGNvbnRyYXQ= 88103\nX2xpZnQ= 88104\nW2RhdGU= 88105\nIHNjb3Ju 88106\nIERhdGFNYW5hZ2Vy 88107\n4oCm4oCmCgo= 88108\nX0NPTVBJTEVS 88109\nIENsYXc= 88110\nb2RhdGU= 88111\nIHVuZGVyYWdl 88112\nIEltcGxlbWVudGVk 88113\nQ2xp 88114\nS2Fs 88115\nUHJvZHVjdG9z 88116\nIGVuZmVybWVk 88117\nw6lpcw== 88118\nIGRpc2NyZWRpdA== 88119\nIFNhbW9h 88120\nIFByZXNlbnRlZA== 88121\nIGNpbmVtYXQ= 88122\nXEFjdGl2ZUZvcm0= 88123\nIGZlcm4= 88124\nIFByaW1lcg== 88125\n5oKo 88126\nZ2VyZQ== 88127\nIGlsbHVzaW9ucw== 88128\nbm90YXRlZA== 88129\nIHBvag== 88130\nIG1vZGVsTmFtZQ== 88131\nIFBNQw== 88132\nIGRlY2Fk 88133\nIGZvcmVzdHJ5 88134\ndm9pZQ== 88135\nLi4uCgoKCgoK 88136\nIH19Owo= 88137\nIHRva2VuSWQ= 88138\nYW1tdQ== 88139\nIFBlcnNvbmVu 88140\nIFZFUkJPU0U= 88141\nIHBhdHJvbHM= 88142\nIGFudGlj 88143\nX2RlZXA= 88144\nZWdlbmQ= 88145\nIFNldFByb3BlcnR5 88146\nIEdhcmV0aA== 88147\nIE1BUw== 88148\nLnJlc3RhdXJhbnQ= 88149\nIEhlYXZlbmx5 88150\naWVkbw== 88151\nX2xlYWQ= 88152\nIEZ1amk= 88153\nUU4= 88154\nTWFzc2FnZQ== 88155\nIHBhcmFtTWFw 88156\nIGNpdGE= 88157\nX1NwZWVk 88158\nKGJib3g= 88159\nIEpVTA== 88160\n4oCZYW4= 88161\nIG1lbnRl 88162\nIFNob3djYXNl 88163\nIENTSQ== 88164\nPlR5cGU= 88165\nLlNu 88166\nb3R5cGljYWw= 88167\nIEZhbGxvbg== 88168\nLlVUQw== 88169\nIHByZWRhdG9yeQ== 88170\nIG9yZ2FuaXNpbmc= 88171\nY29sZA== 88172\nIHBhcnNlcnM= 88173\ndWllbg== 88174\nIGNvbXBpbGVycw== 88175\nIFs9 88176\nIEV1cmFz 88177\nTU9TVA== 88178\nCiAgICAKCg== 88179\nUkFS 88180\nLlNjaGVkdWxl 88181\nLm9wZXJhdGlvbnM= 88182\ndWZz 88183\nw7FhbmE= 88184\nIHByZW9jdXA= 88185\nLXRyZWF0ZWQ= 88186\nLmdldFdvcmxk 88187\nLic6 88188\nIEFUSA== 88189\nOnN0YXJ0 88190\nIGF1dG9pbW11bmU= 88191\nIEJsYWNramFjaw== 88192\nX0ZJTklTSA== 88193\nKGZsb29y 88194\nIHdyZWNrYWdl 88195\nVVJU 88196\nLkJyYW5k 88197\ncGFpcw== 88198\nY2ltYWw= 88199\nY2nDsw== 88200\nTkZM 88201\nLWVxdWlwcGVk 88202\nLmNvbnRlbnRPZmZzZXQ= 88203\nIG92ZXJjcm93 88204\nIFRa 88205\nIG9kb20= 88206\nIENlbGx1bGFy 88207\nCXdyaXRlbA== 88208\nKGlucHV0U3RyZWFt 88209\nKHByZWY= 88210\nLXN0b2Nr 88211\nIERlbmllZA== 88212\nLXN1cHBvcnRlZA== 88213\nICcoKA== 88214\nYW5jb2Rl 88215\nLmZpbHRlcmVk 88216\nRGltcw== 88217\nIGpi 88218\nCXByaWNl 88219\nIEBACg== 88220\nbm9jaw== 88221\nLm9wZW5Db25uZWN0aW9u 88222\nIGFudGljcw== 88223\ncmVzdWx0Q29kZQ== 88224\nUGxheWJhY2s= 88225\nIGNlbHVsYXI= 88226\nIEZPT0Q= 88227\nIFBvZGVzdGE= 88228\nPW1lc3NhZ2U= 88229\nLnBlcmZvcm1hbmNl 88230\nIERtaXRyeQ== 88231\nYWx0aW1vcmU= 88232\nIHBsYXRlZA== 88233\nIHR1YmVyY3Vsb3Npcw== 88234\nX2dlbQ== 88235\nKEVkaXRvcg== 88236\nVHBs 88237\nIGNyaWFu 88238\nIGJ1ZmZlcmluZw== 88239\n6KeG6aKR 88240\nICcpCgo= 88241\nVnU= 88242\nTWF0aGY= 88243\nIHRpbWVsaW5lcw== 88244\nIFRhdGE= 88245\nL3Bw 88246\nIHBsYXN0 88247\nIFRydWx5 88248\nIFN1YnN0aXR1dGU= 88249\na2llbQ== 88250\na2Fhcg== 88251\nIFZpc2g= 88252\nJ2h1aQ== 88253\nIE1hZ2ljaw== 88254\nL0xheW91dA== 88255\ndXJhbsOnYQ== 88256\nX3R0bA== 88257\nSGlkZUluSW5zcGVjdG9y 88258\nLmtleXdvcmRz 88259\nTGlzdE1vZGVs 88260\nX1N1Y2Nlc3M= 88261\naWxpaGFu 88262\nIGJsYWNrbWFpbA== 88263\nIFNlcmJpYW4= 88264\ncXVlbGxl 88265\nIER5c2Z1bmN0aW9u 88266\nIFByZXBhcmVk 88267\nIGpNZW51SXRlbQ== 88268\nIGxvZ2luVXNlcg== 88269\nc2V0YXR0cg== 88270\nLkNS 88271\nX2xjZA== 88272\nIGJ5dGVzUmVhZA== 88273\nIGNkZWNs 88274\nIHRvd25zaGlw 88275\ncGVr 88276\naWprc3RyYQ== 88277\nIG1heGltaXppbmc= 88278\nLnByb3ZpZGVycw== 88279\nSW52ZXN0aWdhdG9ycw== 88280\nIHNob290b3V0 88281\nIGFpcnNwYWNl 88282\ndG9vbGJveA== 88283\nUVdpZGdldA== 88284\nPXBr 88285\nIHBvcnRlcg== 88286\nIFByZWRhdG9y 88287\nIFN1bnJpc2U= 88288\nIGRldm91cg== 88289\nCVVJbnQ= 88290\naXR0YW5jZQ== 88291\nU1BB 88292\nX2VuZGlhbg== 88293\nIE5hZ2Fy 88294\ndmVuaWRh 88295\nL29wdA== 88296\nQnlFbWFpbA== 88297\nIFBoeXNpY2lhbg== 88298\nXEQ= 88299\nINC80Ys= 88300\nWUVBUg== 88301\nSUND 88302\nL3BvcnRmb2xpbw== 88303\nLmV4ZWN1dG9y 88304\ndWRlbQ== 88305\nRmFsbGJhY2s= 88306\ndWR1 88307\nU2xpbQ== 88308\nw7Nsbg== 88309\nXnst 88310\nYW5za2U= 88311\nIGh1c3RsZQ== 88312\nIElyZW5l 88313\nIGFieXNz 88314\nIFJvYmJpbnM= 88315\nIGluZGV4ZXI= 88316\nU2F1ZGk= 88317\nIHdob2xlc29tZQ== 88318\nLXNsb3Q= 88319\nIFRlY24= 88320\nIHBhZ2VUaXRsZQ== 88321\nIGNvbnRlc3RhbnQ= 88322\naWNvcHRlcg== 88323\nIGNvdXJzZUlk 88324\nQ2hy 88325\nIEFYSVM= 88326\nZm9yZGVy 88327\nX1RVTg== 88328\nVHJhZmZpYw== 88329\nIHR5cGVhbGlhcw== 88330\nIGRhcmY= 88331\nLXVyaQ== 88332\ndHN4 88333\nLmRlc3Ryb3lBbGxXaW5kb3dz 88334\nIGl0ZXJhdGluZw== 88335\nUmVhY3Rpb24= 88336\nCUFN 88337\nIGN1ZW50 88338\nLWNvb2tpZQ== 88339\nIGZsYXZvcmVk 88340\nc3RvaQ== 88341\nIGZsaXJ0aW5n 88342\n44CL77yM 88343\n4KSu 88344\nX0NSWVBUTw== 88345\nW3Rva2Vu 88346\nIHByb2xldGFyaWF0 88347\nLuKAmeKAnQoK 88348\nCWRj 88349\nLlN0cmluZ1Zhcg== 88350\nIGxlZ2l0aW1hdGVseQ== 88351\nX2RlY29yYXRvcg== 88352\nTG9ja2Vy 88353\nIEplbm5h 88354\nVVJJTkc= 88355\n5YaN 88356\nX1ByaW50Zg== 88357\nQVRPUlk= 88358\nLWRpc3Q= 88359\nICIuIik7Cg== 88360\nLnF1aXo= 88361\nIGlyZ2VuZA== 88362\nLWxlYWd1ZQ== 88363\nZ2llbg== 88364\nIFByb2R1Y2Vk 88365\nSGVsbWV0 88366\n5Y+v6IO9 88367\nUGxhdGZvcm1z 88368\nIFJlc291cmNlTWFuYWdlcg== 88369\nIEh1bmRyZWQ= 88370\ncm9tZXRlcg== 88371\nZW5na2Fw 88372\nSG9w 88373\nIHBvc3N1aQ== 88374\nQmVmb3JlRWFjaA== 88375\nIENISw== 88376\nIElNUw== 88377\nVGlja2Vy 88378\nIGdyaW5uZWQ= 88379\nLmdldEFz 88380\nIGltcG9zZXM= 88381\nXSIp 88382\nRm9yZ2V0 88383\nL2ltcG9ydA== 88384\nIGluamVjdGluZw== 88385\nTG92 88386\nIGFicmls 88387\nX3NsaWNlcw== 88388\nLWNvbW0= 88389\nIFBST0RVQ1RT 88390\nIE9hc2lz 88391\nIMO4bnM= 88392\nIFJlamVjdA== 88393\nIHJlZ3VsYXJpemF0aW9u 88394\naW1wbGljaXRseQ== 88395\nbmF6 88396\nU3BlY2lmaWVy 88397\nIGltcG92ZXJpc2hlZA== 88398\n5po= 88399\nIG5vbWluYXRl 88400\nIE9WRVJSSURF 88401\nIEJhbmRz 88402\nZXRoeXN0 88403\nIEppYW4= 88404\nIG5ld2NvbWVy 88405\nIE5hYg== 88406\nIGVicA== 88407\nIFBhZ2Vy 88408\nIEh1bWI= 88409\nL2Nj 88410\nIGV4cMOpcmllbmNl 88411\ndWRnaW5n 88412\nTWI= 88413\nZGJ1Zg== 88414\nJy8+ 88415\nIG9ja3PDpQ== 88416\nIGpkYmNUZW1wbGF0ZQ== 88417\nIFNISVBQSU5H 88418\nIGludGVyZGlzY2lwbGluYXJ5 88419\nIENFVA== 88420\nYXV0b3A= 88421\nLXN5bWJvbA== 88422\nYXZlYw== 88423\nIGNvbXBvdW5kZWQ= 88424\nIENodW5n 88425\nX1NNUw== 88426\nLWll 88427\nIFByb3NlY3V0b3I= 88428\nIExlaWE= 88429\nIE1hbmRlbGE= 88430\nU2luZ2xlT3JEZWZhdWx0 88431\nCVJFUVVJUkU= 88432\nYXRvd24= 88433\ndXJyZXRz 88434\n5paH5a2X 88435\nIENPTlRFWFQ= 88436\nRU5TSVRZ 88437\nIGluc3VyZ2VudHM= 88438\nIERpYXM= 88439\nLnN0YXRpb24= 88440\nIEtsYW4= 88441\nX21lYXN1cmVtZW50 88442\nX1FNQVJL 88443\nIHN0b2k= 88444\nTU9PVEg= 88445\nPicpOwoK 88446\nIGluZ2VzdGlvbg== 88447\nIEdsb3c= 88448\ndXRjaGVz 88449\nYmVhcmluZw== 88450\nLnRvYXN0cg== 88451\nIGZyYWdtZW50YXRpb24= 88452\naXBwbw== 88453\nX1NFR01FTlQ= 88454\nIHN0dW1ibGluZw== 88455\naW1hcg== 88456\nc3Rpbmlhbg== 88457\nXygpCg== 88458\nIG1vdGl2YXRpb25hbA== 88459\nTGlzdEl0ZW1UZXh0 88460\nIHdvbWVucw== 88461\nT3BlbkhlbHBlcg== 88462\naWJhbmQ= 88463\nIGJ0blNhdmU= 88464\nIGluY29ycG9yYXRpb24= 88465\nIGRvY3VtZW50YXJpZXM= 88466\naWNs 88467\nIE5k 88468\nIEFyYQ== 88469\nIHF1YWtl 88470\nIEN1bW1pbmdz 88471\naHRt 88472\nYXN0ZXJlZA== 88473\nLmR0cA== 88474\nIGNvbmRvcw== 88475\nIEd1bmRhbQ== 88476\nL2Rpc2FibGU= 88477\naHlkcmF0ZQ== 88478\nIEVwb2No 88479\nIG5hdGlvbmFsaXN0cw== 88480\nIGRldmVy 88481\nLHJlcXVlc3Q= 88482\nLmdldFZlcnNpb24= 88483\nQ0VMRVI= 88484\nIFNhbGFo 88485\nIG1vdGU= 88486\nIE1lbGxvbg== 88487\nc3BvdGlmeQ== 88488\nIG9yaWdlbg== 88489\nIG5hbGU= 88490\nIGFkdmVyc2FyaWVz 88491\nLkpUYWJsZQ== 88492\nZm9yY2VtZW50cw== 88493\nIFJldHJlYXQ= 88494\nIGFyY2hpdm9z 88495\nIHNsYXNoZXM= 88496\nLk1vdXNlRG93bg== 88497\nPDo6 88498\nX3Rocm91Z2g= 88499\nQWxhbWF0 88500\nLmJsdXI= 88501\nX2ZpbmRlcg== 88502\nIGFsbHVyZQ== 88503\nUGVyaXBoZXJhbA== 88504\nX3Bhc3NlZA== 88505\nX2NoYWxsZW5nZQ== 88506\nIFBhbGVv 88507\nSU5J 88508\nRGlyZQ== 88509\nc3BoZXJl 88510\nKENPTE9S 88511\nYWNrZXJz 88512\nIEdseXBo 88513\nKGludGVnZXI= 88514\nINC60L4= 88515\nIFJlbGV2YW50 88516\nINm+ 88517\nIGF0YXM= 88518\nX3ByaW0= 88519\nIE1VVA== 88520\nbmluZ2Vy 88521\nYXV0b3JlbGVhc2Vwb29s 88522\nPV9f 88523\nIFNpZ25pbmc= 88524\n7ZWY7KeA 88525\nIHVjeg== 88526\nRWRpdGluZ1N0eWxl 88527\nIEhlYXRlcg== 88528\nIEZhaXJmaWVsZA== 88529\nIEJlYXJk 88530\nLGVu 88531\ndXNhdA== 88532\nKCcuJw== 88533\nL3N0cmVhbQ== 88534\nIGdldFN1cHBvcnRGcmFnbWVudE1hbmFnZXI= 88535\nIG1DdXJyZW50 88536\nX1NUQVRFUw== 88537\nX3dpbmQ= 88538\nQ0hBUFRFUg== 88539\ncHJvYmFiaWxpdHk= 88540\nKGFubm90YXRpb24= 88541\nICovDQoNCg0K 88542\nLlVuaXF1ZQ== 88543\nLkFkZEZpZWxk 88544\nSGlnaGVy 88545\nLmRpZ2l0YWw= 88546\nLmV4cGVyaW1lbnRhbA== 88547\nYXds 88548\nIHdoZW5jZQ== 88549\nZXJub3Rl 88550\nU0FNRQ== 88551\nLmlwdg== 88552\ndG9CZUZhbHN5 88553\nYnJhbmU= 88554\nX2NhdGVnb3JpY2Fs 88555\nQXVyYQ== 88556\nIFR5cGVTY3JpcHQ= 88557\nIHNwb250YW5lb3VzbHk= 88558\nbG9uZ2xlZnRyaWdodGFycm93 88559\naWthbA== 88560\nX1RPRE8= 88561\nIFd5YXR0 88562\nIGZsdXJyeQ== 88563\nZGlm 88564\nIHJlY2tvbg== 88565\nIENvcm91dGluZQ== 88566\nCWZmbHVzaA== 88567\nIHdvcmtmbG93cw== 88568\nIEZBTUlMWQ== 88569\nc3ByaXRlcw== 88570\nX1dvcms= 88571\nLkdldFNpemU= 88572\nIENvbnN0cmFpbnRz 88573\nQmlnSW50 88574\naXRpYQ== 88575\nZ2V0Um93 88576\nIGR1aw== 88577\nIGlzTmV3 88578\nIFByb2R1a3Rl 88579\neENC 88580\naXNpZXJ0 88581\nZnVuY3M= 88582\nIEFkZW3DoXM= 88583\nQmluZGluZ1V0aWw= 88584\nb21waWxlcg== 88585\nLWludg== 88586\nIGNoYW50cw== 88587\nIGVudHNwcmVjaA== 88588\nKHRp 88589\nX0lB 88590\n0L7RgNC00LjQvQ== 88591\nIEZBTEw= 88592\naW1k 88593\nIGxvY2FsdGltZQ== 88594\nPExpbms= 88595\n0L3QuNC60LA= 88596\nIHByb2ZpbGVy 88597\nIGdldFVzZXJJZA== 88598\nIFBoeXNpY2lhbnM= 88599\nUkFE 88600\nIGhtbQ== 88601\nIE5lc3M= 88602\nIFRlbXBv 88603\nIEpU 88604\nIHJlY29ubmFpc3NhbmNl 88605\nPHRyYW5zbGF0aW9u 88606\nIGVudGljaW5n 88607\nIHF1YWludA== 88608\nIGNvdXBl 88609\nX18nLA== 88610\nTkFTREFR 88611\nINC30L3QsNGH0LXQvdC40Y8= 88612\nUEVSQVRVUkU= 88613\nIFBhaQ== 88614\nIHRldGFz 88615\nQ0FT 88616\nSVJST1I= 88617\nIGtj 88618\nIHRvdGU= 88619\nIGRyYXdiYWNr 88620\nIHBhcnNsZXk= 88621\nCUZ1bmN0aW9u 88622\naXN0eQ== 88623\nIERVUA== 88624\nX0NJRA== 88625\nX1VU 88626\nIGtzaQ== 88627\nIGrDpA== 88628\nPXZhbA== 88629\nLnRvSGV4U3RyaW5n 88630\n5p2/ 88631\nLmNsaXBz 88632\nIG9mZmVu 88633\nIFRFQ0hOTw== 88634\nIFNoYW1l 88635\nIHN1c2NlcHRpYmlsaXR5 88636\nIHN0dXBpZGl0eQ== 88637\nIFRyb3V0 88638\nIENoYW1wYWduZQ== 88639\nZXRoeWxlbmU= 88640\nIGJlZ3I= 88641\nX3JlZGlz 88642\nWWVw 88643\nIGhhbnM= 88644\nIERlZmVuZGFudA== 88645\nIGRhc2hlcw== 88646\nIHVzZXJUeXBl 88647\nX2RhdG9z 88648\nIHVuaWM= 88649\na3JpdA== 88650\nIHJlY2VwdGl2ZQ== 88651\nIEdyZXQ= 88652\nKG1i 88653\nIEluZmx1 88654\nw6tu 88655\nfS8+ 88656\naW50ZXJlc3Rpbmc= 88657\nVVRVUkU= 88658\nIGltYWdlU2l6ZQ== 88659\nIGdyZA== 88660\nIGFic29s 88661\nL2Zh 88662\nLmdyYWRpZW50 88663\nIHd5c3Q= 88664\nXX0+Cg== 88665\nbGVnYXRpb24= 88666\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 88667\nIEJsZW5kZXI= 88668\nX18pOw== 88669\nIHVzZXJFbWFpbA== 88670\nIFBoYXI= 88671\nbGVoZW0= 88672\nKSk/ 88673\nKFJldHVybg== 88674\nZWdyYQ== 88675\ndXRpdm8= 88676\nIGFwcGVuZGl4 88677\nIFJUVkY= 88678\nIFNFQUw= 88679\nIGd5cHN1bQ== 88680\nX0FyZw== 88681\nIGlsbHVtaW5hdGU= 88682\nIFNjaGlmZg== 88683\ncXVpbA== 88684\nLkNvbWJvQm94U3R5bGU= 88685\nJ10pKQoK 88686\nIGFsdGVycw== 88687\nIHByYWN0aXNl 88688\nIHVzdA== 88689\nIERpbWl0 88690\nLVJlZ3VsYXI= 88691\nIGNyZWVwaW5n 88692\nIENhbmFkaWVucw== 88693\nIHJldG9ybg== 88694\nLWNvcm5lcg== 88695\nICJdIg== 88696\nKHJuZw== 88697\nIGNhbmFkaWFu 88698\nIHBvc3Rv 88699\nLmFzc2VydEFsbW9zdEVxdWFs 88700\nIEJlY2t5 88701\nL3Nz 88702\nIGhvc3RhZ2Vz 88703\nIGJpb2xvZ2lzdA== 88704\nIEhvc3BpdGFsaXR5 88705\nIEVsaw== 88706\nIEJhcmFuZw== 88707\n66qp 88708\nYmJiYg== 88709\nLnRlYWNoZXI= 88710\nIHRlcm1pbmF0ZXM= 88711\nIGlzRXJyb3I= 88712\nIEtlbmRyaWNr 88713\nZW5kYXJz 88714\nIFN1Z2dlc3Rpb25z 88715\nQ2Vs 88716\nIFNlcnZpY2VQcm92aWRlcg== 88717\nIFdpY2hpdGE= 88718\nXSkpLAo= 88719\nIGhlYWRsaWdodHM= 88720\nX3ZlbnRh 88721\nQU5USQ== 88722\nIHByb3BpZWRhZA== 88723\nIGVubGlzdA== 88724\nCW9yZw== 88725\nTWVzc2VuZ2Vy 88726\nLmxhbmQ= 88727\nIicK 88728\nYXNwZXJz 88729\nIHRlcnM= 88730\nZmlsdA== 88731\nIEZ1bmN0b3I= 88732\nIHNsaW5n 88733\nX0JMSw== 88734\nLUV1cm9wZWFu 88735\nIEFjaGlsbGVz 88736\nXEVudGl0aWVz 88737\nLkRpc3BsYXlNZW1iZXI= 88738\nIHJlZGV2ZWxvcG1lbnQ= 88739\nCWhlbHA= 88740\nIFsnLQ== 88741\nIEp1bGllbg== 88742\nPUludGVnZXI= 88743\nLmlzTnVsbE9yRW1wdHk= 88744\nIFdvVw== 88745\nUGF5bWVudHM= 88746\nKGhkcg== 88747\nIGJhamE= 88748\nIEpDb21ib0JveA== 88749\nRmlyZWZveA== 88750\nIGNvbmdsb21lcg== 88751\nX2N1c3Q= 88752\nJCIpCg== 88753\nIG11dGFudHM= 88754\nTWFnbg== 88755\nIE1QSA== 88756\ne18= 88757\nX3dhcm5pbmdz 88758\nIGdhc3Q= 88759\nTHQ= 88760\nIHRyYWluYWJsZQ== 88761\nVHJhZGVtYXJr 88762\nQkFTSA== 88763\nIEVDUw== 88764\nUmV0cmlldmU= 88765\nJ08= 88766\nIGluaXRpYWxpc2Vk 88767\nIGNoZW1pbg== 88768\nLlRyYW5zcG9ydA== 88769\nIFlpbmc= 88770\nYXNpb25z 88771\nIG1vYw== 88772\nX0xPR0dFUg== 88773\nR0VOQ1k= 88774\nIEJsb2dnZXI= 88775\nICIpIgo= 88776\nUEVuZA== 88777\nIGFjY29tcGFnbg== 88778\nLkNPREU= 88779\nIG1MaXN0 88780\nLWVkdWNhdGVk 88781\nLC8= 88782\nIE1lcnJpbGw= 88783\nL3Blb3BsZQ== 88784\nLicnJwo= 88785\nX3RvZG8= 88786\nIGfDvG4= 88787\nX0ZVTExTQ1JFRU4= 88788\nLmNsZWFudXA= 88789\nVW5tYXJzaGFsbGVy 88790\nLlN1cHByZXNzTGludA== 88791\nIG9uc2xhdWdodA== 88792\nIE1hcnNlaWxsZQ== 88793\nZWRpYXRvcg== 88794\nX0VOVFJJRVM= 88795\nLGRlZmF1bHQ= 88796\nbWVsZHVuZw== 88797\nZWxmdGg= 88798\nIEdvdmVybm1lbnRz 88799\nIHBsZWFz 88800\nb3R0cw== 88801\nIHBsdW5kZXI= 88802\ncmVhZE9ubHk= 88803\nIGR5c2Z1bmN0aW9uYWw= 88804\nJ05laWxs 88805\nIHVubG9hZGVk 88806\nIHNxdWVlemluZw== 88807\nIGRvb2Q= 88808\nLmFkZERhdGE= 88809\nIEFzaQ== 88810\nTUVT 88811\nKHNjaGVkdWxl 88812\nIGFkdmVudHVyZXJz 88813\nZXhwZWN0RXhjZXB0aW9u 88814\nIH19Pns= 88815\nQ0xT 88816\nIHJlY2hlcg== 88817\nIGRlcm5pw6hyZQ== 88818\nLkRldGFpbHM= 88819\nIHJhbmRvbU51bWJlcg== 88820\nIGlhcg== 88821\nIExhbmdl 88822\nZXdl 88823\nIEVtaWw= 88824\nIGFkdmVydHM= 88825\nIGRyYW1hcw== 88826\nIEtvbW0= 88827\nICAJCQkJ 88828\nX1Rlc3RDYXNl 88829\nIENsYXJlbmNl 88830\n0LXQvdGC0LA= 88831\ndG91cHBlcg== 88832\nLm9uU3VibWl0 88833\nY2Fh 88834\nX0FMQVJN 88835\nKikKCg== 88836\nIOuzgOqyvQ== 88837\nLlByaXZhdGU= 88838\nIHNreWxpbmU= 88839\nUkFJTg== 88840\nKGN1cmw= 88841\nb3NpdGU= 88842\nSWdub3Jpbmc= 88843\nIHZ6 88844\nIHZlZGVyZQ== 88845\nIE9TWA== 88846\nYmFuYW5h 88847\nIG1ldGFt 88848\nIHRyYW5zbGF0ZVk= 88849\nIE1jR3I= 88850\n4oCZYWNj 88851\n5Lul5LiL 88852\nIHNwaXJpdHVhbGx5 88853\nKGVuYWJsZWQ= 88854\nIHJlc3RvcmVz 88855\nIGJ0bkNhbmNlbA== 88856\ndmFuaXNoZWQ= 88857\nIE51ZXZv 88858\nU2FsdmFy 88859\nY2FmZmU= 88860\nIG1hc3RlcmluZw== 88861\naWRkbGVk 88862\nLmlzZGlnaXQ= 88863\nIGdyYXZ5 88864\nYWdlZExpc3Q= 88865\nXFJlc291cmNlcw== 88866\nIGRvd25mYWxs 88867\nLlBhc3M= 88868\nIGFsdGlqZA== 88869\nIHBpenphcw== 88870\nIH0pKQ== 88871\ncGVybXM= 88872\naWdodG9u 88873\nIHJlcGVsbA== 88874\nICcnKSw= 88875\nLm5vcm1hbGl6ZWQ= 88876\nIG1hcmNoZXM= 88877\nCXJlc29sdmU= 88878\nQ2hpbGRTY3JvbGxWaWV3 88879\nIEluc3RpdHV0aW9ucw== 88880\nQXR0ZW5kYW5jZQ== 88881\nbHNl 88882\nZXJkZW0= 88883\nLmdldElucHV0 88884\nSGFzQmVlbg== 88885\nYXBldXRpY3M= 88886\nICpc 88887\nIFJpdHVhbA== 88888\nX0xT 88889\nIHNwb3RpZnk= 88890\nIHNww6R0ZXI= 88891\nIFRodW1ibmFpbA== 88892\nKGNlcnQ= 88893\nIGdldFJlc291cmNl 88894\nX3Bsb3Rz 88895\nIHN0YWluaW5n 88896\nYWRqdXN0ZWQ= 88897\nINep 88898\nRGl2RWxlbWVudA== 88899\nIFRUQw== 88900\nIGFwcm92ZQ== 88901\nLnZpZXdlcg== 88902\nfD0= 88903\nZ2V0U291cmNl 88904\n55S16K+d 88905\nX1RC 88906\nX2JpbGxpbmc= 88907\nLUxpZmU= 88908\nIHBzeWNoZQ== 88909\nIHRhYlBhZ2U= 88910\nIEluZmVjdA== 88911\neGZmZg== 88912\nX2hpZA== 88913\nIGFwb2NhbHlwc2U= 88914\nIE5GUw== 88915\nIElURVI= 88916\nV2luZG93U2l6ZQ== 88917\naGVpdHM= 88918\nIGluY3JlbWVudGVk 88919\nIEJyYXk= 88920\nZW5lZ3Jv 88921\nIGFsbW9uZHM= 88922\nWVBSRQ== 88923\nTm9ybWFsaXpl 88924\n4oCcV2VsbA== 88925\nIEFwaUNvbnRyb2xsZXI= 88926\nW1VuaXQ= 88927\nR2VucmVz 88928\nIE5leA== 88929\nIExORw== 88930\nIGZvcmVnb2luZw== 88931\nIHRlbmRvbg== 88932\nIEhw 88933\nQ291bmNpbA== 88934\nIFNhdWRpcw== 88935\nIERlemU= 88936\nIHNjcmFwZWQ= 88937\nIGJvdHRsZW5lY2s= 88938\nIE9ybg== 88939\nIHVubWFubmVk 88940\nIGludm9raW5nU3RhdGU= 88941\nIEV4b2R1cw== 88942\nX0FUT01JQw== 88943\nU3ViTWVudQ== 88944\nX2NvbXByZXNz 88945\nIy4= 88946\nRHJ2 88947\nLnB1c2hCdXR0b24= 88948\nIHN1aXRjYXNl 88949\nb3NzZWQ= 88950\nYml0cmFyeQ== 88951\nU25pcHBldA== 88952\nIEVwaWRlbWk= 88953\nRGlzYWxsb3c= 88954\nX0NISw== 88955\nIHZlcmlmaWVz 88956\nIENhdGFseXN0 88957\n4oCUZnJvbQ== 88958\nIGNvbnRhbWluYW50cw== 88959\nSm9obm55 88960\nKGZpbA== 88961\nIGRlcmVu 88962\nIG91dGNyeQ== 88963\nIEpvaGFubg== 88964\nPFRhZw== 88965\nX3Nhbg== 88966\nIHN0ZGRldg== 88967\nIHBhcmFseXplZA== 88968\nIExleHVz 88969\nb3NhdGU= 88970\nIENoYXJzZXQ= 88971\nIFJlYWx0 88972\nPT8iLA== 88973\nKERlZmF1bHQ= 88974\nIFRyZWFzdXJlcg== 88975\nRWluZQ== 88976\nIHVudHJ1ZQ== 88977\nIGZpbmFuemk= 88978\nIGJlaGF2aW91cmFs 88979\nIG5pcHBsZQ== 88980\nIFJhZGljYWw= 88981\nIFBheg== 88982\nIE1haXNvbg== 88983\nLWVtcGxveWVk 88984\nIHdlcmVsZA== 88985\nIGpvcw== 88986\nIERpZWQ= 88987\nZW50cmVwcmlzZQ== 88988\nJHJvd3M= 88989\nIHNwb29m 88990\nIMK7Lg== 88991\nIGtleXBvaW50cw== 88992\nIGN1cGNha2Vz 88993\nIHt9KTsKCg== 88994\nY2hpbmU= 88995\n4oCL4oCL 88996\nLExPQ0FUSU9O 88997\nIHBseXdvb2Q= 88998\nIG1hZ2c= 88999\nIFJhbw== 89000\nIERQUg== 89001\nIGVib29rcw== 89002\nKXNpemU= 89003\nIHNwZWNpYWxpc2Vk 89004\nI2Fl 89005\nIG1pY2hhZWw= 89006\nIFNURE9VVA== 89007\nIFBlbGw= 89008\nQU1FUkE= 89009\nYW5nZWxv 89010\nIGluZ2lu 89011\nIG1BdXRo 89012\nIGxlZ2FsaXpl 89013\nIEN1YW5kbw== 89014\nIGNlcnRv 89015\nIGxpdHJlcw== 89016\nIEV4dHJhcw== 89017\nU0hPUlQ= 89018\nIHByZW1hdHVyZWx5 89019\nIFNlbWFwaG9yZQ== 89020\nSEVO 89021\nIGFtcGhpYg== 89022\nIGjDqQ== 89023\nRXhpdGluZw== 89024\nZXVpbGxleg== 89025\nIFRNUHJv 89026\nLnByZWZlcmVuY2Vz 89027\nLmdldEluZm8= 89028\nw6l0aWNh 89029\nIiIiLg== 89030\nLm5ld0FycmF5TGlzdA== 89031\nIGtyb24= 89032\nIEJMTA== 89033\nY2xpbmU= 89034\nX2di 89035\nIFRvbWFz 89036\ncHJvYmFudGU= 89037\nSVRJT05BTA== 89038\n4buRaQ== 89039\nIExvZA== 89040\nSXNu 89041\nLHsK 89042\nIGtvbW11bg== 89043\nd2R4 89044\nZ2Vub21l 89045\n6YCj 89046\ndG9IYXZlTGVuZ3Ro 89047\nJ0U= 89048\nIHDDumJsaWNh 89049\nIERldGVjdGVk 89050\nIF8KCg== 89051\n0YzRjg== 89052\nK1M= 89053\nY2xvdGg= 89054\nUm90b3I= 89055\nLm51bWVybw== 89056\nX3N0YW5k 89057\nR0ND 89058\n6rU= 89059\nX3Zw 89060\nX0ZBUg== 89061\nQWhlYWQ= 89062\ne31c 89063\nKGNvcnJlY3Q= 89064\nImNyeXB0bw== 89065\nbW9kdWxv 89066\nX1VUSUxT 89067\nLlZhcg== 89068\nLW1lbg== 89069\nIHZlbmlhbQ== 89070\nIE1jQ29ybQ== 89071\nZ2V0TG9jYXRpb24= 89072\nW2NvZGU= 89073\nJWY= 89074\nIGRpZmZlcmVk 89075\nSVBBZGRyZXNz 89076\nIFN0cmF3YmVycnk= 89077\nIFNhaGFyYQ== 89078\nY3JlYXRlQ2xhc3M= 89079\nIS8= 89080\nIG1lbWJlcnNoaXBz 89081\nIHByb25vdW5jZQ== 89082\nLkNvbnN0cmFpbnQ= 89083\nIEVucm9sbG1lbnQ= 89084\nIHJlbmV3YWJsZXM= 89085\nLmd0 89086\naXp6aWU= 89087\ncnp5 89088\nZXJzZW4= 89089\nPD0k 89090\nREVMQVk= 89091\nIHNpZ25pbg== 89092\nIFBTVQ== 89093\nQXBwTmFtZQ== 89094\nfVwuWw== 89095\nRUdB 89096\nIGNpZW50 89097\nIFN5bm9wc2lz 89098\nIGxldHRlclNwYWNpbmc= 89099\nIGNoaWxkcw== 89100\nIFNjYWxpbmc= 89101\nKXByZXBhcmU= 89102\nIGNvbW11dGVy 89103\nU2xhc2g= 89104\nb3VzZXI= 89105\nIHdhdGVybWFyaw== 89106\nIFVJU2NyZWVu 89107\nb2xpYW4= 89108\nCXZlcnRpY2Vz 89109\nPkFjdGlvbg== 89110\nIGFwaA== 89111\naGFuZHM= 89112\nIE9DQw== 89113\nSFU= 89114\nIHNlY2x1ZGVk 89115\nIHZpc2NlcmFs 89116\nIHZpZGVvZw== 89117\nIFNhbXVyYWk= 89118\nIFp1aw== 89119\nIFdpZG93 89120\nYWNjaW5l 89121\nIGxpbGxl 89122\nIFJ5ZGVy 89123\nIFByb2dyYW1tZXI= 89124\nRXhwb3J0ZXI= 89125\nIG1vdmltaWVudG8= 89126\nYXBhcw== 89127\nIGxlaWRlcg== 89128\ndWxhcmVz 89129\naWVtZQ== 89130\nLWRlbnNpdHk= 89131\nZGVzY2VuZGluZw== 89132\nKElU 89133\nIHNjcmFwZXI= 89134\nIGljZWJlcmc= 89135\nX0NSSVRJQ0FM 89136\nIGF1dGU= 89137\nX1N0eWxl 89138\nIE1BTA== 89139\nIEhlY3Rvcg== 89140\nLUNocmlzdGlhbg== 89141\nIGRpZmZlcmVudGlhdGVk 89142\nIEJpc29u 89143\nICAgICAgIAk= 89144\nLnBvcHVsYXRpb24= 89145\nUmlv 89146\nLVRy 89147\nPVZhbHVl 89148\nIEx1ZnQ= 89149\nIEdpdWxpYW5p 89150\n55yf 89151\nQ291cG9u 89152\nIGhhY2llbmRv 89153\n44Od 89154\ncG9uY2U= 89155\nX3Jlc2lkdWFs 89156\nIGxp4buHdQ== 89157\nXHVmZg== 89158\n0L7QsdGF0L7QtNC40Lw= 89159\nIHJlc3BlY3Rv 89160\nIERlc2lyZWQ= 89161\nRGF0YVN0cmVhbQ== 89162\nLnNheA== 89163\nIG1vcA== 89164\nIEhhY2tlcg== 89165\nQU5UQQ== 89166\nQW5j 89167\nVmVudGE= 89168\nIFdvcmRwcmVzcw== 89169\nCWVmZmVjdA== 89170\nYWRhcHQ= 89171\nIEludGVydmlld3M= 89172\nIGRyYXdiYWNrcw== 89173\nQUxMRU5H 89174\nIGfDqW7DqXJhbA== 89175\nLWJhZGdl 89176\nUmVzaXN0YW5jZQ== 89177\nIE9TSQ== 89178\ndG91cm5hbWVudA== 89179\nIFJlcHV0YXRpb24= 89180\nIEVpc2VuaG93ZXI= 89181\nRmlsZWQ= 89182\nIGhlYnQ= 89183\nI1w= 89184\nY3JlYXRlUXVlcnlCdWlsZGVy 89185\n5pyJ5pWI 89186\ndmFuY2Vk 89187\nLkhhc0tleQ== 89188\nZGRl 89189\nKHN0YXJ0VGltZQ== 89190\nIEluc3RhbGxlcg== 89191\nIEltcGw= 89192\nY29hY2g= 89193\nIHByZWFjaGVk 89194\nIGJyZXdlZA== 89195\nSW5zdGFsbGVy 89196\nb2x2YWJsZQ== 89197\nIGFsYXM= 89198\nKHNwZWxs 89199\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 89200\nIGRlZmFtYXRpb24= 89201\nKEFyZw== 89202\nIHVzZXJEZXRhaWxz 89203\nIGxpY2Vuc29ycw== 89204\nIEludmVzdGlnYXRpb25z 89205\nIGRpbmVy 89206\nIGZpY3Q= 89207\nU3RpY2s= 89208\nTmVpZ2hib3I= 89209\ndG9UaHJvdw== 89210\nLXNlY3Rvcg== 89211\nIHJpc3VsdA== 89212\n4oCZOg== 89213\nSk5JRW52 89214\neXBpY2Fs 89215\nZGVzaWduYXRpb24= 89216\nKHdw 89217\nIGNvbmZpcm1QYXNzd29yZA== 89218\nLWlvcw== 89219\nICItIjsK 89220\nCWFzc2VydE5vdE51bGw= 89221\nYWRkRXJyb3I= 89222\nYXZyYXM= 89223\nVm0= 89224\nKGpRdWVyeQ== 89225\nIFZpY3RpbXM= 89226\nIHJlbGlhbnQ= 89227\nIEJsaXR6 89228\nIG91dGFnZQ== 89229\nIGZsdW9yaWRl 89230\nIFROVA== 89231\nLkRpc2NsYWltZXI= 89232\nIFNOTVA= 89233\ndmFibHk= 89234\nIHBob3RvbnM= 89235\nLlJlYWRBc1N0cmluZ0FzeW5j 89236\nU2NoZWR1bGVk 89237\nIGpld2lzaA== 89238\nIEdlb2ZmcmV5 89239\nIEdyYW5ueQ== 89240\nfgo= 89241\nLW1lc3NhZ2Vz 89242\nKGdvYWw= 89243\nIGFyZ2VudA== 89244\nIFBlc3Q= 89245\nIGNvbmdyYXR1bGF0ZQ== 89246\naW5vc2F1cg== 89247\nIHdoaXNwZXJz 89248\nIHNpc3RlbWFz 89249\nIEbDqQ== 89250\nL0luZGV4 89251\nLk1JTExJU0VDT05EUw== 89252\nIGFjaGlldmFibGU= 89253\nIEJyaXR0YW55 89254\nKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys= 89255\nIFJldHVyblR5cGU= 89256\nIGluZml4 89257\nLmlzU3VjY2Vzcw== 89258\nLkNhdGVnb3JpZXM= 89259\nIG91dGxpZXI= 89260\nLkFzc2V0 89261\nb3RlYw== 89262\nIHdpemFyZHM= 89263\nIGJvb3Rsb2FkZXI= 89264\nX2Jlcg== 89265\nIHJlaGFiaWxpdA== 89266\nYW50b3I= 89267\nIFZpdm8= 89268\nIEdhcm1pbg== 89269\nb2JqZWN0SWQ= 89270\nQFBhdGg= 89271\nIMO6bmljYQ== 89272\nIFlvcmtlcnM= 89273\nR3VpZElk 89274\nJGVycm9ycw== 89275\nICs9Cg== 89276\nIGF4aW9t 89277\nIFBTSQ== 89278\nIFN1Y2M= 89279\nIFNwb2thbmU= 89280\nICciLiRf 89281\nIExO 89282\nLm5ld0xpbmU= 89283\nIGludGVyc2VjdHM= 89284\nbGljaGtlaXQ= 89285\nIElBTQ== 89286\nLkRyb3BEb3duSXRlbXM= 89287\nIGNvdXJ0ZW91cw== 89288\nIFNtaXRoc29uaWFu 89289\nIEhtbQ== 89290\nUURlYnVn 89291\nc3RyYWlnaHQ= 89292\nX3NvbGQ= 89293\nQnVsaw== 89294\nVHJpU3RhdGU= 89295\nIGFkZEJ1dHRvbg== 89296\nIEhpcmluZw== 89297\nVHJhbnNwb3Nl 89298\nIFVJVGV4dFZpZXc= 89299\naXN0ZW5jaWE= 89300\nL2NwcA== 89301\nINC/0L7Qu9GP 89302\nIENvb2tib29r 89303\nL0FwcGxpY2F0aW9u 89304\nZ2VuaWM= 89305\nIFdvb0NvbW1lcmNl 89306\nLHZlY3Rvcg== 89307\nIEJpdGU= 89308\nLmh3 89309\nIGRvY2tpbmc= 89310\nIFRhbnRyYQ== 89311\nIFNWQw== 89312\nIE1hdXJpdA== 89313\naWFsaWFz 89314\nIEF1cmU= 89315\nIGJvbHM= 89316\nTE9DSVRZ 89317\nIFdlc3Ricm9vaw== 89318\nIEJQTQ== 89319\nIEZleQ== 89320\nIFNvdmVyZQ== 89321\nIHBhbmRh 89322\nIHF1aXp6ZXM= 89323\nIGNyZW8= 89324\nc3BlZWNo 89325\nL2Rpcg== 89326\nINC40YHQv9C+0LvRjNC30L7Qsg== 89327\nIGZvdW5kYXRpb25hbA== 89328\nLWFwcGVuZA== 89329\nblRoZQ== 89330\nIGFwaVVybA== 89331\nLlhQQVRI 89332\nIExpbmd1 89333\nIEV4aGF1c3Q= 89334\nUGFraXN0YW4= 89335\nIG9tYXA= 89336\nIGZvbnRTdHlsZQ== 89337\n0LXRgdGC0Lg= 89338\nIG1hbnNsYXVnaHRlcg== 89339\nX0xvbmc= 89340\nIGNhcnBldHM= 89341\nQ2hlc3M= 89342\nZWxpZ2h0 89343\nRHJhd2VyVG9nZ2xl 89344\nIFBhdHR5 89345\nX2Nyb3NzZW50cm9weQ== 89346\nIHR3ZWFraW5n 89347\n0YLRgw== 89348\nIENBTEM= 89349\nc2lw 89350\nIEpNUA== 89351\nX19fX19fX19fX19fX19fX18KCg== 89352\nVHJlZVZpZXc= 89353\nLXdhdmU= 89354\nIHBhc3R1cmU= 89355\nZWxpbWluYXI= 89356\nIGVyeQ== 89357\nIHJlc3RsZXNz 89358\n6rWs 89359\nIG1hcmlhZ2U= 89360\nIEVsbGll 89361\nXz0n 89362\nIHZtaW4= 89363\nS2ljaw== 89364\nLnRvb2xib3g= 89365\nIE1hcmlubw== 89366\neXBzeQ== 89367\nc3RkYXJn 89368\ncHRyZGlmZg== 89369\nIFBlYWtz 89370\nX1ZhbA== 89371\nIGluZ2VzdA== 89372\nIGNvbXBz 89373\nRGViZQ== 89374\nIERlY2xhcmF0aW9ucw== 89375\naXJjb24= 89376\nPWFsbA== 89377\nLkRlYnVnZg== 89378\nUHJlZGljdGlvbg== 89379\nIGRhdQ== 89380\nKE1lbWJlcg== 89381\nIGNoaWVmbHk= 89382\nL2FuaW1hdGU= 89383\nLkF0dGFjaA== 89384\nIGdhc3RyaWM= 89385\nIFVzZXJEZXRhaWxz 89386\nw7ZyZW4= 89387\na29h 89388\nLWJvb3Q= 89389\nIHNwbGljZQ== 89390\nbGVh 89391\nb3Rp 89392\nW29w 89393\nU3F1YXJlZA== 89394\nIHNjcm9sbFRv 89395\nIE5ld2ZvdW5kbGFuZA== 89396\nCUVSUk9S 89397\nV2Fs 89398\nRU1BTEU= 89399\nR2V0WQ== 89400\nIGNhYmlucw== 89401\nIGFic2w= 89402\nLm1peGVy 89403\nIGNkcg== 89404\nY29uY2VydA== 89405\nIFN5bHZpYQ== 89406\nQks= 89407\n5LuK5bm0 89408\nX0NMQU1Q 89409\n0YHRgtGA0YPQutGC0L7RgA== 89410\nL2dhbWVz 89411\nxZN1cg== 89412\nPGxvY2F0aW9u 89413\nIGNsb3NlQnV0dG9u 89414\nIEhhaXJzdA== 89415\n4bqhbw== 89416\nIGNydW1ibGluZw== 89417\nIHN1bGZhdGU= 89418\nIGFsZ3VpZW4= 89419\nIEpEQkM= 89420\nIEt2 89421\nUElQ 89422\nX3N1cmY= 89423\nIHXFvHl0aw== 89424\nIG1hbm5lZA== 89425\nIE9jY2FzaW9uYWxseQ== 89426\nb2Jqcw== 89427\nTWluaW1hbA== 89428\nLWRlc3M= 89429\nIFdBVg== 89430\nIEVycm9ySGFuZGxlcg== 89431\nIHNldExvY2F0aW9u 89432\nIGlldHM= 89433\nIHN1YnJvdXRpbmU= 89434\nIHRvbmd1ZXM= 89435\nX3F1aXo= 89436\nTWlsbGVy 89437\nIEJhc2VUeXBl 89438\nIFZ1ZXg= 89439\naXJhdGU= 89440\nU2VyaW91c2x5 89441\ndHlwZWlk 89442\nIGt1dGpl 89443\nIHByZXNjcmliaW5n 89444\nX3N1cnZleQ== 89445\nLkN0 89446\nIGJsaW5kbHk= 89447\nLmdldExhYmVs 89448\nLCIpOwo= 89449\nIHBvdHJ6ZQ== 89450\nIFN3b3Jkcw== 89451\nU29ydGFibGU= 89452\nIEJsYWNrYnVybg== 89453\nIE1hdGE= 89454\nIHBvbmRz 89455\nIHByb3Rlc3RvcnM= 89456\nIEVuc2VtYmxl 89457\nOmZvY3Vz 89458\nIGl0YWxpYW5h 89459\nIGRvcm1hbnQ= 89460\nIE5lbA== 89461\nSU5DTFVERQ== 89462\nKENvbnY= 89463\nIGJ1Zmxlbg== 89464\nIENETg== 89465\nLnhodG1s 89466\nSGRy 89467\nIGNhcmNpbm9tYQ== 89468\nIFdvcmNlc3Rlcg== 89469\nbmRs 89470\ndXNlUmFs 89471\ndXNlUmFsYXRpdmU= 89472\ndXNlUmFsYXRpdmVJbWFnZVBhdGg= 89473\nIHRha2Vhd2F5 89474\nZWxlbWVudEd1aWRJZA== 89475\nLmxhYmVsWA== 89476\nW0lE 89477\nQUxFUg== 89478\nCXV2 89479\nPigpLT4= 89480\nL2xp 89481\nK2xlbg== 89482\nIHByb3BlbA== 89483\nIGNhYm8= 89484\nXCIiKTsK 89485\nIHZvY2F0aW9uYWw= 89486\nLXBpbGw= 89487\nLm5sbQ== 89488\nIGVyb3RpY2E= 89489\nb3BvdA== 89490\nbGFuZHNjYXBl 89491\naW5zaw== 89492\nIHBsYWNlbWVudHM= 89493\nLnNldEF1dG8= 89494\nIGhvbWljaWRlcw== 89495\nX0ZpZWxkT2Zmc2V0VGFibGU= 89496\nOmw= 89497\nIGFubm90YXRl 89498\nLXJpc2U= 89499\nLGFscGhh 89500\nIGludGVydmVuaW5n 89501\nYW1iaQ== 89502\nLj0nPA== 89503\nIHBhcmxlcg== 89504\n772l772l 89505\nIGNvbXBseWluZw== 89506\nLWhhbmRsZQ== 89507\nIGludGVycnVwdGlvbnM= 89508\ncGxlcnM= 89509\ncm91cHM= 89510\nX0RlZg== 89511\nIHBpY2tlclZpZXc= 89512\nIHBpZXJjZWQ= 89513\nIGVyYWRpY2F0ZQ== 89514\nbW9ieA== 89515\nW3RyYWlu 89516\nRGVmZXJyZWQ= 89517\nIHRvdGFsZWQ= 89518\nQ2hpbGRJbmRleA== 89519\nIFJlY29tbWVuZGF0aW9ucw== 89520\nX1dPUkRT 89521\nIHNpZ25pZnk= 89522\nIEFlcm8= 89523\nX2Jvb3RzdHJhcA== 89524\nX1Vw 89525\ncHJvZHVjdE5hbWU= 89526\nLWFueQ== 89527\nIHBwbA== 89528\nX1BVVA== 89529\nIGx5b24= 89530\nX0lMaXN0 89531\nIMOpY3JpdA== 89532\nKGd1aWQ= 89533\nIGNvbnRhZ2lvdXM= 89534\nX1NlbGVjdGlvbg== 89535\nL2xhbmd1YWdl 89536\ncXVhbg== 89537\nIGFjdXB1bmN0dXJl 89538\nIG9mcmVjZQ== 89539\nCVJURQ== 89540\nLkd1bmE= 89541\nIHNlbnNlZA== 89542\nIEtyYWs= 89543\nIHVubHVja3k= 89544\nYXZpYw== 89545\ndGl0bGVMYWJlbA== 89546\nIGhheXN0YWNr 89547\nLmJpdG1hcA== 89548\nIENvdW5zZWxpbmc= 89549\nUExBVEZPUk0= 89550\nX1Rvb2w= 89551\nVGFt 89552\nV2VyZQ== 89553\n0YDQsNC3 89554\nX1NQRQ== 89555\nIG9uQW5pbWF0aW9u 89556\nPTw/PSQ= 89557\nIFNsZQ== 89558\nIEd1aW5uZXNz 89559\nIHR3ZWFrZWQ= 89560\nLXByZXNzdXJl 89561\nX21vbnRocw== 89562\nKW8= 89563\nUHJvYmFiaWxpdHk= 89564\nIENhbXBvcw== 89565\nLkNPTkZJRw== 89566\nVmludGFnZQ== 89567\nPndpbmRvdw== 89568\nIEZhY3RvcnlCb3Q= 89569\ncG9zdGdyZXNxbA== 89570\nIHRhYmxldG9w 89571\nIENhdGE= 89572\naG9j 89573\nX2FzYw== 89574\n4oKs4oCc 89575\nQmFja1N0YWNr 89576\nw6lv 89577\nIFNvdXM= 89578\nc2V0dGVy 89579\nJyldKQo= 89580\ndmVsbGU= 89581\nIEFsdW1pbml1bQ== 89582\neEJB 89583\nLm1vbmdv 89584\nIFZhcmlhdGlvbg== 89585\neXR1dA== 89586\nbmVobWVy 89587\n4buDbQ== 89588\nIGVmZmVjdGVk 89589\nICoqLw0K 89590\nIHJlY291bnRlZA== 89591\nUHJhY3RpY2U= 89592\nQ0FOQ0VM 89593\nY3puaWU= 89594\nTGFycnk= 89595\nIHFh 89596\nIEh1ZmZtYW4= 89597\nZ2V0RHJhd2FibGU= 89598\nIGVuZnJlbnQ= 89599\nIG9uQ2FuY2VsbGVk 89600\nIGxlbw== 89601\nIFhTUw== 89602\nIEh1cnJpY2FuZXM= 89603\nIGpvbg== 89604\nIFRlc3RlZA== 89605\nIE1vcmFs 89606\nIGJlZHRpbWU= 89607\nIEpBRFg= 89608\nIGVjaGFuZw== 89609\nIG51ZXN0cmFz 89610\nUENN 89611\nKS4u 89612\nIOyImOyglQ== 89613\nIGJvcmRlcmxpbmU= 89614\nIGFzc2lzdGly 89615\nIEhlbHBz 89616\nIERpdmU= 89617\nX3NuZA== 89618\nd2l0 89619\nX2JsZW5k 89620\nIGlzRmlyc3Q= 89621\nIGhlYXBx 89622\nKCc9 89623\nIGFzc2VtYmxlcg== 89624\nIE15c3RpYw== 89625\nb3JnaA== 89626\nIGhpam9z 89627\nX0tIUg== 89628\nKGRlY29kZWQ= 89629\nIFFVSQ== 89630\nINeR 89631\nIGNvbnRyb2xJZA== 89632\nU3BhY2Vy 89633\nLmFnZ3JlZ2F0ZQ== 89634\nIHNoYWx0 89635\nX3RyYXA= 89636\nIEZhbWlsaWU= 89637\nzrg= 89638\nb3J0YQ== 89639\nLlBvc3RNYXBwaW5n 89640\n7LA= 89641\nICcuLics 89642\nesOh 89643\nL2FybQ== 89644\nLmdhbGxlcnk= 89645\nIGltcGVjY2FibGU= 89646\nIHdpbmRvd0hlaWdodA== 89647\nc2xhY2s= 89648\nZmZi 89649\nX3Fw 89650\nbGFkZW4= 89651\nIFRFUk0= 89652\nc2V0TGFiZWw= 89653\nIFNpbmdsZUNoaWxkU2Nyb2xsVmlldw== 89654\necO8aw== 89655\nIHB1bHVtaQ== 89656\nLWdhcA== 89657\ndW5pYWNpZA== 89658\nCWhvbGRlcg== 89659\nLmFkZEZpZWxk 89660\nIHRyaXBsZXM= 89661\nIEp1ZGdtZW50 89662\nIENlbmE= 89663\ncGFyc2Vycw== 89664\nLmRyYXdUZXh0 89665\nINC60LDQttC0 89666\nIGFjY3Q= 89667\naGl2ZQ== 89668\nIG11c2lxdWU= 89669\nIFlheg== 89670\nLXBvc3Rz 89671\nIGZpbHM= 89672\nIC8vew0K 89673\nX3B1dHM= 89674\nIFN0YXR1ZQ== 89675\nZGlhbW9uZA== 89676\nU3RvcmFnZVN5bmM= 89677\nIHNodXRz 89678\nIGdldHRpbWVvZmRheQ== 89679\nIEFBQkI= 89680\naWNoZXJu 89681\nZ2V0TG9jYWxl 89682\naW50cmVl 89683\nIGZydWl0ZnVs 89684\nQmVhcg== 89685\nIHBsdW1iZXI= 89686\ncWlk 89687\nQ0hJUA== 89688\nIG1vdGl2YXRpbmc= 89689\nIGVzY2FsYXRl 89690\nLmJ1bGs= 89691\nIFBsYXlncm91bmQ= 89692\nX21pcnJvcg== 89693\nIFBlZWw= 89694\nIGRhbmU= 89695\naW52b2ljZXM= 89696\nSGFzQmVlblNldA== 89697\nLXZlcnRpY2Fs 89698\nIEZyYW5jZXNjbw== 89699\nIEFTQQ== 89700\nINC60L7Qu9C40YfQtdGB0YLQstC+ 89701\nw6Bu 89702\nRm91cnRo 89703\nIENyZWF0ZVRhYmxl 89704\nY2N0b3I= 89705\nIGZyYW50aWM= 89706\nYWFi 89707\nIEthcmFjaGk= 89708\nX2ltYWc= 89709\nIG5hdHV1cg== 89710\nRWF0 89711\nIHN0dW1w 89712\nIHJvbGxlcnM= 89713\nIHRyYWl0ZW1lbnQ= 89714\nINC/0YDQvtC0 89715\nIHJlYWxpc3RpY2FsbHk= 89716\nIGVQdWI= 89717\nIFphZw== 89718\nZGFtbg== 89719\nIEFubmV4 89720\ncGVjaWVz 89721\nKGV4aXQ= 89722\nIHNwZWN0YXRvcg== 89723\nIEJ1bGdhcmlhbg== 89724\nIG1lZ2V0 89725\nIG1hdHVyZXM= 89726\nIGRldGVjdGlvbnM= 89727\nIHphaGw= 89728\nZW5lZml0 89729\nYWtvdg== 89730\nIGFkdWx0b3M= 89731\nbWlkZGxld2FyZXM= 89732\naXNPYmplY3Q= 89733\nS2Vubg== 89734\nIHVuZXRoaWNhbA== 89735\nc3VibmV0 89736\nR3JhcGhRTA== 89737\nIEdhZWw= 89738\nLkRyb3BvdXQ= 89739\nIGJ1cmVhdWNyYXRz 89740\nIFJlZGVtcHRpb24= 89741\nLkR0bw== 89742\nLkV2YWx1YXRl 89743\nIG9nZ2k= 89744\nIHRyYXRhbWllbnRv 89745\nIHJlY2FsbGluZw== 89746\naXN0aW5ndWlzaA== 89747\nL3JlbGVhc2U= 89748\nX1dST05MWQ== 89749\nCW1rZGly 89750\nVHlwZUVudW0= 89751\nIERBUks= 89752\n5rWB 89753\nIFZhcG9y 89754\nIGF0b2w= 89755\nCWluc3Q= 89756\nLmApOwo= 89757\nL2Vs 89758\nIHJlY2xhaW1lZA== 89759\nw59lcmRlbQ== 89760\nX2xvc3Q= 89761\nIEFsYQ== 89762\nINC+0YjQuNCx 89763\nIEJhcnRo 89764\nQ29sb24= 89765\nb3Bvcg== 89766\nX3Bhc3N3ZA== 89767\nX2V4Y2x1ZGU= 89768\nQVBB 89769\nZmxvd2Vycw== 89770\nIEVib29r 89771\nIFNUQQ== 89772\nVU5T 89773\nX0RJU1BBVENI 89774\nQUNJw5NO 89775\ndGVybWluYXRpb24= 89776\nIG5lc3RsZWQ= 89777\nYWRyYXRpYw== 89778\nUm93QW5pbWF0aW9u 89779\nX2tt 89780\nIHJvbmQ= 89781\nXV0+PC8= 89782\n5L2Z 89783\nIGNvc3BsYXk= 89784\nIG1pbGxlbm5pdW0= 89785\nX3NlcmlhbGl6ZQ== 89786\nIHZlcnNjaGllZGVuZW4= 89787\nYW50dA== 89788\nIEFtaWQ= 89789\nY3JldGlvbg== 89790\nKT8k 89791\nIHRvd2luZw== 89792\nLmZpbA== 89793\nLkZpbGVXcml0ZXI= 89794\nIGFpcw== 89795\nIGVTcG9ydHM= 89796\ncHJ0 89797\nSVBB 89798\nLkZBTFNF 89799\nIHByaWNr 89800\nRW5kaW5n 89801\nIHByw6lzaWRlbnQ= 89802\nX2dseXBo 89803\nIHN1cHBsZW1lbnRlZA== 89804\nIGNvbnRhcg== 89805\nIi4kXw== 89806\nIEJ1eWVycw== 89807\ndWph 89808\nIFRpbWVab25l 89809\nZW5uZW50 89810\nSW5Qcm9ncmVzcw== 89811\nIFN1c3RhaW5hYmlsaXR5 89812\nIFByb3NwZXI= 89813\nQ29udG91cnM= 89814\nIHN0YXJ0bGVk 89815\nX2xlYXN0 89816\nIENvdmVudA== 89817\nY2huaXR0 89818\nIE1pbGt5 89819\nICItPg== 89820\nZXRhaw== 89821\nIHR1c3Nlbg== 89822\nLXBheWluZw== 89823\nX2FjY2Vzc2libGU= 89824\nQmF0bWFu 89825\nKGl0cg== 89826\nSUFMSVpFRA== 89827\nIFRleHRBcmVh 89828\nYW5rZQ== 89829\nX0pVTVA= 89830\nIGJlaGF2ZWQ= 89831\nLG9wdGlvbnM= 89832\neGl2 89833\nLlBMTA== 89834\ncXg= 89835\nLm9uTmV4dA== 89836\nIHZlcmlmaWVy 89837\nIGR1xbw= 89838\nIEZ1a3VzaGltYQ== 89839\nIENPUlBPUkFUSU9O 89840\nX3RE 89841\nIE1lYWRvdw== 89842\nIHByb3llY3Rvcw== 89843\nICgnXA== 89844\nIEJhcmNsYXlz 89845\nIGxlZ2FsaXR5 89846\nIGhhbWJ1cmdlcg== 89847\nIGVpbnM= 89848\nSW5kaWFuYQ== 89849\nIFRLZXk= 89850\nY2xvYWs= 89851\nPGFsZ29yaXRobQ== 89852\nIHByZWFjaGVy 89853\ne2xuZw== 89854\nLmFydGljbGVz 89855\nc2V0SW1hZ2U= 89856\nUmVuYW1l 89857\nIGJsb3Nzb20= 89858\nIEJsb3Nz 89859\nIHV1cg== 89860\nIGRhZHM= 89861\nIFRpdGFuaWM= 89862\nICAgICAgICANCg0K 89863\nIG9yZGluYW5jZXM= 89864\nIG3DpG5u 89865\nIGVyaw== 89866\nIGRpc3RpbGxlZA== 89867\nIMOkbA== 89868\nIHJ1cHR1cmU= 89869\nIENhbWVyYXM= 89870\nw7luZw== 89871\nIGhhaXJzdHlsZXM= 89872\nIGVtYnJ5b3M= 89873\n4oCdCg== 89874\nLk5hdg== 89875\nIHN0cm0= 89876\nCXVzYWdl 89877\nLkFJ 89878\nIFRPVUNI 89879\nIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24= 89880\n6rKw 89881\na29uZWtzaQ== 89882\nISIp 89883\nIGVzY2Fw 89884\ndWRpb3M= 89885\nc3RhcnR0aW1l 89886\nIG1laW5lbQ== 89887\nIFNwaXJhbA== 89888\nIEVyZWN0aWxl 89889\naXZhbGVuY2U= 89890\nIGl0ZW1UeXBl 89891\nIGFiYWl4bw== 89892\nVmVydHM= 89893\ndGFraW5n 89894\ncHN0 89895\nIE9zY2Fycw== 89896\nIER4 89897\nZXR0eQ== 89898\nTUFM 89899\nIE5lZWRsZQ== 89900\nIENPTVBVVEVS 89901\n5Lu75Yqh 89902\nIG5ld1g= 89903\nICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAK 89904\ncGxldmVs 89905\nQUNFTUVOVA== 89906\nIEpvaGFu 89907\nUG9pbnRG 89908\nIHJlc3Ryb29t 89909\ndmVybw== 89910\nIGVsxZE= 89911\ncHJvZHVr 89912\nIFlFQVJT 89913\nCWFjdHVhbA== 89914\nVVBMRQ== 89915\nQ29udmVydGlibGU= 89916\nIHBvcnJm 89917\nSW5qZWN0ZWQ= 89918\nX2JvdGg= 89919\nL0dhdGU= 89920\nY2FsY3VsYXRvcg== 89921\nZW1haWxlcg== 89922\nLlBvZA== 89923\nIFpvdA== 89924\nX3NtYXJ0 89925\nYmFzaXM= 89926\nPENvbG9y 89927\nIGNyYXZpbmdz 89928\nRHJpdmVycw== 89929\nKGNvcw== 89930\nZGF0YWJsZQ== 89931\nLW1ldGFs 89932\nIFBj 89933\nLmNvcHlPZg== 89934\nIG9yaWVudGF0aW9ucw== 89935\nCWFzdA== 89936\nIFpvbWJpZXM= 89937\nIGJvbWJlZA== 89938\nSG9zdG5hbWU= 89939\nX3JhaXNlcw== 89940\nbWVuc2FnZW0= 89941\nIGNvcnRpc29s 89942\nIEZpb25h 89943\nbGljb3M= 89944\naGVhdnk= 89945\nIOqwgOyguA== 89946\nb21lbmNs 89947\nIGN1bHR1cmVk 89948\nIGFydGlrZWw= 89949\nxaHDrQ== 89950\namRr 89951\nIHZhbmRhbGlzbQ== 89952\nIH1dKTsK 89953\nU3RyYWlnaHQ= 89954\nIHJlaGVhcnNhbA== 89955\nRWRpdGlvbg== 89956\nIEluc3Bpcg== 89957\nCXdj 89958\nIGZvcm11bGF0ZQ== 89959\nYW56ZWlnZW4= 89960\nIHBhdGhvbG9naWNhbA== 89961\nIGtlbm5lbmxlcm5lbg== 89962\nPnsi 89963\nIGRpY2Vk 89964\nIGJyYWNlbGV0cw== 89965\nCQkgICAgCg== 89966\nKj4q 89967\nL3RhcmdldA== 89968\nLkFnZW50 89969\nLm1hZ2lj 89970\nIGlkZW9sb2dpZXM= 89971\nVFJBQ0s= 89972\nX2luZGl2aWR1YWw= 89973\nPGRlY2x0eXBl 89974\nIFJFQ0VJVkU= 89975\nL2Jvb3Q= 89976\nOkB7 89977\nUU0= 89978\nIE1hbmRhbA== 89979\nTkFNRVNQQUNF 89980\nIHRlcmNlcg== 89981\nIFJlZ2dpZQ== 89982\nIE5pY2hvbHNvbg== 89983\nIEZ1bHRvbg== 89984\nc3Rha2luZw== 89985\nIHJlc29uYXRl 89986\nbHBhcnI= 89987\nIGNvbnZlcnRlcnM= 89988\nICgiLw== 89989\nIE1hcmxpbnM= 89990\nSW5mb3JtZQ== 89991\nJz0+Wyc= 89992\nIHJvYmVydA== 89993\nIEhJTQ== 89994\nd2Vicw== 89995\nLnRyYWlsaW5nQW5jaG9y 89996\nLmFzY2lp 89997\nIE1hc2M= 89998\nIHRlY2hubw== 89999\nZXR4dA== 90000\nCSAgICAgICAgCg== 90001\nzrHOuQ== 90002\nKFNlcQ== 90003\nID8+Ojwv 90004\nIFBlYg== 90005\nW3NlbGVjdGVk 90006\nSkVDVEVE 90007\nQ2FzdEV4Y2VwdGlvbg== 90008\nP2Y= 90009\nIGV5ZXdpdG5lc3M= 90010\nIG1lbm8= 90011\nIERhbWllbg== 90012\nX0lFbnVtZXJhdG9y 90013\nIC4uLi4uLi4uLi4uLi4uLi4= 90014\nLlNFTEVDVA== 90015\nIGNyYXk= 90016\nX3BhcGVy 90017\nLlJvbGxiYWNr 90018\nSURFT1M= 90019\ncnBhcnI= 90020\naW5lYXI= 90021\nX1JlbA== 90022\nIFdpbGRl 90023\nIFdvbmRlcmxhbmQ= 90024\nIFNodWZmbGU= 90025\nIHN0cmlrZW91dHM= 90026\nc2lnbW9pZA== 90027\nISgiew== 90028\nZXBhbQ== 90029\nIHJpY2huZXNz 90030\nIGVuZGVhdm91cg== 90031\nbWVudUl0ZW0= 90032\nINCf0L7Qu9GD0Yc= 90033\nIGZydXN0cmF0aW9ucw== 90034\nX3N1YnNjcmliZQ== 90035\nIGJvb3pl 90036\nIExpY2h0 90037\nIHBlYXNhbnQ= 90038\nIHdlaWdodGluZw== 90039\nIOW/ 90040\nQWN0aW9uQ29kZQ== 90041\nLnRyYWNrcw== 90042\nIMOY 90043\nIG1pbGxpb25haXJl 90044\nKHVy 90045\nJ10pCgoK 90046\nICIuJF8= 90047\nX0VERUZBVUxU 90048\nIGN1cmxz 90049\nX0NvbUNhbGxhYmxlV3JhcHBlcg== 90050\nLnNldFZpZXdwb3J0 90051\nIGRlbmQ= 90052\nIGF1dG91cg== 90053\nIEZvdXJpZXI= 90054\nIGJvaWxz 90055\nIEpQRw== 90056\nIGRpZ3M= 90057\nIGNvbXBsYWlucw== 90058\nLWxpbmVk 90059\nIEJsYWRlcw== 90060\nX2RpY3Rz 90061\nIElwcw== 90062\ncmVmZXJlcg== 90063\nIGFueWhvdw== 90064\nYW50YXI= 90065\nLXNoZWV0 90066\nCXBsYXk= 90067\naWVyY2U= 90068\nLk1lc3NhZ2luZw== 90069\n6KeB 90070\nCXByb2dyZXNz 90071\nLkRhdGFWaXN1YWxpemF0aW9u 90072\nIFN0b3Bz 90073\nSW50ZXJ2YWxTaW5jZQ== 90074\nQGJyaWVm 90075\nLndpbmQ= 90076\nIGdldElucHV0 90077\nIEtB 90078\nIFJFU1BPTlM= 90079\nIHRhcmc= 90080\ndmlzdWFsaXphdGlvbg== 90081\nIEVzcGHDsQ== 90082\nbmllcg== 90083\nIERvdmU= 90084\nX2lzcg== 90085\nIEFQUExZ 90086\nYmVkbw== 90087\nW117Cg== 90088\nIGV2YWN1YXRl 90089\nIG1pY3Jvc2NvcGlj 90090\n5q2j56Gu 90091\nZXJvdA== 90092\nLW9wZXJhdGl2ZQ== 90093\naWt1dA== 90094\nIGRibA== 90095\nIGFqb3V0 90096\nLml4 90097\nICAgICAgICAKICAgIAo= 90098\ndGVzdGU= 90099\nbml2ZWw= 90100\nLnNuYXA= 90101\ndXR6dA== 90102\nLmlzQWRtaW4= 90103\nKElD 90104\nIG9iZW4= 90105\nIEVmZmljaWVudA== 90106\nRERldmljZQ== 90107\nIGluZGVtbg== 90108\nIGZyb3pl 90109\nLHJw 90110\nIGRlY2VtYmVy 90111\n57uZ 90112\nIG1lbG9kaWVz 90113\nIEVUQQ== 90114\n44GT44KT44Gr44Gh44Gv 90115\nIHF1YWxjaGU= 90116\nIHNldERlZmF1bHRDbG9zZU9wZXJhdGlvbg== 90117\nT1JJQQ== 90118\nIHphZw== 90119\nIGFsbG93YW5jZXM= 90120\nL3Bo 90121\nLVRva2Vu 90122\nIFBvdQ== 90123\nIG1pbmlzdHJpZXM= 90124\nLkxPR0lO 90125\nIHNlYXJjaFRlcm0= 90126\nIGh1cnJpY2FuZXM= 90127\nIEZsb3Vy 90128\nIFNVUw== 90129\nVGhlbWVz 90130\ncmVlY2U= 90131\nIGVudHJldg== 90132\nRFhWRUNUT1I= 90133\nIEJyZW5kYQ== 90134\nRXJyb3JNc2c= 90135\nOildOwo= 90136\nIGRvbWluYQ== 90137\nIEludmlzaWJsZQ== 90138\nPD4oIg== 90139\ncHV0Yw== 90140\nSEFWRQ== 90141\nRXZhbHVhdG9y 90142\nbWF0Y2hpbmc= 90143\nLW5hbWVz 90144\nIGxhaA== 90145\nX1lVVg== 90146\n5pyN5Yqh5Zmo 90147\nLldSSVRF 90148\nKTpc 90149\nLWRlZmluaXRpb24= 90150\nIGNoaW1uZXk= 90151\nLmNscw== 90152\na25vd2xlZGdl 90153\nIEFsZXhhbmRyZQ== 90154\nIGNvbGVn 90155\nb8WbY2k= 90156\nLkNobw== 90157\nIHNvZnRlbmVk 90158\nIHJvdGF0ZXM= 90159\nLXN0YXRlcw== 90160\n6rc= 90161\ndmlvbGVudA== 90162\nIDopCg== 90163\nIGFjY2nDs24= 90164\nbmlrYQ== 90165\nIExhdHRlcg== 90166\nX0Zsb2F0 90167\nIGVncmVnaW91cw== 90168\nb2RpYWw= 90169\nU3lub3BzaXM= 90170\nKHhp 90171\nIH0sew== 90172\nY3h4 90173\nRW1tYQ== 90174\nIENvbmN1cnJlbnRIYXNoTWFw 90175\nX0NhbWVyYQ== 90176\nIHBlYW51dHM= 90177\n44Kz44Oh44Oz44OI 90178\nX2JlZA== 90179\nIGVycm9yQ2FsbGJhY2s= 90180\nIFBhcHVh 90181\nLFRydWU= 90182\ntpo= 90183\nIHN0YWRpdW1z 90184\nIGtub2Jz 90185\naWZpY2FjaW9uZXM= 90186\nIHB1cnBvc2VseQ== 90187\nIFB1cmVDb21wb25lbnQ= 90188\nINC60LvQuA== 90189\nLlRyYWNr 90190\nc3Nj 90191\nKEpvYg== 90192\nKEh0dHBDb250ZXh0 90193\nIGNob2lzaXI= 90194\nIOy7 90195\nIGF1c3A= 90196\ndXBwZW4= 90197\nQWR2ZW50dXJl 90198\nIEZMQUM= 90199\nIGFwcGVsbGFudA== 90200\nICgoIg== 90201\nz4c= 90202\nIHRyaWY= 90203\nIGR1cmF0aW9ucw== 90204\nIE5HWA== 90205\nLmJw 90206\nYWN0aW9uRGF0ZQ== 90207\nLmluc3RhbnQ= 90208\nLVJlcXVlc3RlZA== 90209\nJyYm 90210\nINGH0LXRgA== 90211\nPWJvb2w= 90212\nIGxvcmRz 90213\nbGljaW5n 90214\nIG1hcmlu 90215\nIGJsaW5kZWQ= 90216\nL2xheW91dHM= 90217\nZmVpdG8= 90218\naXp6bGluZw== 90219\nRXZ0 90220\nIGJ1bGxpc2g= 90221\nZXhjbHVzaXZl 90222\n4oCZZXM= 90223\nLmdldE93blByb3BlcnR5RGVzY3JpcHRvcg== 90224\nIGJhcHRpemVk 90225\nINGB0LvRg9GH 90226\nIENlY2ls 90227\nLmVmZmVjdHM= 90228\nIGNyeXB0b2dyYXBoaWM= 90229\nIFZpbGxl 90230\ndWZ0 90231\nIEFudGhlbQ== 90232\nIHNlZWtlcg== 90233\nIG5pY2tuYW1lZA== 90234\nIGNhbXBncm91bmQ= 90235\nIGFjdGlvbkJhcg== 90236\nIEVwaXNvZGVz 90237\nIC0tLS0tLS0tCg== 90238\nQnVpbGRlckZhY3Rvcnk= 90239\nX1VOU1VQUE9SVEVE 90240\nVklMTEU= 90241\nLlJlZ2lzdHJ5 90242\nVG9uaWdodA== 90243\nIG1ha3M= 90244\nIGFkZG9ucw== 90245\nIERlY3J5cHQ= 90246\nLnNraWxscw== 90247\nKGZo 90248\nIGp1Z2c= 90249\nIENvdXBsZXM= 90250\nIEFtaXI= 90251\nID09PT09PT09PT0= 90252\nIGVuZGVyZWNv 90253\nLlN0cmluZ3M= 90254\nIGhhcm1pbmc= 90255\nIGJ1c3RsaW5n 90256\nKGZpcnN0TmFtZQ== 90257\nLnNwYXJzZQ== 90258\nSVRP 90259\nICAgICAgICAgICAgICANCg== 90260\n5p2l5rqQ 90261\nb2RlZ2E= 90262\nYW5hZ2Fu 90263\nLkhhbmRsZXJGdW5j 90264\nIHRpbmRlcg== 90265\nICMo 90266\nIGltYWdpbmFibGU= 90267\nIGF1bg== 90268\nUHJlc2VuY2U= 90269\nUGFja2FnZU1hbmFnZXI= 90270\nIGx1ZGljcm91cw== 90271\nacOobWU= 90272\nIGdldE9iamVjdA== 90273\nYm94aW5n 90274\nIHNxdWlk 90275\nw6p0ZXM= 90276\nRGFlbW9u 90277\nX2xpa2Vz 90278\nhrU= 90279\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 90280\nLnd3dw== 90281\nc3NlbA== 90282\nZXRlY3Rpb25z 90283\nZGFl 90284\nL2Rvd25sb2Fkcw== 90285\nIENsYXNzaWZpZXI= 90286\nX1NVQkpFQ1Q= 90287\nemVnbw== 90288\nX0dST1VQUw== 90289\nYWN0aWNlcw== 90290\nX2xpdGU= 90291\nIGRhbm1hcms= 90292\nL2Js 90293\nYXB5cnVz 90294\nVElNRVI= 90295\nIFNjcmlwdHVyZXM= 90296\n0Y/Rgg== 90297\nc3Bh 90298\nIkc= 90299\nIHBlbmV0cmF0aW5n 90300\nIGNvbmZvcm1pdHk= 90301\nbmV3bGluZQ== 90302\nIGx5bg== 90303\nIE1NUA== 90304\nIElOVEVSRkFDRQ== 90305\nIEFjdGlvblR5cGVz 90306\nLmNyaXRlcmlh 90307\n4buRbmc= 90308\nIHJlc3RpdHV0aW9u 90309\nCUZPUg== 90310\nPHBhdGg= 90311\nPT8iOwo= 90312\nKHBlcmNlbnQ= 90313\nbmRv 90314\nIEFDTQ== 90315\nCWN0 90316\nQGE= 90317\nIHTDug== 90318\nIHNwb3R0aW5n 90319\nw7xybg== 90320\nIEdFUg== 90321\nLndyaXRlVmFsdWU= 90322\nX2Jsb2NrZWQ= 90323\nWW1k 90324\nIGluZWZm 90325\nIFJhZGlhdGlvbg== 90326\nIE9pbGVycw== 90327\nQmVlcg== 90328\ncm90cw== 90329\nIFRyb3Q= 90330\ncm5h 90331\ncG9ydGVy 90332\nZW5lcnk= 90333\nIHBvcm5vZmlsbQ== 90334\n65SU 90335\nX2Nr 90336\nLkNvbXB1dGU= 90337\nIFtdCgoK 90338\nZ2l1bQ== 90339\nIFRFTEU= 90340\nIEluc3RhbmNlcw== 90341\nKkk= 90342\nIHdpcmVUeXBl 90343\nb25pdW0= 90344\nZXNoaXJl 90345\nIHB1dGNoYXI= 90346\nIGF3YWtlbmVk 90347\nLmRlZ3JlZQ== 90348\naGVpdGVu 90349\nLWF3YWl0ZWQ= 90350\nIG5ldXJvdHJhbnM= 90351\nLXRlc3RpZA== 90352\nCgogICAgCg== 90353\nIOe7kw== 90354\nIGtpbm8= 90355\nX0RBWVM= 90356\nIFZhbGVyaWU= 90357\nbnRpdHk= 90358\nQEJlYW4= 90359\nZXRDb2Rl 90360\nPFJlbmRlcmVy 90361\nIiIK 90362\nIGJlcm4= 90363\nIHRvdGFsaXRhcmlhbg== 90364\nY2xpbmlj 90365\nIE3DvG5jaGVu 90366\nbm9pbnNwZWN0aW9u 90367\naXNjZQ== 90368\nX3R1cGxlcw== 90369\nLlBvaW50cw== 90370\nIHBhc3RvcmFs 90371\nSmFr 90372\na2VuaW5n 90373\nL2NvbHVtbg== 90374\nLXByb2R1Y2luZw== 90375\nIGFib2xpc2g= 90376\nZmVhcw== 90377\ncmVzcG9uc2VEYXRh 90378\ncmVkaXJlY3RUb1JvdXRl 90379\nIG9ic2VydmF0aW9uYWw= 90380\ncE5leHQ= 90381\nenRl 90382\nQ2hvaWNlcw== 90383\nCUxDRA== 90384\nJlM= 90385\nIGJpbGxpb25haXJlcw== 90386\nX0VPRg== 90387\nIGNvaG9ydHM= 90388\nYW5rZW4= 90389\nLmNvbWJpbmU= 90390\nKE9wdGlvbmFs 90391\nX0NPTlNPTEU= 90392\nQWN0aXZpdHlJbmRpY2F0b3JWaWV3 90393\nIHBoYXJtYWNpc3Q= 90394\nIERvdWdo 90395\nIE9wZXJhdGlvbmFs 90396\n57I= 90397\nIGphbXM= 90398\nU29sbw== 90399\nCWR1cmF0aW9u 90400\nLnJt 90401\nIFRvbmk= 90402\nLmxlYXZl 90403\nIHB1ZWRh 90404\nIEZheQ== 90405\nRGV0YWNo 90406\nLk1heGltaXplQm94 90407\nIG1hcnR5cg== 90408\nIGhhemU= 90409\nL25l 90410\nIG1hbW1h 90411\nc2VsZWN0b3JNZXRob2Q= 90412\nIHBpbGdyaW1hZ2U= 90413\nIEFzcGhhbHQ= 90414\nIHZhbGlkbw== 90415\nRW5kRWxlbWVudA== 90416\nIGxhcHNl 90417\nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K 90418\naWxvcw== 90419\nZXJuYWxz 90420\nQ29ubmVjdGlvbkZhY3Rvcnk= 90421\nIExvdmluZw== 90422\nLkNvbXBpbGU= 90423\nIGNvcms= 90424\nIEJ5ZQ== 90425\naWJOYW1lT3JOaWw= 90426\nZXN0YXI= 90427\nXEdlbmVyYXRlZFZhbHVl 90428\nKExM 90429\nIFJhaXNlUHJvcGVydHlDaGFuZ2Vk 90430\nIElyYW5pYW5z 90431\nIGdldFByaWNl 90432\nbWFyaWVz 90433\nanVtYm90cm9u 90434\nIFJlYmVscw== 90435\nRElGRg== 90436\nIE1vag== 90437\nb3J0aWM= 90438\nCWNvbnN0ZXhwcg== 90439\nbnRw 90440\nIG1hZ2ljaWFu 90441\nIHBhdHJpb3Rpc20= 90442\nLmNl 90443\nLlNpbXBsZUJ1dHRvbg== 90444\nIFBSSVY= 90445\naGlzdG9pcmU= 90446\naGlnaGVy 90447\ncmVmaXhlcg== 90448\nQ0pL 90449\nIE9zd2FsZA== 90450\nLnNwcml0ZXM= 90451\nLkls 90452\nIGFyY2FuZQ== 90453\nIENodW4= 90454\nX09m 90455\nIGV2ZXJ5dGltZQ== 90456\n0Y7RiQ== 90457\nIGxldHJhcw== 90458\naWxhbg== 90459\nYmFydQ== 90460\nLWJvdA== 90461\nIFNpZ25pZmljYW50 90462\niOyKteuLiOuLpA== 90463\n4oCM 90464\nLWlzc3Vl 90465\nIGluc2FuZWx5 90466\nYXRlZ2lj 90467\nX1ZF 90468\nOkNHUG9pbnQ= 90469\nTWFya3M= 90470\nLnByb2JsZW0= 90471\nJ10uJy8= 90472\nIHJlZHVuZGFuY3k= 90473\nIGRlY3J5cHRpb24= 90474\nSHVuZw== 90475\nLXZhbGlkYXRl 90476\nIEFuZ2Vsbw== 90477\nSk0= 90478\nIHBvcG92ZXI= 90479\nZGViaXQ= 90480\nQ29tcHV0ZWRTdHlsZQ== 90481\nKV9f 90482\nKHNpbg== 90483\nICcpLA== 90484\nKGRlZnZhcg== 90485\nw7R0ZQ== 90486\nVGhhbk9yRXF1YWxUbw== 90487\nLnpo 90488\nKE5vdGU= 90489\naWJCdW5kbGVPck5pbA== 90490\nIFNvbmlh 90491\neW1vdXM= 90492\n44CCPA== 90493\nIGZpbG15 90494\nIGVhcnRobHk= 90495\nIExlYXJuZWQ= 90496\nW3NlY3Rpb24= 90497\nLmpzb3Vw 90498\nc3RydXA= 90499\nIFBhdHJvbg== 90500\nICkq 90501\nc2V0Rm9udA== 90502\nIGhlZw== 90503\nIGRlbHRhWQ== 90504\nX1NDUg== 90505\nLmN1dA== 90506\nIHZiQ3JMZg== 90507\nLk9iamVjdE1hcHBlcg== 90508\nIHLDqXBvbnNl 90509\nWXU= 90510\nKCl7fQoK 90511\nLXBhcmFtZXRlcg== 90512\nxLFzxLE= 90513\naWF6emE= 90514\nSVpFUw== 90515\nX1NVUFBMWQ== 90516\na2l0cw== 90517\nIHJlaW5z 90518\nKGRvY3M= 90519\nJSE= 90520\nIHN5c3RlbWN0bA== 90521\nIFBzcg== 90522\nIFdlcms= 90523\nUGhpbGFkZWxwaGlh 90524\nQlJFQUs= 90525\nLmFwcGVuZFRv 90526\nKGxvbg== 90527\nQWJy 90528\nL3JlbmRlcmVy 90529\nIEVsZWFub3I= 90530\nQ0VSVA== 90531\nUGFyYW1ldGVyVmFsdWU= 90532\nJGdldA== 90533\nIOCy 90534\nIEpM 90535\nIGlnbml0ZQ== 90536\nIGLhuqFu 90537\nIENhdWw= 90538\nIGhhc3Rl 90539\nIGRvbWluZ28= 90540\nVGVzbGE= 90541\nL2NvbmZpZ3VyYXRpb24= 90542\nKGV4cGVjdA== 90543\ndXNyYQ== 90544\nIHByZWZlY3Q= 90545\nIGZyb2dz 90546\nIGFzc2lnbmFibGU= 90547\nIGludGVydmVuZWQ= 90548\nLmNob2ljZXM= 90549\nVUlTdG9yeWJvYXJkU2VndWU= 90550\nIGLDqQ== 90551\nIEzDtnM= 90552\nYWxwaGFiZXQ= 90553\nIHByZWFtYmxl 90554\nZGJh 90555\nIGVtaXR0aW5n 90556\nLm1vcmU= 90557\nIEJhc2Vs 90558\nKGRhdGVUaW1l 90559\nKCl9KTsK 90560\nIG5vZGVMaXN0 90561\nIEZQR0E= 90562\nd2Vs 90563\nIGxvZGFzaA== 90564\nX2F1dGhlbnRpY2F0aW9u 90565\nw7NyaW8= 90566\nKHJ1bnRpbWU= 90567\nX1NDRU5F 90568\nIGN1ZmZz 90569\nIEFkcmVzc2U= 90570\nOjw/ 90571\nX2NtZHM= 90572\nVMOqbg== 90573\nIGVqZWN0 90574\nCUVSUg== 90575\nPE8= 90576\nIEtyYW1lcg== 90577\n4oCmCg== 90578\nc29tZW9uZQ== 90579\nIENQTA== 90580\n77yN 90581\nbG9ja2luZw== 90582\nLkZvb3Rlcg== 90583\nIGFsbQ== 90584\nIEFkb2xm 90585\nKS4v 90586\nIE1hdHRoaWFz 90587\nICIsIgo= 90588\nZW51aXR5 90589\nIExvdmVy 90590\nIGFsaW1lbnRvcw== 90591\ncGxldHM= 90592\nw6R0emU= 90593\nKHJlY3Y= 90594\ndXJhYQ== 90595\nU1RET1VU 90596\nYW50eg== 90597\nLkZsb2F0VGVuc29y 90598\nIFJhZQ== 90599\ncGln 90600\nIHRlcnVn 90601\nIHRoZW9sb2c= 90602\nIHRheGlz 90603\nY29tcG9zaXRl 90604\nc2hlcg== 90605\nbGVEYg== 90606\nIFJhaG1lbg== 90607\nIDst 90608\nSW5kZW50ZWQ= 90609\nIHRyb2xsaW5n 90610\nRVJJQ0FO 90611\nZ2V0RW1haWw= 90612\nX0VOQ09ERQ== 90613\nZ2V0Q2VsbA== 90614\nIFdyYXRo 90615\nKHN1aXRl 90616\nbm90RW1wdHk= 90617\nLmdldFJpZ2h0 90618\nIGJyZWF0aGFibGU= 90619\n44Gf44Gg 90620\nIHNldFRpbWU= 90621\nJ29wdGlvbnM= 90622\nIHBheWxvYWRz 90623\nYXVnYQ== 90624\nZWRt 90625\nKHdlYXRoZXI= 90626\nCXNlbQ== 90627\nKGZyb250 90628\nIHBheW91dHM= 90629\nLnNldFRleHR1cmU= 90630\nLFtdLA== 90631\nIFBhY2tz 90632\nIGNhenpv 90633\nV2l0aFBhdGg= 90634\nUHJvZw== 90635\nbW1hcw== 90636\nIGtvaw== 90637\nLkNzcw== 90638\nIGRlbGE= 90639\nQXdhcmQ= 90640\nw7xsdA== 90641\nc291cA== 90642\nKFsoJw== 90643\nb2xsaXBvcA== 90644\nLFNMT1Q= 90645\nY2hpYQ== 90646\nIGJsYW5jbw== 90647\nT0xVVEU= 90648\nLXBsYW5l 90649\nLExpc3Q= 90650\neGluZw== 90651\nSU1BVEU= 90652\nLW1vcnQ= 90653\nIGdyYXZpZA== 90654\nIEhhbmdpbmc= 90655\nIHNjb2Zm 90656\nLml0ZW1JZA== 90657\nVEhFTg== 90658\naW5mZXI= 90659\nIG1pc3BsYWNlZA== 90660\nCU1vbm8= 90661\nd2F5bmU= 90662\nIGVkZ2Vk 90663\nX25pY2s= 90664\nIE1BUlQ= 90665\nCXN0YXRlbWVudA== 90666\nIEV2ZW50QnVz 90667\nPkFib3V0 90668\nIGJ1cmdlb25pbmc= 90669\nIGNpY2xv 90670\nTE9PUA== 90671\nIGRlZnk= 90672\nIGVsZW1lbnRUeXBl 90673\nIGNvbnNlcnZhdGlzbQ== 90674\nV2ViSG9zdA== 90675\nLkRpc2FibGVk 90676\nIGNsYXA= 90677\nIEFsZWtz 90678\ncm9yaW5n 90679\naXNzaW9uYWw= 90680\nLUJvbGQ= 90681\nSVJUSA== 90682\nLml0ZW1WaWV3 90683\ncWluZw== 90684\nP2tleQ== 90685\nIFZlbm9t 90686\nIGFudGlk 90687\nIEZvcm1hdHRpbmc= 90688\nUVB1c2hCdXR0b24= 90689\nIEFzc2VtYmx5VGl0bGU= 90690\nX3Jlc2VydmU= 90691\nLkRpcmVjdA== 90692\nQW5pbWU= 90693\nIG1hdGVyaWFsbHk= 90694\nIGFkanVuY3Q= 90695\nLnNldFRvb2xUaXBUZXh0 90696\nbGFzc2lhbg== 90697\nKG5y 90698\nIG5pbmfDum4= 90699\nIG1pc3VuZGVyc3RhbmQ= 90700\nIEFwcGx5aW5n 90701\nX2NvbXBhdA== 90702\nIG1peGlu 90703\nIGplb3BhcmR5 90704\n0YvQstCw0LXQvA== 90705\nIGNvY2luYQ== 90706\nX1dST05H 90707\nQVRBUg== 90708\nS0Q= 90709\nIGNhdGVnb3J5TmFtZQ== 90710\nSHR0cENvbnRleHQ= 90711\nIGJ1YmI= 90712\nIGFua2xlcw== 90713\nb3dlcmluZw== 90714\nRnJhbWV3b3Jrcw== 90715\nIHNlZ3VuZG9z 90716\nLkFzc2VtYmx5 90717\nX0VudGl0eQ== 90718\nSFE= 90719\nIGZvdXJz 90720\nIGZvcmZlaXR1cmU= 90721\ndmxhbg== 90722\nLWRvbWluYXRlZA== 90723\nLWF3YXk= 90724\nSUNJRU5U 90725\nLlJlYWRCeXRl 90726\nYW1heA== 90727\nLj0iPA== 90728\nX3Nwcml0ZXM= 90729\nIFJlbWFpbmluZw== 90730\nTE9PRA== 90731\nX3JlcXVpcmVtZW50cw== 90732\nJ2FydGljbGU= 90733\nIFBvbXBlbw== 90734\nIHTDqXI= 90735\nIERyb3Bz 90736\nSG9tZUFz 90737\nSG9tZUFzVXA= 90738\nw7ph 90739\nLm5hc2E= 90740\nX2Jpbw== 90741\nIFlvc2hp 90742\nRWxlY3Ryb25pYw== 90743\nIGpvc2U= 90744\nIGludGVsaWc= 90745\nID8+Pjw/ 90746\nPnshIQ== 90747\nX3Byb3Y= 90748\nPURC 90749\nPCEtLQo= 90750\nLWZsb2F0aW5n 90751\neXVt 90752\nLkpNZW51SXRlbQ== 90753\nIE5hdGlvbndpZGU= 90754\nSW1wb3NzaWJsZQ== 90755\n6K+m5oOF 90756\nSmVycnk= 90757\nIGRlc2Nhcmdhcg== 90758\n7JW8 90759\nRGVjcnlwdA== 90760\nIHRlbXBlcmVk 90761\nIGVrcw== 90762\nw61jaWE= 90763\nLmxhcmdl 90764\nIHVuZm9sZHM= 90765\nIGh2ZXI= 90766\nIEFWTA== 90767\nLnR0 90768\n4oKA 90769\nPSUu 90770\nIHRvcHBpbmdz 90771\nIHN0b3V0 90772\nIHNlbWluYWw= 90773\neGVz 90774\nIE9VVEVS 90775\nYWRybw== 90776\nIHlvaw== 90777\nIERlcmU= 90778\nCWZyZW9wZW4= 90779\nX2xuZw== 90780\nQ2h1bmtz 90781\nLmdldE9yRWxzZQ== 90782\nKGVsbQ== 90783\nICgpKTsKCg== 90784\nQ2VsZWJy 90785\nX2NhcGFiaWxpdHk= 90786\nIHNvY2llZGFk 90787\nIGludGltaWRhdGU= 90788\nIEJsYXplcnM= 90789\naWd0aA== 90790\nZW5kY29kZQ== 90791\nVUlMREVS 90792\nIEhhbm5pdHk= 90793\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 90794\nINC40YHQv9C+0LvRjNC3 90795\nIFRvb2s= 90796\nIE1vdmVk 90797\nIHByb250bw== 90798\nIE1hcnRpbnM= 90799\nRGF0YUV4Y2hhbmdl 90800\nLlBvb2w= 90801\nZXVz 90802\nIGpvYklk 90803\nIEF4ZXM= 90804\nIGhhbXN0cmluZw== 90805\nLnJtaQ== 90806\nRGF0YVRhc2s= 90807\nIE1hZ2ljTW9jaw== 90808\nIEdBUw== 90809\nIE5hdw== 90810\nIHNuZWw= 90811\nX3NjZW5hcmlv 90812\nIGVtYWlsQWRkcmVzcw== 90813\nIE11c3M= 90814\nIHBob2VuaXg= 90815\nIGRlbnNpdGllcw== 90816\nIE1hY09T 90817\ncmVtYQ== 90818\nIHRlc3RlcnM= 90819\nKT87Cgo= 90820\nIHB1cHM= 90821\nbGFwcw== 90822\nZGRi 90823\nL1BlYWs= 90824\nIGJhY2tzdGFnZQ== 90825\nIGJhY2tCdXR0b24= 90826\nKG5hdg== 90827\neEFF 90828\nc3RyY3B5 90829\naWNodGV0 90830\nIFJpZg== 90831\n4LiB4Lij 90832\nIGhvbm91cmVk 90833\nIGdyYXBwbGluZw== 90834\nVmVydGV4QnVmZmVy 90835\nLmdldEFjY291bnQ= 90836\nLU5ldw== 90837\nIG9wcHJlc3M= 90838\nIHV0dGVyZWQ= 90839\nIFVTQUdF 90840\nX0xFQVZF 90841\nX2NvbGxlY3Rpb25z 90842\nX1V0aWw= 90843\nKCIiKSk7Cg== 90844\nIHF1aWV0ZXI= 90845\nYCksCg== 90846\nIHR5cGVJZA== 90847\nIHNlcmlm 90848\nc3RhbGs= 90849\nIHByaW1hcnlTdGFnZQ== 90850\neEVB 90851\nOk5TTGF5b3V0 90852\nX1JC 90853\nX0FQUFM= 90854\nU0tV 90855\nKnNjYWxl 90856\nIENvdWdhcg== 90857\nCVJFVFVSTg== 90858\naWZpw6k= 90859\ndGltaW5n 90860\nIGlkb2xz 90861\n656Y7Iqk 90862\n4oCUaWY= 90863\nKGZvcm1hdHRlcg== 90864\nIGFtYWxn 90865\nc2V0V2lkdGg= 90866\nLG1pZA== 90867\nb3JlYWw= 90868\nLlJvbGVz 90869\nIGRldmVs 90870\nIGdldEluZGV4 90871\nIHN0b29scw== 90872\nIHNub3d5 90873\nIGdyYW5kaQ== 90874\n0Y/QtdC8 90875\naWd1aWVudGU= 90876\n0LrQvtCy 90877\nIEN1dHRlcg== 90878\ncm9zY29wZQ== 90879\nYWlyYQ== 90880\n0YPRgNGB 90881\nIHRhYmVs 90882\nIGRlZmlhbmNl 90883\nLlRvQm9vbGVhbg== 90884\nIHBlcmc= 90885\nLWNvbW11bml0eQ== 90886\nIHB1cnN1aXRz 90887\nKG1ldHJpY3M= 90888\nTXVzbGlt 90889\nIFJpeWFkaA== 90890\nIOKCuQ== 90891\nLldlYkVsZW1lbnQ= 90892\nIEhhcmRlbg== 90893\nIENvcnJ1cHRpb24= 90894\nIEFl 90895\nIFRhbm5lcg== 90896\nIGluZGVi 90897\nIENoYXJnaW5n 90898\nX1BST0Q= 90899\nIOKTmA== 90900\nIGNlbnRlclg= 90901\ndHlwaW5n 90902\nIHV4 90903\nIFRvZQ== 90904\nCWxvb3A= 90905\nZmxv 90906\nUmVnaW9uYWw= 90907\nX2Fh 90908\nIHZpZXdwb2ludHM= 90909\nPnRoaXM= 90910\nLXJlc291cmNlcw== 90911\nIEltYW0= 90912\nIFNoaXY= 90913\nIGFuZHJh 90914\nUkVRVUlSRUQ= 90915\nIHNlZWRlZA== 90916\ndW1vbnQ= 90917\nIHRvYXN0ZXI= 90918\nIGhvbWVzY2hvb2w= 90919\n24zYsQ== 90920\nX2V4dHJhY3Rvcg== 90921\nbW9kZXM= 90922\nIE11bmRv 90923\nX2ZpcmVzdG9yZQ== 90924\nIHB1bmlzaG1lbnRz 90925\nIGJvcmVkb20= 90926\nanVyaWVz 90927\nLlNhZmU= 90928\nYW1iaXF1ZQ== 90929\nIGFkdmVyc2l0eQ== 90930\nVUxFUg== 90931\nIGFuYWxzZXg= 90932\nbW9ycGg= 90933\nIE9tbg== 90934\nKCkiPgo= 90935\nIEdJVkVO 90936\nU3o= 90937\nIG5vdW5z 90938\nIHF1YW0= 90939\nIFdpa2ltZWRpYQ== 90940\nIGR6aWV3Y3o= 90941\nLmNvbW11bmlj 90942\nQ291cmllcg== 90943\nQm9uZA== 90944\nLmNvbW11bmljYXRpb24= 90945\nLlByZWZlcmVuY2U= 90946\nc2xpZGVEb3du 90947\nL2djYw== 90948\nIHZpYmVz 90949\nQVBJVmlldw== 90950\nIE92ZXJzaWdodA== 90951\nX3Zr 90952\nIGVtcHJlcw== 90953\nIGFyaXNlbg== 90954\nICovKQ== 90955\nKCcoJw== 90956\nIGJ0dw== 90957\nIGNvbmV4acOzbg== 90958\nIFV6YmVr 90959\nIOyEnA== 90960\nIGltYWdlVVJM 90961\n44Kq 90962\nc3RvcHBlZA== 90963\nIFdvdWxkbg== 90964\nIENoZXc= 90965\nZ3LDqQ== 90966\nIHRydXRoZnVs 90967\nIFRyYW5zcGFyZW50 90968\nKHNlcnY= 90969\nIE1jS2F5 90970\nPXJlYWQ= 90971\nIFNhbw== 90972\nCUdyaWQ= 90973\nIGluZHVjZXM= 90974\nLmxpc3RGaWxlcw== 90975\nIGNhcnJlcmE= 90976\nIGljb25OYW1l 90977\nIENhcmx0b24= 90978\nLkV2ZW50VHlwZQ== 90979\nIGRyYXBlZA== 90980\nX1NBTVBMRVM= 90981\nKGVzdA== 90982\nIFJ1aXo= 90983\nIGNhcHRhaW5z 90984\nIG1hZmlh 90985\nIFJhcGhhZWw= 90986\nIEdBUA== 90987\naW1wYW4= 90988\nY29taWM= 90989\nIG1hbnRlbg== 90990\nJEw= 90991\nIGFmdGVybWFya2V0 90992\n15c= 90993\nIENm 90994\nCXRpbGU= 90995\nQXBwU3RhdGU= 90996\nIHdob2xlc2FsZXJz 90997\nbG93ZXN0 90998\nRGVtb2NyYXRpYw== 90999\nIHBvd2VyaW5n 91000\nYXBvdA== 91001\nIENvcnRleA== 91002\nKHNpbmdsZQ== 91003\nb3BoeXNpY2Fs 91004\nLnV0Zg== 91005\n77yf44CN 91006\nIHRhcmVh 91007\nRXF1aXA= 91008\nIGtsaWs= 91009\nIHJ1YQ== 91010\nIGFWYWx1ZQ== 91011\nIE1pbmVy 91012\nIFZlZw== 91013\nYW55bA== 91014\nQ293 91015\nQGM= 91016\nX0xPQURFRA== 91017\nIEFITA== 91018\nd2FrZQ== 91019\nLkxvZ0luZm9ybWF0aW9u 91020\nKGNhdGVnb3JpZXM= 91021\nIFFVRVNUSU9O 91022\nLnVtbA== 91023\nIENyZWF0ZU1hcA== 91024\nbWVlcg== 91025\nIHJlbmNvbnRyZXI= 91026\nX3N1 91027\nIGF0bGVhc3Q= 91028\nKFByb3BlcnR5TmFtZQ== 91029\nIFlhbw== 91030\nIEhhdXB0 91031\nQmxvY2tTaXpl 91032\nIFNBQw== 91033\nIExlZ3M= 91034\nYml0ZQ== 91035\nIGxvZ2FyaXRo 91036\nIElNZXNzYWdl 91037\nQmFja2Ryb3A= 91038\nIGdkaw== 91039\n7Jy866m0 91040\nLmV4Y2x1ZGU= 91041\nQURPUw== 91042\nLXNoaWZ0 91043\nYXRobGV0ZQ== 91044\nX2NvbWJpbmVk 91045\nIHJlYmF0ZQ== 91046\nIHBhcmQ= 91047\nIGltcGVkYW5jZQ== 91048\ncmVhdQ== 91049\nXw0KDQo= 91050\nIGRhZ2Vu 91051\na2VsYXM= 91052\nIGluZ3Jlc2Fy 91053\nIEJSQU5E 91054\nLm1rZGlycw== 91055\nIHJlaWduaW5n 91056\nVGFsa2luZw== 91057\nLyoqCgo= 91058\nX1JFU09VUkNFUw== 91059\nIFBST0dNRU0= 91060\nIGRhdGFTaXpl 91061\n44Og 91062\nZGVueQ== 91063\nSVJT 91064\nIHRlbGV2aXM= 91065\nPV8oJw== 91066\nZWdpcw== 91067\nPD8s 91068\nIHVwc2V0dGluZw== 91069\nIHNhdWNlcw== 91070\nIHB1ZXJ0bw== 91071\nIFZvZ3Vl 91072\naWRpbmU= 91073\nIEdyZWVud29vZA== 91074\nemlvbg== 91075\nL3F0 91076\n5bGA 91077\nLmxhbmd1YWdlcw== 91078\nIFBsYXlib3k= 91079\nb25uZW1lbnQ= 91080\nIFBvc2l0aW9uZWQ= 91081\nIOS4uw== 91082\nIEZyaXR6 91083\nSW5pdGlhbGx5 91084\nbm9kZVZhbHVl 91085\nX1RSSUFOR0xFUw== 91086\nLWJhY2tlbmQ= 91087\ndG9JU09TdHJpbmc= 91088\nIEdvdmVybm9ycw== 91089\nWUxPTg== 91090\nLk9SREVS 91091\nRE9J 91092\nIENoZXZyb24= 91093\nIGRlY2tpbmc= 91094\nIFNoYXJpYQ== 91095\nb3RoZXJtYWw= 91096\nRW1wdHlFbnRyaWVz 91097\nKEluaXRpYWxpemVk 91098\nZG9yZg== 91099\nLmx1 91100\nKFJvb20= 91101\nLlllbGxvdw== 91102\nIEFicmFt 91103\nX2xt 91104\nINC90LDQvw== 91105\nIFRIQU4= 91106\nfi1+LX4tfi0= 91107\nLk92ZXJyaWRl 91108\nIFNWTQ== 91109\nIFN1c3BlbnNpb24= 91110\nIGFic29yYnM= 91111\nX3RyYWZmaWM= 91112\nICI+Ig== 91113\nLmZpdHM= 91114\nIHJlaW5mb3JjaW5n 91115\nIG1veWVu 91116\nZXJlcg== 91117\nIFJvc2Vuc3RlaW4= 91118\nIFdlc3Rvbg== 91119\nIGNvbmZpbmVz 91120\nT0xB 91121\nb3JyYWluZQ== 91122\nX0dSUA== 91123\nIHN0cmFwcGVk 91124\nIG1pbmdsZQ== 91125\nCVZr 91126\nIG5vc3RyYQ== 91127\nIGFjdHJlc3Nlcw== 91128\nIFNhbW15 91129\nbGlnbmU= 91130\nSUdITElHSFQ= 91131\nIHN0dXA= 91132\naWN0b3J5 91133\nIGNvbnZpY3Q= 91134\nIHN1cHA= 91135\ncGVvbg== 91136\ndnJpZXI= 91137\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 91138\nIHRyb3R6 91139\nIG1lbHRkb3du 91140\nYXJrZXJz 91141\nLlNlbGVjdENvbW1hbmQ= 91142\nIExpYWJpbGl0eQ== 91143\nIEJlY2FtZQ== 91144\nIGx1Y2tpbHk= 91145\nINC/0L7RgA== 91146\nIHJlYXNzdXJl 91147\nIENvbnRyYXN0 91148\nIEF1ZHJleQ== 91149\nIENvbnN1bHRhbnRz 91150\nIFF1ZW50aW4= 91151\nLU93bmVk 91152\nb2NyaW4= 91153\nX1NUUklQ 91154\nIHJldGFsaQ== 91155\nIHJhbGx5aW5n 91156\nIFJlcXVlc3RDb250ZXh0 91157\nIG1hc3NhYw== 91158\nCWdy 91159\nTEVF 91160\nIGNhxYI= 91161\nIEpvYW5uYQ== 91162\n4butYQ== 91163\naGho 91164\nIHNxbFNlc3Npb24= 91165\nxLFrbA== 91166\nQ29tcG9zZXI= 91167\nIGN1cnJlbnRQbGF5ZXI= 91168\nYWdpbmk= 91169\nIEJhcmJhcg== 91170\nIEhlbGxvV29ybGQ= 91171\nbG9vbWJlcmc= 91172\nLkhlcmU= 91173\nIGRpc2d1c3RlZA== 91174\nCQkJCQkJICAgIA== 91175\nb2t1cw== 91176\nVmV0ZXI= 91177\nIGNob3Bz 91178\nIEZPUldBUkQ= 91179\nIEVpZw== 91180\nIFBhcnRpYWxWaWV3 91181\nIGltcG9zcw== 91182\nIGNvbnNlcXVlbnRpYWw= 91183\nIFsnIw== 91184\nCWxvZ2dpbmc= 91185\nIEVsaXM= 91186\ncHJvY3M= 91187\nLDwv 91188\nX3BpbnM= 91189\nXERvY3RyaW5l 91190\nVXZz 91191\nIEdJVA== 91192\nIHRhaA== 91193\nKHJ1bGVz 91194\nY3JlYXRlRnJvbQ== 91195\nICctJykK 91196\naGFuZGxpbmc= 91197\nZXh0ZXJuYWxBY3Rpb25Db2Rl 91198\nUk9EVUNUSU9O 91199\nRm9yUmVzb3VyY2U= 91200\nc2J1cmc= 91201\nPFRleHRWaWV3 91202\ndGhpbmthYmxl 91203\nYW5nbGluZw== 91204\nICJ9XA== 91205\nUFJT 91206\nQXBwcm92YWw= 91207\nIGtsaWVudA== 91208\nbm91bg== 91209\nIERpYW1vbmRz 91210\nSEc= 91211\nIFRyaWJhbA== 91212\nLnB4 91213\nIHByb3BOYW1l 91214\nIGhlbHk= 91215\n0LvQuNGH 91216\nIEJvdXRpcXVl 91217\nIik7fQo= 91218\nL2hvc3Q= 91219\nIHN0YXR1c0Jhcg== 91220\nPkRhdGE= 91221\nIGRpc2NvbnRlbnQ= 91222\nIGZyYWls 91223\nLmVsZW1lbnRBdA== 91224\nIGVtYW5j 91225\nCWZ1bg== 91226\nYXR0bGVz 91227\nIHByb3B1bHNpb24= 91228\nIGludGVyY2hhbmdlYWJsZQ== 91229\nIFRhbWJpw6lu 91230\nIHZlbmVy 91231\nX0xPV0VS 91232\nIHBkbw== 91233\nIGRldGVyZ2VudA== 91234\nIHRhdmVybg== 91235\nVmVudWU= 91236\nLmphc3Blcg== 91237\neXR0 91238\nIEppaGFk 91239\n4oCZw6A= 91240\nIG1lZGlhUGxheWVy 91241\nP3A= 91242\ncGNm 91243\nYW5kb25lZA== 91244\nIHJlY2ViZXI= 91245\nT1RQ 91246\nKGlPUw== 91247\nKCckew== 91248\nUHRz 91249\nIG1hbmFnZXJpYWw= 91250\nIFR1ZA== 91251\nIFdFTEw= 91252\nb3pl 91253\nIEFudG9pbmU= 91254\nIFxcCg== 91255\nIFZlY3Q= 91256\nIFdpbWJsZWRvbg== 91257\naXNtZXQ= 91258\nIGJvdGhlcmluZw== 91259\naW9zaXM= 91260\nZ2V0TWV0aG9k 91261\nIGlucHV0RGF0YQ== 91262\nIEJpbmRlcg== 91263\nIGRjdA== 91264\nw6Fsbg== 91265\nX0JPTEQ= 91266\nIEp1Z2VuZA== 91267\nIEJlZ2lubmVycw== 91268\naW9tcw== 91269\nIHJlbGVudGxlc3NseQ== 91270\nIE1vbmRheXM= 91271\n5LyY 91272\nVG9tb3Jyb3c= 91273\nIFNhbXA= 91274\nXFBlcnNpc3RlbmNl 91275\nTUFTVEVS 91276\nKHByZWRpY3Rpb25z 91277\nKG51bWVybw== 91278\nLnR3aXRjaA== 91279\nLlJlc3RyaWN0 91280\nIFpa 91281\nIE1MTQ== 91282\nLlNtYWxs 91283\nXWJ5dGU= 91284\nIFZpZXdQYWdlcg== 91285\nIEFnZW5jaWVz 91286\nIHBhcnRpY2lwYXRlcw== 91287\nIGluaXRXaXRoU3R5bGU= 91288\nJVg= 91289\nIGAs 91290\nLk9iag== 91291\nID8iKTsK 91292\nQ2FyZWVy 91293\nIDwlPQ== 91294\na3Vs 91295\nQ3BwSQ== 91296\nIE11c2hyb29t 91297\ndXJhdA== 91298\nbWlh 91299\nQ2Q= 91300\nYXJkdWlubw== 91301\nIGNvdW50cnlDb2Rl 91302\nX3BsYWNlbWVudA== 91303\nKCI9PT09PT09PT09PT09PT09 91304\nLWJlbA== 91305\nQXNzZXJ0aW9ucw== 91306\nIHByw7N4aW1h 91307\nKCkiKQo= 91308\nX2Vn 91309\nU1NJUA== 91310\ndXpl 91311\ncGxhY2Vy 91312\nYW1iaWd1b3Vz 91313\nX0lOSVRJQUxJWkVS 91314\nIEhhdHM= 91315\nIEdPT0dMRQ== 91316\nIGFnaXRhdGlvbg== 91317\nKG11dGV4 91318\nSElHSA== 91319\nOiIp 91320\nIGludmFkZXJz 91321\nICl9Cgo= 91322\nLm1hbnVhbA== 91323\nIFNpZW1lbnM= 91324\nCUpQYW5lbA== 91325\nYmluZHVuZw== 91326\nZWNlcmE= 91327\nL21ldA== 91328\nIMOpYw== 91329\nKHN0YXRpb24= 91330\nIHBvc2ljacOzbg== 91331\nX2lzc3Vlcw== 91332\nX2FsaWFzZXM= 91333\nX3RvcG9sb2d5 91334\nIEF1dG9kZXNr 91335\nQWNrbm93bGVk 91336\nISpcCg== 91337\nIEZyZWlnaHQ= 91338\nIEZYTUxMb2FkZXI= 91339\naWNoZWw= 91340\nKENoYXRDb2xvcg== 91341\nIGRpc3NvY2k= 91342\nIGFuYWxvZ3Vl 91343\nPHVzaXpl 91344\nLWV2 91345\nIHRlbmRy 91346\nPkFsbA== 91347\nIFVTRVJT 91348\nLnJlc3A= 91349\nX2ludGVncmF0aW9u 91350\nRGlzcGxheVN0eWxl 91351\nRkFJTFVSRQ== 91352\n0YfQuNGC 91353\naWxkZWQ= 91354\nX3NlbWFwaG9yZQ== 91355\nYWNhZGVtaWM= 91356\nIHNjbGVyb3Npcw== 91357\nRmFs 91358\nLHN0 91359\nYD0= 91360\naWZ0b24= 91361\nIHN1YnN0aXR1dGVz 91362\nIFN1cHBvcnRlcnM= 91363\nYXBwbGljYW50 91364\nKGt2 91365\nIEJlcm11ZGE= 91366\nIGRpc2NyZXBhbmNpZXM= 91367\nLlNvbGlk 91368\nd2VlbmV5 91369\nIGd1bA== 91370\nIGZpbGV0eXBl 91371\nIHJlc3VsdGF0 91372\nU2VuZGVySWQ= 91373\nIGdlem9jaHQ= 91374\nIEJlcmtzaGlyZQ== 91375\nICgiPA== 91376\nKG1s 91377\nKHNoaWZ0 91378\nX1JFRElSRUNU 91379\nT0xPTg== 91380\nL2Jyb3dzZQ== 91381\nOk5TTWFrZVJhbmdl 91382\nIHdhaXZl 91383\nIGV4Y2U= 91384\nIGNhdGFsb2dz 91385\n5Lmm 91386\naWxsaW9ucw== 91387\nLkdldEN1cnJlbnRNZXRob2Q= 91388\nIGJpbGluZ3VhbA== 91389\nIENhc2NhZGVUeXBl 91390\nCVRyYW5zZm9ybQ== 91391\nX0NVU1RPTUVS 91392\naXNpZnk= 91393\nINCx0Ls= 91394\nIFdob2V2ZXI= 91395\nIEVBUg== 91396\nIFs9Ww== 91397\nINC80L7QttC90L4= 91398\nIGphcmRpbg== 91399\nQHNob3c= 91400\nIGhlaXJz 91401\nIGFiYW5kb25tZW50 91402\nIFRyYW5zY3JpcHQ= 91403\nXV4= 91404\nOlNldFBvaW50 91405\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 91406\nIEZhY3Rpb24= 91407\nKGVudGl0aWVz 91408\nZmFjdGlvbg== 91409\nbXR4 91410\nX3JlY2FsbA== 91411\nLk5VTEw= 91412\nLm9wdGlvbmFs 91413\nKHByZWRpY3Rpb24= 91414\nQUdFTlQ= 91415\nIPCfmIA= 91416\n4oCZeQ== 91417\n4oCZdXRpbA== 91418\nIGFuZ3N0 91419\nLkV4cGVyaW1lbnRhbA== 91420\naG9vdA== 91421\nYXN5YXJhaw== 91422\nYXV0b3BsYXk= 91423\nIFNwbGFzaFNjcmVlbg== 91424\nIGhlY3RpYw== 91425\nIG1ldGljdWxvdXNseQ== 91426\nIGNvbWVy 91427\nS2VpdGg= 91428\nIGZyYXNl 91429\nX1VOSVFVRQ== 91430\nLk1hZ2VudGE= 91431\nKE1heA== 91432\nIHNjYWxlWQ== 91433\nIHB1dHQ= 91434\nKElG 91435\nIEFQUExF 91436\nUG9ybm8= 91437\nLmFkZENlbGw= 91438\nIG1vbHQ= 91439\nY2hpbXA= 91440\nIGxlZ2dpbmdz 91441\nIGZsb3A= 91442\n4oCZaHVp 91443\nUlRPUw== 91444\nL3NwYW4= 91445\nLmJlZA== 91446\nLkxvZ2lj 91447\nIHVudHJhbnNsYXRlZA== 91448\nQ0xFQVI= 91449\nO2xlZnQ= 91450\nIEJGUw== 91451\nLWdyb3Vwcw== 91452\ndG9vaw== 91453\nX2FjY2VwdGVk 91454\nIGNhc2hpZXI= 91455\nZXZlbnRJZA== 91456\nIGRvd25ncmFkZQ== 91457\nCQkJCQkJCQkJCQkK 91458\n0LDQvdC40Y4= 91459\nw6RuZGU= 91460\nIGNvdW5jaWxsb3I= 91461\nIGRyZWQ= 91462\nZFQ= 91463\nV1JBUFBFUg== 91464\nLm9s 91465\n5LiA6aG1 91466\nTUVB 91467\nIGtpbmV0aWNz 91468\nIGptcA== 91469\nX2ZsaWdodA== 91470\nRmVhcg== 91471\nIENoYW5lbA== 91472\nX21pZ3JhdGlvbg== 91473\naGRs 91474\nZXJlcXVpc2l0ZQ== 91475\nLnJhcg== 91476\nLU9uZQ== 91477\nIHNoZXBoZXJk 91478\nLmVhc2luZw== 91479\nKGRlc2NyaXB0b3I= 91480\nIHN1YnRvdGFs 91481\n44OT 91482\nQ29tcGlsZWQ= 91483\nIENvbHQ= 91484\nZGxl 91485\nL21vY2s= 91486\nKXJvdw== 91487\nIHJlc2V0dA== 91488\ndGVybw== 91489\nIGFlcm9iaWM= 91490\nLmludHJv 91491\nIGNoZWNrYm94ZXM= 91492\nIE1jQ2FydG5leQ== 91493\nIENseWRl 91494\n77yM5bm2 91495\nY29vbGRvd24= 91496\nLWluc3RhZ3JhbQ== 91497\nIE1QRw== 91498\nIExlaXN1cmU= 91499\nIG5hd2V0 91500\nIE5YVA== 91501\nUmVndWxhckV4cHJlc3Npb24= 91502\nIHJhdmU= 91503\nQklMTA== 91504\nIGJhcnRlbmRlcg== 91505\nRW5sYXJnZQ== 91506\nIHZhaXM= 91507\nIDoKCgoK 91508\nLkVuZHBvaW50 91509\nICIsDQo= 91510\nfX0iPnt7JA== 91511\ndHJlZXM= 91512\nLmVuZw== 91513\nKmxvZw== 91514\nOltdLAo= 91515\nIGJhdHRhbGlvbg== 91516\nU3ViamVjdHM= 91517\nIGV4cG9zaXRpb24= 91518\nIFRvYXN0cg== 91519\nIHRvcExldmVs 91520\nIENFTA== 91521\nIGd1YmVybg== 91522\ndW5zdWJzY3JpYmU= 91523\nY29uYQ== 91524\nX2FwcHJveA== 91525\nVFo= 91526\nIFRyZWVTZXQ= 91527\nLmNvbW11bml0eQ== 91528\nIG5hcnJvd2Vy 91529\nKEV4cGVjdGVk 91530\nQ2xy 91531\nIGdvcmU= 91532\nIGFjcXVpdHRlZA== 91533\nIEVVUk8= 91534\nG1s= 91535\nIHJlcHVibGljYW4= 91536\nIGF1dG9iaW9ncmFwaHk= 91537\nX2Zkcw== 91538\nQ29sbGFwc2Vk 91539\nIA0KIA0K 91540\nLXBpbGxz 91541\nTUJFRA== 91542\nIGlOZEV4 91543\nIHJlc3BvbnNlVHlwZQ== 91544\nZ2xmdw== 91545\nLXR1cm5lZA== 91546\n5Y+R5biD 91547\nCUJvb2xlYW4= 91548\nLk9y 91549\naW5pYQ== 91550\nIGhvdmVyZWQ= 91551\nIHNvcnRlcg== 91552\nIE5o 91553\nIEV4ZXJjaXNlcw== 91554\nbGVtZW50cw== 91555\naWRvbg== 91556\nVG9l 91557\nIHLDqWbDqQ== 91558\nU1NGV29ya2Jvb2s= 91559\nIG9yZ2FuaXNlcnM= 91560\nIHJlc3VsdE1hcA== 91561\nX0hPUg== 91562\nRG9k 91563\nTG9jYWxTdG9yYWdl 91564\nIGpzb25SZXNwb25zZQ== 91565\nQXV0aFNlcnZpY2U= 91566\nIHNtZQ== 91567\nZW1icm9z 91568\nIGxvYmJ5aXN0 91569\nb2d1aQ== 91570\nLnNwaW4= 91571\nIENvcnJlY3Rpb25z 91572\nX1JBRA== 91573\nIExTTQ== 91574\nKGN1cnJlbmN5 91575\nIOaA 91576\nIHByZWZldGNo 91577\nLkhlYWQ= 91578\nLXJlYWRlcg== 91579\nIFJveg== 91580\nCW1vdXNl 91581\nIFRMQw== 91582\nIFFUYWJsZVdpZGdldEl0ZW0= 91583\nIFNUT1JBR0U= 91584\nYW5uZWVy 91585\nIOyXkA== 91586\nYWNlbg== 91587\nU1g= 91588\nSW1hZ2VSZWxhdGlvbg== 91589\nIHJlc3VyZ2VuY2U= 91590\naXp6eQ== 91591\naWxvZ3Vl 91592\nSVZBTA== 91593\nIHNtYWNr 91594\ncnJoYQ== 91595\nKFBBUkFN 91596\nIUk= 91597\nIE1lY2g= 91598\nIElNYXBwZXI= 91599\nIGdpc3Q= 91600\nIFBPRA== 91601\ndm9yZQ== 91602\ndWxhw6fDo28= 91603\nICwt 91604\nIGludm9sdW50YXJ5 91605\nUVJT 91606\nPXRpdGxl 91607\nIEJpb20= 91608\nIFNoZWxsZXk= 91609\nIENTUA== 91610\nUGVz 91611\nZHJvcHM= 91612\nINGD0YHQv9C10Yg= 91613\nZGl2ZXM= 91614\nIVsK 91615\nIExlYXN0 91616\nIGtha28= 91617\nIE1vZGVsbw== 91618\nIGZ1bmN0aW9uTmFtZQ== 91619\nIGNob2tpbmc= 91620\nIGRlZm9ybWF0aW9u 91621\nJywnJyk7Cg== 91622\nY2HDp8Ojbw== 91623\nIHNxdWlycmVs 91624\nc2V0QmFja2dyb3VuZA== 91625\nQnJva2Vu 91626\ncG9saXQ= 91627\nTm9uY2U= 91628\nIGtleWVk 91629\nTWVzaFBybw== 91630\nLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ= 91631\nIGZsdXNoaW5n 91632\nIGJwcA== 91633\nIEFuZ2xpYw== 91634\nVHJvdQ== 91635\nIFdhbHRlcnM= 91636\nIHN0dXR0ZXI= 91637\nSGlw 91638\nX3dhcg== 91639\naXZlbWVudA== 91640\nQ29ybg== 91641\nIHVuZHVl 91642\nYXBhdGthbg== 91643\nIG1pbmRlbg== 91644\nc2lnbmlmaWNhbnQ= 91645\nKHF1YW50aXR5 91646\nJGluc2VydA== 91647\nIEFMRVJU 91648\nLlVuaWNvZGU= 91649\naWhu 91650\nXTo9 91651\nIHBpbk1vZGU= 91652\nIGZyYWlz 91653\naW50ZXJwcmV0ZXI= 91654\nJ2FjdGlvbg== 91655\nIGJsZWliZW4= 91656\nobQ= 91657\ncm93c2Vycw== 91658\nR0lU 91659\nX0RJUlM= 91660\nRm9yZXZlcg== 91661\nIFBkZlBDZWxs 91662\nfG0= 91663\nLnNldEhlaWdodA== 91664\nIGZvcmVhcm0= 91665\nIGJhdHRsZWdyb3VuZA== 91666\nINC/0L7RgdC70LXQtA== 91667\nIEhhdGg= 91668\nIEF1dGhvcml6ZWQ= 91669\nIGNvbmZlcnJlZA== 91670\nIEJPVFRPTQ== 91671\nLmdldEZsb2F0 91672\nb2dyYXBoZWQ= 91673\nYXJkeQ== 91674\nIHNlcnZpw6dv 91675\nb3RveGlj 91676\nL2F1dGhlbnRpY2F0aW9u 91677\nIHJlcHLDqXNlbnQ= 91678\nIGNvbXBsZXhpb24= 91679\nCUNvbW1vbg== 91680\nX2Jo 91681\nV2hvbGU= 91682\nSW1hZ2VEYXRh 91683\nIHRpbms= 91684\nZXF1YWxUbw== 91685\nIFRIUg== 91686\nIGRlbHRhcw== 91687\nIEFHRQ== 91688\naXphZG9y 91689\nYWRtaW5pc3RyYXRpb24= 91690\ncXVldHM= 91691\nX2ZpbGxlZA== 91692\nIEjDpA== 91693\nYWxsb2Nh 91694\nIEJvb25l 91695\nCWxjZA== 91696\nRm9sZGVyUGF0aA== 91697\nLlJhaXNl 91698\nXyN7 91699\nZXJ0aW5v 91700\nIFRocm9uZQ== 91701\n4K6/ 91702\nb3hldGluZQ== 91703\ncHJheQ== 91704\nIGRpbGlnZW50bHk= 91705\nIEFyY2hpZQ== 91706\nLm11bHRpcGFydA== 91707\nIHNlbw== 91708\nLmdldFByb2plY3Q= 91709\nIHBhag== 91710\nY2xlcm9zaXM= 91711\nYW1lcm9u 91712\nIHRvdXJlZA== 91713\nIG5pa2U= 91714\nIEJha2VyeQ== 91715\nLHBhcmVudA== 91716\nX1RFTQ== 91717\nU3BhdGlhbA== 91718\nbGFwcGluZw== 91719\nUHJvZHVjZXNSZXNwb25zZVR5cGU= 91720\nKGJhbGFuY2U= 91721\nSHVuZHJlZHM= 91722\nLXRlcm1pbmFs 91723\nIkRv 91724\nQ29udGVudFNpemU= 91725\nIGJiYw== 91726\nIGTDqWNvdXZyaXI= 91727\ndXRpbHVz 91728\nLnVuZG8= 91729\nLG91dHB1dA== 91730\nZ3JvdXBOYW1l 91731\nJG1heA== 91732\nIEFsbGE= 91733\nINC60LDRgNGC 91734\nLk9ORQ== 91735\nX2RlY2lzaW9u 91736\nRUVFRQ== 91737\nIHhPZmZzZXQ= 91738\n56o= 91739\nIHJ1bmF3YXk= 91740\nIGhhbmRqb2I= 91741\nIGdlbml0YWxz 91742\nKGpUZXh0RmllbGQ= 91743\nLnJhZGlhbnM= 91744\nIFBhZHJlcw== 91745\nZGVwZW5kZW5jZQ== 91746\nIHN3YWxsb3dpbmc= 91747\ncm90ZWlu 91748\nIGZsZWV0cw== 91749\nIGNhcmF0dGVy 91750\nKGNhbg== 91751\nIEZsb3JhbA== 91752\nX01zZw== 91753\nIGRlY2xhcmFjacOzbg== 91754\nbHNydQ== 91755\nc2Nob29scw== 91756\nIGRlbGVnYXRlZA== 91757\nIFBlbmFs 91758\nIENoZXJu 91759\nU21hcnRQb2ludGVy 91760\nc3Rvcnlib29r 91761\nIE55bG9u 91762\n5oCd 91763\nX0xFU1M= 91764\nL2FkZHJlc3M= 91765\nIENPUlM= 91766\nIOydtOuvuA== 91767\nIG1vZGE= 91768\nbWRw 91769\nIGRlcmJ5 91770\nIFBoYXJtYWNldXRpY2Fscw== 91771\nIGV5ZWQ= 91772\nX2NwdXM= 91773\n6KaL 91774\nfHwK 91775\nLm1hZw== 91776\nKFFM 91777\nIENpdmlsaXphdGlvbg== 91778\n6Yw= 91779\nX0RlcA== 91780\nIHN3ZWFyaW5n 91781\nIFNob3J0cw== 91782\ndWViYXM= 91783\nIGRlbGluZQ== 91784\nIEFkdmlzb3Jz 91785\nIOyeiOuLpA== 91786\nX0ZJTkU= 91787\nfSk6 91788\nLGFzc2lnbg== 91789\nIFBDSWU= 91790\ne3t7 91791\nU2Np 91792\nIGFtYm9z 91793\naWxlZW4= 91794\nIHR1bmVy 91795\nIHBhcmFtTmFtZQ== 91796\nLHRvdGFs 91797\nKExvY2FsRGF0ZQ== 91798\nIHNwcA== 91799\nIGVycm9yZXM= 91800\nIEhlbHBpbmc= 91801\nX21lcmdlZA== 91802\nLnRpbWVTY2FsZQ== 91803\nX0VMRU0= 91804\nX1NPTA== 91805\nIGF2ZW50 91806\nPGQ= 91807\nSnVuaW9y 91808\nCWJhcg== 91809\nLmx2 91810\nIOy5 91811\nPXd4 91812\nIG1pcmFjdWxvdXM= 91813\nIFJhbmRvbUZvcmVzdA== 91814\nIEZyYW5rZW4= 91815\nYGAs 91816\nKEluaXRpYWxpemVkVHlwZUluZm8= 91817\nIHN1cGVyaGVyb2Vz 91818\nIGFuc2libGU= 91819\nX1R5cGVEZWY= 91820\nIFBlcm0= 91821\nT0xFUg== 91822\nR3Jhbg== 91823\nLW5vdGlmaWNhdGlvbg== 91824\nIGtheg== 91825\nIGV4aGlsYXI= 91826\nc2VydGVy 91827\nIHN0b3JlZnJvbnQ= 91828\nX2VuZHM= 91829\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK 91830\nCWdpdA== 91831\nRFNQ 91832\nQ0hBSU4= 91833\nrLQ= 91834\nSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbg== 91835\nIFNseQ== 91836\n77yaPA== 91837\nQnJpdGFpbg== 91838\nL3NsaWRlcg== 91839\nIHptcQ== 91840\nIGJhag== 91841\nYnJlZA== 91842\nLlZBTFVF 91843\nIGdyaWV2aW5n 91844\nIHBvcm7DtHM= 91845\naWd1YQ== 91846\nSU5DTFVERUQ= 91847\nV2FrZQ== 91848\nY2Jk 91849\nIE1vbmdvbGlh 91850\naW52aXNpYmxl 91851\nIGNvcnJlY3RpdmU= 91852\nIGNlbnRlcnBpZWNl 91853\nQ2F1Z2h0 91854\nIGthcmFrdGVy 91855\nYWxtw7Y= 91856\nIGJlbHVt 91857\nIGFkam9pbmluZw== 91858\nPygi 91859\nIFZpc3VhbGl6YXRpb24= 91860\na2tl 91861\naWZpY2Fkb3M= 91862\nc3Bk 91863\nX0NCQw== 91864\nLUxhbmd1YWdl 91865\nIHN0aWw= 91866\nb3JldGljYWw= 91867\nKGNvbXBsZXRpb24= 91868\nIFZlcmbDvGd1bmc= 91869\nX1RyZWU= 91870\ncmlwcGxpbmc= 91871\nLlJlbW92ZUVtcHR5RW50cmllcw== 91872\nIFRBWA== 91873\nCUNvZGU= 91874\n5YuV 91875\ndXJnYQ== 91876\nINGD0LbQtQ== 91877\nIGFpZGVy 91878\nIFByZXNjb3R0 91879\nIGZpbGFtZW50 91880\nIC0tLS0tLS0tLS0tLS0tLS0tLS0t 91881\ndGhlcm9z 91882\n0LXRgNCw 91883\nZGViaWFu 91884\nw6RobA== 91885\nb2xhaA== 91886\nX1VOSVRT 91887\nQXJr 91888\nTW91bnRlZA== 91889\nLlRyaW1TcGFjZQ== 91890\nLmdldE51bWJlcg== 91891\nX2VvZg== 91892\nLm5y 91893\nIFNIQVJFUw== 91894\naWxhdGVy 91895\nIHdpY2h0 91896\nX2NvbXBhcmlzb24= 91897\nICki 91898\nY2xpbmljYWw= 91899\nIFRFbnRpdHk= 91900\ndmVuZXM= 91901\nLmdldFByb3BlcnRpZXM= 91902\nIHJlbGF0 91903\nIGFubm95YW5jZQ== 91904\nYmVi 91905\nIGFuZXN0aGVzaWE= 91906\nX2ludGVydmFscw== 91907\nX2Zo 91908\nIHN1ZG9rdQ== 91909\nIGRpc2Vu 91910\nY29ubmVjdGluZw== 91911\nIG9h 91912\nIOKWkQ== 91913\nWkY= 91914\nIGN1eg== 91915\nU09FVkVS 91916\nIE3DtmdsaWNoa2VpdA== 91917\nY2hhcnRlZA== 91918\nIGhhc2hlcg== 91919\nIEtlZXBz 91920\nQUVB 91921\nCWxvZ3J1cw== 91922\nCU5hbWVzcGFjZQ== 91923\nb3J0aG8= 91924\nJGFjdGlvbg== 91925\nIFJvYw== 91926\nJyk7Pz4i 91927\nIFBST1Q= 91928\nQGFwaQ== 91929\nY2hzZWw= 91930\nL2dpZg== 91931\nKEhhbmRsZQ== 91932\nIGFudW5jaQ== 91933\nL3B5 91934\naW52YWxpZGF0ZQ== 91935\nIE1FUA== 91936\ndGVtcw== 91937\nO10v 91938\n6IM= 91939\n6L+Q 91940\nIHRhY28= 91941\nQURW 91942\naHBw 91943\nQnV0dG9uQ2xpY2s= 91944\nIGJyaW5nZW4= 91945\nIFRJTUVPVVQ= 91946\nIGFzdHJvbG9neQ== 91947\nZGF0ZUZvcm1hdA== 91948\nT0dSQVBI 91949\nRmlsZVN0cmVhbQ== 91950\n5a6h5qC4 91951\nLkNvbW0= 91952\nJ2I= 91953\nIEdFVEdMT0JBTA== 91954\nZWF0aW5n 91955\nYW5kZXN0 91956\nIFNFVFVQ 91957\nIEFkdmFuY2Vz 91958\nLnNjcm9sbEhlaWdodA== 91959\nQVpF 91960\nZW5kdGltZQ== 91961\nd2VhdGhlcm1hcA== 91962\nIE1hbmdv 91963\nIFJJUA== 91964\nIGl0ZXJhdG9ycw== 91965\nIGNvYXg= 91966\nIOWbvg== 91967\nPG1haW4= 91968\ncm1z 91969\ncGNi 91970\nIHZhY2NpbmF0aW9ucw== 91971\nIGRpc2FncmVlbWVudHM= 91972\nCWV2ZW50cw== 91973\nPExvY2F0aW9u 91974\nLk1lYXN1cmU= 91975\nIHF1ZWRh 91976\nIHNpZ25hbGxpbmc= 91977\nIGRlZ3JhZGVk 91978\nIEFtZWxpYQ== 91979\nLWNvbmZpZGVuY2U= 91980\nZGJOYW1l 91981\nX2luYWN0aXZl 91982\nb25hdGlvbg== 91983\nIHBlcmlwaGVyYWxz 91984\n5qC3 91985\nU1VQRVI= 91986\nJ1I= 91987\nLndheQ== 91988\nUExBSU4= 91989\nIEVuZ2Vs 91990\ncmVsYXk= 91991\nIGRlYmlkbw== 91992\nIFRyb3Rza3k= 91993\n6Iw= 91994\nINCw0LTRgNC10YE= 91995\nCXVzZXJz 91996\nZXRjaHVw 91997\ndGVw 91998\nIG5ld1Bvc2l0aW9u 91999\nIHdhaXZlcnM= 92000\nZWRpY2luZQ== 92001\nIHRhbmdnYWw= 92002\nIGFtbW9uaWE= 92003\nLWRldA== 92004\nL2V4ZWM= 92005\nKHBhZGRpbmc= 92006\nIFNob3BwaW5nQ2FydA== 92007\nIFByaW50Zg== 92008\nSGFuZGxlZA== 92009\nIE5BTUVT 92010\nKGNsb2Nr 92011\nIHt9Og== 92012\nIHNpbXM= 92013\nIFRlYXJz 92014\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 92015\nX0NBTk5PVA== 92016\nTEVHUk8= 92017\nLlNldFBhcmVudA== 92018\n5YW25Lit 92019\nIGVycmV1cg== 92020\naXBp 92021\nPEV4cHJlc3Npb24= 92022\nLnRpbWVsaW5l 92023\nICdfJyw= 92024\nIGNvYXRpbmdz 92025\nIHVzZUZvcm0= 92026\nLnRr 92027\nIEZlYXN0 92028\nLlNL 92029\nw6RzZW50 92030\nY2h3aXR6 92031\nIGludmVudGl2ZQ== 92032\nIE1laQ== 92033\nIHZlc3RpYg== 92034\nIG7DpGNoc3Rlbg== 92035\nL2JpZw== 92036\nIHJldHJlYXRlZA== 92037\nIHByb3BhbmU= 92038\ndmljdGlt 92039\nQWt0 92040\nIFByZXNlcnZhdGlvbg== 92041\nIFBpcw== 92042\nX1NIQURPVw== 92043\nIHByaWNlbGVzcw== 92044\ncsOzZA== 92045\nb2JibGVk 92046\nIHJvbGVOYW1l 92047\nIEdEUFI= 92048\nICciLA== 92049\nQ2VudHJl 92050\nQXJjaGl0ZWN0dXJl 92051\nQ3BwQ2xhc3M= 92052\nIG1hdHRyZXNzZXM= 92053\nIGJlZXA= 92054\nIERhbWlhbg== 92055\n5p2D6ZmQ 92056\nYmV0dA== 92057\nX2Flcw== 92058\nKGNlbGxz 92059\nIOuwsOyXtA== 92060\nIGJpdG1hc2s= 92061\nY291bGRu 92062\nLW5vdw== 92063\nIGlubm92YXRl 92064\nIGhhY2Vu 92065\nIEx5b25z 92066\ndGhpY2tuZXNz 92067\nIHdoaXN0bGVibG93ZXI= 92068\nJGZpbHRlcg== 92069\nIGV1bGVy 92070\nIEhhcm0= 92071\nIGxlZHM= 92072\nIEtlbHZpbg== 92073\nLnF1aWNr 92074\nIEzDs3Bleg== 92075\ncmV2ZQ== 92076\nIG5pZ2VyaWE= 92077\nIGp5bGxhbmQ= 92078\nLmVtcHR5TGlzdA== 92079\nIHVuc2V0dGxpbmc= 92080\ndXNiYW5k 92081\nIHRyYWNrZXJz 92082\nPVwiIjsK 92083\nIGNvbnRpbnVh 92084\nIE51bWVybw== 92085\nZW5kb24= 92086\nIEdlcnJ5 92087\nLlRPRE8= 92088\nUmVwZWF0ZWQ= 92089\nIFNlcmVuYQ== 92090\n0LjQvNCw0LvRjA== 92091\ncHJvZmls 92092\nINCy0YHQtdGF 92093\nQGFkbWlu 92094\nLkxpbmVz 92095\nIHRyYW5zbWlzc2lvbnM= 92096\nIGNq 92097\nYW7Dp2E= 92098\n5Yig6Zmk5oiQ5Yqf 92099\nIGdldE1lbnVJbmZsYXRlcg== 92100\ndWZyZXE= 92101\nIE1hdGhlbWF0aWNhbA== 92102\nTmF2aWdhdG9yTW92ZQ== 92103\nIGZ3ZA== 92104\ndW5pdHRlc3Q= 92105\nIHN5bnRoZXNpemVk 92106\nIGNyZWVk 92107\nKEZyYW1l 92108\ncHN5Y2g= 92109\ndm9k 92110\ndUM= 92111\n4bqndQ== 92112\nIOKAnOKApg== 92113\nIGtyYXQ= 92114\nZHJhd2FibGU= 92115\nw6ZyZQ== 92116\nPXRvcA== 92117\nKExvZ2dlcg== 92118\nRXJyb3JFeGNlcHRpb24= 92119\nYWlzYWw= 92120\nL3dz 92121\ndWxsZWQ= 92122\nQVJJTkc= 92123\nIG5JbmRleA== 92124\nIGludGVybmFscw== 92125\nIGVmZmljaWVuY2llcw== 92126\nICNA 92127\nX2JyaWdodG5lc3M= 92128\nX25vcm1hbHM= 92129\nIFN0b3V0 92130\nIHVudmVpbA== 92131\nIFNob3Rz 92132\nLWNvbXBhbnk= 92133\nX2VsdA== 92134\nKGRsbGV4cG9ydA== 92135\nIHByb2R1Y2Npw7Nu 92136\nQ2lzY28= 92137\nQmxha2U= 92138\nLW1vdXRo 92139\nUGVhcg== 92140\nINC00L7RgdGC0YPQvw== 92141\nIEpBQ0s= 92142\nIO2YuA== 92143\nIHN0b3B3b3Jkcw== 92144\nIFRlc3M= 92145\nIHBvc3Rl 92146\ncmF6aWVy 92147\n6K0= 92148\nTWVzc2FnaW5n 92149\nt+aWsA== 92150\nVGFtYmFo 92151\nIG5hcmNvdGljcw== 92152\nIGNhbXBlcg== 92153\nIHRyaXBvZA== 92154\nIGdsRW5k 92155\nIGdpb2M= 92156\nY29tYmU= 92157\nVXNlclJvbGU= 92158\nVWw= 92159\nRXF1aXZhbGVudA== 92160\nIGdub21l 92161\nIEZ1w58= 92162\ncGFja2FnZU5hbWU= 92163\nX3Vl 92164\nRGlzY2xvc3VyZQ== 92165\nYW1hdGU= 92166\nX3RlbnNvcnM= 92167\nIEthdGhyeW4= 92168\nX0Jhcg== 92169\nVGhyZWFkSWQ= 92170\nIHZlcmlmaWNh 92171\nLmFzc2VydE51bGw= 92172\nIE9kaW4= 92173\nYsOp 92174\nINGB0L7RgdGC 92175\nIGp0 92176\nLlNlbGVjdGVkSXRlbXM= 92177\nIGFjdGlvbmFibGU= 92178\nIFJlZ2FyZHM= 92179\naGVr 92180\nOm51bWVs 92181\nLEdM 92182\nIFBIT05F 92183\nCURlZmF1bHQ= 92184\nIGVsYXN0 92185\nIGJlY2s= 92186\nPWNyZWF0ZQ== 92187\nOicK 92188\nYXJodXM= 92189\nbW9kaWZpZXJz 92190\naW50cHRy 92191\nIHByb3Bpbw== 92192\n77yI56yR 92193\nIHJlcXVlc3RPcHRpb25z 92194\nIGltcGxpYw== 92195\nIGR1cm8= 92196\nIFBDUw== 92197\nRGVsaW1pdGVy 92198\nKGxvZ2l0cw== 92199\nLkVWVA== 92200\nV2l0aENvbnRleHQ= 92201\nIG9sdHJl 92202\nX0VYRUNVVEU= 92203\nb2xpY2l0ZWQ= 92204\nX0VudGVy 92205\nL2Zyb20= 92206\nINGB0LvQvtCy 92207\nIEhvcm0= 92208\ndWliTW9kYWw= 92209\nX0lORklOSVRZ 92210\n77yM44CK 92211\nVUdJTlM= 92212\nT05HTA== 92213\nLGJ1Zg== 92214\nIHBvdXJyYWl0 92215\ncGo= 92216\nKGN1YmU= 92217\nIHVnbA== 92218\nIFNhd3llcg== 92219\nSUZFU1Q= 92220\nQXBpcw== 92221\nIENvcmVEYXRh 92222\nIHNlc2FtZQ== 92223\nLnB0aA== 92224\nLmdldFVzZXJOYW1l 92225\nY2FzZWQ= 92226\nIHZhbmlzaA== 92227\nX0FwaQ== 92228\nLy86 92229\nL25vbg== 92230\nLmRvY2tlcg== 92231\nLnNp 92232\nYWxlcnRz 92233\nIGludGVzdGluZQ== 92234\ncGFydGljaXBhbnRz 92235\nLXZpc2libGU= 92236\nZW1zcA== 92237\nbXVl 92238\nX3B2 92239\nIENyaQ== 92240\nb2dyYQ== 92241\nX2V4cGVyaWVuY2U= 92242\nIElOVEVSVkFM 92243\nX3JlZ3Jlc3Npb24= 92244\n7ZWY7IS47JqU 92245\nZW5kZXJlY28= 92246\nbGF0YWJsZQ== 92247\nLmxvY2FsdGltZQ== 92248\nIEJJVFM= 92249\nIEZvbGRpbmc= 92250\nCSAJCQ== 92251\nw6lzZQ== 92252\nLWJlYXJpbmc= 92253\nIFhQQVI= 92254\nT1BTSVM= 92255\nJ14kJyw= 92256\naW5jbA== 92257\nIE9wcmFo 92258\nIGJvb3Rocw== 92259\nIFJvaGluZw== 92260\nLkJvcmRlclNpZGU= 92261\nYXRhdHlwZQ== 92262\nQ3JlYXRlZEJ5 92263\nLOKAmeKAnQ== 92264\nZG9jdHJpbmU= 92265\nIGJyZWF0aGVk 92266\nX2JlZw== 92267\nIGFmZmxpY3RlZA== 92268\nTW91bnRhaW4= 92269\nQmxvYw== 92270\nIHJ1aW5pbmc= 92271\nLkFubm90YXRpb25z 92272\nCWludGVudA== 92273\nIHN0YXRpY2FsbHk= 92274\nX1V0aWxz 92275\nTGF1bmNoZXI= 92276\nOm5vcm1hbA== 92277\nIHVzZXJpbmZv 92278\nLUp1bA== 92279\nS3lsZQ== 92280\nLlJlYWRVSW50 92281\nKHVybHM= 92282\nL2lm 92283\nbWl0dGVs 92284\nYmNt 92285\nQE1vZHVsZQ== 92286\nIENvbnN0YW50aW4= 92287\nIGJq 92288\nZXJuYXV0 92289\nPHI= 92290\nIE1lbnRvcg== 92291\nIGVncmV0 92292\nX29hdXRo 92293\nLkRhdGFDb250ZXh0 92294\nX0NMSQ== 92295\nKENvbnN0cnVjdG9y 92296\nIHNldFBvc2l0aW9u 92297\ncmVzYXI= 92298\nZW50aW5n 92299\n4Li54Lil 92300\nVHJhbnNtaXNzaW9u 92301\nIG5vdGlmeURhdGFTZXRDaGFuZ2Vk 92302\nIE1vdXNlQnV0dG9u 92303\nICoi 92304\nICAgICAgICAgICAgICAgDQo= 92305\nIEx5ZGlh 92306\nIHN3b3Jl 92307\nIHBsYXRhZm9ybWE= 92308\nCWJ1dHRvbnM= 92309\nIHNwcnVuZw== 92310\nKFRva2VuVHlwZQ== 92311\nQ3g= 92312\nQXF1 92313\nCQkJCQkJCQkJICA= 92314\nCUFERA== 92315\ndWlkcw== 92316\nIOCkrg== 92317\nIOaXtumXtA== 92318\nLkFjdGlvbkJhcg== 92319\nIG9jdXI= 92320\nIGlsbWE= 92321\nLW5ldXRyYWw= 92322\nICIuIjsK 92323\nCVNpemU= 92324\nUGllY2Vz 92325\nIHN0aWY= 92326\nICI9Iiw= 92327\nIEVxdWl2YWxlbnQ= 92328\nIGlnZW4= 92329\nZGZk 92330\nX3RoaWNrbmVzcw== 92331\nX3JlYWRhYmxl 92332\nL2ZhbHNl 92333\nIHRvb2x0aXBz 92334\nb3BsYXN0 92335\naHVh 92336\naGFuZGxlUmVxdWVzdA== 92337\nLkxBWlk= 92338\nPFVGdW5jdGlvbg== 92339\naW1tdXRhYmxl 92340\naWhpbGF0aW9u 92341\nIG9ydGhvZG94 92342\nLnBvcHVsYXRl 92343\nIHZlcmE= 92344\nIG9iZXI= 92345\nc2FuZA== 92346\ndmln 92347\nQ29uZmVyZW5jZQ== 92348\nKENvbGxpc2lvbg== 92349\nL2F1dG8= 92350\nIFNvbGlkQ29sb3JCcnVzaA== 92351\nKic= 92352\nLGFkZHJlc3M= 92353\nIHN3ZWV0aGVhcnQ= 92354\nw6F0aWNhcw== 92355\nYW5pbmU= 92356\nX3BheW1lbnRz 92357\nIHVubWlzdA== 92358\nIHRydW1wZXQ= 92359\nQkFM 92360\nIGZpbGVJZA== 92361\nbmllanM= 92362\nQURG 92363\nIG1uaXN0 92364\nIEZlaGxlcg== 92365\n44CRLA== 92366\nQ2hhcmFjdGVyU2V0 92367\nIFZhbmNl 92368\nSW5zZXJ0ZWQ= 92369\nIGRvd253YXJkcw== 92370\nIHJvdGF0aW9uYWw= 92371\nIGVuY291bnRlcmluZw== 92372\nTUJQcm9ncmVzc0hVRA== 92373\nL1N5c3RlbQ== 92374\nL3BvcA== 92375\nIH0pDQoNCg== 92376\nIC4nPC8= 92377\n77yJDQo= 92378\nIGRjYw== 92379\nYXN5YXJha2F0 92380\nIHByaW5jaXBhbGx5 92381\n5a6a5LmJ 92382\nKGNob2ljZXM= 92383\nLnBhZ2luYXRvcg== 92384\nIHVwYnJpbmdpbmc= 92385\nIGRvdGVudg== 92386\nKCkpLw== 92387\nIFRBUw== 92388\nZ2Nk 92389\nX2ludGY= 92390\nLm11dGV4 92391\ncHJlc3Rhc2hvcA== 92392\nIGLDtnI= 92393\nZGFw 92394\nX2RlbWFuZA== 92395\nXERlc2t0b3A= 92396\ndG9GbG9hdA== 92397\nIHNlZ3JlZ2F0ZWQ= 92398\nIGNsaW1hdGVz 92399\nLk9yZGVyQnlEZXNjZW5kaW5n 92400\nKCcsJyk= 92401\nUHVsbFBhcnNlcg== 92402\nQXRvbXM= 92403\nIGJlbsO2dA== 92404\nIGhvbWVy 92405\nYW50dQ== 92406\nSXNFbXB0eQ== 92407\nIEJlZ2lucw== 92408\nPlNob3c= 92409\nIFN1cHBsZW1lbnRz 92410\nb2NjdXM= 92411\nIGRvcGU= 92412\nLmJvb2tpbmc= 92413\nIEFsbWlnaHR5 92414\nW2VkZ2U= 92415\nIEViYXk= 92416\nX3JhY2U= 92417\nRnJvemVu 92418\nX3RyYXZlbA== 92419\nIHBhc3RvcnM= 92420\nX1NVUkZBQ0U= 92421\nX2dlbnJl 92422\nX0hPVA== 92423\nLGRpbQ== 92424\nVGJs 92425\nbXRz 92426\ncHJlZGljdGlvbnM= 92427\nX2N1bQ== 92428\nIGRldGFsbGVz 92429\nLXRyYW5zaXRpb25hbA== 92430\nIHdha2V1cA== 92431\nUGVyc29ucw== 92432\nLmNvbG9yYmFy 92433\nU3RyYW5nZQ== 92434\n2K/Zhw== 92435\nJlc= 92436\nIEFSUA== 92437\nX1NPRlQ= 92438\nX2RyYWZ0 92439\nSVZB 92440\nIGdyb3A= 92441\nIGxpZWJl 92442\nIGlpZA== 92443\n2KfYsw== 92444\nY2FuZGlkYXRlcw== 92445\nZ2V0QXM= 92446\nPV8oIg== 92447\nLkdldE9yZGluYWw= 92448\nKSk9PQ== 92449\nYW5ub3RhdGU= 92450\nIEx1bWlh 92451\nSVJNV0FSRQ== 92452\nX09QRU5HTA== 92453\nKGZvcm1EYXRh 92454\nZW50aW1lcw== 92455\nIHdhdGVyc2hlZA== 92456\nINCx0LXQtw== 92457\nIGZsb3BweQ== 92458\nVG93YXJkcw== 92459\nKGNvbXBhY3Q= 92460\nRERE 92461\ne24= 92462\nIHBva2luZw== 92463\nQG0= 92464\nIHJlY3ljbA== 92465\nc3RydWN0b3Jz 92466\na2V5Q29kZQ== 92467\nIHZlaGVtZW50 92468\nIGxpdHJl 92469\nIEJJTkQ= 92470\nIEZyYW5jb2lz 92471\nIG51ZGl0eQ== 92472\nIGlzaXpl 92473\nCW9uQ2xpY2s= 92474\neXN0YWxz 92475\nIGdldFN5c3RlbVNlcnZpY2U= 92476\nV2ViUmVzcG9uc2U= 92477\nZmlsZXNpemU= 92478\nIENobG9y 92479\nY29saQ== 92480\nX3NlYXQ= 92481\nLkFkZEluUGFyYW1ldGVy 92482\nKXRlc3Q= 92483\nIHF1ZXM= 92484\nIGNhdXRpb3VzbHk= 92485\nImRpc3BsYXk= 92486\nLnNodG1s 92487\nIEdVSURBVEE= 92488\nKCIqKg== 92489\nIGdyYW5kZGF1Z2h0ZXI= 92490\nIEFzc2VtYmx5RGVzY3JpcHRpb24= 92491\nRm9yRWFjaA== 92492\nV2lsc29u 92493\nLGVn 92494\nIGJlbGlldmFibGU= 92495\nIGNyb3Nzd29yZA== 92496\nbG9iYmVy 92497\nIFN0YXBsZXM= 92498\nKHNoaXA= 92499\nIHdhZ2Vk 92500\nIEJvbHNoZXZpaw== 92501\nLkFkZEl0ZW0= 92502\nKEZpbHRlcg== 92503\nX0FCQw== 92504\nIGBc 92505\n0L7RiQ== 92506\nIG1ib3g= 92507\nIE5lcw== 92508\nIEFWQ2FwdHVyZQ== 92509\nIGNvbmhl 92510\nIElOVEVSTkFUSU9OQUw= 92511\nb3Nn 92512\nIF0pLT4= 92513\nU0tUT1A= 92514\nIGtpZGQ= 92515\nIFNTVA== 92516\nIOWFsw== 92517\nIEV0aG5pYw== 92518\nRVJTSEVZ 92519\nIG11bHRpYw== 92520\nX01VTA== 92521\nIEZpbmRPYmplY3RPZlR5cGU= 92522\nIEV4cGVuc2Vz 92523\nZ2V0TW9ja0J1aWxkZXI= 92524\nLWd1aWRl 92525\nJ0w= 92526\nIOeZuw== 92527\nIHJhag== 92528\nIEJsYW5jaA== 92529\nIEFkZHJlc3Nlcw== 92530\nTng= 92531\nIElzbGFtYWJhZA== 92532\n0L7QutGD0LzQtdC90YI= 92533\nIEJlYXZlcg== 92534\nLnN0dWRlbnRz 92535\nIEFzeW5jQ2FsbGJhY2s= 92536\nc2hlZXRz 92537\nZWNhc3Q= 92538\nIEZ1bmRhbWVudGFs 92539\nIHZlcmRpZW5lbg== 92540\nIGV4YWNlcmJhdGVk 92541\nIE1vZGVyYXRvcg== 92542\nQ0NDQ0ND 92543\nIHRpbWVvdXRz 92544\nIHN1YmRpdmlzaW9ucw== 92545\nIGNvbXByb21pc2Vz 92546\ndXp6ZXI= 92547\nfSwkew== 92548\nX2Jsb2NraW5n 92549\nZXJtYW5u 92550\nIE1pa2hhaWw= 92551\nIFNlbGJzdA== 92552\n6ZSA 92553\nLnNob3dz 92554\n5LiH5YWD 92555\nIFRm 92556\nIElIdHRwQWN0aW9uUmVzdWx0 92557\nIElFbnRpdHk= 92558\nIGlx 92559\nRk1M 92560\nb2RlbQ== 92561\nc3Rw 92562\ndWN0aW9ucw== 92563\nLmZhdm9yaXRl 92564\nLkdldERpcmVjdG9yeU5hbWU= 92565\nIGdyYWM= 92566\nIHhtbERvYw== 92567\nX3B1c2hCdXR0b24= 92568\nY29sbGVjdG9y 92569\nPWV4cGxvZGU= 92570\nIGRlc3RpbmF0aW9uVmlld0NvbnRyb2xsZXI= 92571\nIFNlcmlhbGl6ZWQ= 92572\nOm1lc3NhZ2U= 92573\nIENDQw== 92574\nX3JlY292ZXJ5 92575\nLWtpdA== 92576\nc2hpbWE= 92577\ncm90Y2g= 92578\nIGB9Cg== 92579\nX3N1cHA= 92580\nVGFibGE= 92581\n0YDQtdC00LXQuw== 92582\nR3RrV2lkZ2V0 92583\nIFNJTVBMRQ== 92584\nLnBoaQ== 92585\nIExpYmVydGllcw== 92586\nLS1b 92587\nIHVudmVpbGluZw== 92588\nIGV4dGVudHM= 92589\nYmNk 92590\nIGh2YWQ= 92591\nCWNy 92592\nLnJlYWRkaXI= 92593\nIHJlYWRhYmlsaXR5 92594\nIGRpc21pc3Npbmc= 92595\nQ2FtYg== 92596\nIGNhc3VhbHR5 92597\nIElQVg== 92598\nbWl0ZXM= 92599\nIHB1cmlmaWVk 92600\nLk9yaWVudGF0aW9u 92601\nIGxq 92602\naW11bGF0b3I= 92603\nZnJhbQ== 92604\nL2xvY2F0aW9u 92605\nIGNvbW11bmljYXRlcw== 92606\nOlVJQWxlcnQ= 92607\nL3NvY2lhbA== 92608\nZWx5bg== 92609\nREVO 92610\nINee 92611\nIGJlZm9yZVNlbmQ= 92612\nIFVudGVycw== 92613\nJykuIg== 92614\nICcnKTs= 92615\nLndyaXRlT2JqZWN0 92616\nKGdyYW1tYXJBY2Nlc3M= 92617\nIEFwcGxpY2F0aW9uQ29udGV4dA== 92618\nQnlVc2VybmFtZQ== 92619\nIHNraXBz 92620\nIGZpbGhv 92621\nIHZpZXV4 92622\nIG1SZWN5Y2xlclZpZXc= 92623\nIGFyb3VzZWQ= 92624\nLm93bA== 92625\nIGN1cmxlZA== 92626\nL2NhbGxiYWNr 92627\nKCc6Jylb 92628\nIGludW5k 92629\nIGJyZWFrcG9pbnRz 92630\nLWV2ZW4= 92631\nLnN0ZW0= 92632\nIGRlcm9n 92633\nIG5lcA== 92634\nIENvbXBsZXRhYmxlRnV0dXJl 92635\nLUxpbmU= 92636\nLyov 92637\nLkhleA== 92638\nIHJ1c3Nl 92639\nIGJpZg== 92640\nIEZvbmQ= 92641\naWVjdA== 92642\nIGFsbG90dGVk 92643\nZGV0ZWN0b3I= 92644\nIC8KCg== 92645\nZW1vZGU= 92646\ndWhl 92647\ndWlzc2U= 92648\nIEZJWEVE 92649\nbWF0aHJt 92650\nIHVuc3Vz 92651\nIEF1dG9z 92652\nIC4uLi4uLi4uLi4= 92653\nLnRyYXZlbA== 92654\nTkFW 92655\nIGxlc2Jpc2s= 92656\nIMO8emVy 92657\nIGNsZXJpYw== 92658\nIGxpbWl0bGVzcw== 92659\nb2x1Y2lvbg== 92660\nIG5lY2tsaW5l 92661\nIGRyaWZ0ZWQ= 92662\nIFJlbGlhYmxl 92663\nIENhcnk= 92664\nIHRlbsOtYQ== 92665\nID8+Jw== 92666\nL2NvbW1vbnM= 92667\nIEdNQw== 92668\nX05QQw== 92669\nIEJsaXNz 92670\nIEJ1cm1h 92671\n5ZCM5pe2 92672\nKGRlcGVuZA== 92673\nLXN1aXRl 92674\nCXN0YWdl 92675\nRG91Zw== 92676\naWRlbnRpZmljYXRpb24= 92677\nX3Jlc29sdmVy 92678\nQmVnYW4= 92679\nW3RocmVhZA== 92680\nIDsKCgo= 92681\nTlRTVEFUVVM= 92682\nIGRpc29iZWQ= 92683\nfGg= 92684\nIGFjY3VtdWxhdGluZw== 92685\nICIsIik7Cg== 92686\ndVBhcmFt 92687\nLmJpbGw= 92688\ncml0Y2g= 92689\nQ3JpbWU= 92690\n0LXRgdGM 92691\nIFJlbWFpbg== 92692\n54Sh5paZ 92693\nX1RIQVQ= 92694\nYCJdCg== 92695\nLnN0YW1w 92696\nIHBhcmFub3JtYWw= 92697\nIE1QQw== 92698\nInVybHM= 92699\nIEVzdGF0ZXM= 92700\nVG9Gcm9udA== 92701\nVGhpcnR5 92702\nQmV0aA== 92703\nJ3U= 92704\nIOy9lOuTnA== 92705\nVUZBQ1Q= 92706\nIENyb20= 92707\nIE1pc3Rlcg== 92708\nIEVRVUFM 92709\nZW5oZWlt 92710\nIC8vew== 92711\nX3dhcw== 92712\nIGJvdXF1ZXQ= 92713\nIE1pZGRsZXRvbg== 92714\naXp1 92715\nX2hhc2hlcw== 92716\nIGhlbm5l 92717\nIExJTlVY 92718\nCVNlcnZpY2U= 92719\nIFRBTQ== 92720\nIGBf 92721\nIEFUQQ== 92722\nIGRhbmdsaW5n 92723\ncGFpbg== 92724\nX0JPVU5EUw== 92725\ncHJvZ3JhbW1pbmc= 92726\nIGN1cnJlbnRJdGVt 92727\nIGJlc2ll 92728\nZW1ibGU= 92729\nKGNhbGM= 92730\nLlNraW4= 92731\nIHBlYXJscw== 92732\nIEJ1cmI= 92733\nLW1vbml0b3I= 92734\nL2Nz 92735\nZmly 92736\nKHZlcg== 92737\nW2FyZ3M= 92738\nw7xja2Vu 92739\nZXBhcmF0b3I= 92740\nRG91 92741\nLkVudA== 92742\nIEVTQQ== 92743\nKGZt 92744\ndG9uZXM= 92745\nIFphYw== 92746\na3NhbQ== 92747\n4oCZYWxs 92748\nIE1TUw== 92749\nIkRvbg== 92750\nIHNpbXBsZXg= 92751\nIENvbnNjaW91cw== 92752\nIEFwcGxpY2FudA== 92753\ncGVsbGllcg== 92754\nIHBlZGVzdGFs 92755\nJGh0dHA= 92756\nIEF2YQ== 92757\nLkNH 92758\nIGludMOpcmVzcw== 92759\nIEludGVncmFs 92760\ncmVkZQ== 92761\nPWZvcm1hdA== 92762\nLlBhdGhz 92763\nX1BBUlRJVElPTg== 92764\nIHNlaA== 92765\nIFF1YW5kbw== 92766\nWW91dHViZQ== 92767\nLnB1dFRleHQ= 92768\n7KO87IS47JqU 92769\nLkFXUw== 92770\nIENzdg== 92771\nQ3Vyc29yUG9zaXRpb24= 92772\nLWJlZ2lu 92773\nX2NvdW50cmllcw== 92774\nLXJhbmRvbQ== 92775\n5Y2z 92776\nUGhpbGw= 92777\nIHBhbm9yYW1h 92778\nIHRoZXJlcw== 92779\n5Y+q 92780\nIHNpbGVuY2Vk 92781\nIEN1bWJlcmxhbmQ= 92782\nLlZpc2libGVJbmRleA== 92783\nLnN0YXRpc3RpY3M= 92784\nIHByb3BlbGxlZA== 92785\nQW1lcmljYW5z 92786\nIHZhbGlkYQ== 92787\nIEd1YW0= 92788\nIEZFTUE= 92789\nLnN5bnRheA== 92790\nZGdl 92791\nIGRlZXBlbg== 92792\nICAgICAgICAJCQkJ 92793\nIFNwZWNpYWxpc3Rz 92794\nIFNhbnRhbmE= 92795\nIEJlZXRsZQ== 92796\nICUKCg== 92797\nVXNlclByb2ZpbGU= 92798\nKCIkLg== 92799\nIGVtcGxvaQ== 92800\nIGVtYWlsaW5n 92801\nZ2V0T3JFbHNl 92802\nX1VQUEVS 92803\nLmRyaXZl 92804\nIHJlZGhlYWQ= 92805\nRk9VTkRBVElPTg== 92806\nIG11bHRpcGxpYw== 92807\nL2VmZmVjdHM= 92808\nIGhhbmR3cml0aW5n 92809\nX3Rh 92810\nIEJheg== 92811\nw7ZmZmVudA== 92812\ncHJpeA== 92813\nIGNoaXBzZXQ= 92814\nIGlwQWRkcmVzcw== 92815\nw61kYQ== 92816\nIFVuZw== 92817\nIFNjaGE= 92818\nLkZMT0FU 92819\nIHF1aWVybw== 92820\nb2Nocm9tZQ== 92821\nIHJlZWZz 92822\nYnNvbg== 92823\nIG3Dug== 92824\nIHRyYXlz 92825\nQm9tYg== 92826\nIG15TGlzdA== 92827\neGltaXR5 92828\nIERlbmc= 92829\nVW5p 92830\nLVNlcmllcw== 92831\nb2dhbnk= 92832\nbMSxaw== 92833\nL2NhbA== 92834\nIHJlYWxpemE= 92835\nIEhpYg== 92836\nCQoJCgo= 92837\nIGh1bWlsaWF0aW5n 92838\nWyR7 92839\nIHByZXRlbmRlZA== 92840\nIERhdGVuc2No 92841\nYW5zaWJsZQ== 92842\nCXJlbG9hZA== 92843\nIG1pZ2xpb3I= 92844\nX2JldA== 92845\nIHRvdGFsVGltZQ== 92846\nIEJheHRlcg== 92847\nIGVuYW1lbA== 92848\nL0ltYWdlcw== 92849\nIFNFUw== 92850\nIFNwcmluZ0FwcGxpY2F0aW9u 92851\nKWluaXRXaXRoRnJhbWU= 92852\nCWNhbA== 92853\nRUxFTUVOVA== 92854\nIEd1dGg= 92855\nKEJpZ0ludGVnZXI= 92856\nIE1lZGk= 92857\nLk1lbWJlcnM= 92858\nIHJlam9pY2U= 92859\nIGRvZg== 92860\nUEVuZFBvaW50 92861\nIGNsaXQ= 92862\nX1JFVVNF 92863\nTWFrZXM= 92864\nIHN6eQ== 92865\nIHNoYWRlZA== 92866\nIGZhdm91cmVk 92867\naXN0b2w= 92868\nZGV4 92869\nIGZsZXhHcm93 92870\nhac= 92871\nX3ByaW50ZXI= 92872\nLmZuYW1l 92873\ncGVyYXRpb24= 92874\nIG7Ds3M= 92875\nZ2dlcg== 92876\n6ICB 92877\nINCy0YDQtdC80Y8= 92878\nKGVmZmVjdA== 92879\nQnlVcmw= 92880\nIEFQUw== 92881\ndHV0b3JpYWw= 92882\nZWpz 92883\nU3FsUGFyYW1ldGVy 92884\nIHNjcmFwcw== 92885\nR3JlZXRpbmdz 92886\nRmVk 92887\nIFJFTkRFUg== 92888\nIGJsb29tcw== 92889\nIGRlYmlsaXRhdGluZw== 92890\nb21ldHJpY3M= 92891\nIHNpbWls 92892\nLWhlcm8= 92893\nIHJlYWxwYXRo 92894\nZGVwYXJ0bWVudHM= 92895\nQklORA== 92896\nIENhc3NpZHk= 92897\nbGlhbg== 92898\nU0tJUA== 92899\nLWNsZWFu 92900\nIHNpbGRlbmFmaWw= 92901\nX211bHRpcA== 92902\nanNvbkRhdGE= 92903\nQWdlbnRz 92904\nLmZoaXI= 92905\nIHRyaXVt 92906\nIGFzdG9yZQ== 92907\nIG5leA== 92908\nOnVwZGF0ZQ== 92909\nINC00LA= 92910\n4KSy 92911\nOyIpCg== 92912\nLlRleHRJbWFnZVJlbGF0aW9u 92913\nIG1pY3Jvc2NvcHk= 92914\nU1VS 92915\nYW5reQ== 92916\nIFBldGl0 92917\nbWFya2V0aW5n 92918\nIHZlcmlmaWNhcg== 92919\nYW1hZ2Vk 92920\nY3Ro 92921\nIGluY29uc2lzdGVuY2llcw== 92922\nIG1hasSF 92923\nIGdldEluZm8= 92924\nIHBhc3Npb25hdGVseQ== 92925\nIGljbXA= 92926\nW10+Cg== 92927\nU2luZ2Fwb3Jl 92928\nIE5ld3Rvd24= 92929\nIHJhaWxpbmc= 92930\nIEVubGlnaHRlbm1lbnQ= 92931\ndXRoZXJsYW5k 92932\nbGVpbmU= 92933\nX3JlZ2lzdHJv 92934\nIEVyaWNh 92935\nX3RpY2tldHM= 92936\nL21ldGhvZA== 92937\naXp6YXRv 92938\nR2F0dA== 92939\nLWZlYXR1cmU= 92940\nIDotKQ== 92941\nIHNlcnBlbnQ= 92942\nIEdyb3VwTGF5b3V0 92943\nTmlrZQ== 92944\ndW5nYQ== 92945\nIE1pbQ== 92946\nIGluY2Vzcw== 92947\nIGRlcGxldGlvbg== 92948\nX2xvdA== 92949\nIGJpcnRoZGF5cw== 92950\nIHJlbnRlcnM= 92951\nIGVxdWlwb3M= 92952\nIExlaHI= 92953\nX1BsYXk= 92954\nIHNwaWVsZQ== 92955\nIExBTkQ= 92956\nIEVuY291bnRlcg== 92957\naXphbmRv 92958\nIHBlcnU= 92959\nIHNsYW1taW5n 92960\nIHJlaW5zdGFsbA== 92961\nIGFuZ2k= 92962\nSW5UaGVEb2N1bWVudA== 92963\nIHZlcnNjaGlsbA== 92964\nIHZlcnNv 92965\nLnN0YWZm 92966\nKHZw 92967\nKGFjY291bnRz 92968\nZ2V0QXBwbGljYXRpb24= 92969\nIG1hbnRlbmVy 92970\nLlNP 92971\nLkFE 92972\nIE1vcm1vbnM= 92973\nCXJlYWw= 92974\nIGhvdGxpbmU= 92975\nIENhcmRpbw== 92976\ncGFnZUluZGV4 92977\nYmplcmc= 92978\nRm8= 92979\nIGNvbnNlaWxz 92980\nIG1pZ3JhaW5l 92981\nIGxhdGlubw== 92982\nIHRvcnBlZG8= 92983\namFiaQ== 92984\nL3Jz 92985\ndWJiZXI= 92986\nIENsYXNzZQ== 92987\n4Lw= 92988\nKC9eXA== 92989\nX2RlcGxveQ== 92990\nR1JFUw== 92991\nIFdIQVRTT0VWRVI= 92992\nIGFyY3B5 92993\nIG1pZWpzYw== 92994\nQXJteQ== 92995\nIHNjaMO2bmU= 92996\nIGJtaQ== 92997\nIDoiOwo= 92998\nIENydWlzZXI= 92999\ncWg= 93000\nLnByZXBlbmQ= 93001\nIHZpdmU= 93002\nb3JpYXNpcw== 93003\nICE9Cg== 93004\ndGVnYQ== 93005\nYW1lZGk= 93006\nUHJvamVjdGVk 93007\nLWJyZQ== 93008\nLHJlYWRvbmx5 93009\nIHN1YlRpdGxl 93010\nIG1pc3Ry 93011\nIEluaGFs 93012\nY292ZXJpbmc= 93013\nIHppag== 93014\nIEFSVElDTEU= 93015\nUlVMRQ== 93016\nIGFsdHJv 93017\nIHNldHRsZXM= 93018\naWRlbGJlcmc= 93019\nOiIuJA== 93020\nKGZl 93021\nX2Jt 93022\nIHByb3ByaWV0b3I= 93023\nIGtlZXI= 93024\nU2VwYXJhdGVk 93025\nX05FQVJFU1Q= 93026\nKHN0cnBvcw== 93027\nIENvbXB1dGF0aW9uYWw= 93028\nIGVybg== 93029\nSW5WaWV3 93030\nQWNyb3Nz 93031\nIGZydWl0eQ== 93032\nX21hcHBlZA== 93033\nIGdyYXR1aXRlbWVudA== 93034\nIHt9CgoK 93035\ncG90ZW50aWFs 93036\ncGFudHM= 93037\nIHNlbnRpbWVudGFs 93038\nIExpbmtlZGlu 93039\nKHBhdGNo 93040\nIGFkYXB0b3I= 93041\nIFVJU3Rvcnlib2FyZA== 93042\nIHNsYXNoaW5n 93043\nKCIvOg== 93044\nIHRleHREZWNvcmF0aW9u 93045\nLmRpYWc= 93046\nXFJlZGlyZWN0 93047\nIG5ldXJvc2NpZW5jZQ== 93048\nIEFkanVzdG1lbnQ= 93049\nIFNjb3RjaA== 93050\nIENvc2J5 93051\nU0VB 93052\nPXZpZXc= 93053\nIGV2b2x2ZXM= 93054\nIFNhbGlzYnVyeQ== 93055\n44CB4oCc 93056\nZXZlcnlvbmU= 93057\nKGFyYw== 93058\nIGFwYXJ0aGVpZA== 93059\nIGF6aW11dGg= 93060\nIFNoYW1hbg== 93061\n2KU= 93062\nw7NuaWNh 93063\nOmNsYXNz 93064\nIEluamVjdG9y 93065\nYWhhcw== 93066\nYWJsZXI= 93067\nX2VzdGltYXRvcg== 93068\nX0NVQkU= 93069\nIEtyYW5r 93070\nIHVuZmF2b3JhYmxl 93071\nIHJlcHV0ZWQ= 93072\nIENvbmRpdGlvbmFs 93073\nIG1pbGZz 93074\nIFJlc3RyaWN0aW9ucw== 93075\nKGhyZWY= 93076\nSnVhbg== 93077\nPEVudHJ5 93078\nCXRlbXBsYXRlVXJs 93079\nX3Byb2R1Y3Rpb24= 93080\nVHlwZUlE 93081\nIGJhbGs= 93082\nIG5ld0Fycg== 93083\nIGxpY2VuY2Vz 93084\nLnNvbHV0aW9u 93085\nLnNhbQ== 93086\nIEh2 93087\nIHRyZW1ibGluZw== 93088\nWWF3 93089\nIGZsZWVjZQ== 93090\nIHNob3ZlbA== 93091\nV2Vy 93092\nIHBhdHRlcg== 93093\nPVk= 93094\nIEZybQ== 93095\nU2NyZWVucw== 93096\nJCI= 93097\nIEJsb25k 93098\nINGB0LjRgdGC0LXQvA== 93099\nKG9k 93100\nIG5vY3Q= 93101\nb3VudGVycw== 93102\ndXNlcHBl 93103\nfGludA== 93104\nLnJlbWFpbmluZw== 93105\nIHVsdGltbw== 93106\nIG1hc3R1cmJhdGluZw== 93107\nbW1j 93108\nPUc= 93109\nIl19Cg== 93110\nIGZlYXJsZXNz 93111\nIGFsZ3VtYXM= 93112\nY3VsdA== 93113\nQWx0ZXJuYXRpdmVseQ== 93114\n5bKB 93115\nT0RFVg== 93116\nIEFkb3B0aW9u 93117\nIHdlYWx0aGllc3Q= 93118\nIG1lbnRyZQ== 93119\nL2dvdG8= 93120\nIGluZm9ybWFudA== 93121\nIFJvdXQ= 93122\nb2Zp 93123\nIGhhbW1lcmVk 93124\nIEVzdG8= 93125\n4oCZQnJpZW4= 93126\nIMWa 93127\nIGRlbWk= 93128\nINGB0LvQtdC0 93129\nIENsaW50b25z 93130\n7IWY 93131\n5aSn5bCP 93132\nRUNI 93133\nIGFuYXJjaGlzdHM= 93134\nIEJldmVyYWdl 93135\nIGdvdQ== 93136\nIGJyaWJlcnk= 93137\nIHBpY2t1cHM= 93138\nIHViZXI= 93139\nIHN5bmVyZ3k= 93140\nZmNu 93141\nIEhlbnRhaQ== 93142\nIEJhc2VtZW50 93143\nIG1vcmI= 93144\nX2N1 93145\namFkaQ== 93146\nKHByb2o= 93147\nIEJpbmdv 93148\nX2NhdGU= 93149\nW2VtYWls 93150\nKlg= 93151\nX1NFUA== 93152\nIHByaW5jaXBpbw== 93153\ndXBkYXRpbmc= 93154\nLy99fQ== 93155\nLi4uKA== 93156\nIERPRQ== 93157\nIHpn 93158\nc2hhcGVz 93159\nPXRtcA== 93160\nQ3J1ZA== 93161\nIHdvcmtwbGFjZXM= 93162\nIHN0YWJpbGl6ZWQ= 93163\nIHRlbnRhbmc= 93164\nLnByb2R1Y3RJZA== 93165\nIFRyaWRlbnQ= 93166\nIG9yY2hlc3RyYXRlZA== 93167\nIEJ1Y2NhbmVlcnM= 93168\nX3RvbGVyYW5jZQ== 93169\naWdyYXBoeQ== 93170\nw7xsZXI= 93171\nINi1 93172\nQVE= 93173\nIGF0aGxldGljaXNt 93174\nCVNlcnZlcg== 93175\nZXdlZA== 93176\nRGlkRW50ZXI= 93177\nUmVnaXN0ZXJz 93178\nX2VtbHJ0 93179\nIGZ1bmN0aW9uYWxpdGllcw== 93180\nKGhkYw== 93181\nX21hcmtlcnM= 93182\nT3JlZ29u 93183\nKFN0cg== 93184\nIEdldEJ5SWQ= 93185\nIHp3YXJ0ZQ== 93186\nIE9DSQ== 93187\nIEphbWU= 93188\nX2NyaXQ= 93189\nIHN0b2NraG9sbQ== 93190\nCURpY3Rpb25hcnk= 93191\nX2NhcGFiaWxpdGllcw== 93192\nQ1RS 93193\nIG51bWE= 93194\nX2ZpcnN0bmFtZQ== 93195\nIE5TUmFuZ2U= 93196\nIG1vc3RyYQ== 93197\nIEFycml2YWw= 93198\nKElTZXJ2aWNlQ29sbGVjdGlvbg== 93199\nIHRlYXNwb29ucw== 93200\nIFNldFVw 93201\nCQkNCg0K 93202\nKGd1aWxk 93203\nLiJd 93204\nIG3hu5tp 93205\nYmZm 93206\nREFURVM= 93207\nKCldCgo= 93208\nIGh1bWFub2lk 93209\ndGhybw== 93210\nKGtsYXNz 93211\nIFZhZA== 93212\nZnNw 93213\nLVNhaA== 93214\nIFVTRVJOQU1F 93215\nIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncw== 93216\nIGxlc2lvbg== 93217\nX0RFTklFRA== 93218\nIFRISU5L 93219\ngqQ= 93220\nbWVudGFs 93221\nIHByZWNhcmlvdXM= 93222\nIE5vc2U= 93223\nIGNvbmNs 93224\nIHdpbGRmaXJl 93225\nIFRCcmFuY2g= 93226\nIEJBTQ== 93227\nL2Nzdg== 93228\nIE5BTg== 93229\nIENsZWFyYW5jZQ== 93230\nXEJsb2Nr 93231\nLmFubm90YXRl 93232\n5om+ 93233\nIFdISUxF 93234\nZ2VidW5n 93235\nPkxpc3Q= 93236\nc2ht 93237\nUm9zcw== 93238\nYWZk 93239\nW3RpZA== 93240\nUGVyUGl4ZWw= 93241\nKyhc 93242\nIEN5YW4= 93243\nIEtub3Q= 93244\nX3Zsb2c= 93245\nL3Zhcg== 93246\nW19f 93247\nIGhhc2htYXA= 93248\nKCk7DQ0K 93249\nIGFtYXNzZWQ= 93250\nIGRhdGVQaWNrZXI= 93251\nIFNhdG9zaGk= 93252\nX0NBUEFDSVRZ 93253\nIGJ1eg== 93254\nIE1pbmg= 93255\nU2V0Q29sb3I= 93256\nKz0nPA== 93257\nIEludmVudA== 93258\nb3JjYQ== 93259\naWdudW0= 93260\nIEFtcGg= 93261\nIHJlZmx1eA== 93262\nCiAgICAgICAgICAgICAgICAgICAgICAgIAo= 93263\ndWhu 93264\nKFRN 93265\nYWxsZXk= 93266\nIGxlZnRvdmVycw== 93267\nZmRj 93268\n4oCcVGhlc2U= 93269\nIGNyYXdsZWQ= 93270\nKFZvaWQ= 93271\naWd0ZQ== 93272\n8J+S 93273\nc2V0RGVmYXVsdA== 93274\nIEJlZ2lubmVy 93275\nUG9r 93276\nIEhMUw== 93277\nIGdhbWVJZA== 93278\nIEFtYmllbnQ= 93279\nX1BSRUQ= 93280\nLiJ9LAo= 93281\nw7xocnVuZw== 93282\nLlN5bmM= 93283\nIGludmU= 93284\nIE51cnNlcnk= 93285\nIGdsYXplZA== 93286\nq+yekA== 93287\nX2ZhdGFs 93288\nX2Rpc3BhdGNoZXI= 93289\nW10pDQo= 93290\nIGRldXRzY2hlbg== 93291\n6rGw 93292\nU2hhcGVz 93293\nIGlycmV2ZXJzaWJsZQ== 93294\nX3Blcw== 93295\nX2VzYw== 93296\nIHRoZXJtb21ldGVy 93297\n44OU44O8 93298\nX3NxcnQ= 93299\nIl09PSI= 93300\nIGN1bG1pbmF0aW9u 93301\nV29yZFByZXNz 93302\nIGxldmVu 93303\nVmVydGV4VXZz 93304\nIEhheXdhcmQ= 93305\nIEFzc2V0SW1hZ2U= 93306\nIG1haXpl 93307\nIGNoaWNhZ28= 93308\nIHRhdg== 93309\nZXhwZW5zZXM= 93310\n0K0= 93311\nK2Y= 93312\nLiInIjsK 93313\nLVNB 93314\nIEtvdGE= 93315\nTWFpbkZyYW1l 93316\nLnNhbGU= 93317\nX0JV 93318\nIHN0cmVu 93319\nX2ZpbHQ= 93320\nL3ByaW50 93321\nKFBhY2tldA== 93322\nINC30LDQsg== 93323\nQWN0cw== 93324\n0LXQu9C10YQ= 93325\nIHJlbWF0Y2g= 93326\nIHJpZGRlbg== 93327\nIH0pKCk7Cg== 93328\nIGVuZG90aA== 93329\nIGNlcnRpZnk= 93330\nIFVJUGlja2VyVmlldw== 93331\nXE5vdGlmaWNhdGlvbnM= 93332\nCVRpdGxl 93333\nIGluZXF1YWxpdGllcw== 93334\nIE1vcmFu 93335\nIERhZW1vbg== 93336\nbGVzaWE= 93337\nIGhvcHBpbmc= 93338\nIGd1c3Rv 93339\nIEZpcmViYXNlRmlyZXN0b3Jl 93340\nIHBvbHlsaW5l 93341\nIHNwaWtlZA== 93342\nJSIpOwo= 93343\nIExBVElO 93344\nTGFiZWxUZXh0 93345\nIHN0cmFwb24= 93346\nX2ZpZA== 93347\nLXNwZWNpYWw= 93348\nYXJnZWQ= 93349\nIFNUSUxM 93350\nUXVhbGlmaWVkTmFtZQ== 93351\nLlJFUw== 93352\nI2M= 93353\nLndyaXRlbG4= 93354\nIEltbXV0YWJsZUxpc3Q= 93355\nIFRodW1i 93356\nIHNpbWQ= 93357\nRGVzY3JpY2Fv 93358\nLlNldFRleHQ= 93359\nIG5vbnByb2ZpdHM= 93360\nV2l0aGRyYXc= 93361\nLWVuY29kZWQ= 93362\nc2Jpbg== 93363\nIGFtb3J0 93364\nCWRk 93365\ncmlm 93366\nIHBhdGVybmFs 93367\nLk1hcEZyb20= 93368\nX2Fzaw== 93369\nIHJlY291cnNl 93370\nIGJhY2tzdG9yeQ== 93371\nCW1hbmFnZXI= 93372\nX0RHUkFN 93373\nIEJpaGFy 93374\naW50ZWxsaWdlbmNl 93375\nIHNraW1hZ2U= 93376\nKGVuY29kZXI= 93377\nIHN3aXJsaW5n 93378\nIEFwcGV0 93379\nX3NhbHQ= 93380\nIGF0dGU= 93381\nIFNRVUFSRQ== 93382\nIE5ldHo= 93383\nX3BhaW50 93384\nYXPEsQ== 93385\naXNjaQ== 93386\nRmxv 93387\nLWdvYWw= 93388\nLnNldFN0cm9rZQ== 93389\nIEF1c2Nod2l0eg== 93390\nIEFiZGVs 93391\nIGFuZXc= 93392\nIOWung== 93393\nIHRvdGFsUGFnZXM= 93394\nIHJlZmFjdG9y 93395\nIGNyZWF0aXZlbHk= 93396\nZW1heA== 93397\nb2RveHk= 93398\nX3R4bg== 93399\nLlNvY2tldHM= 93400\nIFJpZGxleQ== 93401\n4buxYw== 93402\nc2FtcA== 93403\nTWluTWF4 93404\nIHdvcnNlbmluZw== 93405\nb3VudGFpbnM= 93406\nYXJ0bmVy 93407\nLXByb2Y= 93408\nc2luZ3VsYXI= 93409\nPWlz 93410\nIEZFQw== 93411\nX0ZN 93412\nIOaIlg== 93413\nIENhdWdodA== 93414\nX1NDTA== 93415\nIGV4cG8= 93416\naW5mcmE= 93417\nIE1FUw== 93418\nY2hhcA== 93419\nYWx0ZQ== 93420\nYXJraW4= 93421\nL21M 93422\nIHNlbmREYXRh 93423\nIGZyYW7Dp2Fpc2U= 93424\nIHPDpg== 93425\nX0RFRklOSVRJT04= 93426\nKioqKioqCgo= 93427\nXEN1c3RvbWVy 93428\nIOKWiOKWiOKWiOKWiOKWiA== 93429\nIHBlcnBldHJhdGVk 93430\nIEZ1cmlvdXM= 93431\nIHRlbmdh 93432\nbGVhcmVk 93433\nVUxMRVQ= 93434\naW5pYw== 93435\nZWFyY2hCYXI= 93436\nPENhcg== 93437\nIFJlbmV3YWJsZQ== 93438\nIGNvbnRlbXBsYXRlZA== 93439\nL2Zvcm1hdA== 93440\nIGZvcmdpdmluZw== 93441\nLlN1YkVsZW1lbnQ= 93442\nUFVURQ== 93443\nLmNvbnRlbnRTaXpl 93444\nIHJlc3BlY3RmdWxseQ== 93445\n4oCcCgo= 93446\nIHBvaWduYW50 93447\ndXJpbGU= 93448\nfSkiCg== 93449\nc2VxdWVudGlhbA== 93450\nL2Zhc3Q= 93451\ncHJ1bmc= 93452\nIFN0dW5uaW5n 93453\nIEJZVQ== 93454\nIGNvbXBhcmVy 93455\nCXJk 93456\ndW5pY29ybg== 93457\nxrBh 93458\nLkdldEl0ZW0= 93459\nIHNlY3Rpb25hbA== 93460\nanVkZ2U= 93461\ndXh0YXA= 93462\nIHN1bmRheQ== 93463\nIHDDpA== 93464\nTWlubmVzb3Rh 93465\nIk4= 93466\nIGFwcGxpY2F0aW9uV2lsbA== 93467\nQU5HRVI= 93468\nIHJlYXNvbmVk 93469\nIFpFTkQ= 93470\nemFw 93471\nPWJhY2s= 93472\nb3NwaGF0ZQ== 93473\n6IqC54K5 93474\nIHRpdHRlbg== 93475\nIEFzc29j 93476\nQWN0aXZpdHlDcmVhdGVk 93477\nKVst 93478\nPyIKCgoK 93479\nIGpvdA== 93480\n2Lg= 93481\nIHVuY29tcHJlc3NlZA== 93482\nLklzREJOdWxs 93483\nIHZhc2U= 93484\nIGxvcmVt 93485\nIGVudHJlcHJpc2U= 93486\nIENvbnNlbnQ= 93487\n44Op44Oz 93488\nQnlWZXJzaW9u 93489\nIHF1aWVuZXM= 93490\nCWNvbnQ= 93491\nIEJsYWNraGF3a3M= 93492\nIEJsYXNpbw== 93493\nIHRhbmtlcg== 93494\nIHN0YXJ0dGltZQ== 93495\nIFNlYXM= 93496\ncGlvcw== 93497\nLlNwbGl0Q29udGFpbmVy 93498\nY29tcGV0aXRpdmU= 93499\nIHBCdWZmZXI= 93500\nIGNvbnNlbnRpbmc= 93501\nLmFkZE9ic2VydmVy 93502\naXRjaGVk 93503\nIG1pc2NlbGxhbmVvdXM= 93504\nIFRvcHM= 93505\nCWxw 93506\nY21kcw== 93507\nLmRlcGFydA== 93508\nIGZOYW1l 93509\nCWJlc3Q= 93510\nOlA= 93511\nIHN3YXRo 93512\nIHZva3M= 93513\nYWxsb24= 93514\nIEh0bWxXZWJwYWNrUGx1Z2lu 93515\nLmxvZ2dlZElu 93516\nYnVja2V0cw== 93517\nIGhvbW9waG9iaWM= 93518\nIHN1YmR1ZWQ= 93519\nIG1lc3NhZ2Vib3g= 93520\nV2hhdHNBcHA= 93521\nIGRpc3NpcA== 93522\nIE1BTlVBTA== 93523\nTElLRUxZ 93524\ndGVzdGRhdGE= 93525\nLU9jdA== 93526\nRXhpdGVk 93527\nIFRhc21hbmlh 93528\nbGFj 93529\nIHRow7RuZw== 93530\nU3Rvcmllcw== 93531\nIGJpb2NoZW1pY2Fs 93532\nb3JyZQ== 93533\nIGVjbGlwcw== 93534\nIEFzc2VtYmx5UHJvZHVjdA== 93535\ncnRsZQ== 93536\nIFdpbGhlbG0= 93537\ncGl6emE= 93538\nX0RI 93539\nY29uag== 93540\nIHB1ZWJsbw== 93541\nIGxpcXVl 93542\nIGN1cGlk 93543\nIEFjdGl2aXR5Q29tcGF0 93544\nLlNt 93545\nIl19 93546\nbWFpbGJveA== 93547\nLm9wdFN0cmluZw== 93548\nLW9i 93549\nIE1hdWk= 93550\nYXRhaXJlcw== 93551\nIG1lcnJ5 93552\nUm5k 93553\nIGNhcmFjdGVyw61zdGljYXM= 93554\nVHJv 93555\nKGNu 93556\nLmxk 93557\nLXBvaW50cw== 93558\nLnNi 93559\nIHZlag== 93560\nIGNhcmVnaXZlcg== 93561\nIG5hdQ== 93562\nRElSRUNUT1JZ 93563\nKGFuZw== 93564\nKC4p 93565\nIGV4cGxhbmF0b3J5 93566\nZWxzZXk= 93567\nIE92ZXJuaWdodA== 93568\nIGxhaXNzZQ== 93569\nIFJBVEU= 93570\nIEdvdw== 93571\nUmVjb2duaXRpb25FeGNlcHRpb24= 93572\naWNoZXJ0 93573\nIHJldm9sdXRpb25z 93574\nJGNhdGVnb3J5 93575\nIHVuZGVmZWF0ZWQ= 93576\nL2NvbW11bml0eQ== 93577\nLXBhcnRz 93578\nLWFwcGxpY2F0aW9u 93579\nK0E= 93580\nL3N3ZWV0YWxlcnQ= 93581\nIEtt 93582\naWxhdGVk 93583\nYXRhdA== 93584\nUEFU 93585\nxI1l 93586\nIFRlYw== 93587\nLm9uQWN0aXZpdHlSZXN1bHQ= 93588\nXFdlYg== 93589\nIEx1Zw== 93590\nb3ZvbHRh 93591\nIGFsdHJ1 93592\naWd5 93593\nIGLEmWTEhQ== 93594\nIGFjdGl2YXRpb25z 93595\nIGF1ZGl0aW5n 93596\nRVJHRQ== 93597\nIOiLpQ== 93598\nQ2FybG9z 93599\nIGtJbnN0cnVjdGlvbg== 93600\nbWluZXI= 93601\nIH19Lw== 93602\nQW5kSGFzaENvZGU= 93603\nIEJvdXJib24= 93604\nLnByb2Y= 93605\nIGltcHJpbWly 93606\nIEZlcmRpbmFuZA== 93607\n0LzQtdC90YI= 93608\nL3t9Lw== 93609\nIENsYWly 93610\nIE9uQ29sbGlzaW9u 93611\nc2FsZG8= 93612\ncmFpc2Vk 93613\nIEFCT1ZF 93614\nKCk9Pg== 93615\nIGRldXRzY2hsYW5k 93616\naGliaXRlZA== 93617\nRXh0cmVtZQ== 93618\nL2hvb2tz 93619\nIGRvdXQ= 93620\nIFZPQw== 93621\nZXRob3Zlbg== 93622\nUE1D 93623\nIHJlc3RhcnRpbmc= 93624\nIFNDTg== 93625\nIEVP 93626\nIERKcw== 93627\nUGFzc3dvcmRGaWVsZA== 93628\nLkFjY2Vzc2libGU= 93629\nCWJ1cw== 93630\nU1RSVUNUSU9OUw== 93631\nIGxhdGVu 93632\nIFNOQVA= 93633\nX0hFUlNIRVk= 93634\nIG9uc3RhZ2U= 93635\n5bCP5pe2 93636\nIHNhaWxvcg== 93637\nIEN1cnNv 93638\nIGltcHJvdmlzZWQ= 93639\nIGdlbmVyYWxpemU= 93640\nIGJ1ZW5v 93641\nIGNlcmVtb25pYWw= 93642\nIENOUw== 93643\nIHBpZ2Vvbg== 93644\nbXNw 93645\nL0FJRFM= 93646\nbGluZUVkaXQ= 93647\nIEZpbmFuY2luZw== 93648\nIGpUYWJsZQ== 93649\nIGJvdHRvbXM= 93650\nIFRleHRJbnB1dFR5cGU= 93651\nIG1laXNqZQ== 93652\nLXNpZ25lZA== 93653\nIEdyZWVudmlsbGU= 93654\nb3BoaWxpYQ== 93655\nSWNvbk1vZHVsZQ== 93656\nIGNsYW5kZXN0 93657\nZW1haW4= 93658\nU0NBTg== 93659\nX1RJTUVT 93660\nIGxlY2tlbg== 93661\nKGNhbmNlbA== 93662\nIGVjc3Rhc3k= 93663\nLk1VTFQ= 93664\nIG1vZXRlbg== 93665\nIGFwcHJvcHJpYXRpb25z 93666\nIFFMRA== 93667\nIEd1aWw= 93668\nIHRyYXBwaW5n 93669\neERB 93670\nIGvDtmxu 93671\nZW51bXM= 93672\n4oCcVG8= 93673\ncG9ydG8= 93674\nbmluZ2Fy 93675\nIFRPTw== 93676\nLVNU 93677\nIE1hdGhz 93678\nIGt1cnM= 93679\nIFJFUEw= 93680\nX2NvbnRyaWI= 93681\nIFBoeQ== 93682\ncmFuZw== 93683\nLm1hdmVu 93684\nLWZvbGxvdw== 93685\nIC0tLS0tLS0tLS0t 93686\nxLHEnw== 93687\nX3dpbm5lcg== 93688\nLkNyaXRlcmlh 93689\nKGRhdGFTb3VyY2U= 93690\nIHNldElucHV0 93691\nIFRJTUVTVEFNUA== 93692\nb3BlcmFuZHM= 93693\nZ2V0V2luZG93 93694\nLmZhY2VWZXJ0ZXhVdnM= 93695\nIEludmVzdGluZw== 93696\nVnk= 93697\nIHBlcnNlY3V0ZWQ= 93698\n4bq/dQ== 93699\nIFBsdW1iaW5n 93700\nT05HT0RC 93701\nRXZpZGVuY2U= 93702\nIFN0cm9t 93703\ncXVvdGE= 93704\nTGl2ZXJwb29s 93705\nCWF0dGFjaw== 93706\nbWluaW1hbA== 93707\nIG9uS2V5RG93bg== 93708\nIG1vZHVsZUlk 93709\nIFZlcmFuc3Q= 93710\nbW9ydA== 93711\nYWNpc3Rz 93712\nIE1BU1M= 93713\nX1VOREVS 93714\nLmdldFJ1bnRpbWU= 93715\nRU5USUNBVElPTg== 93716\nUk9LRQ== 93717\nIHNjYWxlWA== 93718\nIHNlcnRh 93719\nIEZyZXF1ZW50bHk= 93720\nX1RSQU5TRk9STQ== 93721\nIHR3aWxpZ2h0 93722\nIE1jS2Vuemll 93723\nbGVkZ2Vk 93724\nIEB7QCI= 93725\nX0FDVElW 93726\nIGhvb2tlcnM= 93727\nPWRlZmF1bHQ= 93728\nIHdhbG51dA== 93729\nIHVzZU5ld1VybFBhcnNlcg== 93730\nIENoZWVy 93731\nIHdyb25nZnVs 93732\nbmlv 93733\nYnRj 93734\nLnN0cmlkZQ== 93735\nIHN1Y2Nlc2Z1bGx5 93736\nIFRyb2xs 93737\naWZpY2lv 93738\nLmNvbmQ= 93739\nIGhlYXBz 93740\nX1BIT1RP 93741\nPEFkZHJlc3M= 93742\nIFN0aWNreQ== 93743\nIG5pZ2h0dGltZQ== 93744\nIGRhbmRv 93745\nIEJJTEw= 93746\nINC+0YLQstC10YI= 93747\nRGV0ZXJtaW4= 93748\nIGZ6 93749\nKHNpZ25hdHVyZQ== 93750\nIHZpbmRlbg== 93751\nLkNPTk5FQ1Q= 93752\ncnVpc2U= 93753\nIHh1 93754\ncHJldmVudA== 93755\nRk9Y 93756\nVUlBcHBsaWNhdGlvbkRlbGVnYXRl 93757\nU3BsYXNo 93758\nIGVtYnJvaWRlcmVk 93759\nIEhpbGZl 93760\nLnNoYWRlcg== 93761\nIGRvdWJ0ZWQ= 93762\nUmVzcG9uc2VTdGF0dXM= 93763\nIHVuc3RvcHBhYmxl 93764\ndW5sb2Fk 93765\nKyJd 93766\nImxhYmVs 93767\nIGZyZWVsYW5jZXI= 93768\nRGlyZWN0ZWQ= 93769\nIHZvcmhhbmQ= 93770\nIFNubw== 93771\nZXhpc3RlbmNl 93772\nb3JkaWFs 93773\nemFn 93774\nLkFnZQ== 93775\nIHNwYXducw== 93776\nIFBTRw== 93777\nc3RpdHV0aW9ucw== 93778\nIHNpZ2h0aW5n 93779\nLXRhbGs= 93780\nINGB0L7RhdGA0LDQvQ== 93781\nZW5lcmltYQ== 93782\nIEJlbnRvbg== 93783\nX1N0b3Jl 93784\nVHJhbnNwYXJlbnRDb2xvcg== 93785\nIEV4cGxvc2lvbg== 93786\nX0lTUw== 93787\nQ2hlY2twb2ludA== 93788\nIGRlZmxhdGU= 93789\n0JLRi9Cx 93790\nLXRyYW5zZmVy 93791\nIEJhYmllcw== 93792\nIGltYQ== 93793\nLnVzYWdl 93794\nIG5lZ2F0aXZpdHk= 93795\nIEV4dHJlbWVseQ== 93796\na2o= 93797\nRG93bmxvYWRlcg== 93798\nCWFjdA== 93799\nW2NoYXI= 93800\nTm9ybWFscw== 93801\nX3JlZmVyZW5jZXM= 93802\nIGRyYWNvbg== 93803\n4bulYw== 93804\nX1RSTlM= 93805\nY29tcGFueUlk 93806\nIFZlcmQ= 93807\nYW5pbw== 93808\nIE1hdGNoZXJz 93809\nKHJlbGF0aXZl 93810\nIHJlZWxlY3Rpb24= 93811\nLkhF 93812\nVGF1 93813\nINGB0YLRgNC+0LrQuA== 93814\nIE1ldGFscw== 93815\nIENvY2t0YWls 93816\nIGFwcmVuZGVy 93817\nX3ByZWZlcmVuY2U= 93818\nLlNjaGVtZQ== 93819\nIGdsR2V0VW5pZm9ybUxvY2F0aW9u 93820\nVXNpbmdFbmNvZGluZw== 93821\n0YDQsw== 93822\nICJdIik7Cg== 93823\nTGVhZGVycw== 93824\nJ8OqdHJl 93825\nX0RlbGF5 93826\nUHJvY2Vzc2Vz 93827\naWN1bHR1cmU= 93828\nXCI6e1wi 93829\n4oCUIg== 93830\nRW1vamk= 93831\nLWdyb3c= 93832\nIENDRA== 93833\nY29tcG9zZWQ= 93834\nTWFpbnRlbmFuY2U= 93835\nIFJ5emVu 93836\nKGFn 93837\nLnByb2I= 93838\nIFNpbmF0cmE= 93839\nIGhvcnJlbmQ= 93840\nIE1vdW50ZWQ= 93841\nX1BFRVI= 93842\nIGN1aw== 93843\nIHPDuGtlcg== 93844\nIFF1YXI= 93845\nX1JFU09MVVRJT04= 93846\nJ2VhdQ== 93847\nIGJvdXJib24= 93848\nIGF0SW5kZXg= 93849\nL3BvbA== 93850\nIOq0gA== 93851\nCXB3 93852\nfSl9Cg== 93853\nLmZvcm1EYXRh 93854\nIHVkZW4= 93855\nIHJvYXJpbmc= 93856\nTm90aWZpY2F0aW9uQ2VudGVy 93857\nIGNsdXN0ZXJlZA== 93858\nIHBhaXJ3aXNl 93859\nbXVsdGlsaW5l 93860\nR2FtZURhdGE= 93861\nLkxhcmdl 93862\nKSc6 93863\nINGB0LXRgNCy0LXRgA== 93864\nIFVJTWFuYWdlcg== 93865\nU3Zj 93866\nIFBsYXlzdGF0aW9u 93867\nLk1vcmU= 93868\nLnF1YWxpdHk= 93869\nIGNvbmZpZ0ZpbGU= 93870\nLWNvbnRhaW5pbmc= 93871\nIEdvYXQ= 93872\nZW5jaW9u 93873\nIGxpa2VuZXNz 93874\nLXVzaW5n 93875\nIHNlYXNpZGU= 93876\n4bqpdQ== 93877\nYW50aWNpcGF0ZWQ= 93878\nRm9sZGVycw== 93879\nLUxldmVs 93880\nb3BjaW9u 93881\nKXByZXBhcmVGb3JTZWd1ZQ== 93882\nPigpKQ== 93883\nPWFkZA== 93884\nXGdyaWQ= 93885\nIHln 93886\nX0RSSVZF 93887\nIEdldE5hbWU= 93888\nLkRBTw== 93889\nIGhhbm4= 93890\nCWNhdA== 93891\nIHZpZ24= 93892\nIEhlbGxlcg== 93893\nIENSRUFURUQ= 93894\nYmVyb3M= 93895\nYnV0dA== 93896\nIGJlbmRz 93897\nIExlZXI= 93898\n0KY= 93899\nIFNNUA== 93900\nVmVjdA== 93901\nIG9iamVjdFR5cGU= 93902\nOmFzeW5j 93903\nIGNvbXBldGVuY3k= 93904\nIFF0QXdz 93905\nTG91 93906\nL2NhdA== 93907\nUHJvc3RpdA== 93908\nLXZlcw== 93909\nCXR2 93910\nIEVJ 93911\nQW5kV2FpdA== 93912\nIFRPT0w= 93913\nfSo= 93914\nX1Jlcw== 93915\nIGFsaWdubWVudHM= 93916\n7KGw 93917\nIENsYW1w 93918\nLXBhZA== 93919\nIHdyaXRlRmlsZQ== 93920\nIEFwcHJlYw== 93921\n4oCZYXV0cmVz 93922\ndWRhZGVz 93923\nIGx1Z2FyZXM= 93924\nc3BlbmRlcg== 93925\nW2ltYWdl 93926\nRVhJU1Q= 93927\nIGRlY2VpdmU= 93928\nIGh1bnRz 93929\nX1ZPSUNF 93930\nX0RY 93931\nQ0FD 93932\nICgoJw== 93933\naXNrcw== 93934\nLGZpbGVuYW1l 93935\nIGxlYW5z 93936\nSW5wdXREaWFsb2c= 93937\nRGF0YUNvbnRyYWN0 93938\nIHNtb290aGVk 93939\nIHJlY3J1aXRlcnM= 93940\nIHRhbmdsZWQ= 93941\nX1RhYg== 93942\nIEZpbGVBY2Nlc3M= 93943\nWUM= 93944\nIHZY 93945\nPGR5bg== 93946\nTGV4ZXI= 93947\nIOKYhg== 93948\nIGdsR2Vu 93949\nVGVtcG9yYWw= 93950\nIEFURg== 93951\nYW5rbw== 93952\nVXNlckNvZGU= 93953\nIEtvdGxpbg== 93954\nLi4KCgoK 93955\nRU5DRUQ= 93956\nLnVudHJhY2tlZA== 93957\nX21y 93958\nIHdhdmVsZW5ndGhz 93959\nIGRpY2hv 93960\nIGltdQ== 93961\nX2NyZQ== 93962\nW0o= 93963\nX0RG 93964\nIGF0dGFpbm1lbnQ= 93965\nIGxpdGVycw== 93966\nW2tleXM= 93967\nIGxpc3Rhcg== 93968\nSHR0cHM= 93969\nIGJyZXdlcnM= 93970\nIGFjb21wYcOx 93971\nIHRvYXN0ZWQ= 93972\nLmZyaWVuZA== 93973\nIHJlbHU= 93974\nIFBzeWNoaWM= 93975\nTWFuaXA= 93976\nZG5h 93977\nUHJp 93978\nLWZsYXNo 93979\nKGFydGlzdA== 93980\nIEtvdg== 93981\ncHJlc2VydmU= 93982\nX3BlbWI= 93983\nLnNldFByb2dyZXNz 93984\nIGR1c2s= 93985\nIGNhbm5hYmlub2lkcw== 93986\nIEt1bmQ= 93987\nIENvdW50aWVz 93988\nIO2OmOydtOyngA== 93989\nIHJlbmFtaW5n 93990\nIFJ1c3Nv 93991\nTlNTZXQ= 93992\nKEVYUFI= 93993\n5YW25LuW 93994\nRGlhZ3JhbQ== 93995\nLGxhc3Q= 93996\nKHdpdGhEdXJhdGlvbg== 93997\nIGluZGVidGVk 93998\nIERpY2tlbnM= 93999\nIEFscHM= 94000\nIERlZ3JlZXM= 94001\naWRhcg== 94002\nLWJsb29k 94003\nK29mZnNldA== 94004\nIEh1ZA== 94005\nb3VuZGVy 94006\ndWxuZXJhYmxl 94007\nIHByaW8= 94008\nYmxpbmQ= 94009\nKHBhY2s= 94010\nIG5pZ2h0bGlmZQ== 94011\nIGlsbHVzdHJhdGluZw== 94012\nIG51dHNoZWxs 94013\nIGJyb2FkY2FzdGVycw== 94014\nIGNvbXBhbnlOYW1l 94015\naXRvcmU= 94016\nLnJpZ2h0QmFyQnV0dG9uSXRlbQ== 94017\nYm90ZQ== 94018\nIFBJVA== 94019\nLXNjcm9sbGJhcg== 94020\nIHdpbmR5 94021\nIFFNYWluV2luZG93 94022\naHVl 94023\nLmVwb2No 94024\nIGNhbWVy 94025\nIENMVUI= 94026\naWZhcg== 94027\nVW5hdmFpbGFibGU= 94028\nLXF1b3Rl 94029\nIEdyYXo= 94030\nIHZhbHU= 94031\nX01BVEVSSUFM 94032\nIHBlbnk= 94033\nIHRyYXR0 94034\nIGxpY2tlZA== 94035\nCWNhbg== 94036\nIFRhaXdhbmVzZQ== 94037\nUGFnZUluZGV4 94038\nLlRpcG8= 94039\nX1JlZA== 94040\nIHZmcw== 94041\nX3RyYW1wb2xpbmU= 94042\nIE1QUw== 94043\nIFBlYW51dA== 94044\nIExvY2tlZA== 94045\nCUFU 94046\nanNwYg== 94047\nX05PREVT 94048\nJ1dl 94049\nIENvbnZlbmllbnQ= 94050\nX3N1Y2Nlc3NmdWw= 94051\nK3o= 94052\nWUxlYWY= 94053\nIHBlZGlncmVl 94054\neHo= 94055\nIHNhbHZhcg== 94056\nX0Rlc2M= 94057\nIG5lc3Rh 94058\nIGhhcmRjb2RlZA== 94059\nLmdvbGQ= 94060\nLkltYWdlRmllbGQ= 94061\nX0JT 94062\nTEs= 94063\nQ2hvY29sYXRl 94064\nLlN0YXJ0dXA= 94065\nIGFuZWNkb3Rlcw== 94066\nLk1h 94067\nP10= 94068\nL3RvcGlj 94069\nLlNjcm9sbEJhcnM= 94070\n0YHRgtCy0LA= 94071\nIE1PTQ== 94072\nIHFvcw== 94073\nYXJ5YW5h 94074\nw6RjaHN0 94075\nIE1jR2lsbA== 94076\nIEVEVUM= 94077\nKHBvc3Rz 94078\nIEVudHdpY2tsdW5n 94079\nX3NraWxscw== 94080\nLWd1YXJk 94081\nIHRleHRpbGVz 94082\nfHVuaXF1ZQ== 94083\nIEFyaXRobWV0aWM= 94084\nTG9hZElkZW50aXR5 94085\nKTt9Cgo= 94086\nIGFzc3VyZXM= 94087\nV2lsZGNhcmQ= 94088\nIGRlZmF1bHRlZA== 94089\nIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbg== 94090\nIFRvbWF0bw== 94091\nLlN1bW1hcnk= 94092\nISIu 94093\ndXRoZXJmb3Jk 94094\nIGxvb3Bob2xl 94095\nIGNtYWtl 94096\nLWRhdA== 94097\nIHJhZ2F6em8= 94098\nIGNhcGl0YWxz 94099\nIEltcG9ydGFuY2U= 94100\nIER1bmdlb25z 94101\nX3pvbmVz 94102\nLnNhdA== 94103\nICAgICAgCiAgICAgIAo= 94104\nY2F0ZWdvcmlhcw== 94105\nIGRhdGF0YWJsZQ== 94106\nIG5hamxl 94107\nKGdw 94108\nLXJlbg== 94109\nIHBhbmlja2Vk 94110\nIFNreWw= 94111\nIFFVSUNL 94112\ndmFsdWVPZg== 94113\nU3RhdGlzdGlj 94114\nIGRlbWVhbm9y 94115\nbmRlcm4= 94116\nIEFwcGVhcnM= 94117\nUHJhZ21h 94118\nX3Bhc3Q= 94119\nSGFzaHRhYmxl 94120\nIHRoYW5raW5n 94121\nLmNzcmY= 94122\nIHBhdmU= 94123\nIFZpY3RpbQ== 94124\nIFDDpQ== 94125\nRmlyc3RuYW1l 94126\nQ0FURUdPUlk= 94127\naWxlc3RvbmU= 94128\nJyktPl9fKCc= 94129\nIGluY2FwYWM= 94130\nU3RyZWFtV3JpdGVy 94131\nIGNvbW11bmlvbg== 94132\nX3N0ZGVycg== 94133\n6Ieq5rK7 94134\nIGh1bWFuaXRpZXM= 94135\nINC70Y4= 94136\nIFBhcmFz 94137\nbG9mZg== 94138\nSGVhZGVyVGV4dA== 94139\nZ3JlZ2F0ZWQ= 94140\nLlhSVGFibGVDZWxs 94141\nIGVudGl0eUlk 94142\nIE1hc3Rlcnk= 94143\nb2xkdA== 94144\nJykpKTsKCg== 94145\naHVtaWRpdHk= 94146\nLi4uIik7Cgo= 94147\nRGVsdGFUaW1l 94148\nIG1rdGltZQ== 94149\nUGhvdG9u 94150\nIHBlbnNhcg== 94151\nc2NhbGluZw== 94152\nX3llbGxvdw== 94153\nX211bHRpcGx5 94154\nIFZ1bGNhbg== 94155\nIFBlYXJjZQ== 94156\nX2xj 94157\nLWV4Y2x1c2l2ZQ== 94158\nSXNVbmljb2Rl 94159\nIHBhZHI= 94160\nX1BDSUU= 94161\nIGdsaW1wcw== 94162\nIHJhbXBhZ2U= 94163\nIFBhZ2luYXRvcg== 94164\nIGNvbnZleWluZw== 94165\nbm9yZQ== 94166\nX2RldGFjaA== 94167\nJ10hPSc= 94168\nIGJvbmE= 94169\nCUNvbg== 94170\nTmF6 94171\nIHNlZ3VpbnQ= 94172\nIG1pZXN6 94173\nIGVzb3M= 94174\nICcvJykK 94175\nIGZhaXRoZnVsbHk= 94176\nIGJla29t 94177\n0LDQutGB 94178\nd2hlbG1pbmc= 94179\nLnR3bw== 94180\nIFNDRQ== 94181\nLW5h 94182\nICgpew== 94183\nIERhbWVu 94184\nX3RndA== 94185\nYWRhbGFmaWw= 94186\nIE1NSQ== 94187\nVGhpbg== 94188\nIGRlcHJlY2lhdGlvbg== 94189\nIGFic2VudGVl 94190\nIHNhbGFyaW8= 94191\nIFNvbWVib2R5 94192\nIFNsb2Fu 94193\nIGVyZm9sZ3JlaWNo 94194\nOk5TTG9jYWxpemVkU3RyaW5n 94195\nIGdlaMO2cnQ= 94196\nIGVtbw== 94197\nIExhZ3VuYQ== 94198\nw6FzYQ== 94199\naXN0cmF0ZXM= 94200\nUmFpc2U= 94201\nIEFzdHJvcGg= 94202\nICdcXCc= 94203\nX3BlZA== 94204\nIFRIUk9VR0g= 94205\nIE5pZXR6c2NoZQ== 94206\nZW5lcmF0aW5n 94207\nb3BsYXllcg== 94208\nIHJvZGVudHM= 94209\nw7xobA== 94210\nR2FtZU1hbmFnZXI= 94211\nIEhlYWRlckNvbXBvbmVudA== 94212\nIG1pbGFu 94213\ncXVlZW4= 94214\nIFBPTEw= 94215\nIEx5bWU= 94216\nIEJyaWdncw== 94217\nZWNlcg== 94218\nd2Fnb24= 94219\nLkRFU0M= 94220\nIGdsQmVnaW4= 94221\nU3RhdGVtZW50cw== 94222\nZXRyaQ== 94223\nIG1vY2tlcg== 94224\nIEJsdWVwcmludFJlYWRPbmx5 94225\nL2NvbnRlbnRhc3Npc3Q= 94226\nZW1hYWt0 94227\nL2xvYWRlcg== 94228\nX2xvd2VyY2FzZQ== 94229\nY2l2aWw= 94230\nX3ZhbG9y 94231\nX0dsb2JhbA== 94232\nIGFkcg== 94233\naXRpemVu 94234\nLlNpZGU= 94235\nIEVtYmxlbQ== 94236\nIHRoaXJkcw== 94237\nX1NIQVBF 94238\nUmVncmVzc29y 94239\nUFlUSE9O 94240\nIHBzeWNob3RpYw== 94241\nIGN2cw== 94242\nIEFwcGxpY2F0aW9uVXNlcg== 94243\nIGFsdW5vcw== 94244\nVG9nZ2xlQnV0dG9u 94245\nIG5nYQ== 94246\nIG3Do2U= 94247\nYWR2ZXJ0aXNlbWVudA== 94248\n5YiG5Lqr 94249\nLm92 94250\nIEFPTA== 94251\nUkVX 94252\nINin2LPYqg== 94253\nIEdpbm55 94254\nIC8vLy8vLy8vLy8= 94255\nU29uZ3M= 94256\nYWNpYw== 94257\nQ01Q 94258\nIHJlY29nbml6ZXI= 94259\nIHDDq3I= 94260\nRElD 94261\nO1wiPg== 94262\nIGNsb3Q= 94263\nOkV2ZW50 94264\nLlRP 94265\nIEN1cnNvcnM= 94266\nXFN0b3JhZ2U= 94267\nIElvbmljUGFnZQ== 94268\nX2pldA== 94269\nKEJpdENvbnZlcnRlcg== 94270\nIGNoaWxkaXNo 94271\nVHJhZGVy 94272\nPEhUTUxJbnB1dEVsZW1lbnQ= 94273\nX0ZSRVFVRU5DWQ== 94274\nPSI7Cg== 94275\neXN0YWNr 94276\nSnVy 94277\nIOmU 94278\nIHRjYg== 94279\nIHJlY2liaXI= 94280\nLnN6 94281\nIO2BtOuemOyKpA== 94282\nUEVSU09O 94283\nbm92YQ== 94284\nIGNvZXI= 94285\nIE1haG1vdWQ= 94286\nIFdvcmtwbGFjZQ== 94287\nIiIiKSwK 94288\nLlBhZ2VTaXpl 94289\nZ2V0Um9vdA== 94290\nKGJhc2VVcmw= 94291\nW1U= 94292\nIE1DUw== 94293\nIENsYXJrc29u 94294\nLnZvbA== 94295\nICIifQo= 94296\nIHBldXg= 94297\nIFByb2R1Y3RTZXJ2aWNl 94298\nIG1vbmRheQ== 94299\nIFRlc3REYXRh 94300\nIE1hdWw= 94301\nIHN0cm5jbXA= 94302\nIHNob3BwZXI= 94303\ndGhlb3J5 94304\nIGV0aXF1ZXR0ZQ== 94305\nbGljZW5jZQ== 94306\nc2NhbA== 94307\nLWNsdXN0ZXI= 94308\nIGhpc3TDs3JpYQ== 94309\nIFN1YnRyYWN0 94310\nIGZpYmVyZ2xhc3M= 94311\nX2xhc3RuYW1l 94312\nIFJld3JpdGU= 94313\nL3RvZG8= 94314\nIG92ZXJmbG93aW5n 94315\nIEdhdXNz 94316\nb2theQ== 94317\nIGNsdW1zeQ== 94318\nKHh5 94319\nIGV4ZW1w 94320\nYW5hbHl6ZQ== 94321\nLXRpY2tldA== 94322\nbmluZQ== 94323\nIERlYWRwb29s 94324\nIGNvbHVt 94325\nIEpL 94326\nIFtdLA0K 94327\nIEFzcGVu 94328\nIG1hbGlnbmFudA== 94329\naMO1ZXM= 94330\nU2NhbGE= 94331\naW5uZQ== 94332\nIENPTlNUQU5UUw== 94333\nX1ByaWNl 94334\nIyUl 94335\nIGFyc2No 94336\nIE5TQXR0cmlidXRlZFN0cmluZw== 94337\nIEZpbGVUeXBl 94338\nYWxsb2NhdGlvbg== 94339\nX3Npbmd1bGFy 94340\nKFBvaW50ZXI= 94341\nYW5uaWVz 94342\nU3RvcmVk 94343\nICc7Cgo= 94344\n4oCZZXg= 94345\nZHJz 94346\nQnJpZ2h0bmVzcw== 94347\nL09S 94348\nVGV4dGJveA== 94349\nIGtuYWNr 94350\nIGplbmlz 94351\nIG9jYXM= 94352\nZGF0YXA= 94353\nIGdhbWVUaW1l 94354\nIOCw 94355\nbmR4 94356\nIEVWVA== 94357\nQnlUZXh0 94358\nIGF0dHJpYnV0ZU5hbWU= 94359\nIGp1Z2Fy 94360\nX3NlcXM= 94361\nIEZFQVRVUkVT 94362\nOmRhdGU= 94363\nZmJl 94364\ncmlwcGVy 94365\n56iN 94366\nLkV4cHI= 94367\nVXJiYW4= 94368\naWRvdA== 94369\nIG9ibGl2aW91cw== 94370\nKERiQ29udGV4dA== 94371\nQ2Fyb2w= 94372\nKCcsJywk 94373\nIEJyaWxsaWFudA== 94374\na2Fk 94375\nY2VudHJhdGlvbg== 94376\nIGt1aw== 94377\nIE1BTkFHRU1FTlQ= 94378\nX1dFQVBPTg== 94379\nIGppaGFkaXN0cw== 94380\nIGVudHJlZw== 94381\nIGRvxJ8= 94382\nIGFwcGVuZGluZw== 94383\nIFpp 94384\nX2N0eHQ= 94385\nIHF1YWRyYW50 94386\nZWxlbWVudFR5cGU= 94387\nPWltZw== 94388\nYnJ1YXI= 94389\nSUNBU1Q= 94390\nIGludGVsbGVjdHVhbGx5 94391\nLkFubm90YXRpb24= 94392\nIGNhbXBhaWduZXJz 94393\nLkRhdGFHcmlkVmlld0F1dG9TaXpl 94394\nIMWfZWs= 94395\nIC9eKA== 94396\nLkRhdGFUYWJsZQ== 94397\nIHdlYmxvZw== 94398\nKGxpYnJhcnk= 94399\nIEZ1cw== 94400\nIE9TVA== 94401\nX1Bhc3N3b3Jk 94402\nIEJ1Y2tsZXk= 94403\naG9mZg== 94404\nQWxpZ25lZA== 94405\nX1JlYWw= 94406\nRU5USUM= 94407\nL2dyYXBocWw= 94408\nIFdlZWQ= 94409\nIExTQg== 94410\nb2NjYXNpb24= 94411\nYWRkYWZp 94412\nTGV0cw== 94413\nKCJg 94414\nIHdpZGVu 94415\nKHZpc2l0b3I= 94416\nICJcCg== 94417\nQU5URQ== 94418\nLWNhbXB1cw== 94419\nLUJhcg== 94420\nY2FtZWw= 94421\nRm10 94422\nOmRlc2NyaXB0aW9u 94423\nLmFyZQ== 94424\nIEFuYXN0 94425\nIExvbmdlcg== 94426\nc2VyaW91cw== 94427\nIGRhaGVy 94428\naXp6ZXI= 94429\nTXVsdGlwbGljaXR5 94430\nIEhvbGxhbmRl 94431\nIEFubm90YXRpb25z 94432\nKCk/ 94433\nIHByb3Rlc3Rlcg== 94434\nIFVyZHU= 94435\nIHNwZWNpYWx0aWVz 94436\nX2x5 94437\nQ2Fk 94438\nYW5udA== 94439\nanNw 94440\nIGpvZQ== 94441\nKXI= 94442\nIFBlcnNpc3Q= 94443\nIG9ibA== 94444\nIGRlYWRsb2Nr 94445\nIHNlcmk= 94446\nUmVsYXRpdmVUbw== 94447\nIFl1cw== 94448\nKFByaW50 94449\nYWJpbGlh 94450\nIHVucHJvdGVjdGVk 94451\nIEFTSUM= 94452\nLk5vbWU= 94453\nIFdlYkNsaWVudA== 94454\nIElUVg== 94455\nw7xybmJlcmc= 94456\naXRvcmk= 94457\nU2lnbmluZw== 94458\nIFJlYWRvbmx5 94459\nIGVsZHJl 94460\nIENoZWNrZWQ= 94461\nYWxudW0= 94462\nU291cmNlVHlwZQ== 94463\nbGV4aWNhbA== 94464\nIGlsbHVzdHJhdG9y 94465\nIERpcmVjdG9yYXRl 94466\nIFRyb20= 94467\nbXBw 94468\nbG9nZw== 94469\nLmluc3RydW1lbnQ= 94470\nIHdvb2RlZA== 94471\nIFVzZXJUeXBl 94472\nIFJlbmNvbnRyZXM= 94473\nbW9kZWxOYW1l 94474\nQlRUYWdDb21wb3VuZA== 94475\nPlRv 94476\nIGZyZWV6ZXM= 94477\nIENvbnRl 94478\nIENyZWRlbnRpYWw= 94479\nY2FsYQ== 94480\nL3dvcmtzcGFjZQ== 94481\nIGxpYmlkbw== 94482\nY2hsdXNz 94483\nb2xsZXlFcnJvcg== 94484\nIGFjY2lvbmVz 94485\nIEppbnBpbmc= 94486\nYXTDqWc= 94487\nSW50ZXJzdGl0aWFs 94488\nKSkpKSk7DQo= 94489\neWJyaWQ= 94490\nIFJvbGxlZA== 94491\nTW9kZWxDcmVhdGluZw== 94492\nIFJlZmxleA== 94493\nIEx1Y2lmZXI= 94494\nIGVoZXI= 94495\nIGNhcm5pdmFs 94496\nISI7DQo= 94497\nX0xPT0tVUA== 94498\nIHN1Y2PDqHM= 94499\nIHJlb3BlbmluZw== 94500\nIGNyZWFkbw== 94501\nIFNteQ== 94502\nIEVudHM= 94503\nLlNpbmNl 94504\nIEZpc2hlcmllcw== 94505\nL2Nvbm5lY3Rpb24= 94506\nIENTQQ== 94507\nINC/0YDQvtCz0YDQsNC80Lw= 94508\nbHNydWhl 94509\nCWFjdG9y 94510\nIFN0cmF1c3M= 94511\nSnNvblZhbHVl 94512\nCWV2YWw= 94513\nbG9ja2Vy 94514\nIFhJVg== 94515\nX2h5cGVy 94516\nIFBvbGx5 94517\n4oCmdGhl 94518\nIEdVUkw= 94519\n0LXRgdGB 94520\nIGRpdmVz 94521\ndWdlb3Q= 94522\naW5lbWE= 94523\nYmVyc29tZQ== 94524\nQ29tcHJh 94525\nLWN1bHR1cmFs 94526\nIGdyYW5kcw== 94527\nU2Fj 94528\nIEJhcm5leQ== 94529\nX1FVRVNUSU9O 94530\nIG1hbWFu 94531\nIGhhc3RpbHk= 94532\nIGNsdWJob3VzZQ== 94533\nIGdydW5k 94534\nX1dBTEw= 94535\nIHB1cmlmaWNhdGlvbg== 94536\nhOS7tg== 94537\n0LLQsA== 94538\ndmVzdG1lbnQ= 94539\nLkRpc3BsYXlTdHlsZQ== 94540\nX2NvcmVz 94541\nJVM= 94542\nIG9zw7Ni 94543\nIGRpc2I= 94544\nIEZyYW5raWU= 94545\nIGluZGlzY3JpbQ== 94546\nX0JlZ2lu 94547\nKGVy 94548\nO28= 94549\n44Oz44Kw 94550\nbm9kZU5hbWU= 94551\nIHJlZnVuZGVk 94552\nIGRpc21hbA== 94553\nIEh1ZmZQb3N0 94554\nIHVuZGVjaWRlZA== 94555\nd3JpdGVsbg== 94556\na8Ozdw== 94557\nIEJvc2U= 94558\nCWxpYg== 94559\nb3BsYW4= 94560\naW50ZXJwcmV0ZWQ= 94561\nIE1PTkVZ 94562\ndXZv 94563\nIG50b2hz 94564\naXNldW0= 94565\nPmo= 94566\nIHVuZml0 94567\nIGh1Z2dlZA== 94568\nIEplc3Q= 94569\nbXBz 94570\nIGJyb20= 94571\nJ28= 94572\nIGZvdg== 94573\nIFNocmluZQ== 94574\nIEVJVEhFUg== 94575\neWNhc3RsZQ== 94576\nIHNhdHVy 94577\ncmVxdWVzdERhdGE= 94578\nW2Rpcg== 94579\nT1VDSA== 94580\nX0Rv 94581\nIHlvbA== 94582\nIGluaXRpYWxWYWx1ZXM= 94583\nW3ZlcnRleA== 94584\nc2VydmljZU5hbWU= 94585\nLnNhbGFyeQ== 94586\nIEF1dGhlbnRpY2F0ZQ== 94587\n6L6+ 94588\nX1ZMQU4= 94589\nKFtdKTsKCg== 94590\nIFNlcnVt 94591\nUGF0aFBhcmFt 94592\nZm9ybXVsYXJpbw== 94593\nIHN1bW1hcml6ZXM= 94594\nT0NS 94595\nb3JhbQ== 94596\nTERBUA== 94597\nYmlj 94598\ncGlja2Vk 94599\nLXRoYXQ= 94600\nIGNkcw== 94601\nCWFuaW0= 94602\nIGludHJpYw== 94603\nIFdvcnQ= 94604\nIFZMQw== 94605\nIFNoaWl0ZQ== 94606\nU3R1ZGllcw== 94607\nLmRpc3BhdGNoZXI= 94608\nKGVuYWJsZQ== 94609\nLm1peGlu 94610\nIFNleW1vdXI= 94611\nIGJpb21lZGljYWw= 94612\nIFNwb29u 94613\nIE5vcnNl 94614\nIGludGVudHM= 94615\nIMOpcXVpcA== 94616\nIERyZXNzZXM= 94617\nTFBBUkFN 94618\nLnNldFJlc3VsdA== 94619\nLmRlbGV0ZUJ5SWQ= 94620\nIG5ld2ZvdW5k 94621\nIE9TRA== 94622\nb3VzeQ== 94623\nIGVzdGFkb3M= 94624\nW0J5dGU= 94625\nQ2h1Y2s= 94626\nLm9uVmlld0NyZWF0ZWQ= 94627\nIENvbnRyaWJ1dGlvbg== 94628\nX0VuYw== 94629\nSU5FVA== 94630\nIGZsYXZvcmZ1bA== 94631\nIOOCog== 94632\ndmlzYQ== 94633\nIEhlcmN1bGVz 94634\nLmdldEFwcA== 94635\nIFlvaw== 94636\nLk1haW5BY3Rpdml0eQ== 94637\nKS5b 94638\nIGxhdXQ= 94639\nSW52aXRl 94640\nIENodXJjaGVz 94641\nLCcj 94642\n2YrYsQ== 94643\nKFNT 94644\nIHZlbmRh 94645\nYXNqb24= 94646\nLklOVEVS 94647\naXBoZXJ5 94648\nKFN5bnRheA== 94649\nb25kcm91cw== 94650\nCWNlbnRlcg== 94651\nQnJhY2tldEFjY2Vzcw== 94652\nIENhcGNvbQ== 94653\nLmdldEZvbnQ= 94654\nIFZhdWx0cw== 94655\nIGRpc2XDsWFkb3I= 94656\nOm8= 94657\nKHNoZWxs 94658\nIGVDb21tZXJjZQ== 94659\nIGFsdHJl 94660\nX2F0dGFjaGVk 94661\nIGlzcg== 94662\nIG9idGFpbnM= 94663\nLkNvbnRleHRDb21wYXQ= 94664\nIGF0dGVuZGVl 94665\nIFR3aWNl 94666\nIE1vb2Q= 94667\n6YKu566x 94668\nbm9kb2M= 94669\nIFBJWEk= 94670\nc29mYXI= 94671\nIEJsb29keQ== 94672\nLkNvbXBsZXRl 94673\nIEJFUg== 94674\nIGdldENhdGVnb3J5 94675\nIGRpc3F1YWxpZmllZA== 94676\nX1RydWU= 94677\nJ2Vy 94678\nLXRvbw== 94679\nIGh5cGVybGluaw== 94680\nX21heGltdW0= 94681\nTmVhbA== 94682\nIHBJbmZv 94683\nLmdldEVsZW1lbnRzQnlOYW1l 94684\nc2NoZWR1bGVk 94685\ncGF5ZXI= 94686\nCXZlcmlmeQ== 94687\nLWVudGl0eQ== 94688\nbWV0YXRhYmxl 94689\nYmlsZHVuZw== 94690\nIGRlbHRhWA== 94691\nZW1wbGFjZQ== 94692\nIHJldmVydGVk 94693\ncmVwaWQ= 94694\nbGVhcm5lcg== 94695\nfSkpCgo= 94696\ndWNvc2U= 94697\nIHJpY28= 94698\nIGJhbmdlZA== 94699\nIEFmcm8= 94700\nKGluZXJ0aWE= 94701\nYW5zYQ== 94702\nIMOkdmVu 94703\nS2FyZW4= 94704\nIHN1cGVyc3Q= 94705\nIGZydWl0aW9u 94706\nb3RjaA== 94707\nIFBheXM= 94708\nUmVzaWRlbnRz 94709\nIHByaXNt 94710\nJik7Cgo= 94711\nLmptcw== 94712\nIFNsdWc= 94713\nPScnKQ== 94714\nIGd1dGVu 94715\nIFNwaWVsYmVyZw== 94716\nIFRGb3Jt 94717\nKGJlZm9yZQ== 94718\nIEZpbml0ZQ== 94719\n5paw5aKe 94720\nIG1laWxsZXVyZQ== 94721\n0L/QuNGB0LDQvdC40LU= 94722\nX0Vycg== 94723\nLWZ0 94724\nbmFubw== 94725\nLkFkZHI= 94726\nIC8vDQoNCg== 94727\nIEpvbmFo 94728\nIERpc2Nv 94729\nIGx1bmNoZXM= 94730\nIERGQQ== 94731\nZXhwbGljaXQ= 94732\nXSc7Cg== 94733\nIHJlZmluZXJ5 94734\nIFN0cmluZ1R5cGU= 94735\ndW5zcXVlZXpl 94736\nIExpa2VseQ== 94737\nV3JpdGVz 94738\nLmJwbQ== 94739\nIHBJdGVt 94740\nb3Vuc2Vs 94741\nU3RhbmRpbmc= 94742\nIGNob2tlZA== 94743\nIGFuc2No 94744\ndXBpbA== 94745\nIERlYnVnZ2Vy 94746\n4qCA4qCA 94747\nPEdyb3Vw 94748\nIFNjYWxpYQ== 94749\nIHN1YnN0aXR1dGlvbnM= 94750\nIGNsaW1iZXJz 94751\nICopIg== 94752\nIG5hbm9wYXJ0aWNsZXM= 94753\nIEFQUFJP 94754\nIHB1cmNoYXNlcnM= 94755\nIFFUZXN0 94756\nIEF3YWtlbmluZw== 94757\nCVNlcmlhbA== 94758\nLnJlcGFpbnQ= 94759\nIHNhdm9yeQ== 94760\nIHBvcm91cw== 94761\nIGFWYXI= 94762\nIFN1YXJleg== 94763\nLUVhc3Q= 94764\nQm94ZXM= 94765\nIFdlaW5lcg== 94766\nIENSQQ== 94767\nIOqwkuydhA== 94768\nIHhsaW0= 94769\nIj8KCg== 94770\nIHdhc2hpbmd0b24= 94771\n7Jq0 94772\nIHRvdGFsZW1lbnQ= 94773\nX210aW1l 94774\nLnNldFNjZW5l 94775\nIGxsYW1h 94776\nIGNibw== 94777\nZWZk 94778\nIHVuZGVycmF0ZWQ= 94779\ncmFpc2luZw== 94780\nIE5BVElPTkFM 94781\nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCg== 94782\nb3B0aWM= 94783\naWRlYXM= 94784\nIOaPkA== 94785\nIGxhaw== 94786\nISEs 94787\nIGtvbW0= 94788\ncGFyYWd1cw== 94789\nU2l0ZXM= 94790\nIHN0cmVzc2luZw== 94791\nIE1hdEJ1dHRvbk1vZHVsZQ== 94792\nIENvbnZlcnRlZA== 94793\nYW5hbWU= 94794\nX1JFQURPTkxZ 94795\nXT0+ 94796\nIGJvcmRlbA== 94797\nIGJpYmxpb2dyYXBoeQ== 94798\nIGdyaWRDb2x1bW4= 94799\nIGpvdXJuYWxpc3RpYw== 94800\n7J6E 94801\nIHJhc3BiZXJyeQ== 94802\nc3RpY2U= 94803\nIGFicmFzaXZl 94804\nIERCSGVscGVy 94805\nIGludGY= 94806\nIFJUQlU= 94807\nfSciLA== 94808\nIEhhbw== 94809\nc3dhbmE= 94810\nIGphbnZpZXI= 94811\nIGluc3RpdHV0ZXM= 94812\nIFNlYmFzdA== 94813\nX0NPTFM= 94814\nIGZpZ3VyYQ== 94815\nIFp1c3Q= 94816\nZm95 94817\nPigpKTsKCg== 94818\nIExpZWJl 94819\nQWdlbmN5 94820\nIOyLnOyekQ== 94821\nIFRodW1ibmFpbHM= 94822\ndGV4dFRoZW1l 94823\nIGVjaG9pbmc= 94824\nZW1wZXJhdHVyZQ== 94825\nIGZpcmVwb3dlcg== 94826\nZWRi 94827\nOicpOwo= 94828\nw6lnb3I= 94829\nL2ZlZWQ= 94830\nIGh1cmw= 94831\nLWF2YWlsYWJsZQ== 94832\nIFJlbmRlcnM= 94833\nIGZkcw== 94834\nIEpTR2xvYmFs 94835\nIENpdGl6ZW5zaGlw 94836\na2llZ28= 94837\nU3RhbmRhcmRJdGVt 94838\nLnBsYWNlcw== 94839\nIHNjYWxhYmlsaXR5 94840\nIFRyYWlscw== 94841\nZm9sbG93ZXI= 94842\nIHNlcnZpw6dvcw== 94843\nID8+Ii8+Cg== 94844\nW21ldGhvZA== 94845\nKGli 94846\nIHJpZGljdWxl 94847\nIGFkYXB0YWJsZQ== 94848\nZmlsdHJv 94849\nIGtldG9nZW5pYw== 94850\nLkltYWdlVHJhbnNwYXJlbnRDb2xvcg== 94851\nIENGTw== 94852\nIFBFRA== 94853\nICIiKTs= 94854\nb2dsb2Jpbg== 94855\nW3NpemVvZg== 94856\nQnJhbmRvbg== 94857\nLlRvU2hvcnQ= 94858\nIG5pxbw= 94859\nIFRFUk1JTg== 94860\nLmdldFN0YXR1c0NvZGU= 94861\nIGRlYnRvcg== 94862\nIENPTlNUUkFJTlQ= 94863\nCXNpZGU= 94864\nIERvbWlubw== 94865\n0YLQvtC8 94866\nIGdsYWNpZXI= 94867\nIGdyb3U= 94868\nenA= 94869\nIENhcmxh 94870\nLUZlYg== 94871\nUGVs 94872\nLnJlYWRWYWx1ZQ== 94873\nY2xpbWF0ZQ== 94874\nIHRpbGVTaXpl 94875\nLnRyaXA= 94876\nRU5URQ== 94877\nIGNodWJieQ== 94878\nIGltcG9zaXRpb24= 94879\nTE9XRVI= 94880\nLmJ5SWQ= 94881\nLkxvb2tBbmRGZWVs 94882\nYXJpaA== 94883\nLmZpbmRCeUlkQW5kVXBkYXRl 94884\nIFN0b3JlZA== 94885\nIGJvdXJnZW9pc2ll 94886\nSFRUUFJlcXVlc3RPcGVyYXRpb24= 94887\nIHN1Y2tlcg== 94888\nLmRlcXVldWU= 94889\nbGlja2Vu 94890\nIHN1YnJhbmdl 94891\nX01FRElVTQ== 94892\nSXNsYW0= 94893\nIFNwYXJrcw== 94894\n77yaJQ== 94895\naW1wb3J0ZQ== 94896\nIGAt 94897\nIGpveXM= 94898\nZ3JvdXBpZA== 94899\nRmx5aW5n 94900\nCWJz 94901\nZ3Jvc3M= 94902\nIEZpZXN0YQ== 94903\nIGNzdA== 94904\nIGFmaWNpb24= 94905\nb3Bob24= 94906\nX0NJ 94907\nam4= 94908\nQmVhdXR5 94909\nIHNjZQ== 94910\nIGNyYWNrZXJz 94911\nYXBr 94912\nIGdvcmQ= 94913\nIHByZXRleHQ= 94914\nIFtc 94915\nIENhbmRpZA== 94916\nR29hbHM= 94917\nQWN0aW9uVHlwZXM= 94918\nLG51bWJlcg== 94919\nIHBvcHVsYWNl 94920\nIGVudHJlbg== 94921\nIEF1dG9m 94922\n6Zmi 94923\nQmFzZUNvbnRleHQ= 94924\nQmFsYW5jZXI= 94925\nKEJvcmRlcg== 94926\nIG1pbmNlZA== 94927\ncmVjYWxs 94928\nY2Jh 94929\nIGFwcHJvdmVz 94930\nIEtsb3Bw 94931\nZXJtaW50 94932\nX2Zyb250ZW5k 94933\nZXNjbw== 94934\nIG5pbmV0ZWVu 94935\nRHJpdmluZw== 94936\nIFhWSQ== 94937\nIFRhY3RpY3M= 94938\nIHByb2dyYW1hcw== 94939\naWVzZW4= 94940\nTW92 94941\nZGlldA== 94942\nYXV0w6k= 94943\nKCIuIik= 94944\nIGdvdmVybm8= 94945\nX0FuZA== 94946\nL21pdA== 94947\nIGNhZmV0ZXJpYQ== 94948\nLXRyYWNraW5n 94949\nIGNvbW11dGluZw== 94950\nLnVua25vd24= 94951\nX3R5cGVvZg== 94952\nIFNTQQ== 94953\nUFJPVE8= 94954\nLk1lcmdl 94955\nIGZvckNlbGxSZXVzZUlkZW50aWZpZXI= 94956\nIFNhdGlzZmFjdGlvbg== 94957\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 94958\nSU1QTElFRA== 94959\nIFJlc3RyaWN0ZWQ= 94960\nIE1hZ251bQ== 94961\n0L3QvtC8 94962\nS2Fuc2Fz 94963\nYXlsaWdodA== 94964\nIFRvd2FyZHM= 94965\nIFRvbWU= 94966\nIFRlbmRlcg== 94967\nX2RlcHQ= 94968\nLmNydA== 94969\ndHJlY2h0 94970\nU1RPTkU= 94971\nIGVtcHRpZWQ= 94972\nICcpOwoK 94973\n4LiB4Liy4Lij 94974\n0Y/RgtGM 94975\nbGVjaw== 94976\nIFt+LA== 94977\nLmV4cGlyZXM= 94978\nIFRpZw== 94979\nIElyb25pY2FsbHk= 94980\nCUxM 94981\nLk5vdE5pbA== 94982\nIOWKoA== 94983\nIEdvdmVy 94984\nIFBlcnNwZWN0aXZlcw== 94985\nIERWUg== 94986\nIGxva2FsZQ== 94987\nIHJlc2VuZA== 94988\nIGRvdWJseQ== 94989\nIGNvbXVuaWRhZA== 94990\nIEFzc2VtYmx5Q29tcGFueQ== 94991\nKHR1cm4= 94992\nIHN1Ymxpc3Q= 94993\nIGVuZG9yc2VtZW50cw== 94994\nX1JFR0lTVFJZ 94995\nISIpDQo= 94996\nKTs7Cg== 94997\nIGdhbnpl 94998\nIEhhcm5lc3M= 94999\nX21hdGNoZWQ= 95000\n5L6h 95001\n4oCiCgo= 95002\nQ2hlZg== 95003\nCUluaXRpYWxpemU= 95004\nKTsiPgo= 95005\nIEZhcmFnZQ== 95006\ncmlzaA== 95007\nYWx0ZXQ= 95008\nRGVhbGVy 95009\nLkxvZ1dhcm5pbmc= 95010\nKGFmdGVy 95011\nIEdhcnRlbg== 95012\nIGV4cGxvZGVz 95013\nLkNMQVNT 95014\nIHVzZVJvdXRlcg== 95015\nLUxh 95016\nIHNhZGRlbmVk 95017\nYXJvdg== 95018\nVG9VcGRhdGU= 95019\nIOae 95020\ncGlp 95021\nJwoKCgo= 95022\nIFRSQU5TQUNUSU9O 95023\nb25nYQ== 95024\nbG9nYW4= 95025\nQ3Jvdw== 95026\nIGJyaXRpc2g= 95027\nIENvbnRlbnRWaWV3 95028\nX0JC 95029\nb2x2ZW5jeQ== 95030\nbG9hZE1vZGVs 95031\nVE9PTFM= 95032\naGV0ZW4= 95033\nX25o 95034\nQUJM 95035\nLXZlcnM= 95036\nQXJlbmE= 95037\nLnNpbmdsZXRvbkxpc3Q= 95038\nKHBhdA== 95039\nCW5hbWVz 95040\nKHNx 95041\nIHZhbG9yZQ== 95042\nJHJlcQ== 95043\nIGFudGhyb3BvbG9neQ== 95044\nVGhpbmtpbmc= 95045\nIG1pc2NoaWVm 95046\nIGFyY2hpdmFs 95047\n4KS5 95048\nLlNldFRvb2xUaXA= 95049\ncHJhcg== 95050\nYW5qYQ== 95051\nIGZpcnN0bHk= 95052\nCWxpZ2h0 95053\nLS0s 95054\nIFNwZWFycw== 95055\nIG9nbA== 95056\nc3RlZW4= 95057\naW1wbGVtZW50cw== 95058\ncmlzdHM= 95059\nK0U= 95060\nIEJhbnM= 95061\nIGZhc3RiYWxs 95062\nIEhlcm1lcw== 95063\ndmVsZWQ= 95064\ndHdlbnR5 95065\nIG5lY2VzaXRh 95066\nIE1vcm9jY2Fu 95067\naXNMb2dnZWRJbg== 95068\nQ0xPQ0tT 95069\nLkFic3RyYWN0aW9ucw== 95070\nLlBhY2tldA== 95071\nIG1lbmFjaW5n 95072\nLXZlc20= 95073\nIExpdmluZ3N0b24= 95074\nIG9jaQ== 95075\nIGV4dHJhZGl0aW9u 95076\nICQoJA== 95077\nIExvY2tlcg== 95078\nIFJlYmVsbGlvbg== 95079\nIG1peGlucw== 95080\nY3RhbA== 95081\nL3JmYw== 95082\nIFNHRA== 95083\nLGlkeA== 95084\nIGJsZWlidA== 95085\nKFwk 95086\nIHBldGVy 95087\nIGJhcnJlbg== 95088\nIHBob3NwaG9yeQ== 95089\nIGdvZ2dsZXM= 95090\nLmhvbQ== 95091\nQGQ= 95092\nPSct 95093\nLmlzVXNlcg== 95094\nYWthc2g= 95095\nX2h1Yg== 95096\naXBlbGluZXM= 95097\nIEB9 95098\nLnN1cm5hbWU= 95099\nSW50ZXJvcA== 95100\nIGluRmlsZQ== 95101\nIGVzcGVjaWFsbWVudGU= 95102\nIGF1dG9ub20= 95103\nIFphbWJpYQ== 95104\nX0NPVU5UUlk= 95105\nPENvdXJzZQ== 95106\naWRlb2dyYXBoaWM= 95107\nIENhbWVyb29u 95108\nZmluZEJ5SWQ= 95109\nKSIu 95110\nIERlcGVuZHM= 95111\ncml0b3M= 95112\nLk91cg== 95113\nIHN1YnNpZGl6ZWQ= 95114\nJywnIis= 95115\nIGdsZWFu 95116\nIEFzc2VtYmx5Q29weXJpZ2h0 95117\ncGljYWJsZQ== 95118\nIHVud2l0dGluZw== 95119\nIG9tZGF0 95120\nIEVhc2U= 95121\nIGVtYm9kaWVz 95122\nKHBEWA== 95123\nIFZvdGVy 95124\nQXNzaWduZWQ= 95125\ncmV2ZWFs 95126\nIGZlbmQ= 95127\nKHBhcnNlRmxvYXQ= 95128\nIGRwcw== 95129\ndHBsaWI= 95130\nYXNzZXJ0Q291bnQ= 95131\neG1heA== 95132\nVW51c2Vk 95133\nKGZi 95134\nIHN1Ym1pdHM= 95135\nIFJlcGxpY2E= 95136\nKGR5 95137\nIGJhbmRl 95138\nLnNlbWFudGlj 95139\nIHNlYXJjaFN0cmluZw== 95140\nIFNhbmZvcmQ= 95141\nCWZ1bGw= 95142\ncHJt 95143\nX3V0aWxpdGllcw== 95144\nVU5VU0VE 95145\nIHNjYW5uZXJz 95146\nIGJmZA== 95147\nLk9yZ2FuaXphdGlvbg== 95148\nLWN1cg== 95149\nUmFpbA== 95150\nIHhueHg= 95151\nJSk7Cg== 95152\nIG92ZXJwb3N0aW5n 95153\nVmlldA== 95154\nIHRhcGVyZWQ= 95155\nIGNhbWVv 95156\nIFZpZXdpbmc= 95157\nIGRpc21hbnRsZQ== 95158\nIGZpc3M= 95159\nIFNlbnRyeQ== 95160\naGVhdG1hcA== 95161\nIMOhcmVhcw== 95162\nIEdyw7w= 95163\nIGppZw== 95164\nLmNsZWFyUmVjdA== 95165\nZXZlbnRUeXBl 95166\nIHR1cmJ1bGVuY2U= 95167\nY2tpbGw= 95168\nLkZvY3VzZWQ= 95169\nIGludGVybWVkaWFyeQ== 95170\nIE9iZXNpdHk= 95171\nYXRlZ28= 95172\nbW9udG8= 95173\nIEFsYW1vZmlyZQ== 95174\nIFNoZWlsYQ== 95175\nIENPTExFQ1RJT04= 95176\nQ2FyZEJvZHk= 95177\nIEhhYml0 95178\nUExBTg== 95179\nLnZpc3VhbGl6YXRpb24= 95180\nJSkuCgo= 95181\nIEludGVsbGlK 95182\nIEdsb3Zlcg== 95183\nLnNwYXRpYWw= 95184\nIGdyZWV0aW5ncw== 95185\nIE9wZW5GaWxlRGlhbG9n 95186\ney8q 95187\nIFTDqWzDqQ== 95188\nIEVm 95189\nICJbJQ== 95190\nIG1hZ2lzdHJhdGU= 95191\nIExpdGVjb2lu 95192\nIFNlbGU= 95193\nIGNvbW1lcmM= 95194\ncHJpbnR3 95195\nbmV4dEludA== 95196\nLmdldENoaWxkQXQ= 95197\nIEdldEN1cnJlbnQ= 95198\nIGV1cm9ww6k= 95199\nIEFJUw== 95200\nZXR0ZW4= 95201\nLkV2ZW50UXVldWU= 95202\nYW5mb3Jk 95203\ndW5ha2Fu 95204\nLnNldE91dHB1dA== 95205\nIGNtZGxpbmU= 95206\nLGdldA== 95207\nIEhlYXJk 95208\nLmNvbnRlbnRUeXBl 95209\nZW1k 95210\nIFJldG9ybmE= 95211\nYWNk 95212\nIFBsYXlvZmY= 95213\nYWNtYW4= 95214\nLndlYnNvY2tldA== 95215\nQ2xpZW50SWQ= 95216\nLmV4YW0= 95217\nIGF0dGVudWF0aW9u 95218\nLnNldENoYXJhY3Rlcg== 95219\nCUNvbGxlY3Rpb24= 95220\n5rCX 95221\nIHByZWRpY3RvcnM= 95222\nIFNoZXJpZGFu 95223\ncmltaW5hdG9y 95224\nKFN0YWNr 95225\nX1BLRw== 95226\nPScnKToK 95227\nKHBhZA== 95228\nIE5vZG8= 95229\nIGludGVyb3Blcg== 95230\nIFRyYW5zcGFyZW5jeQ== 95231\nCWR4 95232\nemVt 95233\nIHByYXRpcXVl 95234\nIGZpYnI= 95235\nKCk/Owo= 95236\nX01PQklMRQ== 95237\nLlJFRw== 95238\nX1lFTExPVw== 95239\nVGl0YW4= 95240\nJykKCgoK 95241\nIGNvbXBvbmVudE5hbWU= 95242\nIENvb2xlcg== 95243\naXNGdW5jdGlvbg== 95244\nLmZlZWRiYWNr 95245\nIHBlcmZlY3RlZA== 95246\nIHBhZWQ= 95247\nLXNjcmlwdHM= 95248\nU3VzcA== 95249\nPE9wdGlvbg== 95250\nIER0 95251\n7YS0 95252\nJ1JF 95253\nIE5STA== 95254\nIE1hbm55 95255\nIHJvZw== 95256\nIEdhcnI= 95257\nX2Nvb2tpZXM= 95258\nU3Bs 95259\nIHByb21vdGVycw== 95260\nKmR0 95261\nXEFQSQ== 95262\nIGV2b2tl 95263\nX0VudHJ5 95264\nIGZpcmVmaWdodGVy 95265\naXZpZGFk 95266\nSmFjb2I= 95267\nIGxlZ2lvbg== 95268\nKHBvbA== 95269\nCWZsYXNo 95270\nb29rZWVwZXI= 95271\nLmNsaXBzVG9Cb3VuZHM= 95272\nIGdyYXBoaXRl 95273\nJ2h0dHA= 95274\nX1RSSUFOR0xF 95275\nIERyb3BJbmRleA== 95276\nLnNtdHA= 95277\nIFVOU0lHTkVE 95278\nX1BJQ1RVUkU= 95279\nX09SSUVOVEFUSU9O 95280\nIE9QUA== 95281\nIyc= 95282\nw6FmaWNv 95283\nLmhpc3RvZ3JhbQ== 95284\nIEJlbm55 95285\nPldl 95286\nIHJlcG9zdA== 95287\nIGZpYW5jZQ== 95288\nIEJvdW50eQ== 95289\nc3RyZXNz 95290\nRGF0ZXRpbWU= 95291\nOkg= 95292\nIFNwaGlueA== 95293\nTm9ybWFsbHk= 95294\nYXBpeGVs 95295\nIHVzZXJBZ2VudA== 95296\nIE1vcmk= 95297\nL2xhYg== 95298\nLk1PREVM 95299\nIEVtb3Rpb25hbA== 95300\nU2NhbGVk 95301\nZGV2aWNlSWQ= 95302\nIOqzhA== 95303\nY2Vhc2Vk 95304\nPElN 95305\nY2VlZGVk 95306\nIGxpYnJhcmlhbg== 95307\nKW51bGw= 95308\nIG1pY3Jvbg== 95309\nIEZvdQ== 95310\ndWxlbg== 95311\nL2xpdmU= 95312\ncnNjaGVpbg== 95313\nZmVh 95314\nIGhhYmls 95315\nIE5hdkxpbms= 95316\nbmVjZXNzYXJ5 95317\nLmNvZGVz 95318\nLW1ha2U= 95319\nIHBQYXJlbnQ= 95320\nX3JlbGF0aW9ucw== 95321\nIHJ1c2hlcw== 95322\nIHByb3BlbnNpdHk= 95323\nIFNraW5ueQ== 95324\nV0VTVA== 95325\nX2NvcnB1cw== 95326\nKHJlb3JkZXJlZA== 95327\nZmRi 95328\nIEdldE1lc3NhZ2U= 95329\nQnJ1bg== 95330\nLnZz 95331\nIHDFgg== 95332\nIGNydW5jaHk= 95333\nQm9vbQ== 95334\nUEo= 95335\nSmFrZQ== 95336\n57qm 95337\nJGNsaWVudA== 95338\nIH1dKQo= 95339\nIGNvbnZlcnNl 95340\nIEdSQVQ= 95341\nIENSUw== 95342\nLkxvdw== 95343\nKHZhbGlkYXRl 95344\nX0NMSUNLRUQ= 95345\nLmJsdWV0b290aA== 95346\nCXh0eXBl 95347\nIGNsb3NlTW9kYWw= 95348\nX2ludGVudA== 95349\nIHByb2dub3Npcw== 95350\nc2F2 95351\nQ3Rs 95352\nIGNob29zZXI= 95353\nIFN1ZG9rdQ== 95354\nPVVzZXI= 95355\nLmNsZg== 95356\nCWV4cGxpY2l0 95357\nIHBvdGVudGlhbHM= 95358\nIEdlb3JnZXM= 95359\nIGVsaWM= 95360\nIHRzbGli 95361\nIFJhZ25hcg== 95362\nX3JlcHJlc2VudGF0aW9u 95363\nLWxlZ2dlZA== 95364\naGFtc3Rlcg== 95365\nIEZpcmVzdG9yZQ== 95366\nY29udmVydFZpZXc= 95367\nQ29tYmluZWQ= 95368\nINC00LXQuw== 95369\nIGVzcGVjdA== 95370\nIOOCkg== 95371\nIFN0YW1pbmE= 95372\nbG9va3M= 95373\nRU5BUklP 95374\nL2ZpeHR1cmVz 95375\nLnNtcw== 95376\nIHNlbWljbGFzcw== 95377\nIHNlbWljbGFzc2ljYWw= 95378\nLlBlZWs= 95379\nXSQ= 95380\nX0RTUA== 95381\nX0xWTA== 95382\nVklSVFVBTA== 95383\nIENhcGl0YWxz 95384\nIFNDVA== 95385\nLldoaWxl 95386\nIFN1YnN0YW5jZQ== 95387\nLWRvbmU= 95388\nIGVuc2xhdmVk 95389\nY2xhc3NpZnk= 95390\nZW50YW55bA== 95391\nIFZlZ2V0YWJsZQ== 95392\nX0RFUEVORA== 95393\nRGFuaQ== 95394\nIHF1aWVyZXM= 95395\nIGFiYmlhbW8= 95396\nIExpYmVy 95397\nYWZj 95398\n6YCf 95399\ncHJlZGljdGVk 95400\nLlBORw== 95401\nIFdoaXA= 95402\nLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 95403\nIOKJoA== 95404\nIOWM 95405\nREVN 95406\nQ0NB 95407\nL2Nsb3Nl 95408\nIC8vLzwv 95409\nIG1lc21h 95410\nIEJlaXJ1dA== 95411\nIEluaXRpYWxpemluZw== 95412\n4buZdA== 95413\nTU9OVEg= 95414\nIO2bhA== 95415\nUGFya2luZw== 95416\nQ29tZm9ydA== 95417\nIEVuZ2luZXM= 95418\nd2VycA== 95419\nQFJlcXVlc3RQYXJhbQ== 95420\nLUtleQ== 95421\nIGJhY2tsaWdodA== 95422\ncGFzc2Vz 95423\nLm51bWJlck9mTGluZXM= 95424\nL0xpbnV4 95425\nKEhUVFA= 95426\nIEh0dHBVUkxDb25uZWN0aW9u 95427\nb3Nvcw== 95428\nLnh4 95429\nIGZpbG1wamVz 95430\nID09PT4= 95431\nb3B0aW1pemU= 95432\nQ2Fub24= 95433\nIC4uLiIK 95434\nICciJzsK 95435\nIGPDqWxpYg== 95436\nIHByaW5jaXBhbG1lbnRl 95437\nIFByb3BlcnR5VmFsdWU= 95438\nT1VOQ0U= 95439\nIGV4Y3Vyc2lvbg== 95440\nIEFjY2Vzc1Rva2Vu 95441\ncmVxdWV0ZQ== 95442\nVm9sdGFnZQ== 95443\nZXhwbGFpbg== 95444\nfSkoKTsKCg== 95445\nVVJMT1BU 95446\nIGZ1bmdhbA== 95447\nR3JlZWs= 95448\nLWJsaW5k 95449\nIGZldWRhbA== 95450\nIFNvbmF0YQ== 95451\nIERpYWdub3Npcw== 95452\nJHhtbA== 95453\nZWRpdGFyeQ== 95454\nIHN0aW11bGF0ZXM= 95455\nUG9udA== 95456\nLkhhc1ByZWZpeA== 95457\nYm9hdHM= 95458\nIFNjYXR0ZXI= 95459\nIEdFTkVSSUM= 95460\nIGZpc2hlcw== 95461\nPWxlbmd0aA== 95462\nIG1lbGhvcmVz 95463\nc3BlbnQ= 95464\nw7Rt 95465\nIEluZ3JhbQ== 95466\nPi4KCg== 95467\ncGFyaXR5 95468\nLlZpZGVvQ2FwdHVyZQ== 95469\nIFR1YmVz 95470\nIGNvbWVkaWM= 95471\nIHByb2Nlc3NEYXRh 95472\nQURC 95473\nKG5ld1N0YXRl 95474\n5YGc 95475\nIFdlYnNlaXRl 95476\nX09mZg== 95477\nLGJvZHk= 95478\nIHN1YmNvbnRyYWN0 95479\nIGNodXRl 95480\nIGNhcnRlc2lhbg== 95481\ndGhyZXNo 95482\nLkNhcnQ= 95483\nIG1ldG9k 95484\nY3VzdG9taXpl 95485\nTHRk 95486\nCXNvdW5k 95487\nV2ViU2VydmljZQ== 95488\nIEhpbmRlcmVk 95489\nW3Jlcw== 95490\nKFRpbGU= 95491\nY2FwYWJpbGl0aWVz 95492\nX09WRVJGTE9X 95493\nINGB0YHRi9C7 95494\nIENvY2g= 95495\nIHRlc3ROYW1l 95496\nV09SRFM= 95497\nXE1vZHVsZXM= 95498\nP3VybA== 95499\nX2NvbnRpbnVvdXM= 95500\nIFFJY29u 95501\nIHN0YXJlcw== 95502\nIGVqZWN0ZWQ= 95503\nIEludmFzaW9u 95504\nZmluYWxpemU= 95505\nIGdldg== 95506\nPGc= 95507\nIEVkaXRvckdVSQ== 95508\nQmVybGlu 95509\nLmxpbmVFZGl0 95510\nLXJlZ2V4cA== 95511\nIHNsZWQ= 95512\nIEVBQ0g= 95513\ndWNv 95514\nIHNlZWRpbmc= 95515\nIGxvY2FsaXpl 95516\nZXR1 95517\nX2FsbW9zdA== 95518\ncGFuc2U= 95519\nIFNlbnNvcnM= 95520\nX1NJ 95521\nKnNw 95522\nIFByb3BlcnR5SW5mbw== 95523\nIGFwcm94aW0= 95524\nIGRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 95525\n16A= 95526\nIGRpZmVyZW5jaWE= 95527\nTE9PSw== 95528\nIG9tbmlw 95529\nIFR1cmluZw== 95530\nIHVuaWRhZGVz 95531\n77yfCg== 95532\nLlJvd0hlYWRlcnM= 95533\nX0FDVElPTlM= 95534\nIERhbHk= 95535\nIGZvcnRpZmllZA== 95536\nIFdhZ2U= 95537\nLnNpbXBz 95538\nKGlzc3Vl 95539\nIGxlcHQ= 95540\nT3duZXJJZA== 95541\nJ29yZGVy 95542\n5Y+N 95543\n56Wo 95544\nIHJld3JpdGluZw== 95545\nLkl0YWxpYw== 95546\nIEZvcmdvdHRlbg== 95547\nKElM 95548\nIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24= 95549\nZXdu 95550\nIHBvcHVsb3Vz 95551\nIFNoZWQ= 95552\nIyR7 95553\nIEFsbw== 95554\nRGV2aWNlSW5mbw== 95555\nKElOVk9LRQ== 95556\nIHBlbmE= 95557\nIEJCQg== 95558\nLmJi 95559\nIHRvcnM= 95560\nIGNvbmR1Y2l2ZQ== 95561\nLXB1cnBsZQ== 95562\nIHNxdWFyZWx5 95563\nLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 95564\n0LrRgNGL 95565\nZmFzdGE= 95566\nIGNwdA== 95567\nIEluZ2Vu 95568\nIHs/fQ== 95569\n0YPQsw== 95570\nUGVybA== 95571\nLnNreQ== 95572\nLWF1dG9tYXRpYw== 95573\naW1wbGVtZW50 95574\nb3JubWVudA== 95575\nLklNQUdF 95576\nLVNwZWVk 95577\nCUZpZWxk 95578\nIHBvdW5kZWQ= 95579\nIExa 95580\nIGF1dG9Gb2N1cw== 95581\nIOC5gA== 95582\nLkNvbXBhbmlvbg== 95583\nIFZpbQ== 95584\ndW5jaWE= 95585\nX3NrYg== 95586\nIHVubWFycmllZA== 95587\nIFNvdXI= 95588\nZ2FhcmQ= 95589\nTGVvZA== 95590\nIOCq 95591\nLkNsb3Vk 95592\nIHJlaW5mb3JjZXM= 95593\nJ10+ 95594\nIGZlbGl6 95595\nIFVBVg== 95596\ncmFuY2Vz 95597\n5Y2B 95598\nVG9MaXN0QXN5bmM= 95599\nLkV4ZWN1dG9y 95600\nLXRz 95601\nICcuJzsK 95602\nIEtpbmVjdA== 95603\n44GE44GG 95604\nIGJldm9y 95605\nIEV4dHJhY3Rpb24= 95606\nX2RyYXdlcg== 95607\nJHN1Yg== 95608\nIHVwbGlmdGluZw== 95609\nLmJ0bkV4aXQ= 95610\nKCcvLypbQA== 95611\nUkVESVM= 95612\nc3RkZXhjZXB0 95613\nZGVv 95614\nIGdpdmVy 95615\nX2JpbmRpbmdz 95616\nVG9EZXZpY2U= 95617\nLm1p 95618\nIEVzdGltYXRlcw== 95619\nYWxsZWxl 95620\nPz8/Cgo= 95621\nIFN0cmVhbXM= 95622\nIGFmZmxpY3Q= 95623\nLnNhcA== 95624\nIHF1YWxp 95625\nIEdhdWw= 95626\nU3BlY2lmaWVz 95627\nIHpr 95628\nIHNhbml0YXJ5 95629\nIG5ld0luZGV4 95630\nc3BlY3M= 95631\nIGZyYWdtZW50TWFuYWdlcg== 95632\nIE5lY2Vzc2FyeQ== 95633\nCVNwcmluZw== 95634\nPX4= 95635\nIE9NQVA= 95636\nY2FyZWVy 95637\nKCItIik7Cg== 95638\nIERhcmxpbmc= 95639\naXRhZw== 95640\nOnBr 95641\nIFN0ZWxsYXI= 95642\nIGluZmVydGlsaXR5 95643\nbGV4aWJsZQ== 95644\nVW5hcnk= 95645\nIDpdLA== 95646\nLk5FVw== 95647\nZ3N1Yg== 95648\nX1VGdW5jdGlvbg== 95649\nLnNsaWRlcw== 95650\nIGRpdmVyc29z 95651\nX2xvY2Fscw== 95652\nXFwv 95653\nIHBjYXA= 95654\nIE9vaw== 95655\nLkRhdGFHcmlkVmlld0NvbnRlbnRBbGlnbm1lbnQ= 95656\nZXJzb25pYw== 95657\nIHRyZWJ1aWU= 95658\nIHNlcXVlbnRpYWxseQ== 95659\nYWJhcg== 95660\nIElQQ0M= 95661\nIGRldm91dA== 95662\nXEhlbHBlcnM= 95663\nRVR3ZWV0 95664\nIHRyYWJhamFy 95665\nIFdpbGtpbnNvbg== 95666\nIGRhw58= 95667\nSHVtYW5z 95668\nVGVhY2hlcnM= 95669\nIERhdGFWaWV3 95670\nIFlvZw== 95671\nIGplZGU= 95672\nIGFtYmlhbmNl 95673\ndHJhbmQ= 95674\nIGVycmF0aWM= 95675\nIHThu6s= 95676\nLnJhYmJpdA== 95677\nIG5ld2JpZQ== 95678\nIGVudHJhbmNlcw== 95679\nIG9ydGhvZ29uYWw= 95680\nIERJU1BBVENI 95681\nIFNjaHJv 95682\nX1RVUk4= 95683\nOmludm9rZQ== 95684\nIHRhbnRhbA== 95685\nIFpvbmVz 95686\nc3RhdGVtZW50cw== 95687\nTGltaXRz 95688\nIEfDpA== 95689\naWHFgmE= 95690\nLnByZWRpY2F0ZQ== 95691\nLkZS 95692\nIENocmlzdG9waA== 95693\nLkNvbnM= 95694\nIEhvcnRvbg== 95695\nX0N1c3RvbWVy 95696\nCU1E 95697\nIGVsa2Fhcg== 95698\nIE1TRQ== 95699\nIElzQWN0aXZl 95700\nXSop 95701\nXFVuaXQ= 95702\nIGVv 95703\nRm9yT2JqZWN0 95704\nZWxpYWM= 95705\nLWRldmVsb3BtZW50 95706\nIHRlYWw= 95707\nIHN0aXRjaGVk 95708\nIE91dGNvbWU= 95709\nb25jw6k= 95710\nZW1iZWRkaW5n 95711\nIG9uTmV4dA== 95712\nIO2VtOuLuQ== 95713\nKGV4aXN0aW5n 95714\nLmJpZA== 95715\nCWFzc2VydEZhbHNl 95716\ne2w= 95717\nTEVycm9y 95718\nX2J1bGxldA== 95719\nKEh0bWw= 95720\nIGVCb29rcw== 95721\ncGVyUGFnZQ== 95722\nL3F1ZXN0aW9u 95723\nLmZha2U= 95724\nLm1i 95725\nX2RsbA== 95726\nIGN1bXNob3Q= 95727\nIE1hZGFnYXNjYXI= 95728\nSE9MREVS 95729\nIHBlc3F1aXNh 95730\nX0RFQ0xT 95731\nXSxbLQ== 95732\nIEFsYmFuaWE= 95733\nLXRvYXN0 95734\nIHByb3RhZ29uaXN0cw== 95735\nIG15b2NhcmQ= 95736\nIHdhbGtlcnM= 95737\nID09PT09PT0= 95738\nL1BhZ2U= 95739\nPTw/PQ== 95740\nIGVucXVhbnRv 95741\nX1RSVU5D 95742\nIHNlcHRlbWJyZQ== 95743\nIGxheW91dFBhcmFtcw== 95744\nICcuLi8uLi8uLi8uLi8uLi8= 95745\nIFRyYWZmb3Jk 95746\nIHBhbGF2cmE= 95747\nIHJ1bmRvd24= 95748\nIGJyaXR0bGU= 95749\nw6RjaGU= 95750\nLllFTExPVw== 95751\nIENlcmVtb255 95752\nIG5ld1RleHQ= 95753\ndmVjcw== 95754\nIGVzc2Vu 95755\nIE1ldG9kbw== 95756\nIEdVSURF 95757\nIHBvc3Rwb25l 95758\nIFZTdGFjaw== 95759\nWyIk 95760\nIE1pY3Jvc3lzdGVtcw== 95761\nXFBhZ2U= 95762\ncG1hdA== 95763\nX0ZBVUxU 95764\nX21C 95765\nU3RhdGVNYWNoaW5l 95766\nRmFjdWx0eQ== 95767\nLnd4 95768\nIE1vemFydA== 95769\nYW5pbWU= 95770\nIHB5dA== 95771\nIEJ1a2tpdA== 95772\nLUlORlJJTkdFTUVOVA== 95773\nIHNlYXJjaGVy 95774\nLWJhc2tldA== 95775\nIG9tYXM= 95776\nIFR1bmlz 95777\nIFBsYXR0 95778\nIHsNCg0KDQo= 95779\neWFo 95780\ndG9sdWE= 95781\nSW50cm9kdWNlZA== 95782\nc3VwcGx5 95783\nIG1pc29neW4= 95784\nIFdhaXN0 95785\nIEVI 95786\nLW9wZXJhdG9y 95787\nIGRhcmtlbg== 95788\nIENvc21pYw== 95789\nIGdsYWNpZXJz 95790\nIA0NCg== 95791\nXVtf 95792\nQ29tcGFueUlk 95793\nIFJlY29uc3RydWN0aW9u 95794\naXp6bGllcw== 95795\nIGzDrWRlcg== 95796\nIGNvbGxlZ2lhdGU= 95797\nIFBldHR5 95798\nT1VSTkFM 95799\nZGVjb3JhdG9ycw== 95800\ncmFtcw== 95801\nKCgK 95802\nIEFzdHJvbm9teQ== 95803\nIHJpbw== 95804\nIEN5cmls 95805\nanVhbg== 95806\nIHJlaW5j 95807\nIFBpc3RvbnM= 95808\nIEJ1c3k= 95809\ncHRyb24= 95810\nIHBvbW9j 95811\nCVJUQ0s= 95812\nQnV5aW5n 95813\nLy8qKgo= 95814\nIFdyYXBwZWQ= 95815\nIE1lZXI= 95816\nIGltYXA= 95817\nIGJlc3RpbW0= 95818\nIEFnaWxpdHk= 95819\nLlRvVGFibGU= 95820\nc3RpbmVuY2U= 95821\nXSkqKg== 95822\nIEF1dG9tYXRlZA== 95823\nZHNw 95824\nIEdhcmxpYw== 95825\naW9kZQ== 95826\nZXhlbHM= 95827\naW50cm9z 95828\nIGJlc3Rvd2Vk 95829\nKHZpc2libGU= 95830\nIGh5ZHJhdGVk 95831\nbm94aW91cw== 95832\nIEF1dGhlbnRpY2F0aW9uU2VydmljZQ== 95833\nIHNob3dNb2RhbA== 95834\nIGNvbXBvc2Vycw== 95835\nR0VORVJBTA== 95836\nQ1RT 95837\nIFNocg== 95838\nY3JlYXQ= 95839\nIGNsb3NldHM= 95840\nIGdyb3VuZGluZw== 95841\nIENPTU1FTlRT 95842\nICsj 95843\nIGdyb3VuZHdvcms= 95844\nKGluZGV4UGF0aA== 95845\nZ3JhdGlz 95846\ndXBwaWVz 95847\nIGt2bQ== 95848\nIGN1YWxlcw== 95849\nLkRlZXBFcXVhbA== 95850\nIGFsbG95cw== 95851\nLWJ1ZGdldA== 95852\nKF9fXw== 95853\nIGNvbmVjdGFy 95854\nLXJhZA== 95855\nIGl0Y2g= 95856\nbGFtcA== 95857\nLmdycA== 95858\nLWFkZG9ucw== 95859\nIHNlYWJvcm4= 95860\nIG5lZ2xpZ2VudA== 95861\nX0RldGFpbA== 95862\nIHNlcmVuZQ== 95863\nIGJhcnJhY2tz 95864\nIGJx 95865\nIFNlY3Q= 95866\nKGRhdG9z 95867\nIHRoZW1hdGlj 95868\nIHBvbGx1dGVk 95869\nCWFuaW1hdGlvbg== 95870\nSHVnaA== 95871\nRXhlY3V0YWJsZQ== 95872\nKCcvJylb 95873\nIGFwb3B0b3Npcw== 95874\nIGFiYnJldmlhdGVk 95875\nZm9vbg== 95876\nUmFua2Vk 95877\nCWhpdA== 95878\nCQkgICAgICAgICAgICAgICAgICAgICAgIA== 95879\nQ29udGludW91cw== 95880\nIG1vdmVUbw== 95881\nREJPYmplY3Q= 95882\nIGNvbmNlaXZhYmxl 95883\nIEd3ZW4= 95884\nIMOhbGw= 95885\nX18oKQ== 95886\nIExhbmE= 95887\nIGVpbnplbA== 95888\nIHJlY291bnRz 95889\neXN0ZW1z 95890\nb3dhbnk= 95891\nKTo/Pgo= 95892\nIEFrcm9u 95893\nb2xpbmk= 95894\nQ29ycA== 95895\nYXBocmFn 95896\nICInLg== 95897\nIGNvbnZlbmVk 95898\nIC4uLi4KCg== 95899\nIGNhbGxlZQ== 95900\nIENsb3Zlcg== 95901\nLmRlc2NyaXB0b3I= 95902\nLkl0ZW1TdGFjaw== 95903\nIHBlcnZlcnNl 95904\nX0NF 95905\nPUAi 95906\nLS0tDQo= 95907\nIGJldg== 95908\nc3VtYQ== 95909\nYWNjdW11bGF0b3I= 95910\nIGxpemFyZA== 95911\nINC+0Yc= 95912\nZ2V0RGVzY3JpcHRpb24= 95913\nIFNhcmFz 95914\nLm5leHRTaWJsaW5n 95915\nIGVsYXN0aWNpdHk= 95916\nIGNoYWM= 95917\nbW92ZWQ= 95918\nX1RvcA== 95919\ndHJlcg== 95920\nKGRvd24= 95921\nZWxlbXM= 95922\nb2JpbGk= 95923\nLnBvc3RNZXNzYWdl 95924\nICjiiA== 95925\nQ3N2 95926\nIFlvc2VtaXRl 95927\nc3dlZXQ= 95928\nTUFUUklY 95929\naWdyYXRlZA== 95930\nIGZvcmdpbmc= 95931\nIFBhZ2VTaXpl 95932\ndHJhbnNmb3Jtcw== 95933\nPVlFUw== 95934\nIGRpc2Nsb3Npbmc= 95935\nIFBlZGlhdHJpYw== 95936\nIERlYWRseQ== 95937\nUmVzb3VyY2VJZA== 95938\nLWJpbmFyeQ== 95939\nIFJvd2U= 95940\nIENhaXI= 95941\nX2V4dHJhY3Rpb24= 95942\nRGVjcmU= 95943\nIE9ic3Q= 95944\ncGxy 95945\nIFBoeXNpb2xvZ3k= 95946\nbXZj 95947\naHRp 95948\nLlRl 95949\nIGV4dHJhdmFnYW50 95950\nIEFudGli 95951\nw7NzdA== 95952\nb3V0ZGly 95953\nIGNhcm5l 95954\nVmlld1BhZ2Vy 95955\nIGltcGxhbnRlZA== 95956\nU2VhcmNoUGFyYW1z 95957\nw7xyZ2Vy 95958\nY29uZGU= 95959\nYWNlbnRl 95960\nX0NVREE= 95961\nJHZhbA== 95962\nIldoaWxl 95963\nIHRlbXBMaXN0 95964\nIHN5bmFnb2d1ZQ== 95965\nY21j 95966\nINGA0LDQsdC+0YLRiw== 95967\nIHNlem5hbQ== 95968\nIHNlc3N1YWxp 95969\nIGNhYmV6YQ== 95970\nZXTDoA== 95971\nIGZhw6c= 95972\nZ2Vo 95973\nY2VkZQ== 95974\nIlNvbWU= 95975\nOm9u 95976\nLWZvcm1lZA== 95977\nYnluYW1l 95978\nIOuwmO2ZmA== 95979\nIG5hw68= 95980\nIEFVRw== 95981\nIGVhc2Vk 95982\nXSl7 95983\nKHB0aHJlYWQ= 95984\nIGplZGVt 95985\nKGZpeHR1cmU= 95986\nIFBhcmw= 95987\nXX0pOwo= 95988\nIGV4cHVsc2lvbg== 95989\nIEluZXRBZGRyZXNz 95990\nIE1MUA== 95991\nLicpOw== 95992\nIG9ybw== 95993\nIFNldmlsbGE= 95994\nIGZvcm11bGFpcmU= 95995\nLXRlcnJvcmlzbQ== 95996\nL1dlYkFQSQ== 95997\nKmFuZ3N0cm9t 95998\nY3Jhd2w= 95999\nX2xvYW4= 96000\nX0RJR0VTVA== 96001\nIEtub3h2aWxsZQ== 96002\nLmdjYQ== 96003\nIERpeQ== 96004\nbnRhZw== 96005\nYWJsZVZpZXdDb250cm9sbGVy 96006\nLkZlZWQ= 96007\nLXNoYXJlZA== 96008\nIGNvY2Np 96009\nX2ludml0ZQ== 96010\nIEJ1Y2tpbmdoYW0= 96011\nIEdsdXRlbg== 96012\nIGVuZGVtaWM= 96013\nUmFpc2Vk 96014\nIHF1ZXJ5SW50ZXJmYWNl 96015\nIG1hcnRpbg== 96016\nQuG6oW4= 96017\nIGhhcmU= 96018\nIGRlaW4= 96019\ncmFyaWFu 96020\nbXlmaWxl 96021\nIGFuZ3Vpc2g= 96022\nVGV4dG8= 96023\nIEJVRkY= 96024\nKGxu 96025\nbWFycw== 96026\nX3N1YnRpdGxl 96027\nX2dpZnQ= 96028\nIGJvbGRseQ== 96029\nIFNpbmd1bGFy 96030\nKExvZ0xldmVs 96031\nPEFydGljbGU= 96032\nL3N0YXRz 96033\nINC/0L7Qsg== 96034\nIGl0ZW5z 96035\nIGRlbm9taW5hdGlvbg== 96036\nLkRhdGFHcmlkVmlld1RyaVN0YXRl 96037\nX0xS 96038\nIER1Y2hlc3M= 96039\nCUJsb2Nr 96040\ndHJhY2Vy 96041\nLUNO 96042\nXEFwcERhdGE= 96043\nLmxpc3Rz 96044\nKFJvdXRl 96045\nIEdPT0RNQU4= 96046\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 96047\nIHRpbmhh 96048\nIGV2ZXJsYXN0aW5n 96049\nYURhdGE= 96050\nKGNvbXBhcmU= 96051\nIHJwdA== 96052\nXFBocA== 96053\nLkZJTEVT 96054\nIHNwYXJpbmc= 96055\nU2Nhcg== 96056\nINin2YTYqg== 96057\nIEJldGhsZWhlbQ== 96058\nIGJhY2twYWdl 96059\nc3BsaWNl 96060\nZsO2cg== 96061\nQGR5bmFtaWM= 96062\n4bupYw== 96063\n7KY= 96064\nLnBhZ2luZw== 96065\nIEJlbG1vbnQ= 96066\nLkVYUA== 96067\nIGludGVybGU= 96068\nIENoZWNrbGlzdA== 96069\nIFVuaWNvcm4= 96070\nQkVTVA== 96071\nZ2V0UGxheWVy 96072\nLmFyZ3NvcnQ= 96073\nIHdpdGhTdHJpbmc= 96074\nIE1vZGVyYXRl 96075\nfSI+Cg== 96076\nLnNldEltYWdlQml0bWFw 96077\nIHRyZW5jaGVz 96078\nIGdlbmVyYXI= 96079\nIGZlcm1lbnRlZA== 96080\nIGRlanRpbmc= 96081\nQ3RybHM= 96082\nIGRpc2FncmVlcw== 96083\nUXVpZXQ= 96084\nKFNRTEV4Y2VwdGlvbg== 96085\nIFRlbnNvckZsb3c= 96086\nT05B 96087\nUG9ydGxhbmQ= 96088\nLlB0cg== 96089\nbGx4 96090\nYXN0b24= 96091\nQ2x1c3RlcnM= 96092\nIFVzdWFyaW9z 96093\nIGtoaQ== 96094\nIGdpYQ== 96095\nIERvbHBoaW4= 96096\nxZFz 96097\nIGx1ZGVy 96098\nIGRpc3Bvc2l0aXZv 96099\nIFZ5 96100\nb21wc29u 96101\nIO2VoA== 96102\nIGtjYWw= 96103\nIENhbGNpdW0= 96104\nU2VjdGlvbnNJbg== 96105\nIENhc2M= 96106\nIGdyYXR1aXRp 96107\nb3NvbWFs 96108\nIHVuZGVyY3V0 96109\nIENhaA== 96110\nOnBhcmFtcw== 96111\nIHJldHVyblVybA== 96112\nIEVyZQ== 96113\nw6lyYw== 96114\nIGludGw= 96115\nfS8jew== 96116\nIG91dHB1dFBhdGg= 96117\nIGZhbHNlaG9vZA== 96118\nIFVzZXJSb2xl 96119\nPEhhc2hNYXA= 96120\nIENyZWF0ZVVzZXI= 96121\nIENvd2JveQ== 96122\nCVVzZQ== 96123\nXSgK 96124\nIFNob3BpZnk= 96125\nVmlld1N0YXRl 96126\nQWR2YW5jZQ== 96127\nLXRhbms= 96128\nIlQ= 96129\nIEplbnM= 96130\nPW9wdGlvbnM= 96131\nKCIuLg== 96132\nLm1pbWU= 96133\nIENSVA== 96134\nIGjDpHR0ZQ== 96135\nKHNv 96136\nLlVOS05PV04= 96137\nIGRhcsO8YmVy 96138\nIENPVkVS 96139\nR2Vt 96140\nQ3Jv 96141\nX1JFQ1Y= 96142\nX2hpZXJhcmNoeQ== 96143\nQ2hvb3Npbmc= 96144\nSkVYRUM= 96145\nIGRvcnNhbA== 96146\nKyI8 96147\nIE5leQ== 96148\nV29tYW4= 96149\nQmV6aWVy 96150\nIHJpZ3M= 96151\nIG9udHZhbmc= 96152\n77yM5YiZ 96153\nIEdhdXQ= 96154\nY21i 96155\nTmhhcA== 96156\nIG1vbm9j 96157\nIGVuZXJnaWE= 96158\nb2JzZXJ2ZU9u 96159\nc3Rha2Vz 96160\nLSot 96161\nIE5hY2s= 96162\nfX0iCg== 96163\nZXJ2YXM= 96164\nIEhpbmRlcmVkUm90b3I= 96165\nQWRqYWNlbnQ= 96166\nIEludGVybmFjaW9uYWw= 96167\nCWFyZWE= 96168\nIPCflA== 96169\nIHNwYXJrbGU= 96170\nKCkuXw== 96171\nLmlkZWE= 96172\nIHV0cmVjaHQ= 96173\nIG1hcHBlZEJ5 96174\nIENvbG8= 96175\nCVRS 96176\nUG9zdGVy 96177\nIGNvbWJhdGluZw== 96178\nIFllbGxvd3N0b25l 96179\naWVycmV6 96180\nYWNjdA== 96181\nIHPDoWNo 96182\nLk5ld3M= 96183\nIGZpZWxkVmFsdWU= 96184\nIGNheg== 96185\nIEZyZWVt 96186\nCQkKCQo= 96187\nIHVzdXI= 96188\nIHNvbGE= 96189\nIGN1bWJlcnNvbWU= 96190\nIGNhdGFwdWx0 96191\nIi4v 96192\nIEV4ZWN1dG9ycw== 96193\nIEFtZXM= 96194\nICc8JT0= 96195\nZmlsbG5h 96196\nLOKAlA== 96197\nOlNldFRleHQ= 96198\nLWNhdGVnb3JpZXM= 96199\nLWFyY2hpdmU= 96200\nIFBvbGx1dGlvbg== 96201\nLk9m 96202\n4oCcQXQ= 96203\nX0NIQVJTRVQ= 96204\nKENvbHVtbg== 96205\n4oCZKQ== 96206\nIHVubWlzdGFr 96207\nIGVhcm0= 96208\nIFBsYXRmb3Jtcw== 96209\nIE1vbWVudHVt 96210\nVmVjdG9yaXplcg== 96211\ncmF3ZXI= 96212\nKHBhc3Nwb3J0 96213\nKHBsYW5l 96214\nIHJlcHJlc2VudGE= 96215\nIHB1YmtleQ== 96216\nIEphaW4= 96217\nIG1lbm5lcw== 96218\nIGluc3RhbnRhbmVvdXM= 96219\nIGV0aGVycw== 96220\nIG5lc3Rz 96221\nIFBhdHRvbg== 96222\nIEhBQ0s= 96223\ncGFja2luZw== 96224\nSVNlcnZpY2U= 96225\nIHJvY2tlcg== 96226\nIGZpY2E= 96227\nIEdsYWRpYXRvcg== 96228\nIFVQQw== 96229\nIExvd2VsbA== 96230\nYmVhcmVy 96231\nIHZpcGVy 96232\nX2dsb2I= 96233\nIG1hc2hlZA== 96234\nIGhhaXJzdHlsZQ== 96235\nIHVuZGVybWluZXM= 96236\ncmVzdGF1cmFudHM= 96237\nIHJlYWN0aW9uYXJ5 96238\nIGJpbGxpZw== 96239\nfSIpOw0K 96240\nIHZpc3Rhcw== 96241\nIG9wZW5kaXI= 96242\nCWxhYmVscw== 96243\nYWxsaXM= 96244\nIFdvbGZm 96245\nIENQQw== 96246\nIHJhaWx3YXlz 96247\nIFZhdWdoYW4= 96248\nIEFza2luZw== 96249\nY2Fp 96250\nIEdu 96251\nX1BST0Y= 96252\nLVNlcA== 96253\nLmN1cnZl 96254\nTXVsdGlwbHk= 96255\n0YDQsNC90LjRhg== 96256\nIG1lZXR1cA== 96257\nZ2V0RGI= 96258\nKEdVSQ== 96259\nIHJlaW1idXJzZQ== 96260\nOnJlc3VsdA== 96261\nVHVtYmxy 96262\nLkNsb3NlZA== 96263\nIGNvbmZvcm1z 96264\nIEhvaw== 96265\naWVkYWRl 96266\nTmV3TGFiZWw= 96267\nIG5hdkN0cmw= 96268\nRG9jdG9ycw== 96269\nIOyViA== 96270\nIGJvdXRz 96271\nIGlzYw== 96272\nLyc7Cgo= 96273\ndWhs 96274\nLlVp 96275\nLXNhbWE= 96276\nIENhbm9uaWNhbA== 96277\nIG1ldGljdWxvdXM= 96278\nIGdyb3Rlcw== 96279\nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 96280\nZXRlcw== 96281\nIGxhbmd1ZQ== 96282\nIGZDaGFpbg== 96283\nIFR5cGVmYWNl 96284\nIEJyaWdoYW0= 96285\naWFyZQ== 96286\nJ8OpdGFpdA== 96287\nIEVGRg== 96288\nIGRlc3Ryb3llcg== 96289\nX21hdHJpY2Vz 96290\nTsO6bWVybw== 96291\nY2FsbGFibGU= 96292\nX3BlcmlvZHM= 96293\nc3RydWs= 96294\nbWFq 96295\nLnJs 96296\nLmxpZnQ= 96297\n2YrZhA== 96298\nw5A= 96299\nUmV0VmFs 96300\nRGVudmVy 96301\nIFRyaWJ1dGU= 96302\na2l5ZQ== 96303\nemV3 96304\nIFNwYXJl 96305\nIGxldWtlbWlh 96306\nIHdhaXRyZXNz 96307\nIHBsdXTDtHQ= 96308\nQWxpYXNlcw== 96309\nIExvY2F0ZQ== 96310\n5rY= 96311\nSWRlbnRpZmljYXRpb24= 96312\nLnRlbA== 96313\nLWRheXM= 96314\ndGVycml0 96315\naW1idXM= 96316\nIEJ1dHRlcktuaWZl 96317\n64K0 96318\ncnVwdGN5 96319\nIEdyYWRlcw== 96320\nIHVuZGVyc2lkZQ== 96321\nIGhhcmRzaGlwcw== 96322\ndW5laQ== 96323\nLWNvbnRhaW5lZA== 96324\nIFsnLg== 96325\nT2Jzb2xldGU= 96326\nLlJldHJvZml0 96327\nIHVyYW51cw== 96328\nX3JnYmE= 96329\nIHJhcGVz 96330\nIEthcmU= 96331\nW+KApl0= 96332\nIEZpbmNo 96333\nLmJ1bmlmdUZsYXRCdXR0b24= 96334\ncXVpc2Fy 96335\nIE51cnNlcw== 96336\nZWdhZGU= 96337\nIGhu 96338\nRXhjbHVkZQ== 96339\nIHN0b2NoYXN0aWM= 96340\nIHNvdHRv 96341\nIFBlbmFsdHk= 96342\nIHNvbnN0 96343\nIHJvc2E= 96344\nX0ZpbmQ= 96345\nIEludmFsaWRhdGU= 96346\nTGlzdEl0ZW1JY29u 96347\nJywNDQo= 96348\nX3BkdQ== 96349\nIE1lYWxz 96350\nYWrEhWM= 96351\nIE9vcHM= 96352\nIE5vdGljZXM= 96353\nIGRlcml2YXRpb24= 96354\nW10NCg== 96355\n6Lqr 96356\neXN0ZXJ5 96357\nX2ZpdmU= 96358\nRWFybg== 96359\nPWV2ZW50 96360\nIG9ncg== 96361\nLVJFQUw= 96362\nIExpcHM= 96363\nc2VsZWN0b3Jz 96364\nYWRpZXI= 96365\nIHNldEJhY2tncm91bmRJbWFnZQ== 96366\nKHRoaW5n 96367\nIHNvZnRiYWxs 96368\nXHhhYQ== 96369\nKGlkZW50 96370\nIEp1cnk= 96371\nIFZveWFnZQ== 96372\nIFRBcnJheQ== 96373\nKFBhaW50 96374\nV2FybQ== 96375\nRVhURVJOQUw= 96376\nYXN1 96377\nICghKCg= 96378\nLkZFVENI 96379\nIHNraXJt 96380\nT1JFRA== 96381\nY2FuY2VsbGVk 96382\naXR0ZWw= 96383\nIHNlZWR1 96384\nbGljaGVz 96385\nb2hv 96386\nLHJldGFpbg== 96387\nKFdlYkRyaXZlcg== 96388\naXB0YWJsZXM= 96389\nRVJJQ0E= 96390\nIGNsZWFubGluZXNz 96391\nZWxsb3dvcmxk 96392\nIGNvaGVzaW9u 96393\nZ2lzdA== 96394\nXS4n 96395\nZXJnaW5n 96396\nIGlzcA== 96397\nLm9mZnNldFRvcA== 96398\nKGZhY3Rvcg== 96399\ndW5pdmVyc2Fs 96400\nIFBsYXliYWNr 96401\nIEJ5dGVTdHJpbmc= 96402\nIGRhbW5pbmc= 96403\nIFNTUg== 96404\nYWN1cw== 96405\nIFN0YXRlbg== 96406\nIOWVhuWTgQ== 96407\nIFBlZQ== 96408\nIFNhbXBsaW5n 96409\nYXRvcmlh 96410\nc3RhcnRJbmRleA== 96411\n5ZCr 96412\nIOy0iOq4sA== 96413\nIE9saXZlaXJh 96414\nIEZsYWtl 96415\nYm9vbQ== 96416\nX01TSw== 96417\nIEZhY2luZw== 96418\nb3JnaGluaQ== 96419\nZm9vZHM= 96420\nVHJlZVdpZGdldEl0ZW0= 96421\nIEhBTEY= 96422\nIiIiKQo= 96423\nIENIQVBURVI= 96424\nIEV2ZWx5bg== 96425\nPis= 96426\nIEhvcm5ldHM= 96427\nd29rZQ== 96428\nIC9b 96429\nYXRob2xpYw== 96430\nLnNlZ21lbnRz 96431\nLm5hdmlnYXRlQnlVcmw= 96432\nIE1hbnVz 96433\nIHBlcHRpZGVz 96434\nIGZsZWV0aW5n 96435\nIEFUVg== 96436\nIFNoaWI= 96437\nSW50QXJyYXk= 96438\nIG1veg== 96439\ncHJvYmxlbXM= 96440\nb2duZQ== 96441\nLk90aGVy 96442\nQWRtaW5pc3RyYXRpb24= 96443\nJSUqLw== 96444\nIl09PQ== 96445\nIEFuZHJlcw== 96446\nQWRh 96447\naGludHM= 96448\nXCIiOwo= 96449\nKHBuZw== 96450\nIOqwgOuKpQ== 96451\n44OK 96452\ncmVqZWN0ZWQ= 96453\nIG1vdmVycw== 96454\n546H 96455\nIHBhcmVudGhlc2lz 96456\nKGFzc2lnbnM= 96457\nRWxpdGU= 96458\nUmVtaW5kZXI= 96459\nIHN1ZmZlcmVycw== 96460\nIFJlc291cmNlQnVuZGxl 96461\ndGhhZw== 96462\nPicNCg== 96463\nYW50aW5v 96464\nUGVyaXBo 96465\nIFNoYXJk 96466\nQ2hhcnREYXRh 96467\nKGpq 96468\nIG9zdGF0 96469\naHVnZQ== 96470\nLWF1dGhvcmVk 96471\nLmNp 96472\nIHB5bXlzcWw= 96473\nIGxpbmVycw== 96474\nIEFUUw== 96475\nPkxhc3Q= 96476\nKSIpCgo= 96477\nIGdldHBpZA== 96478\nR2V0U2l6ZQ== 96479\nIGV4dG9ydGlvbg== 96480\nW2Zsb2F0 96481\nIEVJTkE= 96482\nL0Jhc2U= 96483\nLnNldE9uQWN0aW9u 96484\n0L7Qu9GP 96485\nIEdsYWNpZXI= 96486\nX2F6 96487\nIHRyYW5zcG9ydGU= 96488\nIFNtcw== 96489\ndGh1bWJz 96490\nIHRyZWFzdXJlcg== 96491\nIG16 96492\naXN0aWs= 96493\nUkVESUVOVA== 96494\nIGlzaQ== 96495\nX3N0dWZm 96496\nUE9TSVRPUlk= 96497\nc3RhcnRkYXRl 96498\nIFppbmM= 96499\n5rG9 96500\nIGthaw== 96501\nIGVyZmFocmVu 96502\nX0NPTUJP 96503\nIHVjd29yZHM= 96504\nLlBheQ== 96505\nIGtpbmdkb21z 96506\nIGV4Y2VsZW50ZQ== 96507\naWduaXRl 96508\nX3ZhcmlhdGlvbg== 96509\nIG5hdmVnYWRvcg== 96510\n5LiT 96511\ndmlld0NvbnRyb2xsZXI= 96512\ncmlyZQ== 96513\nSG9uZXN0bHk= 96514\nQ2FzY2FkZQ== 96515\nZXRyYWlu 96516\nQXJnZW50aW5h 96517\nY3E= 96518\nIE1hcmlhbg== 96519\nL2Fy 96520\nIGludGVyZXNzZQ== 96521\ndXJhaGFu 96522\nKFBD 96523\nIGZyaXZvbA== 96524\nIFRydXN0ZWQ= 96525\nKElDb25maWd1cmF0aW9u 96526\nIFJpaGFubmE= 96527\nZW5kb3ph 96528\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 96529\nIHByb2NsYW1hdGlvbg== 96530\nIHByZWRvbWluYW50 96531\nIGNvbnN0cw== 96532\nLW5lY2s= 96533\nV29sZg== 96534\nLmNoZWNrYm94 96535\nIHN0YW56YQ== 96536\nIGVudGVuZGVy 96537\nLy8o 96538\nSGFuZHM= 96539\nIGJpbGxlZGVy 96540\nIFRvc2hpYmE= 96541\nYWJiaXg= 96542\nRU5DSUVT 96543\nIGppbQ== 96544\nUFVS 96545\nLmxlc3Nvbg== 96546\nIGJlcnRo 96547\nbGFyxLFu 96548\nQmxv 96549\nCWV4dA== 96550\nZWVs 96551\nIGRlbWFzaQ== 96552\nIGNvbG9uaXphdGlvbg== 96553\nL2Rpc2M= 96554\n77yP 96555\nQ2VydGFpbmx5 96556\n566h55CG5ZGY 96557\nIGpvZ2Fkb3I= 96558\ndcOp 96559\nQ29sdW1uc01vZGU= 96560\nIEpW 96561\nIEluc3RpdHV0 96562\nX3NwZWN0cnVt 96563\nLmRlbnNl 96564\nIFNob3J0Y3V0 96565\nIHNlYnVhaA== 96566\nIGZsYXNoeQ== 96567\nUmVnYXJkcw== 96568\nIHNoYXJwZXI= 96569\nY2FuY2VsbGF0aW9uVG9rZW4= 96570\nX2RldGFsbGU= 96571\nIFNjYXJsZXR0 96572\nINC80LDRgg== 96573\nIG5lZ29jaW8= 96574\n4LiW 96575\nIEpX 96576\nd2ViZHJpdmVy 96577\nLndhbGw= 96578\nIHhhbWFyaW4= 96579\nb3BhcXVl 96580\nLkFkZFBhcmFtZXRlcg== 96581\nKENvbnRyb2xsZXI= 96582\nLWFib3J0aW9u 96583\nX0ZVTkNUSU9OUw== 96584\nQ3VzdG9tZXJJZA== 96585\nIHZlbmly 96586\nIEJ1c3Rlcg== 96587\nX3ByZWRpY3RlZA== 96588\nL3J1bGVz 96589\nLU1ldGhvZHM= 96590\nIGdkemll 96591\nIl0nKTsK 96592\nIFB4 96593\nQ09OUw== 96594\nLlNsaWNl 96595\nIHJldmFtcGVk 96596\nIFRhYmxlVmlldw== 96597\nIGRpY2tz 96598\nIO2YuOy2nA== 96599\nIEF1eGlsaWFyeQ== 96600\nT3BlcmE= 96601\nL3Jj 96602\nIHVudGhpbmthYmxl 96603\nIGRlZHVjdGVk 96604\nbHo= 96605\nIExhZ2U= 96606\nIFJvd2xpbmc= 96607\ncHJvdmVk 96608\nT2ZmZXJz 96609\nLHNldA== 96610\nUkdCTw== 96611\nIEZV 96612\nIENlbnRPUw== 96613\nb3pv 96614\nIFRyb2phbg== 96615\nIG1hw7FhbmE= 96616\nIC8vPQ== 96617\nKio6 96618\nIHtcCg== 96619\nIEJvd2Vu 96620\nS25vd2luZw== 96621\nIOW6 96622\nPS09LT0tPS09LT0tPS09LQ== 96623\nIGViZW5mYWxscw== 96624\nXT17Cg== 96625\nQk1J 96626\nKCk7KQ== 96627\nKHBlcm1pc3Npb24= 96628\nQW5kZXJzb24= 96629\nIGRlZ3JhZGU= 96630\nU29hcA== 96631\ndcWf 96632\nIFB1cHB5 96633\nIEV0aGlvcGlhbg== 96634\nIFRFU1RJTkc= 96635\nZW5zZXg= 96636\nIGRyZXNzZXI= 96637\nIENob3Jl 96638\nVW5oYW5kbGVk 96639\nQXNzb2NpYXRl 96640\nLmFkZGl0aW9uYWw= 96641\nIGRpZmbDqXJlbnRlcw== 96642\naXNxdWU= 96643\nIG5lY2Vzc8Ohcmlv 96644\nIGdlbmVyaWNz 96645\nKHBm 96646\nIFxg 96647\nIE5lYXJieQ== 96648\nYXBvcmF0aW9u 96649\nIFRoZW1lRGF0YQ== 96650\nV2lGaQ== 96651\nLlJlYWw= 96652\nYWN5ag== 96653\nTGl2 96654\nIHBzeWNob2xvZ2ljYWxseQ== 96655\nbWV0aG9kUG9pbnRlclR5cGU= 96656\nIE5pa29s 96657\nIERlZGljYXRlZA== 96658\nX1BPUlRT 96659\nIEphZQ== 96660\nTlNBdHRyaWJ1dGVkU3RyaW5n 96661\nIGFtYmFzc2Fkb3Jz 96662\nIEhhbmRsZXJz 96663\nIEFuYXQ= 96664\nIHZvY2FsaXN0 96665\nIHJhcg== 96666\nIGRldnVlbHZl 96667\nLmdz 96668\nIHhjYg== 96669\nIHN1Ym1vZHVsZQ== 96670\nIEFTU0lHTg== 96671\ndXJlZW4= 96672\nIGNsYXNlcw== 96673\nZW1vdGg= 96674\nX0NOVEw= 96675\nX2p3dA== 96676\nIOuniA== 96677\nIG91dHBvc3Q= 96678\nIEluYm94 96679\nCWZsZXg= 96680\nIEdyb2Nlcnk= 96681\nSUxJTkU= 96682\nLm1vYg== 96683\nIENvbnN0cg== 96684\nXT1d 96685\nKHdhbGxldA== 96686\nIHNlZGU= 96687\nZmFs 96688\nIGltcGFzcw== 96689\nPXtbJw== 96690\nIHVuZm9yZQ== 96691\nZnVzZQ== 96692\nX0xlYW4= 96693\nIGF2YWxhbmNoZQ== 96694\nPXJhbmQ= 96695\nIGFkdWx0ZXJ5 96696\nIEdlZQ== 96697\nCUlucHV0U3RyZWFt 96698\nIGNhYmVs 96699\nX01PVU5U 96700\nIG5vdGljaWFz 96701\nIFJhdW0= 96702\nIGJ5dGVhcnJheQ== 96703\nIG9uSGlkZQ== 96704\nICkuCg== 96705\nJGluc3RhbmNl 96706\nIGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRo 96707\nYWNhbQ== 96708\nLWNvbGxlY3Rpb24= 96709\nIHVwaGU= 96710\nUG90ZW50aWFs 96711\nIFNEUw== 96712\nX2FwcHJvdmFs 96713\nRGFtbg== 96714\nOmNvbnZlcnQ= 96715\nIE1vZGlmaWNhdGlvbnM= 96716\nIOyYiA== 96717\nIHVuYWI= 96718\nIHNjcm9sbGVk 96719\nKyIpOwo= 96720\nIGdhdWNoZQ== 96721\nIEhPTA== 96722\nYW50YW5hbW8= 96723\nIGNvbHVtbkhlYWRlcg== 96724\nCVpFUEhJUg== 96725\nemFj 96726\nIG91dGluZ3M= 96727\nIGFwcGxhdWRlZA== 96728\naG9yaWE= 96729\nbW9keA== 96730\nIG1pbGxlbm5pYQ== 96731\nJm0= 96732\nLkpzb25JZ25vcmU= 96733\nIHBpb25lZXJlZA== 96734\nIENhdnM= 96735\nCWpz 96736\nZGVwYXJ0dXJlZGF5 96737\nX2ti 96738\nLlBhdGllbnQ= 96739\nIHBldGFscw== 96740\ncG9ydHJhaXQ= 96741\nIn19Cg== 96742\nSG9tZUFzVXBFbmFibGVk 96743\nLnByZXR0eQ== 96744\nLGNsanM= 96745\nIG1lZGlvcw== 96746\naGFzaGVk 96747\nZW1vZGVs 96748\nIE1vam8= 96749\nLmZyb21SR0JP 96750\nLXBl 96751\nIGludGltYXRlbHk= 96752\nIGVsZ2c= 96753\nW107DQo= 96754\nL09ic2VydmFibGU= 96755\nIG9iZWRpZW50 96756\nIEphbWFs 96757\nUmVxdWlyZWRNaXhpbg== 96758\nIExpc3RWaWV3SXRlbQ== 96759\nCXBsYWNlaG9sZGVy 96760\nX3RyYW5zYWtzaQ== 96761\nPFNlcnZpY2U= 96762\nIGVuc3VlZA== 96763\nIFJpY2Fu 96764\nU2FnYQ== 96765\nQVVESU8= 96766\nIGpt 96767\nLXNhbGVz 96768\nLW11bHRp 96769\nJSI7Cg== 96770\nIGNsYXNzaWZpY2F0aW9ucw== 96771\nIHTDo28= 96772\nQ29hbA== 96773\nOycpOwo= 96774\nIGRlbGlnaHRz 96775\nX2h6 96776\nX2JvbGQ= 96777\nREVQRU5E 96778\nINCh0L7Qt9C0 96779\nYXRlZQ== 96780\nX3N1Ym5ldA== 96781\nIFRvd25zZW5k 96782\nIENhc3RpbGxv 96783\nIHBydA== 96784\nJC8p 96785\nIGZpbGli 96786\nKCcvJylbLQ== 96787\nIHVwaG9sc3Rlcnk= 96788\nIGNvbXBvbmVudGU= 96789\nIFhG 96790\nLlJldmVyc2U= 96791\nX3R1bm5lbA== 96792\nSW1tZWRpYXRlbHk= 96793\nLW1vdmU= 96794\nIGFsaXN0 96795\nV1ND 96796\nc3RydWN0dXJhbA== 96797\naXN0b3JpY2Fs 96798\nVGFuZ2dhbA== 96799\nIENPVVJU 96800\nIG9ic2N1cmVk 96801\nIGxhbmRzbGlkZQ== 96802\nIGJlZHNpZGU= 96803\nIGJhcmFuZw== 96804\nLWVsZWN0ZWQ= 96805\nIGNlcmFtaWNz 96806\nLS0qLwo= 96807\nIFdhbm5h 96808\nRHlu 96809\nIHZlcnNjaGllZGVuZQ== 96810\nIGluZHVjaW5n 96811\nIGZsdXRl 96812\nLkFwcGVuZFRleHQ= 96813\nIFp1Yg== 96814\nIFB1bGl0emVy 96815\nOmJvdGg= 96816\nLm1heExlbmd0aA== 96817\nLlByb3BlcnR5VHlwZQ== 96818\nYXd5 96819\naXRlbU5hbWU= 96820\nIE5hcnJhdGl2ZQ== 96821\ncmV2b2x1dGlvbg== 96822\nIGhhbHRlbg== 96823\nIEVycm9yUmVzcG9uc2U= 96824\nZ2F0aGVy 96825\nL3V0aWxpdHk= 96826\nOicn 96827\nIEtlZQ== 96828\nIE9seW1waWE= 96829\nQ2xpbmljYWw= 96830\nOmdyZWVu 96831\nIFBsZXg= 96832\nIEtlbnNpbmd0b24= 96833\nIFBob25ldGlj 96834\nIGRpc3RyaWJ1dGVz 96835\nX2V4ZW1wdA== 96836\nV2F0Y2hpbmc= 96837\nLk1pc2M= 96838\nIGRvbWFpbmU= 96839\nOiIu 96840\n44OV44I= 96841\nX01PRFVMRVM= 96842\nIGhhYmxhcg== 96843\nIExhb3M= 96844\nLnNldFRleHRTaXpl 96845\nLnBhdXNlZA== 96846\nX1RX 96847\nIG92ZXJ3aGVsbQ== 96848\nIGhlbWF0 96849\nTHVja2lseQ== 96850\nIFNFTlQ= 96851\nIEludmVzdGlnYXRvcnM= 96852\nPih7 96853\nKGZvdXQ= 96854\nIEFVWA== 96855\nLnJhd1F1ZXJ5 96856\nLXN0cm9uZw== 96857\nIHJlc2VtYmxlZA== 96858\nIFNoYWZ0 96859\nIFhJSUk= 96860\nc3VnZ2VzdA== 96861\nIHNpbmdhcG9yZQ== 96862\nX2FiaWxpdHk= 96863\nJGs= 96864\nCWlOZEV4 96865\nXEltYWdl 96866\nQ2FkYXN0cm8= 96867\nLnBpdm90 96868\nIG1hbnBvd2Vy 96869\nX2F0dHM= 96870\nLnNldEZpbGw= 96871\nZXdvcmxk 96872\nY29uc3Rz 96873\nR2V0V2lkdGg= 96874\nIGdyYXR1aXRh 96875\nIFBldHI= 96876\nLWFuc3dlcg== 96877\nIEhlbWlzcGhlcmU= 96878\nIENhag== 96879\nIFRyYWRlcw== 96880\nxIdp 96881\nIEZyZWRkeQ== 96882\nT25DaGFuZ2U= 96883\nIHBvcm5vZ3JhZmlh 96884\nIFNVTU1BUlk= 96885\nX21lYXM= 96886\nIERSSVZF 96887\nIENyZWU= 96888\nX21hbGU= 96889\nIHN1aw== 96890\nIG1hbmV1dmVycw== 96891\nc2V0VmlzaWJpbGl0eQ== 96892\nYWxsaQ== 96893\nIGRpc2NyZXRpb25hcnk= 96894\ncmVnYXRpb24= 96895\nWVNUSUNL 96896\nOmhyZWY= 96897\nIHRhcmFm 96898\nIGNodQ== 96899\nIEBb 96900\nRW5vdWdo 96901\nLlRyYW5zZmVy 96902\nSWZOZWVkZWQ= 96903\nOildKQ== 96904\nCSAgICAgICAgICAgICAg 96905\nW2F4aXM= 96906\nVHJhbnNsYXRpb25z 96907\nLnNlcnZlcnM= 96908\nIEtFRVA= 96909\nJywpCg== 96910\nc3BvbnNvcg== 96911\nYXJjaGl2ZXM= 96912\nLlVsdHJhV2lu 96913\nIEhvbm91cg== 96914\nJ10pKTs= 96915\nIGluZWxpZ2libGU= 96916\nIEFudHdvcnRlbg== 96917\nIEFwcGxpY2F0aW9uRXhjZXB0aW9u 96918\nIGNhdGVnb3JpZQ== 96919\nIFdFSUdIVA== 96920\nIEJ1bmR5 96921\nIFBJWEVM 96922\nIGR1a2U= 96923\nVG93ZXI= 96924\nU2NvdGxhbmQ= 96925\nIHJlZmVyZWVz 96926\nIEFzc2VtYmx5VHJhZGVtYXJr 96927\nCXN0YXJ0QWN0aXZpdHk= 96928\nLk9uZVRvT25l 96929\nIEF1c3dhaGw= 96930\nIHN0cmVuZ3RoZW5z 96931\nLlF1aXQ= 96932\nIFVSTFJlcXVlc3Q= 96933\nZWVj 96934\nIHJlZ2lzdHJhemlvbmU= 96935\nIGhvc2Vz 96936\nQWN0dWFsaXphcg== 96937\nL2FycmF5 96938\nIGNvbnN0cnVjdGlvbnM= 96939\nY2Nk 96940\nIEZpbGVOb3RGb3VuZEVycm9y 96941\nVGjDqm0= 96942\nKHJlc3VsdGFkbw== 96943\nIFNFUklFUw== 96944\nU3BlYWs= 96945\nX0FIQg== 96946\nQmxvY2tlZA== 96947\nLWZvbnRhd2Vzb21l 96948\nOl0p 96949\nb2JibGU= 96950\nKGxpbmtz 96951\nIENhdGFsb25pYQ== 96952\nR2VW 96953\nLkRhdGVGb3JtYXQ= 96954\nIGZsZWE= 96955\nLmVm 96956\nIHNvbGljaXR1ZA== 96957\nIERZ 96958\nY29kZWdlbg== 96959\neXRoZQ== 96960\nIGVwb2xs 96961\nX1RE 96962\nIGFmZmlybWF0aW9u 96963\nX2Zh 96964\nSVNUQQ== 96965\nIEVhdG9u 96966\nY3JlYXRlUXVlcnk= 96967\nIGxvZ2lzdGljYWw= 96968\nIFJheWNhc3RIaXQ= 96969\nIGNhdWxpZmxvd2Vy 96970\nIHVsY2Vy 96971\nLkFscGhh 96972\naW5rZQ== 96973\nWy4u 96974\nRVhBTVBMRQ== 96975\nLXdhZ2U= 96976\nIHN0YXRp 96977\nZWN0aXZl 96978\nLmdldE1pbg== 96979\nIFNVQkpFQ1Q= 96980\nIEF1ZGlvTWFuYWdlcg== 96981\nenphcmVsbGE= 96982\nIFNlbGVjdExpc3RJdGVt 96983\nICQNCg== 96984\nIG9oaW8= 96985\nIFRhaG9l 96986\nIGtXaA== 96987\ncXVlcnlTdHJpbmc= 96988\nIGRlcGFydGFtZW50bw== 96989\nPWFkbWlu 96990\nIHdvcmtzdGF0aW9u 96991\nKSsrOwo= 96992\nSGVhZGVySW5TZWN0aW9u 96993\nIFRyaXVtcGg= 96994\nQ2hhcmxvdHRl 96995\nIFNNQQ== 96996\nQ8OzbW8= 96997\nIHZlcm0= 96998\nIHRoZWFubw== 96999\nYmdjb2xvcg== 97000\nXCIiLAo= 97001\nIFJlbWluZGVy 97002\nQmlsbHk= 97003\nb3JhbFR5cGU= 97004\nZ2ViZXI= 97005\nKGNsb25l 97006\nIEt1dA== 97007\nLz4u 97008\nQXBvbGxv 97009\nIHNobA== 97010\nWkg= 97011\nVGh1bmRlcg== 97012\nIGdpZnM= 97013\nX2tlbGFz 97014\nIFJvdGhz 97015\nIH0o 97016\nIEJyb2FkY29t 97017\nIERlcHRocw== 97018\nCUlOTkVS 97019\ncGFyY2Vs 97020\nIGVqZXJjaWNpbw== 97021\nIGluZGVwZW5kZW50cw== 97022\naWxsb3c= 97023\nZXhlY3V0YWJsZQ== 97024\nRXZlbnRv 97025\nIHpvc3Q= 97026\nIEhNQUM= 97027\nW0RsbEltcG9ydA== 97028\nYWxsZXM= 97029\nX2Rlcml2YXRpdmU= 97030\nQXBpS2V5 97031\nIHN0ZXBwZXI= 97032\nPXBsdA== 97033\nZ2V0SW5kZXg= 97034\nIHZhbGV1cnM= 97035\nUG9saXRpY3M= 97036\nIElEWA== 97037\nIFVzYQ== 97038\nIExUQw== 97039\nLm1pbkxlbmd0aA== 97040\nc3Rybw== 97041\nX05D 97042\nIHN0YWduYW50 97043\nIG1vbnRhZ2U= 97044\nIGJsb3VzZQ== 97045\nZWxpZ2U= 97046\nIHR1cnF1b2lzZQ== 97047\nIFN1cGVybg== 97048\n5q2z 97049\ndmFyYQ== 97050\nTmV3SXRlbQ== 97051\nX0VYVEVOREVE 97052\nIHdvb2R3b3JraW5n 97053\nIEVwaXNjb3BhbA== 97054\nLnBhaXI= 97055\nLlVzZXJJbmZv 97056\nIGRpcmVudA== 97057\nL3RjcA== 97058\nIGZyYXVnaHQ= 97059\nU2xhdmU= 97060\nLmdldExhdGl0dWRl 97061\nIFRvb2xib3g= 97062\nIGVhcm5lcnM= 97063\nIEhPVVI= 97064\n0LDQu9Cw 97065\ncG9zYWJsZXM= 97066\nY29uZGl0aW9uYWxseQ== 97067\nX3h4 97068\nIGxhbsOn 97069\nKHJw 97070\nQ2hh 97071\nIGluY2Fybg== 97072\nLkRhbw== 97073\nLi8o 97074\n2KfZgQ== 97075\nVGQ= 97076\nQ0VG 97077\nL3JhbmQ= 97078\nLlZpcnR1YWw= 97079\nIGRiSGVscGVy 97080\nYW1pbmVz 97081\nIGx6 97082\nIHN0b3M= 97083\nIEF0a2lucw== 97084\nX0RE 97085\naXRvcmlv 97086\nIG1pbmltaXNl 97087\naGlwc3Rlcg== 97088\nKHsuLi4= 97089\nX1NSVg== 97090\nW2ZyYW1l 97091\nIFJva3U= 97092\nR1JQ 97093\nIGJhcmJlcg== 97094\nLkZlY2hh 97095\nIOuwnA== 97096\nIGdyYW51bGFyaXR5 97097\nIFNheWluZw== 97098\nX2xpa2VsaWhvb2Q= 97099\nLmJhckRvY2tDb250cm9s 97100\nIGZyb250bGluZQ== 97101\nIFdoYWxl 97102\nIHNtZWxsaW5n 97103\nIENvbnRyaWJ1dGlvbnM= 97104\naXZhbnQ= 97105\nIGNyaXBwbGluZw== 97106\ncHJlbG9hZA== 97107\nIEhlcnJlcmE= 97108\nX1dBVENI 97109\nLWV0 97110\nOmV4cHI= 97111\naW52ZXN0bWVudA== 97112\nZWRlcmF0aW9u 97113\nX21nbXQ= 97114\nIGhvb3Bz 97115\nbW9ua2V5 97116\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 97117\naW50ZXJzZWN0 97118\nIGNyaW1zb24= 97119\nIHN1b2k= 97120\nIFtdOgo= 97121\nWE9iamVjdA== 97122\nU0ZNTA== 97123\nRVFVQUw= 97124\nKCd+ 97125\nY2VudHJvaWQ= 97126\nCXJlc3RvcmU= 97127\nIHByZW5hdGFs 97128\nIE1pc3RyZXNz 97129\nIHF4 97130\ndHBz 97131\nIHJlc3Bhd24= 97132\nIFtdKSwK 97133\nIGtvbnRyb2w= 97134\n44GC44KK44GM44Go44GG44GU44GW 97135\nTW9kdWxlTmFtZQ== 97136\nIG5ld1BhdGg= 97137\nIFBhZ2luZw== 97138\nIHJpbnM= 97139\nX21ha2Vy 97140\nXGJyaWVm 97141\nIGJpc2hlcg== 97142\nCVJlYWQ= 97143\nIGppaGFkaXN0 97144\nLnBlcnNpc3RlbnQ= 97145\nIFJvYm90cw== 97146\nL2dycGM= 97147\nIEpvdQ== 97148\nw6RyZW4= 97149\n77yM5Zyo 97150\nLXB0 97151\nIHpkYXJtYQ== 97152\nX05N 97153\nIENvbm5lY3Rpdml0eQ== 97154\nKGJj 97155\nIEZsb3JpYW4= 97156\nIFNvY2lvbG9neQ== 97157\nX3dv 97158\nQW5kU2VydmU= 97159\nXygpOwo= 97160\nIEZMVA== 97161\nX0RFUg== 97162\nIENvbm5pZQ== 97163\nIEJyb2FkY2FzdFJlY2VpdmVy 97164\neyg= 97165\nIGNvbW1lbnRlcg== 97166\nIGRlbW9jcmF0 97167\nIGFtcGxpZnk= 97168\nLS0tLS0tLS0tLQ0K 97169\nIEhNUw== 97170\nIHRyYWlsZWQ= 97171\nIFNvZGE= 97172\nLXRlc3RlZA== 97173\ndWxpc3Q= 97174\nKW5ldw== 97175\nX1RocmVhZA== 97176\nVG9kZA== 97177\nIGRlYmlhbg== 97178\nVms= 97179\nIHByZXNlbnRh 97180\nIGNvbWZvcnRz 97181\nIFdhc2hlcg== 97182\nIGdhcmc= 97183\nIEh1Y2thYmVl 97184\nINGB0LDQvA== 97185\nICEi 97186\nQWRhcHRlck1hbmFnZXI= 97187\nIEVh 97188\nIEFzc29jaWF0aW9ucw== 97189\nCQkJCQkKCQkJCQkK 97190\nLmdldFdyaXRhYmxlRGF0YWJhc2U= 97191\nIG51Y2xlaQ== 97192\nw6lnb3JpZQ== 97193\nCSAgICAgICAgICAgICAgICAg 97194\nQkFC 97195\nIHVwa2VlcA== 97196\nIFR1cA== 97197\nLndpdGhPcGFjaXR5 97198\nbHlh 97199\nIGx1eGU= 97200\ndXBybw== 97201\nLWVuZw== 97202\nIHJlbGHDp8Ojbw== 97203\nIGtleVByZXNzZWQ= 97204\nIGh5YnJpZHM= 97205\nbGZ3 97206\nT3BlcmF0aW9uQ29udHJhY3Q= 97207\nIG5hbWVMYWJlbA== 97208\nIEhvcnQ= 97209\nX2dydXBv 97210\nIGJhbmRh 97211\nSXg= 97212\nSGVhbHRoeQ== 97213\nLmdldEVuZA== 97214\nZnJhdQ== 97215\nKFNjZW5l 97216\nKENvbGxlY3Rpb25z 97217\nIFNraXBwaW5n 97218\ndWJv 97219\nIGbDvG4= 97220\nIj4tLT4K 97221\nIGRyb2l0cw== 97222\nIGhvbW9zZXh1YWxz 97223\nIGFiZHVjdGlvbg== 97224\nCXdpZGdldA== 97225\nJGhlYWRlcnM= 97226\nIERBUg== 97227\nIGZsYQ== 97228\ndGhyZWF0 97229\nIGxvdWlz 97230\nLkdldFByb3BlcnR5 97231\nIkp1c3Q= 97232\nKGZyYW1lcw== 97233\ncnlv 97234\ncHJvZmVzc2lvbg== 97235\nfGk= 97236\n7ZW07ISc 97237\nKHN2 97238\nIHVucmVjb2duaXplZA== 97239\nSW9uaWM= 97240\nRmFzaGlvbg== 97241\nU2NyZWVuU3RhdGU= 97242\nIEluY29taW5n 97243\nTm90Tmls 97244\nIHN5bmNpbmc= 97245\nZW1pZQ== 97246\nIHRoZXJtbw== 97247\nX3Byb2Nz 97248\nIGluY29uc2lzdGVuY3k= 97249\ncmVsaWdpb3Vz 97250\nLm1q 97251\nIHBlcnNvbm4= 97252\nIG1vbWVudG9z 97253\nb3JhcmlseQ== 97254\nIOaK 97255\nX25ldXJvbnM= 97256\nSWxsdXN0cg== 97257\naW1vdG8= 97258\naWxpaw== 97259\nIFdvag== 97260\nVHJhZGluZw== 97261\nIGFwcGFyZQ== 97262\nIGVudHJlcHJpc2Vz 97263\nYWNoYXQ= 97264\nIMKs 97265\nIG5laWdo 97266\nQlVUVE9ORE9XTg== 97267\nIE1haGVy 97268\nYWdoYW4= 97269\nLWhhc2g= 97270\nImY= 97271\nIGNsaWVudGVsZQ== 97272\nLmFkZEJ1dHRvbg== 97273\nCVNQ 97274\nUWk= 97275\nIGdyYXRlZA== 97276\nUE9TSVRF 97277\nOj4= 97278\nIEhvd2VsbA== 97279\nIENvbXBhcmF0aXZl 97280\nIElTQw== 97281\nwq1p 97282\nT2NlYW4= 97283\nRGF2aXM= 97284\nIEZpbG1l 97285\nV2lucw== 97286\nIEpJVA== 97287\nb2NjZXI= 97288\nIENvcm0= 97289\nRU5DSE1BUks= 97290\ncmNoaXZl 97291\naWNhw6fDo28= 97292\nIG1hdGE= 97293\nIGNoaWxkYmlydGg= 97294\nIE9wdGlvbmFsbHk= 97295\nRW5z 97296\nIHhodHRw 97297\nIGVsdWNpZA== 97298\nX09zY0luaXRTdHJ1Y3Q= 97299\nKSkpOgo= 97300\nIGludHVpdA== 97301\nIERvbmF0ZQ== 97302\nIGNvcnJlbGF0ZXM= 97303\nPkRlbGV0ZQ== 97304\nIGVxdWlwZQ== 97305\nIGJvY2E= 97306\nIGluZmxhdGFibGU= 97307\nZXJhaA== 97308\nIERhdGVUaW1lS2luZA== 97309\nIGNhbHZlcw== 97310\nXExpYg== 97311\nIGVtbHJ0 97312\nIFRyaWxvZ3k= 97313\nIFBhbmM= 97314\nIER1aXM= 97315\nIHBlbMOtY3VsYQ== 97316\nV0FSRFM= 97317\nX0RFVEVDVA== 97318\nLXNlY3Rpb25hbA== 97319\nZGhjcA== 97320\nRm9yUm93 97321\nLWRlc3RydWN0 97322\nIFByZXNlbnRlcg== 97323\nL3NsaWNr 97324\nLG9u 97325\nIENpdGFkZWw= 97326\nbG9nZ2VkaW4= 97327\nX3N1YnR5cGU= 97328\nIHNpZ3Vl 97329\nIGN1cmluZw== 97330\nIEZpcmV3YWxs 97331\nIGZsdW9yZXNjZW5jZQ== 97332\nIEl0YWxpYW5z 97333\n0LjRgtGB0Y8= 97334\nLmdldFN0eWxl 97335\nSW5TZWNvbmRz 97336\namll 97337\nLVNtaXRo 97338\nIHhsaW5r 97339\nIHN1Ym1pc3NpdmU= 97340\n0L7QvdGC 97341\nYXJib25hdGU= 97342\nIEZhdWw= 97343\nX2dvYWxz 97344\nIENvbW1pc3Npb25lcnM= 97345\nY2hhcnRJbnN0YW5jZQ== 97346\nX1BPU1RGSUVMRFM= 97347\nIG1lZGlhbA== 97348\nIG1hbm9z 97349\nIGRlbHQ= 97350\nc3Zt 97351\nLkFwaXM= 97352\nZXBoeQ== 97353\nIGFzeW1wdA== 97354\nIGFwcERlbGVnYXRl 97355\nIGltcHJvYmFibGU= 97356\nY2th 97357\nc2ltZA== 97358\nL0Vycm9y 97359\nLuKAkw== 97360\nIFBUUw== 97361\nZGVlcg== 97362\nIHNpbmE= 97363\nbWFnbml0dWRl 97364\nSURBREU= 97365\nJ119Jw== 97366\nIG1heW9yZXM= 97367\nCWNvbW1lbnQ= 97368\nL2NvbnNvbGU= 97369\nIkA= 97370\ndm9sdA== 97371\nLnNlbGw= 97372\nIE1hY3k= 97373\nIG1lbG9k 97374\nIGltw6FnZW5lcw== 97375\nX2NoZw== 97376\nIGlub3V0 97377\naWRlbnRl 97378\nKScpLAo= 97379\nZG5p 97380\nLmJsb2I= 97381\nIHR5cG9ncmFwaHk= 97382\nIGVlcmll 97383\nX09JRA== 97384\ncGVzYW4= 97385\nYWphbg== 97386\nIGNob3BwaW5n 97387\nIGJsdWZm 97388\nYWRm 97389\nX2Jhc2Vz 97390\nLkZvcm1hdHRlcg== 97391\nIFwl 97392\nIFBhZ2VJbmZv 97393\nQ2Fycmllcg== 97394\nIENhbGlicmF0aW9u 97395\nY29tbw== 97396\nLWJvZGllZA== 97397\nIGZpbmFuY2llcg== 97398\nIElOQQ== 97399\nLkVSUg== 97400\nIGhvb2RpZQ== 97401\nIFNhbml0eQ== 97402\nZ3VhcmRlZA== 97403\nLm9wZW5kYXlsaWdodA== 97404\nSVNNQVRDSA== 97405\nSGlnaGxpZ2h0cw== 97406\nw7xuaw== 97407\nYW5pZW0= 97408\nYW5nZXJlZA== 97409\nYXNzaWdubWVudHM= 97410\nIHJlZ2lzdHJhZG8= 97411\nIFVQUEVS 97412\nYW1waWxrYW4= 97413\nYXNoaXJl 97414\nIE5pa29sYQ== 97415\nIENGTA== 97416\nIEhEQw== 97417\nIHBvaWRz 97418\nIElQcw== 97419\nIHByZXZlbnRhdGl2ZQ== 97420\naXBzb2lk 97421\naWZpeA== 97422\nLmNhbWVs 97423\nLmdh 97424\nVm9sdW1lcw== 97425\nLXN0ZQ== 97426\nWWFob28= 97427\nX3NpYmxpbmc= 97428\nSGlnaGVzdA== 97429\nb3B0Z3JvdXA= 97430\nIGt2aW5uYQ== 97431\n4oCd44CCCgo= 97432\nIEFwcGxpYW5jZXM= 97433\nICI+PA== 97434\nJykiKQo= 97435\naHR0 97436\nIElkZW50aWZpZWQ= 97437\nIHBlbmNpbHM= 97438\nIG1lbWJlcklk 97439\nIGFwcGVuZFN0cmluZw== 97440\nLmxvYWREYXRh 97441\nIG1vY2tNdmM= 97442\nIGp1Yg== 97443\nIFNsdXQ= 97444\nIFRhaXBlaQ== 97445\nc3RhdHQ= 97446\nUG9saXQ= 97447\nIHBhcnRhZ2Vy 97448\nRGlkQ2hhbmdl 97449\nSW5jcmVhc2Vz 97450\nKX0u 97451\nIEJhYmE= 97452\nX0NMSVA= 97453\nW3VuaXQ= 97454\nINC60LvRjtGH 97455\nIGFsY3VuaQ== 97456\nIExvbGE= 97457\nIGNsaW5naW5n 97458\nQFBvc3RNYXBwaW5n 97459\nKGNvbmNhdA== 97460\nIHNzaWQ= 97461\nIEZhdWM= 97462\nb2tpdA== 97463\nIFJlY29yZGVk 97464\nw6FsZXo= 97465\nKCQoJzw= 97466\nLmFzc2VydElzTm90 97467\nIGthbGk= 97468\nVm9sdA== 97469\nIHdhcm1seQ== 97470\nIHNjYXJlcw== 97471\nZ2V0dGk= 97472\nZsO8aHJ0 97473\nX2RvZXM= 97474\nLkVNQUlM 97475\naW1hdGlvbnM= 97476\nIHNwcmluZ2ZveA== 97477\nIERlY29t 97478\nYXJjeQ== 97479\nIGdsaXRjaGVz 97480\nIE1vZmY= 97481\nIFZvbGw= 97482\nLmJldHdlZW4= 97483\nIGNvb3JkZW4= 97484\nIFBhcnRpY3VsYXJseQ== 97485\nR0JQ 97486\nIHNlbWJsZQ== 97487\nRWFzdGVybg== 97488\nX01TQg== 97489\nXSl7DQo= 97490\nbW9yZ2Fu 97491\nIEVWQUw= 97492\nZGVyZQ== 97493\nSE9VU0U= 97494\nbW9pcmU= 97495\naXN0aXF1ZQ== 97496\nX2xzdG0= 97497\nLWNvbW1pdA== 97498\neXN0ZXJpb3Vz 97499\nIHR3aW5r 97500\nLXRodW1ibmFpbHM= 97501\nZW7DrQ== 97502\nOicnLA== 97503\nIGJsYWNrb3V0 97504\nIEZsb29ycw== 97505\nIHNvZmFz 97506\nIG91aQ== 97507\nbGVzaG9vdA== 97508\nIFJhcQ== 97509\nLWFicw== 97510\nIGtyYQ== 97511\nTWluaW5n 97512\nc2hhZnQ= 97513\nLnNldENvbHVtbnM= 97514\nQ2xheno= 97515\nUFJFVFRZ 97516\nLnBsYXlsaXN0 97517\n6Zai 97518\nLVNhaGFyYW4= 97519\nTUlORw== 97520\nCWJs 97521\n6K6u 97522\namY= 97523\nRE9DS0VS 97524\naG9wZWZ1bGx5 97525\nKGlnbm9yZQ== 97526\nIFVzZXJzQ29udHJvbGxlcg== 97527\nIE1pdGFyYmVpdGVy 97528\nIExFUw== 97529\nSGFtaWx0b24= 97530\nLW1ldGFkYXRh 97531\nIEtL 97532\naWt0aWc= 97533\nIHdvbGx0ZQ== 97534\nZWdyYXRvcg== 97535\nXWJvb2w= 97536\nLGN1cnJlbnQ= 97537\nIHZhbHVlVHlwZQ== 97538\nIGV4Y2F2YXRpb24= 97539\nb2xhbmQ= 97540\nIHZlcnY= 97541\nL2ZpbGVwYXRo 97542\nQXV0aFByb3ZpZGVy 97543\nIHByb2NyYXN0 97544\nCVVMT05H 97545\nX01FTUJFUlM= 97546\nIHVwbGlmdA== 97547\nIEF1dG9ub21vdXM= 97548\nIGFydHdvcmtz 97549\nIE91dHJlYWNo 97550\nIHBvcmU= 97551\nSG9tZXBhZ2U= 97552\nRGlhbG9nVGl0bGU= 97553\nIEdlbmVyYXRpbmc= 97554\nUEFSU0U= 97555\nIHNlbWFuYXM= 97556\nIGh1bWFubw== 97557\nSlNHbG9iYWxTY29wZQ== 97558\nIHZvbHRl 97559\nIGJlbGxh 97560\nKGlzaW5zdGFuY2U= 97561\nIHBsYw== 97562\nXENhdGFsb2c= 97563\nIGVzdGVlbWVk 97564\n6Zu3 97565\nKHN1ZmZpeA== 97566\nIHN3ZWVwcw== 97567\nCU9SREVS 97568\nIGRvaXZlbnQ= 97569\nIFN3YXJt 97570\nIENvbXBpbGVk 97571\nZ2V0UGFnZQ== 97572\nQURS 97573\nLlJpY2hUZXh0Qm94 97574\nIE5hbWluZw== 97575\nYWdnZWQ= 97576\nIEdBTkc= 97577\ncmFzaW5n 97578\nb2RlbGVk 97579\nIGdhbGE= 97580\nIEpTTmFtZQ== 97581\nZGRm 97582\nIGlsbHVzdA== 97583\nIExhbnNpbmc= 97584\nW3BvcnQ= 97585\nLWRlYXRo 97586\nIGRpbmhlaXJv 97587\nIEVpZ2h0aA== 97588\nIGJpYW4= 97589\nc3TDpQ== 97590\nIHZlcnNpw7Nu 97591\nIExpbmVhckdyYWRpZW50 97592\nIEhhcmRpbmc= 97593\nLiop 97594\nZWN6eQ== 97595\nJGhlYWRlcg== 97596\nIHbDpXI= 97597\nVW5jaGVja2Vk 97598\nIGtvamU= 97599\nIFBhbGFkaW4= 97600\nKCkpKSw= 97601\nR2l2aW5n 97602\nKCl9KQo= 97603\nIGRpcHM= 97604\nRnJpZW5kbHk= 97605\nIHBvcnRyYXlz 97606\nIGhlbGl1bQ== 97607\nIGluc3VyZ2VuY3k= 97608\nX2V4cGlyeQ== 97609\nIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n 97610\nIGFhbnRhbA== 97611\nc2xvcGU= 97612\nbWFzdA== 97613\nLmdldEludGVnZXI= 97614\nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 97615\nX1BJUEVMSU5F 97616\nIGRlbnNlbHk= 97617\nIG11dGF0aW5n 97618\nbWlkaQ== 97619\nIFNlaXQ= 97620\nYXluZQ== 97621\nTk9XTEVE 97622\nIERlc21vbmQ= 97623\nIEZOYW1l 97624\nIE5haXJvYmk= 97625\nXENvbnRleHQ= 97626\nIGNhbGN1bGFy 97627\nLWRlbg== 97628\nIGNvdHQ= 97629\nXSk6DQo= 97630\nIFJlY29tbWVuZGF0aW9u 97631\nIFJvbGV4 97632\nIHZhbGlkYXRpb25SZXN1bHQ= 97633\nLnBhdA== 97634\nIG7DoHk= 97635\nIFJlc3RDbGllbnQ= 97636\nIEdQSQ== 97637\nIEFzaGV2aWxsZQ== 97638\nIE9TUA== 97639\nIFBFUk1JU1NJT04= 97640\n0JTQsNGC0LA= 97641\nL25vdGlmaWNhdGlvbg== 97642\nS25pZ2h0 97643\nX1dvcmQ= 97644\nIEJlbmRlcg== 97645\ncmFua2luZw== 97646\nIHBhcnRpZGE= 97647\nX3Jlc2VydmF0aW9u 97648\nzIA= 97649\nIG1OYW1l 97650\nIGdldGNo 97651\nIGJvcnI= 97652\nIGRpbGlnZW50 97653\nRGlzY3Vzcw== 97654\n5q2j5Zyo 97655\nYXBlYWtl 97656\naW9uZWQ= 97657\nLU5hemk= 97658\nLmN1bQ== 97659\nIEtyb24= 97660\nPSQoJyM= 97661\nL3NpbmdsZQ== 97662\nIGVyb3Rpc2No 97663\nIFZpYg== 97664\nIHJhdGlmaWVk 97665\nIGNvbmNlcnRlZA== 97666\nIFJFR0FSRA== 97667\nIGRvYnI= 97668\nLkRyaXZlck1hbmFnZXI= 97669\nJ3I= 97670\nUG9ydGFibGU= 97671\nCXN1aXRl 97672\nIHJlbGFjaW9uZXM= 97673\nIERvcA== 97674\nZW1wbG9p 97675\nRE9C 97676\nIGNydW1icw== 97677\nIHhscw== 97678\nX0FwcGxpY2F0aW9u 97679\nKCc6Jyw= 97680\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 97681\nbXNl 97682\nIGJlcms= 97683\nIFJldHVyblZhbHVl 97684\nIEJlbGx5 97685\nIGNhbWFy 97686\nIFBlZWs= 97687\nZWxzaW5n 97688\nIG5vdGlmaWVz 97689\nIFRyaXN0YW4= 97690\nIEdBUg== 97691\nZW1tZQ== 97692\nIEVsZXZhdGVk 97693\nX0NTVg== 97694\nKGNoYWxr 97695\nIHR3ZW50aWVz 97696\nIFNlYXJjaFJlc3VsdA== 97697\nPXNlYXJjaA== 97698\nIE1peGluZw== 97699\nw710 97700\nIHJlY3J1aXRlcg== 97701\nIElERU9HUkFQSA== 97702\nIEFnbw== 97703\nKE9wZXJhdGlvbg== 97704\nJHZhbHVlcw== 97705\nIHdvcmxkbHk= 97706\nIFJvc2VuYmVyZw== 97707\nIENvbmZpZ3VyZVNlcnZpY2Vz 97708\nPio8Lw== 97709\nS0FOSkk= 97710\nIGNodWNrbGVk 97711\nIHN0cmlmZQ== 97712\nIEJvbWJheQ== 97713\nIEJBQ0tHUk9VTkQ= 97714\nZXRhdA== 97715\nZW51bWVyYXRvcg== 97716\nIHPDu3I= 97717\nIOOBrg== 97718\nX3BlZGlkbw== 97719\nL0Rr 97720\nIGplYW4= 97721\nX0NvbHVtbg== 97722\nIGhlYXRtYXA= 97723\nLlBlbmRpbmc= 97724\nIHVuc3VjY2Vzc2Z1bGx5 97725\nCWVw 97726\nIHNpbmZ1bA== 97727\nIEFudG9ueQ== 97728\nX0ZPQ1VT 97729\nVGV4dExhYmVs 97730\nX3JlYWN0aW9u 97731\nIElEaXJlY3Q= 97732\nIGNhcm5pdg== 97733\nV29ya3NoZWV0 97734\nIHN1ZWRl 97735\nCVJUQ1Q= 97736\nIHNldGJhY2tz 97737\nLnVuYmluZA== 97738\nIHNpw6g= 97739\nTGlxdWlk 97740\nX1JFTkRFUkVS 97741\nTWF0ZQ== 97742\nIE1pbGxlbm5pYWxz 97743\nIGVwb3h5 97744\naXp6aW5lc3M= 97745\nIGJyYXppbA== 97746\n0L7RgdGC0Yw= 97747\nJnZpZXc= 97748\nL2dwaW8= 97749\nSmFtaWU= 97750\nLkdyYXZpdHk= 97751\nPSIuJF8= 97752\nIFZBTg== 97753\nIElEUg== 97754\nYXBwZWFyYW5jZQ== 97755\nLlNlbGVuaXVt 97756\nTGVhcA== 97757\nLlJlbGF0aXZlTGF5b3V0 97758\nU2lnbmFscw== 97759\nQWNjZWxlcmF0aW9u 97760\nCUhBTkRMRQ== 97761\nL09wZW4= 97762\nIGdldExvZ2dlcg== 97763\nU3Bp 97764\nLXdyaXRpbmc= 97765\nINCy0YvQtw== 97766\nLXdvcnRoeQ== 97767\nIHdjcw== 97768\nIFFUaW1lcg== 97769\nIFBvbHltZXI= 97770\nIHZhbnQ= 97771\nCURlbGV0ZQ== 97772\naXR0ZQ== 97773\nV2hpbHN0 97774\nIGFsZ3Vt 97775\nIHNoaWVsZGluZw== 97776\nIGttcw== 97777\nCSAgICAJCQk= 97778\nTWV0ZW9y 97779\nIGFnZ3JlZ2F0b3I= 97780\nIFNpbmQ= 97781\nSG9zdEV4Y2VwdGlvbg== 97782\nPScnLAo= 97783\nIEpTQnJhY2tldEFjY2Vzcw== 97784\nT05P 97785\nX0J1aWxk 97786\nIHN0cmlwcGVy 97787\nIExK 97788\nPENvbXBvbmVudA== 97789\nL3NvdXJjZXM= 97790\nIGVyZ29ub21pYw== 97791\nIEFjY3JlZA== 97792\ndW5jZQ== 97793\nb25pcw== 97794\nemVpZ3Q= 97795\nIFNrYXRl 97796\nIFJlY3RUcmFuc2Zvcm0= 97797\nSW5jb21wbGV0ZQ== 97798\nIGluZ2VuaW91cw== 97799\nIGNvaXNh 97800\nIGNpdHlOYW1l 97801\naGFiaXQ= 97802\nX1RW 97803\nIEFOU1c= 97804\nLi4uIj4K 97805\nIHNub3Jr 97806\nX29wYWNpdHk= 97807\nIGluaXRXaXRoTmliTmFtZQ== 97808\naWFkbw== 97809\nQUFD 97810\nIF0pLg== 97811\nO3o= 97812\nX3BhcmFncmFwaA== 97813\nIG5vc2Vz 97814\nc3RhbmRz 97815\naWZy 97816\nX21F 97817\nSXJhcQ== 97818\nLlByZWRpY2F0ZQ== 97819\nZW5haXJl 97820\nXV1dOwo= 97821\nIHVuaWRhZA== 97822\nIHJldGlyZWVz 97823\nX2hlbGxv 97824\nIG1vZGVsZQ== 97825\nIFVJVGFibGVWaWV3Q29udHJvbGxlcg== 97826\nZndyaXRl 97827\nX251bWVybw== 97828\nX3Zpc2l0ZWQ= 97829\nIHJlY2ViZQ== 97830\nKE5vdGlmaWNhdGlvbg== 97831\nRmFudGFzdGlj 97832\nX3N1Ym1lbnU= 97833\nIFBFTQ== 97834\nIEN1cGVydGlubw== 97835\nYXBwcm94aW1hdGVseQ== 97836\nY2xhc3NlZA== 97837\nLlJlYWRTdHJpbmc= 97838\nIGRvbWljaWxl 97839\nX1BX 97840\nIGJhbGxwYXJr 97841\nIEthbGU= 97842\nY29udHJh 97843\nX2Zhdm9yaXRl 97844\nL29m 97845\nUXVpdGU= 97846\nIE9UQQ== 97847\nIGFjY2VsZXJvbWV0ZXI= 97848\nZGlkbg== 97849\nfF4= 97850\nIFJvaGluZ3lh 97851\naXZpY3Jt 97852\nYW5uYWJpbg== 97853\n0L7QsdGL0YLQuA== 97854\nb3JhZG8= 97855\nJykr 97856\nSGF1bnRlZA== 97857\nLElE 97858\nKFVJQWxlcnRBY3Rpb24= 97859\ndXJ2 97860\nX2JlbA== 97861\nIE1leGljYW5z 97862\nL3Rlcm1z 97863\nIFBhaW50ZXI= 97864\nSW5wdXRMYWJlbA== 97865\nIFZpbmNp 97866\nIFJvc2ll 97867\nXHVj 97868\nPE1lbnU= 97869\nIGNvb2xhbnQ= 97870\nKGN1cnJlbnRVc2Vy 97871\nX2R1YWw= 97872\nKSJ9LAo= 97873\nJnA= 97874\nIGNvbnZlcmdlZA== 97875\nIHJlc3RyYWlu 97876\nIFl1Z29zbGF2aWE= 97877\nPXRhcmdldA== 97878\nIGltcHVscw== 97879\nZHNh 97880\nU2VhcmNoVHJlZQ== 97881\nIGhib3g= 97882\nIEltcHJlc3M= 97883\nwqfDgw== 97884\nZ2V0RnVsbFllYXI= 97885\nKGRh 97886\nIFlZUw== 97887\nLmFsaWdubWVudA== 97888\nLkdldFRleHQ= 97889\nLnRva2VuaXpl 97890\nIE9seW1wdXM= 97891\nIG11cmt5 97892\nb3Jlc3RhdGlvbg== 97893\nIGRpc3NhdGlzZmFjdGlvbg== 97894\nCVRBcnJheQ== 97895\nX2tzZXM= 97896\nLkFkZFNpbmdsZXRvbg== 97897\nIFN0YXJ0VGltZQ== 97898\nIGZhbmF0aWM= 97899\nICAgICAgICAgICAgICAgICAgICAJ 97900\nIGVudGl0eVR5cGU= 97901\nLm92ZXJyaWRl 97902\nIC0tLS0tLS0tLS0tLS0= 97903\nIERhdGFncmFt 97904\nZm91dA== 97905\nKHdpdGhJZA== 97906\nICNfXw== 97907\nn+iDvQ== 97908\nZWt5bGw= 97909\nLmZyaWVuZHM= 97910\nYW1lbGVvbg== 97911\nIHphY2g= 97912\nLnNpbXBsZUJ1dHRvbg== 97913\ncmV0b3Jubw== 97914\nIGtvbms= 97915\nL3NtYWxs 97916\nIFF1aWNrbHk= 97917\ndW5yZWFk 97918\nRG9uYXRl 97919\nRGV0YWlsVmlldw== 97920\nIGR1YQ== 97921\nIHBlbmV0cmF0ZWQ= 97922\nT01VWA== 97923\nIG5pcg== 97924\nX3BkYXRh 97925\nIl0sWyI= 97926\nIGxvd2Vz 97927\nIGRvcGluZw== 97928\nIGFzeW1tZXRyaWM= 97929\nIG5lZWRsZXNz 97930\nb3VyY2Vt 97931\nIHVwcm8= 97932\nIEd1enpsZQ== 97933\nYWZi 97934\nIHNleHRyZWZmZW4= 97935\nLWNvbGxhcg== 97936\nIGNvbG9zc2Fs 97937\nTW9ua2V5 97938\nbmlzaA== 97939\nIGhhbmRsZU1lc3NhZ2U= 97940\nSW5jcmVhc2Vk 97941\nKmR4 97942\nIENoYXR0YW5vb2dh 97943\nZm9yZw== 97944\nIE9yZGVu 97945\nIHNocmk= 97946\nIFZhbmQ= 97947\nICJAIg== 97948\nSW1hZ2VTaGFycA== 97949\nIFdpbGRjYXRz 97950\ncG9uaWJsZQ== 97951\nLnNjZW5lcw== 97952\nIHBhaW50ZXJz 97953\nIFBmaXplcg== 97954\nIFphaA== 97955\nVG9Mb2NhbA== 97956\nIEZsYW0= 97957\nIMOpdGFpZW50 97958\nKSle 97959\nIFNhbmRib3g= 97960\nIFRSQURF 97961\nIGNocm9taXVt 97962\nIGFjY2xhaW0= 97963\nIHBhY21hbg== 97964\nwrR0 97965\nKXJlYWRlcg== 97966\nTWFyaQ== 97967\nLkRpc3BhdGNoZXI= 97968\nLkFETUlO 97969\nIFJlbWVk 97970\nU3dlZGVu 97971\nIG92ZXJsYXlz 97972\nLmVy 97973\nIHBhbmc= 97974\nIGNsZWFubHk= 97975\nYXZlbnBvcnQ= 97976\nVG95b3Rh 97977\ncGF0Y2hlcw== 97978\nIHZ0eA== 97979\nIEVpcw== 97980\nY2xhZG8= 97981\nIFJpdGNo 97982\nUk9MUw== 97983\nIGhhZGU= 97984\nIGNvbnNwaWN1b3Vz 97985\nIGRvY2tz 97986\nKGpx 97987\nIFByZW1pZXJzaGlw 97988\nIEJleg== 97989\nIOKElg== 97990\nINGD0YHQuw== 97991\nX3RvdGFscw== 97992\nIHByb3Zh 97993\nIEN1ZQ== 97994\nIHNhw7pkZQ== 97995\nIEdhbWVDb250cm9sbGVy 97996\nSU1JWkU= 97997\nLHBvcnQ= 97998\n44CCKA== 97999\nLkNkZWNs 98000\nSW5zdGFudGlhdGlvbkV4Y2VwdGlvbg== 98001\nIGNvbGxhZ2U= 98002\nIElPQw== 98003\nIGJhaXM= 98004\nIG9uRmluaXNo 98005\nLXN0YXJz 98006\nc2V0U2l6ZQ== 98007\nIG1vZ3Vs 98008\nIGRpc2lsbHVzaW9u 98009\nIGNoZXZ5 98010\nKFNjaGVkdWxlcnM= 98011\nKElS 98012\nX2xvY3M= 98013\nIGNhbm5vbnM= 98014\nIGNhbmNlbGxpbmc= 98015\nL2J1cw== 98016\nIGJ1Zmlv 98017\nIFlvdXJz 98018\nIFBpa2FjaHU= 98019\nIHRlcm1l 98020\ncsOl 98021\nZmFocmVu 98022\nIG93bmVySWQ= 98023\nIG9ibGlnYXRvcnk= 98024\nIGN1bHA= 98025\nIGFjaWRpdHk= 98026\nLW11bHQ= 98027\nIEJhbWJvbw== 98028\nICciPg== 98029\nX2dz 98030\nIGNvbXBpbA== 98031\nbmFyZA== 98032\nLWV4Yw== 98033\nIHJoeW1l 98034\nIGJ1dHRv 98035\nc2F5cw== 98036\nYW50YXN5 98037\n67g= 98038\nIGNpdHTDoA== 98039\nIGNoZWc= 98040\nVGltZVN0cmluZw== 98041\nIHBvc2l0aXZpdHk= 98042\nIERhYmVp 98043\nIHdhbmc= 98044\nIGVzY3Jl 98045\nImM= 98046\nCXZpZGVv 98047\nIFJhbmtlZA== 98048\nLnN0cmluZ3M= 98049\nPj4+KA== 98050\nINC40L3RgtC10YA= 98051\nIHJlc3Rh 98052\nWzosOg== 98053\nIHJlbmRyZQ== 98054\nIGRlc2Vy 98055\nSm9z 98056\nIGRpc3J1cHRpb25z 98057\nINC+0L/QtdGA 98058\nc2FtcGxpbmc= 98059\nc3VwcHJlc3M= 98060\nIGNvbnRhaW5lclZpZXc= 98061\nIFNlYW1sZXNz 98062\nIGFpcnk= 98063\nIG9ubG9hZA== 98064\nLldpbmRvd01hbmFnZXI= 98065\nIFBMQQ== 98066\nYnJhY28= 98067\nLnNldFBvc2l0aXZlQnV0dG9u 98068\nIHBkdQ== 98069\nIGdzaQ== 98070\nIENsaQ== 98071\nX2dyYWRpZW50cw== 98072\n0Y/QtA== 98073\nIFdoaXNwZXI= 98074\nY3N0ZGludA== 98075\nIGzDpG5n 98076\nIGZvcm11bGF0aW9ucw== 98077\nw6lub20= 98078\nb3VybmVtb3V0aA== 98079\nWyRf 98080\nIG9yZGluYXJpbHk= 98081\nLnNldFVzZXJuYW1l 98082\nIGZhY3VsdGllcw== 98083\nTUlUVEVE 98084\nL3ZhbHVlcw== 98085\nIHdlaXI= 98086\nIEFwdA== 98087\nTVo= 98088\nCWNm 98089\ndWNrZW4= 98090\nCQkJCQkJCQkJCQkJCQkJCQkJCQk= 98091\nZGVmZW5zZQ== 98092\nW2lWYXI= 98093\nIEJ1c2luZXNzRXhjZXB0aW9u 98094\nU2VsZWN0b3Jz 98095\nKGNvb3JkaW5hdGVz 98096\nIFJlc2V0cw== 98097\nIERyaW5rcw== 98098\nb2xlYW5z 98099\nKHN0eXB5 98100\nX0lPQw== 98101\nLnh4eA== 98102\nIFNsYXRlcg== 98103\nIEJlbGl6ZQ== 98104\nIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 98105\nYWRkaW4= 98106\nX2VwaXNvZGVz 98107\nIGlzY2hlbQ== 98108\nbGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 98109\nRGFubnk= 98110\nIHBhcmVk 98111\nLmNvZGVoYXVz 98112\nIEFzc3k= 98113\nCVJlY3Q= 98114\n4p4= 98115\nLmxpc3Rh 98116\nINCy0LDRiA== 98117\nIHZldHM= 98118\nSFdORA== 98119\naXNvbmVy 98120\nIHhv 98121\nIG9yYWxseQ== 98122\nIFN0bXQ= 98123\nLnJubg== 98124\nIERQSQ== 98125\nIFN0cmlrZXM= 98126\nLnNldFZpZXdwb3J0Vmlldw== 98127\nIOiHquWKqOeUn+aIkA== 98128\nWUVMTE9X 98129\nR0xlbnVt 98130\ncGFydG5lcnM= 98131\nIEltcGxpY2l0 98132\nIHRha28= 98133\n4oCZZWxsZQ== 98134\nIGVybcO2Zw== 98135\ndG90YWxDb3VudA== 98136\nR2ls 98137\nCXdvcms= 98138\nIHByYXRpYw== 98139\naW5hdGk= 98140\nYWJpZXM= 98141\nIFNraW5uZXI= 98142\nIHNwaXJpdGVk 98143\nIHBhbmNyZWF0aWM= 98144\nIGhkZg== 98145\nJ2Vt 98146\nIHBzeWNob3Npcw== 98147\nb2xpY2l0 98148\nICJ7Ig== 98149\nX2F0dWFs 98150\nIMOpbGVjdA== 98151\nVEVBTQ== 98152\nIGRhaw== 98153\nIFNXQVQ= 98154\nLkZyYWdtZW50TWFuYWdlcg== 98155\nIHByb3Zpc2lvbmluZw== 98156\nbGlmZXRpbWU= 98157\nX0VYVEVOU0lPTlM= 98158\nIENBU0NBREU= 98159\nICFb 98160\nKEtQ 98161\nIHZlbQ== 98162\nIEludGVycmFjaWFs 98163\nJ119LAo= 98164\nc3BhY2Vy 98165\nX2t2 98166\nV2FyZWhvdXNl 98167\nUkRE 98168\nX2ZzbQ== 98169\nLlN0cmV0Y2hJbWFnZQ== 98170\nLFllcw== 98171\nIFJlZnVnZWU= 98172\nIEJyaW5naW5n 98173\nIHbDoWxpZG8= 98174\nLmludGVyc2VjdGlvbg== 98175\nIHNwb29reQ== 98176\nX3BvcnRhbA== 98177\nIG1vdGg= 98178\nIFpvZGlhYw== 98179\nIFNPQ0lBTA== 98180\nTWltZVR5cGU= 98181\nJ119fTwv 98182\nIHJlc2l6YWJsZQ== 98183\n5Lqb 98184\nKHBoYXNl 98185\nKG1hcHBlZEJ5 98186\nIG11bmRpYWw= 98187\nIGNvbnZv 98188\nL2xlZnQ= 98189\nL2RvY3VtZW50cw== 98190\nd2FzaGluZw== 98191\nIEFtw6lyaWNh 98192\nX3F1b3Rh 98193\nLnBvc3Rlcg== 98194\nJ10iKTsK 98195\nIHN0ZWxsdA== 98196\nIERJU0NMQUlNRVI= 98197\nW29wdA== 98198\nIGVkcw== 98199\nIFJhY2Vz 98200\ndmVudGFz 98201\nIHB6 98202\nIENhcGFj 98203\nIFVzZXJEYW8= 98204\naXRlc3Q= 98205\nUHJvdmVlZG9y 98206\nIFNob3RndW4= 98207\nIHRoaXJzdHk= 98208\nIEJhbGFuY2Vk 98209\naXF1ZXRh 98210\nIGhlYWxlcg== 98211\nLyIp 98212\nLlNkaw== 98213\nIHRlcnQ= 98214\nImRhdGE= 98215\nX3Byb3ZpbmNl 98216\nLkF1dG9tYXRpb24= 98217\nIGZvbnRXaXRoTmFtZQ== 98218\nX0FOVA== 98219\n55WM 98220\nb29kbGVz 98221\nIFJFUFJFU0VOVA== 98222\nX0dQUw== 98223\nIHBlcnN1YXNpb24= 98224\nIERpc2N1c3Npb25z 98225\nIGZyZWQ= 98226\nTkVH 98227\nOmJvcmRlcg== 98228\nCWluaXRpYWxpemU= 98229\nCWdsb2c= 98230\nLWNhcGl0YWw= 98231\nIEltVmVj 98232\nIGRldmlz 98233\nQ2FuZGlkYXRlcw== 98234\nLmFuaW1hdGlvbnM= 98235\nIHJhZ2F6emk= 98236\nIFByb21ldGhldXM= 98237\nIEtpZGQ= 98238\nIHByb2dyYW1tYQ== 98239\nQ2VydGlmaWNhdGVz 98240\nQ29udGE= 98241\nLmVzcHJlc3Nv 98242\nIOuQmA== 98243\nIGJlaWRl 98244\n6ZmG 98245\nLmdldFJhdw== 98246\nIEZ1bGxOYW1l 98247\nIGlhbQ== 98248\nKCopKA== 98249\nbWFpZHM= 98250\nQkg= 98251\nIENvbnNwaXJhY3k= 98252\nX0RV 98253\nIGJsYXRhbnRseQ== 98254\nIFx8 98255\nIFdpZw== 98256\nIENvbmo= 98257\nUmVuZGVyaW5nQ29udGV4dA== 98258\nTWl0Y2g= 98259\nIGFsbGVsZXM= 98260\nIOazqOaEjw== 98261\nIHJpbXM= 98262\nIE5laWdoYm9y 98263\nIEt5bGll 98264\nLnBhcnR5 98265\ndG9ycw== 98266\nIOyhsO2ajA== 98267\nIHdlcw== 98268\nIENyYWZ0aW5n 98269\nWyIu 98270\nLnNwb25nZQ== 98271\nIOqx 98272\nSXNsYW1pYw== 98273\nIHByb3NlY3V0aW5n 98274\nIHdpaw== 98275\nLm9zZ2k= 98276\nb25pbmdlbg== 98277\nR3JhbW1hcg== 98278\nJ2lt 98279\nIGF4aWFs 98280\nQ2xlYW5pbmc= 98281\nLmdldEV4dGVybmFsU3RvcmFnZQ== 98282\nPS4v 98283\nIGNocm9tYXQ= 98284\n0LXRhQ== 98285\nYWJheQ== 98286\nIGJvbGE= 98287\nLkFnZ3Jlc3NpdmU= 98288\nJ10sJF8= 98289\naXphY2Fv 98290\nUHJlcGFyaW5n 98291\nOkFueQ== 98292\nLkVOVEVS 98293\nLXdpbmRvd3M= 98294\nIGVucmFnZWQ= 98295\nX2RpY2U= 98296\nIGRldHRh 98297\nZWNhbA== 98298\nX09SSUdJTg== 98299\nIC0tLS0tLT4= 98300\nX0JsdWU= 98301\nIGJvdGFuaWNhbA== 98302\nIGZyYWdz 98303\nIGZhbWlsaWFs 98304\nLWR1 98305\nIHNlaXppbmc= 98306\nKGJsb2Nrcw== 98307\nLnJk 98308\nLmNoZWNrTm90TnVsbA== 98309\nIG1pc2Vy 98310\nIG1heHg= 98311\nIEtuZWU= 98312\nVmlld0l0ZW0= 98313\nSW5uZXJIVE1M 98314\nRGFuZ2Vy 98315\nKChfXw== 98316\nIHByenlwYWQ= 98317\nY3JlYXRlVXJs 98318\nKios 98319\nIERlY29yYXRpbmc= 98320\nQVRFR1k= 98321\nPz4v 98322\nLkRlc2lnbmVy 98323\naGV4ZGlnZXN0 98324\nIEV2ZXJ5d2hlcmU= 98325\nYWxsZXJpZXM= 98326\nLlRFWFRVUkU= 98327\nLkJsb2Nrcw== 98328\nemVsbA== 98329\nIHByZcOnbw== 98330\nU3VkZGVubHk= 98331\naW5wdXRFbWFpbA== 98332\nKHN5bmM= 98333\nLmJk 98334\nZ29sZGVu 98335\nPicpOw== 98336\nIERpY2tpbnNvbg== 98337\nPj4oCg== 98338\nIFFVRVVF 98339\nIGdldENvbHVtbg== 98340\nIFNBTkQ= 98341\nLnBpZWNl 98342\nbGljZXI= 98343\nRmx1dHRlcg== 98344\nIGdldFZlcnNpb24= 98345\nIHJlc291cmNlSWQ= 98346\nb2ds 98347\nxYJhdw== 98348\nLkJyYW5jaA== 98349\nCXdlYg== 98350\nIGZyYW1lcmF0ZQ== 98351\nUFBQ 98352\nIGZyYXk= 98353\nQ05U 98354\nIGluZm9ybWF0aWU= 98355\nJ10NCg0K 98356\nbmVhcw== 98357\nSGVhZGVyQ29kZQ== 98358\nIOa4 98359\nIHRyZw== 98360\ncmF3dHlwZXM= 98361\nSG9uZGE= 98362\nIG1hcmtldGVy 98363\nIHJlcXVlc3REYXRh 98364\nIFBn 98365\nCW5vdA== 98366\nIHBhZ2VJbmZv 98367\nIGFrdHVlbGxlbg== 98368\n44GV44KT 98369\nIEFNUw== 98370\ncHVzaFZpZXdDb250cm9sbGVy 98371\nCUFM 98372\nIHZlc3Rz 98373\ncHJvZHVjZQ== 98374\nLW3Dqm1l 98375\nIFJhaG1hbg== 98376\nRnVubnk= 98377\nRVo= 98378\nX1ZhbGlk 98379\nIHNxdWFkcm9u 98380\nIGxhc2g= 98381\nIGlybQ== 98382\naWFzY28= 98383\nIFBhcmFu 98384\nIHBldGl0ZXM= 98385\nIERlY2F5 98386\nIHVuaW5pdGlhbGl6ZWQ= 98387\ncHJpdmlsZWdlZA== 98388\nIG1iZWR0bHM= 98389\n5aSH5rOo 98390\nIF4u 98391\nIGVjc3RhdGlj 98392\nRGV0cm9pdA== 98393\nIHBhcnRlbg== 98394\nIHNvdXZlbmly 98395\nLmdldExvZ2lu 98396\n0LzQvtGC0YA= 98397\nZW7Dp8Ojbw== 98398\nIG3DrW5pbW8= 98399\nIEFjY2Vzc2Vk 98400\ncmnDsw== 98401\nTWlj 98402\nIFZvY2Fs 98403\nLlNldFN0cmluZw== 98404\nIG1lbnNhamVz 98405\n5YCN 98406\nIGF0dHJhdmVycw== 98407\nIEFwaA== 98408\nICcpOw0K 98409\nw7xuZGU= 98410\nIGVuY2hhbnRlZA== 98411\nIFJvb3RTdGF0ZQ== 98412\nIENMT1NFRA== 98413\nCQkJCQkJCQkNCg== 98414\nIGNhbGllbnRl 98415\nb3JyaXM= 98416\nIHBoeXNpY2lzdHM= 98417\naHduZA== 98418\nX3Zp 98419\nIHLDoXBpZG8= 98420\nIGNhcGl0YWxpemVk 98421\nZWRCeQ== 98422\nIG1hY2hpbmluZw== 98423\nIGh1YmJ5 98424\nIFN0YWN5 98425\nLkJ1cw== 98426\nZHJpbms= 98427\nSHVy 98428\nIHByb3BpYQ== 98429\nVW5pdFRlc3Q= 98430\nIG1pc2NvbmNlcHRpb24= 98431\nX18pKTsK 98432\nL2Rj 98433\nIE1heXdlYXRoZXI= 98434\nX21D 98435\nLmNyZWF0ZUZyb20= 98436\nIFFQYWludGVy 98437\ncm9wc3ljaA== 98438\naW5uaXR1cw== 98439\nYXlhcw== 98440\nIGdlZw== 98441\nKGR3 98442\nIHVzYWRv 98443\nIHRyaWNrbGU= 98444\nIGFubmloaWw= 98445\nIFBhc3Rh 98446\nICsrCg== 98447\nKEV4cGVjdGVkQ29uZGl0aW9ucw== 98448\nLnBvc3RWYWx1ZQ== 98449\naWNhcA== 98450\nIERvbmV0c2s= 98451\nX3NvdXA= 98452\nLXB1Ymxpc2g= 98453\nIFBi 98454\nbWVudGlvbnM= 98455\nQUNDRVBU 98456\nLlB1bGw= 98457\nLOKAmeKAmQ== 98458\nIHJldGFyZGVk 98459\nX0FUT00= 98460\nIFRlcm1pbmF0b3I= 98461\nLWNvdXJ0 98462\nIENMTG9jYXRpb25Db29yZGluYXRl 98463\nIHJldmVyZW5jZQ== 98464\nIFNTQw== 98465\ndXRlbHk= 98466\nIFdPTg== 98467\nIEdTTA== 98468\nZnJlaQ== 98469\nLmdldExvbmdpdHVkZQ== 98470\nIG9wZW5GaWxlRGlhbG9n 98471\nLkJ1dHRlcg== 98472\nLWltcG9ydGFudA== 98473\nX01BTlk= 98474\nIEdvbmc= 98475\n4oCcSG93 98476\nIGdvcmdl 98477\nPW1zZw== 98478\nIEV6ZWs= 98479\nY3JlYXRlQ29tbWFuZA== 98480\nOmNoZWNrZWQ= 98481\nIGluZm9ncmFwaGlj 98482\nLldFU1Q= 98483\nRGlycw== 98484\nIGd1YXJkYQ== 98485\nIGJlZXRsZQ== 98486\nPHNtYWxs 98487\nLWFuZHJvaWQ= 98488\nIGNyZWRpdG9y 98489\nIE3DqWQ= 98490\nIGZpbmFsaXN0 98491\nIGFibA== 98492\nbmV2 98493\nX2ludGVyYWN0aW9u 98494\nIE1vbnRlcmV5 98495\namFo 98496\nIGNhbmRpZXM= 98497\nIFF1aW5jeQ== 98498\n6Kqt 98499\nIGJhdGNoU2l6ZQ== 98500\nYWtpdA== 98501\nIG9iZQ== 98502\nKHBhcmE= 98503\nIGV4cGVyaW1lbnRlZA== 98504\nIGNvdW5jaWxsb3Jz 98505\nIGNsYXNoZWQ= 98506\nc3F1 98507\nLXN0cm9rZXM= 98508\nIEdL 98509\nIEV4cGlyZXM= 98510\nIHByb3NlY3V0aW9ucw== 98511\nIENyZWF0dXJlcw== 98512\nIHnDtg== 98513\neGxpbQ== 98514\nX0lNUA== 98515\nRW50cnlQb2ludA== 98516\nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 98517\nLkRlZmF1bHRDZWxsU3R5bGU= 98518\nIGJyZXZl 98519\nIEJyaXRhbm4= 98520\nIHN3ZWF0eQ== 98521\nIGxldGg= 98522\nIGZsYXNoYmFjaw== 98523\ncGVybWFuZW50 98524\nIEpESw== 98525\nX0RldGFpbHM= 98526\nRXVybw== 98527\ncHB0 98528\nIHJpY2hUZXh0Qm94 98529\nL2JvYXJk 98530\nIHRyYW5jZQ== 98531\nLmN5Y2xl 98532\nJyk7Iik7Cg== 98533\nIHRveGlu 98534\nX2RlaW5pdA== 98535\nIG92ZXJhcmNoaW5n 98536\nIGNvbmZpZ3BhcnNlcg== 98537\nIEthd2FzYWtp 98538\nLnRodW1i 98539\nIHBsYXlh 98540\nIEpvc2Vm 98541\nK18= 98542\nIHplcm9lcw== 98543\nIGF1cA== 98544\nIEhhcmk= 98545\nY29tbWl0dGVk 98546\nTml0 98547\nLmZpbGVQYXRo 98548\nIERpc2FiaWxpdGllcw== 98549\nbWFudWZhY3Q= 98550\nLWFsaWduZWQ= 98551\nLlJFU0VU 98552\nIHJ1c3R5 98553\nRXk= 98554\nIG91c3RlZA== 98555\nY29zYQ== 98556\nU3RydWN0dXJlZA== 98557\nLmdldEQ= 98558\nIHPDoWJhZG8= 98559\nPkxvYWRpbmc= 98560\nX21B 98561\nLmdldFJhbmRvbQ== 98562\nYmxpbmdz 98563\nIGNoZWVzZXM= 98564\ndHRp 98565\nLuKAog== 98566\nIEJ1cmdlc3M= 98567\nZW5kZXJpdA== 98568\nLicsDQo= 98569\nKCIiKw== 98570\nYWNi 98571\nJXA= 98572\naW5kZXhlZA== 98573\nX3ByZWRpY2F0ZQ== 98574\nbmVzaWE= 98575\nIGJpZWQ= 98576\nIENJVA== 98577\nKFBvcw== 98578\nX3JhZGk= 98579\n5Lu35qC8 98580\nQml6 98581\nIEFkb2xlc2NlbnQ= 98582\nIHZpw6pu 98583\nY3ljbA== 98584\nX0NhbmNlbA== 98585\nIGNvbmNsdXNpdmU= 98586\nIGFwcGVsbGF0ZQ== 98587\naW5mb3JtYXRpY3M= 98588\nU0o= 98589\nIGVsZWN0aXZl 98590\ncm9sZUlk 98591\nRmV0Y2hlcg== 98592\nCUNvbW1hbmQ= 98593\nKCIoJQ== 98594\nIGZhcnQ= 98595\nSUxB 98596\nZ2V0QmxvY2s= 98597\nQVVTRQ== 98598\nINC00LDQvQ== 98599\nIEFydGU= 98600\nIG5vdGlmeWluZw== 98601\nIGdlbGU= 98602\nLnNhbWU= 98603\nIFJlZ2Vs 98604\nIEJhxZ8= 98605\nLmNyZWF0aW9u 98606\nIFZO 98607\nX2NvbW11bml0eQ== 98608\nIHVuc3VzdGFpbmFibGU= 98609\nU0VY 98610\nIGdyaWRTaXpl 98611\ncmVzY2lh 98612\nYXZlcnNhYmxl 98613\nKCcsJylb 98614\nIFBoZWxwcw== 98615\n4buVaQ== 98616\nQU5DRUxFRA== 98617\nLUlT 98618\nLnJ1bm5lcnM= 98619\nIFN0b2tlcw== 98620\nLlByb2R1 98621\nIHdoaXBwaW5n 98622\nX2FjcXVpcmU= 98623\nIGludmVzdGlnYWNpw7Nu 98624\nZnJpZWQ= 98625\nLmNvcHlXaXRo 98626\nIEhhcmRjb3Zlcg== 98627\nLVNl 98628\n4Z624Z4= 98629\naW52aXRhdGlvbg== 98630\nbGVzYWk= 98631\nIERvcm0= 98632\nINGB0L/QuNGB0LrQsA== 98633\nIGNvbmNhdGVuYXRlZA== 98634\nb3BoaWw= 98635\nIHRoaW5rZXI= 98636\nL2ZvbnRhd2Vzb21l 98637\nIExlb3BhcmQ= 98638\nICIvIik7Cg== 98639\nIHJlc2lkdWFscw== 98640\nIE1pY3Jvd2F2ZQ== 98641\nIGNvbmZvcm1l 98642\ndGhyb3A= 98643\nIGRpc2VtYg== 98644\nIE9NRw== 98645\nIERpc2NpcGxpbmU= 98646\nIEFjcm9iYXQ= 98647\nL3JlcG9zaXRvcnk= 98648\nZGZh 98649\nX01FRA== 98650\nYnVmaW8= 98651\nIG3DqXRob2Rl 98652\nX0hPTEQ= 98653\naWFzaQ== 98654\nX2xlZ2FjeQ== 98655\nKQ0NCg== 98656\n5qOA 98657\nR2V0UHJvY0FkZHJlc3M= 98658\nIHlheQ== 98659\nb3RlbmNl 98660\nb3JkZXJpZA== 98661\nLXR3 98662\nIGRlYXJseQ== 98663\nSW5jb21pbmc= 98664\nL2ls 98665\nIG5ldXJvcA== 98666\ndWN6 98667\nKTsNDQ0K 98668\nIElubm92YXRpdmU= 98669\nIHByb2Z1bmQ= 98670\naWdtYXQ= 98671\nU2VsZWN0aW9uTW9kZQ== 98672\ncmVsZXZhbnQ= 98673\nLkdP 98674\nIGJydWlzZXM= 98675\nIHNhY2g= 98676\nb2RlZg== 98677\nIHJlaW1i 98678\nL2Rlc2t0b3A= 98679\nLXNwb3Q= 98680\ndW5kYW5jZQ== 98681\nRW50cm9weQ== 98682\nXGNvcmU= 98683\nIHN1Z2Vy 98684\nIE12Yw== 98685\nIEdOT01F 98686\nX2luZHg= 98687\nIFlZU1RZUEU= 98688\nIE1hdGxhYg== 98689\nIENJRg== 98690\nICopKQ== 98691\nIHByb2R1Y3RMaXN0 98692\nIEFscmlnaHQ= 98693\nYWNlbWFyaw== 98694\n0YLQuNCy 98695\nbW9kaWZpY2F0aW9u 98696\naW50ZXJuYXRpb25hbA== 98697\nIGhvbWVycw== 98698\nIGRpY3Rz 98699\nIFFGb250 98700\nLlNRTGl0ZQ== 98701\nIHRyYW5zcGxhbnRhdGlvbg== 98702\nIE1lc3NhZ2VCb3hCdXR0b24= 98703\nIEVsdmVz 98704\nJ11dKQo= 98705\nKFFJY29u 98706\nIGNpbmVtYXM= 98707\nQ09PUkQ= 98708\nLUNoaW5h 98709\nIGto4bqpdQ== 98710\n5oiR55qE 98711\nIHNrdWxscw== 98712\nIHBhaW5zdGFraW5n 98713\nZmNl 98714\nLlhSTGFiZWw= 98715\nIHNwZWNpZmllcg== 98716\nIHByZWZlcnJpbmc= 98717\nL2FjdGl2aXR5 98718\nKFBob3Rv 98719\nw6FsdA== 98720\nLmxvdA== 98721\nJycu 98722\nYW5ub25jZQ== 98723\nLmdvb2dsZWNvZGU= 98724\nLXBkZg== 98725\nIFBva2U= 98726\nX0FDTA== 98727\nIGVuZG93ZWQ= 98728\nZGlzY292ZXI= 98729\nLm9tZw== 98730\nIHdvb2RsYW5k 98731\nLk1hZ2lj 98732\nIHZvbG9udA== 98733\nTm90QWxsb3dlZA== 98734\nIGNoYXZl 98735\nQk1X 98736\nJywnPScs 98737\nIFNJWA== 98738\n5oiR5Lus 98739\nIGtvc2hlcg== 98740\nIGFzcGlyYXRpb24= 98741\naW50bA== 98742\nX3JlZnB0cg== 98743\nJysK 98744\nbWVudG9y 98745\nLmNsdWI= 98746\nV2luZG93U3RhdGU= 98747\nLkFSUg== 98748\nIHp6YQ== 98749\nIG1lc3NhZ2VUeXBl 98750\nLmVxdQ== 98751\nVGhvcg== 98752\nIGluanVzdA== 98753\nIGd1bXM= 98754\nIGJvcmRlclNpZGU= 98755\nLy8vLy8= 98756\nIFRyYW5zbWl0 98757\nIGJ1ZnNpemU= 98758\nIGhhaw== 98759\nIGVsbGFz 98760\nUkFORE9N 98761\nCW1j 98762\nIHBlYQ== 98763\nZWtv 98764\nZG9jdW1lbnRv 98765\nIGh5c3Rlcmlh 98766\nIGFyZW5hcw== 98767\nIGd1bm1lbg== 98768\nIG1pa2U= 98769\nIGltcHVuaXR5 98770\nYXRpc2F0aW9u 98771\nX1plcm8= 98772\nX0NPTVBBTlk= 98773\nIEdvcnM= 98774\nIHVzZUNsYXNz 98775\nKHJlZGlz 98776\nIFJVTk5JTkc= 98777\nIEJhaXI= 98778\ndmVsdGU= 98779\nICcsJy4= 98780\n0LDRgtGM0YHRjw== 98781\nw7ZzdA== 98782\nZW5jb2RlVVJJQ29tcG9uZW50 98783\nX3Jlc3RyaWN0 98784\nIGRlY2Fscw== 98785\nIFBlZGlkbw== 98786\nIGFsdGVyY2F0aW9u 98787\nRGlzcGxheXM= 98788\nIEFwcGxpY2FudHM= 98789\nQ1VT 98790\nVGV4dGFyZWE= 98791\nIEFuZ29sYQ== 98792\nLmZ1dHVyZQ== 98793\nIFVTSE9SVA== 98794\nIHN1cHByZXNzaW5n 98795\nIHNldHplbg== 98796\nQVBvbHlub21pYWw= 98797\nIHRvY2g= 98798\nIGhhbGxtYXJr 98799\nICQkJA== 98800\nIENIQVJTRVQ= 98801\nLnJwbQ== 98802\nIERpY2g= 98803\nLS0tLS0tLS0tLS0tLS0tLS0tLS0= 98804\nX3Bhcm0= 98805\n6L+Y 98806\nYWNjaW9uZXM= 98807\naGFpdA== 98808\nV0FSREVE 98809\nX3JvdXRpbmc= 98810\nIE5PTQ== 98811\nIGVuY2xhdmU= 98812\nIExvdHRv 98813\nCWZy 98814\nY29tcGxleENvbnRlbnQ= 98815\nIEJhbGxhcmQ= 98816\na3ViZQ== 98817\nL3dpbg== 98818\nLmdldENvbHVtbk1vZGVs 98819\nX1JFUExBQ0U= 98820\nSGVhZGVyVmFsdWU= 98821\nIGVzdHVkaWFudGVz 98822\nIGFwaXM= 98823\nIGJwbQ== 98824\nIFR5cGVOYW1l 98825\nQW5kR2V0 98826\ncml0YQ== 98827\nUGxhbnM= 98828\nPk5vdGU= 98829\nIGZldGlzY2g= 98830\nIHRvbmVk 98831\nX2dvdG8= 98832\nb25zZW5zZQ== 98833\nIG1vbGRz 98834\nIGluZmlsdHJhdGlvbg== 98835\nIEd1ZXJyZXJv 98836\ndWJibw== 98837\nY2tp 98838\nKCQoIi4= 98839\nX2FjdGl2aXRpZXM= 98840\nKGNoYW5nZXM= 98841\nIG9mQXBw 98842\nIEtlcGxlcg== 98843\nIERlbXA= 98844\nIENvbnRpbmVudA== 98845\nLlRpY2tz 98846\nIFVuc2lnbmVk 98847\nIEphaHJlcw== 98848\nIGZyZXNobWVu 98849\nIEFyY2hpdmVk 98850\nINC60L7RgtC+0YDRi9C5 98851\nICc6Og== 98852\nVHV0b3JpYWw= 98853\nQ2M= 98854\nIHRhYmxlTGF5b3V0UGFuZWw= 98855\nZnJvbUpzb24= 98856\nLmxldmVscw== 98857\nX3RyYW5zaWVudA== 98858\nIGVuZG9yc2luZw== 98859\nIERJQw== 98860\nbGF1Zg== 98861\nIHNocmVk 98862\nX0VNSVQ= 98863\naWZpY2FudGx5 98864\nQUxB 98865\nL3Byb3Rv 98866\nIG5hcnJvd2luZw== 98867\nVXRj 98868\nRmFjdG9ycw== 98869\nIHNlbnRpZW50 98870\n5p6Q 98871\nbGl4aXI= 98872\nIENST1NT 98873\nbWV0ZW9y 98874\nIGdyb2lu 98875\nIG1kYg== 98876\nIFJvdHRlcmRhbQ== 98877\nIGNvbWlkYQ== 98878\nIE9wQ29kZQ== 98879\nIERlZmF1bHRWYWx1ZQ== 98880\nUGVybWlzc2lvbnNSZXN1bHQ= 98881\nIGhldGVyb2dlbmVvdXM= 98882\nIG1vb3Q= 98883\nIGRlY2VpdmVk 98884\nLWluZGVwZW5kZW50 98885\nIE9iamVjdE91dHB1dFN0cmVhbQ== 98886\nIG92ZXJwb3dlcg== 98887\nLmR1cA== 98888\nIGxkYg== 98889\nIGRvbWVzdGljYWxseQ== 98890\nIGJlc3RlbGxlbg== 98891\nIGxvdg== 98892\nIENvbnRyYWN0b3Jz 98893\nVHJpYW5nbGVz 98894\nIGZvZGRlcg== 98895\nIGZpbG1lcw== 98896\n5LyB 98897\nIHJldm9sdmVy 98898\nU3RhcnR1cFNjcmlwdA== 98899\nL3ZhbGlkYXRpb24= 98900\nIFJlc291cmNlVHlwZQ== 98901\nacWf 98902\nIExheg== 98903\nZmVm 98904\nIGxzdG0= 98905\neyo= 98906\nLmF0dGFjaG1lbnQ= 98907\nLmhpdHM= 98908\nZXdpdGg= 98909\nRE9H 98910\nQWxhYmFtYQ== 98911\nIG1lZGl1bXM= 98912\nLm1Db250ZXh0 98913\nLWNvbHM= 98914\n5Y+L 98915\nLm5vdGljZQ== 98916\nIGF0dG4= 98917\nIFBhY2tpbmc= 98918\nIExu 98919\nX0NPTVBMRVg= 98920\nL1VzZXJz 98921\nLnNhdmV0eHQ= 98922\nIFJvdW5kcw== 98923\nPyw/LD8sPyw= 98924\nIGluZ2w= 98925\nIFJPQw== 98926\nX2ZlbWFsZQ== 98927\nIFN0YXJk 98928\nXV07 98929\nIHdyZXN0bGVycw== 98930\nIHRvcnJlbnRz 98931\nIHNpbmg= 98932\n77u/Cgo= 98933\n67O1 98934\nc2Vuc2U= 98935\naG93ZXZlcg== 98936\nLlBoeXNpY3M= 98937\nSW5mcmFzdHJ1Y3R1cmU= 98938\nIFNhY3I= 98939\nRmVs 98940\nIERJU1RSSUJVVA== 98941\nw6ltZW50cw== 98942\nIFZhbGlkYXRlcw== 98943\nIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 98944\nIHwv 98945\nIGVzbA== 98946\nIHLDqXNlYXU= 98947\nIEJpcA== 98948\nQllURVM= 98949\nX1dBVEVS 98950\nVHVybmluZw== 98951\nRUxT 98952\nIGp1eHRhcA== 98953\nIGxlc2Jpc2NoZQ== 98954\nw71jaA== 98955\nKFVua25vd24= 98956\nTmVv 98957\nQEpzb25Qcm9wZXJ0eQ== 98958\nIGFsdW1ub3M= 98959\nIFJhcXFh 98960\naW1laQ== 98961\nLmdldEJvdW5kcw== 98962\nLk1vdXNlRXZlbnRIYW5kbGVy 98963\nIyMjIyMjIw== 98964\nR2VuZXJpY1R5cGU= 98965\nL2Ntcw== 98966\nIHR1cm5v 98967\nINC80LjQvQ== 98968\nIGZvbGtsb3Jl 98969\nIEV2bw== 98970\nIGNvbmR1Y3Rpdml0eQ== 98971\nIGxlYmVu 98972\nIGdlYXJib3g= 98973\nLXZz 98974\nIM+G 98975\nIGRyaW5rZXJz 98976\nIGNvbmV4YW8= 98977\nIFRlZXRo 98978\nIGdldEFyZ3VtZW50cw== 98979\nIFJBVA== 98980\nZW50aW91cw== 98981\nRWR1Yw== 98982\nK1c= 98983\nIEluc3RpdHV0aW9uYWw= 98984\nIEJvcmQ= 98985\naXNFcXVhbA== 98986\nKHB3ZA== 98987\nIGlnbml0ZWQ= 98988\nIFJvdXNzZQ== 98989\nIGltcGFjdGZ1bA== 98990\nIE1hbGs= 98991\nIGdlcmFs 98992\nIFBpdm90 98993\nIGF6dA== 98994\nIGNzdmZpbGU= 98995\nIFJvcGU= 98996\nIFNPTFVUSU9O 98997\nIEFyYml0cmFyeQ== 98998\nIGxldHRv 98999\nLk1vdXNlQWRhcHRlcg== 99000\nIH19fQ== 99001\nIFNhaWxvcg== 99002\nZGVyYQ== 99003\nUHV0dGluZw== 99004\nIGNvbmNlbnRyYXRlcw== 99005\nIGF1dGhEb21haW4= 99006\n4oCd55qE 99007\nLWZpbmFscw== 99008\nLHN0cmxlbg== 99009\nTXVvbg== 99010\nIE9yZGluYXJ5 99011\nZmlyZWZveA== 99012\nIExhVGVY 99013\nIEh1bmQ= 99014\nZW5naW5lZXJpbmc= 99015\nL2JsdWU= 99016\nZWRUZXh0Qm94 99017\nKCIiKTs= 99018\nIENEREw= 99019\na2VwdA== 99020\nIEdldFN0cmluZw== 99021\nS2ly 99022\nKCk9Jw== 99023\nIE9DRA== 99024\nYW50aXVt 99025\nJG1lbnU= 99026\nIEFwcGFsYWNoaWFu 99027\nU2VjcmV0YXJ5 99028\n66WY 99029\n4Li14Lii 99030\nU2VtYW50aWM= 99031\nICpb 99032\nZXN0b25l 99033\ndW5na2lu 99034\nTWF4WQ== 99035\nLXRvbmU= 99036\nIn07DQo= 99037\nX1BhcnQ= 99038\nPE1lbWJlcg== 99039\ndHJhbQ== 99040\nIHRyYW5zaXN0b3I= 99041\nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 99042\nIERlc2Rl 99043\nIHJpZ2h0ZnVs 99044\nIENvcm5lbA== 99045\n5pE= 99046\nLkhPVVI= 99047\nIHNpZGVsaW5lZA== 99048\ncmVmZXJyZXI= 99049\nbWF6ZQ== 99050\nIGhvbHN0ZXI= 99051\nIGNyaXBwbGVk 99052\nIERhdGVGb3JtYXR0ZXI= 99053\nb3BoYWdl 99054\nX21E 99055\nIGRlc2VsZWN0 99056\ncmF1ZA== 99057\nIFBLSw== 99058\ncm93RGF0YQ== 99059\nIGxvY2tzbWl0aA== 99060\nLnJlc3BvbnNlcw== 99061\nKHByb2R1Y3RJZA== 99062\nX1NUTVQ= 99063\nS2V5VHlwZQ== 99064\nLlRoZW4= 99065\nemVl 99066\nIGNydA== 99067\nIEdyYW5kbWE= 99068\nQFJlc291cmNl 99069\nIGJpdHdpc2U= 99070\nLWNtcHI= 99071\n44CCd3d3 99072\nemVpdGln 99073\nJmRpc3BsYXk= 99074\nQ2FydEl0ZW0= 99075\nLU5v 99076\nIG51bcOpcm8= 99077\nIG1hdXI= 99078\nIGluc3RhbmNpYQ== 99079\nCWR0 99080\nX25wYw== 99081\nIHNrYXRlYm9hcmQ= 99082\n4oCcQWxs 99083\nIENyb3dk 99084\nIMOkbg== 99085\nIGJyYXo= 99086\nY2Fl 99087\neW5ldA== 99088\nL3Bt 99089\nL3NjcmVlbg== 99090\nT1BUQVJH 99091\nIFZCb3g= 99092\nIGxlb3BhcmQ= 99093\nX2dyZWF0ZXI= 99094\nY3B0 99095\nPGRk 99096\nIG1lY2hhbmljYWxseQ== 99097\nb3NwZWxz 99098\nKWY= 99099\nLmx3amds 99100\nLmdldFBvcnQ= 99101\nIFBSRUY= 99102\nLkFkZFRyYW5zaWVudA== 99103\ncHBhcmQ= 99104\nIO2ajA== 99105\nRXRoZXJuZXQ= 99106\nIHNhbGluZQ== 99107\nKGxldmVscw== 99108\nIHNlcnZpY2VQcm92aWRlcg== 99109\nLkFuZ2xl 99110\nYWx0aXR1ZGU= 99111\naWxsYXVtZQ== 99112\nIHNjYXBl 99113\nX0NBTEM= 99114\nX3F1ZXN0 99115\nIERpc3NlcnRhdGlvbg== 99116\nIEVETQ== 99117\nLUNkcw== 99118\nIGhvbm9yYXJ5 99119\nc3RvcHM= 99120\nIHN1YmRpcg== 99121\nIFZI 99122\nIENoZWF0 99123\nIHJpZ2h0ZnVsbHk= 99124\nUUU= 99125\nLldyaXRlQnl0ZQ== 99126\nZmlndXJlcw== 99127\nZW5uaWU= 99128\nKERCRw== 99129\nIHZva3NuZQ== 99130\nIGV4cGVuZGVk 99131\nVU5JQ0FUSU9O 99132\naWxpbng= 99133\nIFJlY2Fw 99134\nX3ZlcnRz 99135\nIHRyYXVtYXQ= 99136\nIGdldFBsYXllcg== 99137\nIHZlcmJlc3M= 99138\nIGN1bHRpdmF0aW5n 99139\nIGluaXRpYXRvcg== 99140\nVGjDtG5n 99141\nZmluZEZpcnN0 99142\nX3Blcm1z 99143\nIGJ1Yw== 99144\nICIiIg0KDQo= 99145\nVFlQRVM= 99146\nb2JqZWN0TWFuYWdlcg== 99147\nKENvbmZpZ3VyYXRpb25NYW5hZ2Vy 99148\nIHRpbWlk 99149\nIHNuYXBjaGF0 99150\nIGNvbnNlZw== 99151\nCWRpc3RhbmNl 99152\nX3JpZ2h0cw== 99153\nX0Rlcw== 99154\nIEZsZXNo 99155\nLXZlcg== 99156\nIGFmbA== 99157\nZnJhdWVu 99158\nIGJsYXNwaA== 99159\nIFF1YWxpdMOkdA== 99160\nbWFm 99161\nTW9uaXRvcmluZw== 99162\nLkRpZmY= 99163\nIHNob3JlbGluZQ== 99164\nIHJlc3BvbnNlQm9keQ== 99165\nbWVtc2V0 99166\nPGRlY2ltYWw= 99167\nU21hcnR5SGVhZGVyQ29kZQ== 99168\nIGluc2V0cw== 99169\nIEJpbmFyeVRyZWU= 99170\nYW1lZGE= 99171\nIG5paGls 99172\nIE5heQ== 99173\neW1vbG9neQ== 99174\nIFdH 99175\nIHRhcGk= 99176\nIEluc3RhbGxlZA== 99177\nbWFpbnRlbmFuY2U= 99178\nKX0iCg== 99179\nIFhP 99180\nLXBlcmlvZA== 99181\nc2Fy 99182\nIG5pbmd1bmE= 99183\nT1JNQVQ= 99184\nLnNldFByb3RvdHlwZU9m 99185\nIEti 99186\nIEhlbnJpaw== 99187\nw6l0aXF1ZQ== 99188\nIExhaG9yZQ== 99189\nCUFkZHJlc3M= 99190\nIG1lbHRz 99191\nTnk= 99192\nX2FkdmFuY2U= 99193\nIHZlbG9jaWRhZA== 99194\nIGFsdW1ubw== 99195\nIHNhbml0aXplcg== 99196\nIHBoaXNoaW5n 99197\nIENvbWV0 99198\nIGNoaWFy 99199\nCXNwZWM= 99200\ndHJpbW1lZA== 99201\nKHN0YXRlYXJy 99202\nb25uZW4= 99203\nUmV2ZW51ZQ== 99204\nTGVucw== 99205\nIGNoYWlyZWQ= 99206\nIEFzc3VtZXM= 99207\nVHJhc2g= 99208\nX3Vuc2V0 99209\nXEJyaWRnZQ== 99210\nUG9pbnRTaXpl 99211\nIFBvbGlj 99212\nIHNleHVhbGVz 99213\nCWRmcw== 99214\nIFdpZGVTdHJpbmc= 99215\nIGFjY3J1ZWQ= 99216\nWVc= 99217\nX1NDSEVEVUxF 99218\nIGtpdGU= 99219\nIHBhcmFjaHV0ZQ== 99220\nW3RhYmxl 99221\nIGFjdGl2ZUNsYXNzTmFtZQ== 99222\nLlF1YWQ= 99223\nSXNyYWVsaQ== 99224\nIMWT 99225\nIGhvb2c= 99226\nIGNo4buJ 99227\nZXdlYXI= 99228\nIHRpcmVsZXNzbHk= 99229\nc2V0RXJyb3I= 99230\nLmdldEFtb3VudA== 99231\nLnNldEl0ZW1z 99232\nIE1hbnNvbg== 99233\nIEJheWVzaWFu 99234\nX0ZsYWc= 99235\nQUNIRVI= 99236\nL29yaWdpbmFs 99237\nIGltbWFj 99238\nIExvc2luZw== 99239\nJz4KCg== 99240\nTGlj 99241\nIE1pcmFnZQ== 99242\nIEFzc2VtYmx5RmlsZVZlcnNpb24= 99243\nVGVW 99244\nIFZhbHVlRXZlbnRMaXN0ZW5lcg== 99245\nLXNvbHZpbmc= 99246\nVGhv 99247\ncm91bGV0dGU= 99248\nX1dQ 99249\nIHVuaW50ZXJydXB0ZWQ= 99250\nIGZpZWxkVHlwZQ== 99251\nLlR5cGVk 99252\nIGFtb3Vy 99253\nIG1vY2tlcnk= 99254\nKHZvbA== 99255\nIFN1YmNvbW1pdHRlZQ== 99256\nIFJ1Zg== 99257\nZXJveA== 99258\nOlVJQnV0dG9uVHlwZUN1c3RvbQ== 99259\nIEJsdXI= 99260\nIHd5a29u 99261\nbmNlcw== 99262\nQVNIQk9BUkQ= 99263\nISEiKTsK 99264\nIG11cmRlcmVycw== 99265\nLmRhaWx5 99266\nIERJQUc= 99267\namluZw== 99268\nIGRvbHBoaW4= 99269\nIGzDsm5n 99270\nIGLDtg== 99271\nIFZvY2FidWxhcnk= 99272\nLlN0T2JqZWN0 99273\nJykiPg== 99274\nIHp1bg== 99275\nIHNjcmltbWFnZQ== 99276\ndHLDqWFs 99277\nIExpZw== 99278\nW3Zp 99279\nQ29sZQ== 99280\nIGZyb3N0aW5n 99281\nLlBsYXllcnM= 99282\nLXRyYW5zbGF0ZQ== 99283\nRmVlbHM= 99284\nPVwiLw== 99285\nLkJ1dHRlcktuaWZl 99286\nID8+Owo= 99287\nIGF2aQ== 99288\naW5uaWU= 99289\nLkZhaWx1cmU= 99290\nIHNwaW5kbGU= 99291\nQ29uZmlndXJhdGlvbkV4Y2VwdGlvbg== 99292\nX2hvcA== 99293\nIHBvc2nDp8Ojbw== 99294\nIEF3YWl0 99295\nVUlJbWFnZVBpY2tlckNvbnRyb2xsZXI= 99296\nCWRheQ== 99297\nIGdlbm9t 99298\nQ2Fi 99299\nINGA0LXQt9GD0LvRjNGC0LDRgg== 99300\nT1JJR0lOQUw= 99301\nIGVqYWN1bGF0aW9u 99302\nKHRjcA== 99303\nU0VDT05E 99304\nIHRvbmlj 99305\nIExpc3RCb3g= 99306\nIAkJCg== 99307\nKCk+Cg== 99308\nIHF1YXRyZQ== 99309\nxrDhu6NuZw== 99310\nd2l0aEVycm9ycw== 99311\nLk1heWJl 99312\nLOKApg== 99313\ndG9rZW5JZA== 99314\nX1VOREVG 99315\nIGZyZXNobmVzcw== 99316\nIEFtZW5kbWVudHM= 99317\nLm1hcGJveA== 99318\nLkNW 99319\nKGJsb2c= 99320\nX2dldHRpbWU= 99321\nLnF1ZXN0 99322\nc3BhcnNl 99323\nIHJlc2FsZQ== 99324\nIGVudGh1c2lhc3RpY2FsbHk= 99325\nIFByb3N0aXR1dGFz 99326\nV2E= 99327\nQ2FyZ28= 99328\nLlBhcmNlbGFibGU= 99329\nU0VOU09S 99330\nIFJ5dQ== 99331\nTGF1Z2hz 99332\nX05hdGl2ZQ== 99333\nL3Bn 99334\neXN0cw== 99335\nIHBob3RvYw== 99336\n566A 99337\nYWRvcHQ= 99338\nLnNwZWNpZXM= 99339\nY29uY2lsaWF0aW9u 99340\nQWRqdXN0ZWQ= 99341\nLkZpcmViYXNlQXV0aA== 99342\ndXR0bGU= 99343\nb3JkaW5hdGlvbg== 99344\nIG11bmNo 99345\nIFN0YWtl 99346\nLnBpbmc= 99347\nYW5rZXI= 99348\nKFFTdHJpbmdMaXRlcmFs 99349\nIHN1YnNjcmlwdA== 99350\nICAJCg== 99351\nIE1DQw== 99352\nX0NtZA== 99353\nc2V4eQ== 99354\naW91 99355\nIE1BTlk= 99356\nIG5hbm55 99357\nVFJBSU4= 99358\nIGZsb3VyaXNoaW5n 99359\nIFdhdGNoZXM= 99360\nIFFNYXA= 99361\nIEZlcm0= 99362\nIHdhc20= 99363\nIEFiZWQ= 99364\nX1VE 99365\nIEdsYXNzZXM= 99366\nK3Y= 99367\nQXR0ZW5k 99368\nLkNoYWlu 99369\nIGRlY2VuY3k= 99370\nIFN1cHBsZW1lbnRhcnk= 99371\naHVudGVy 99372\nLXR4dA== 99373\nICJ9IjsK 99374\nLnNldFdpbmRvd1RpdGxl 99375\nKCI8Pw== 99376\nIG51bWJlcldpdGhJbnQ= 99377\nIGFmYXI= 99378\n56e75Yiw 99379\ncml0dGU= 99380\nL2xpc3Rz 99381\nKeKAnQ== 99382\nIGRpdmVyc2Fz 99383\nIGVtYmVy 99384\nLlJlYWN0Tm9kZQ== 99385\nIGthbmc= 99386\nIFN0YW1mb3Jk 99387\nW2F0 99388\nLmNsb3NlUGF0aA== 99389\nIGNvbnRyYWNlcHRpdmU= 99390\nKGxvY2F0aW9ucw== 99391\nIGF2YW56 99392\nIENvbnRhaW5lcnM= 99393\nIFNjaG9sYXJz 99394\nLmFjY3VyYWN5 99395\nINCy0YvQv9C+0LvQvQ== 99396\n5ZWP 99397\nPSItLQ== 99398\nIFdyZXN0bGU= 99399\nIEd1YW50YW5hbW8= 99400\nIG55bXBo 99401\nKGd1ZXNz 99402\nLnNldENvbHVtbg== 99403\nX3RF 99404\nLmNvbnRlbnRNb2Rl 99405\nIGludmFsaWRhdGVk 99406\nIFNob290ZXI= 99407\nIE1hdGVy 99408\nLlN1Ym1pdA== 99409\nIGFuZ2xlZA== 99410\nbmF2YmFyRHJvcGRvd24= 99411\nQW8= 99412\nIOa1 99413\n0LjRgdC6 99414\nIFNDQU4= 99415\nCWNt 99416\nIE1hcmt0 99417\ndHJ1Y2s= 99418\nOycK 99419\nLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg== 99420\nIGdoZXR0bw== 99421\nIGJ1aXRlbg== 99422\nIENsb3du 99423\nOiE= 99424\nIGNoaW1wYW4= 99425\nJ2ZpZWxk 99426\nYW1tbw== 99427\nIERlcGVuZA== 99428\nKX0p 99429\nKEZMQUdT 99430\nIFJDQQ== 99431\nIENob2ly 99432\nTG9naW5QYWdl 99433\nIEdvcmQ= 99434\nQ29tcGFjdA== 99435\nLXBvY2tldA== 99436\nIGNvbnN1bHRhcg== 99437\nIEludGVyY2VwdA== 99438\nxZ90aXI= 99439\ndWV0eXBl 99440\nb25lbnRz 99441\nIHN0YXJ0UG9zaXRpb24= 99442\nIHBvc2l4 99443\nIFdvaG51bmc= 99444\nX0VYUFJFU1NJT04= 99445\nIExvZ2luQWN0aXZpdHk= 99446\nKG9wY29kZQ== 99447\nIFRhbmdv 99448\nIE51bWJlck9m 99449\nLm92ZXJmbG93 99450\nIFdDUw== 99451\nIE9jY3VwYXRpb24= 99452\nX2Nn 99453\nLlRvcGlj 99454\nIENhcmVlcnM= 99455\nQVJBVElPTg== 99456\nLmdldExpbmU= 99457\nIOyihQ== 99458\nIE5hY2h0 99459\nIHRvSXRlbQ== 99460\naW5jbHVzaXZl 99461\nYXZpZXN0 99462\nLWFwcG9pbnRlZA== 99463\nKGludGVybmFs 99464\nQ09OVEVYVA== 99465\nKGRpZ2l0cw== 99466\nPXsiLw== 99467\nIHBsYXl3cmlnaHQ= 99468\nIGRlYWRsaWVzdA== 99469\nbGVhZHM= 99470\nLlBVVA== 99471\nICp9Cgo= 99472\nIFBhY3Q= 99473\nIERpc2NvdW50cw== 99474\nTG9jYWxpemVkTWVzc2FnZQ== 99475\nIE3DpG5uZXI= 99476\nXz4= 99477\nIG1hc2NhcmE= 99478\nKFByb2ZpbGU= 99479\n5Yqf6IO9 99480\naW1pdMOp 99481\nIHdpbGRmaXJlcw== 99482\nLVJPTQ== 99483\nLmlzT24= 99484\nKGdyb3VwSWQ= 99485\nUmVwYWly 99486\nYWNjdW11bGF0ZQ== 99487\nIDwiLA== 99488\nIGhhbmR3cml0dGVu 99489\nIGFjaGV0ZXI= 99490\nIE1HTQ== 99491\nIElybWE= 99492\nLT57Xw== 99493\nZ2Vl 99494\nY3JpbWluYWw= 99495\nIOiLpeimgQ== 99496\nIG1vbWVudGFyaWx5 99497\nIikhPQ== 99498\nX2xpdA== 99499\nIGV4cGlyZXNJbg== 99500\nLiIpLg== 99501\n6ZW/5bqm 99502\nIGZyw6Zra2U= 99503\ndmxj 99504\nIG9yYnM= 99505\nKSwk 99506\nIHZlbnR1cmVk 99507\nLz5c 99508\nY2hhcm0= 99509\nTnVpdGth 99510\nZWxkaWc= 99511\nYXRvbmlu 99512\nV2l0bmVzcw== 99513\nLWxhdA== 99514\nIHNldEhpZGRlbg== 99515\nIHJlbGljcw== 99516\nIGNvbnN1bGF0ZQ== 99517\nLklHTk9SRQ== 99518\nIkFmdGVy 99519\nIHNldEFkZHJlc3M= 99520\nIGJlc3RlaHQ= 99521\nICcnKQoK 99522\nLnhheGlz 99523\nIHNlcsOjbw== 99524\nIG1pc2xlZA== 99525\nX1VOSUZPUk0= 99526\nIFZJQQ== 99527\naW5jcg== 99528\nIHplbml0aA== 99529\nIHZpc2Nvc2l0eQ== 99530\nIHRoaW5seQ== 99531\nLmdldFNoYXJlZFByZWZlcmVuY2Vz 99532\nLkVycm9yQ29kZQ== 99533\nIiksIg== 99534\nIE1pbGxpb25lbg== 99535\nIC8+KQo= 99536\nU2Nyb2xsSW5kaWNhdG9y 99537\nLXNlZWtpbmc= 99538\nIFBPTElUSUNP 99539\nYXNjYQ== 99540\nX3Js 99541\nTmF2aWc= 99542\nKGZ1bGxmaWxl 99543\nIHNvbGl0dWRl 99544\nIGp1dmVu 99545\nIGhhdWxpbmc= 99546\nIE1hY3Jvcw== 99547\nIEdyeQ== 99548\nIGV4ZXJjaXRhdGlvbg== 99549\nIEFUVEFDSw== 99550\nVGlja0NvdW50 99551\nIHJpdGVz 99552\nIGRvZQ== 99553\nUGFydGljbGVTeXN0ZW0= 99554\nIHNsdQ== 99555\nV2luZG93VGV4dA== 99556\nIENsYXNzTmFtZQ== 99557\nIHNsYW5kZXI= 99558\nCVBvcnQ= 99559\nam9uZw== 99560\nP2E= 99561\nLkRpYWw= 99562\n4oCUYXQ= 99563\nJG9ialBIUEV4Y2Vs 99564\nIHNvYXI= 99565\nRU5O 99566\nYXBwZWFyZWQ= 99567\nIHF1b3RpZA== 99568\nZW1hY2hpbmU= 99569\nIG5pcA== 99570\nIG1pY3JvdGltZQ== 99571\nIEFsbWE= 99572\nOyE= 99573\nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 99574\nIFBhc3NhZ2U= 99575\nIGR1bXBzdGVycw== 99576\nIEV4Y2x1ZGU= 99577\nIHN1Z2dlc3RpdmU= 99578\nIENpcmN1bGFyUHJvZ3Jlc3NJbmRpY2F0b3I= 99579\nX2Nscg== 99580\nQXJyYXlUeXBl 99581\nSUxMQQ== 99582\nRWxhcHNlZFRpbWU= 99583\nRHJpdmVu 99584\nIHJlc291cmNlTmFtZQ== 99585\nIEdhcnJpc29u 99586\nc2VyaXI= 99587\nLWFoZWFk 99588\nIHBpbm5hY2xl 99589\nIEVzcHJlc3Nv 99590\nU3BhcnNl 99591\nIGFzc2F5cw== 99592\nIEdpcmxmcmllbmQ= 99593\naW1pZA== 99594\nXT0nXA== 99595\nT05HTE9ORw== 99596\nIHBvcnRyYXlpbmc= 99597\nTGFuZQ== 99598\nIGLDunNxdWVkYQ== 99599\nIHJlaW5mb3JjZW1lbnRz 99600\nIFNwcmVhZHNoZWV0 99601\nIEFycmF5Q29sbGVjdGlvbg== 99602\nLGFycg== 99603\nbGlnaHRib3g= 99604\naWNhbmE= 99605\nPCI= 99606\nYnVpbGRlcnM= 99607\nS2lk 99608\nIE1hdFNuYWNrQmFy 99609\nRVhQUg== 99610\nb2RjYXN0 99611\nIEZvdW5kYXRpb25z 99612\nIGluZHM= 99613\nPSckew== 99614\nRml6eg== 99615\nLWZ1bmN0aW9uYWw= 99616\nKHdvcmtzcGFjZQ== 99617\nIHN0ZW1tZWQ= 99618\nX3BhdGNoZXM= 99619\nIEphcnZpcw== 99620\nUkVBRElORw== 99621\nIGRpc3Jlc3BlY3RmdWw= 99622\nIFFEb20= 99623\nICR7Cg== 99624\nZXN0YXR1cw== 99625\nUmVhY2hlZA== 99626\nIS4KCg== 99627\nSUxU 99628\nIE5ERUJVRw== 99629\nIENvdXJhZ2U= 99630\nYmlydGhkYXRl 99631\nIFRpbmc= 99632\nIHV0aWxpemFkbw== 99633\nw6FuY2hleg== 99634\nT3V0ZG9vcg== 99635\nIGhhbmRndW5z 99636\nUmVmQ291bnQ= 99637\nyZk= 99638\ncm9tbw== 99639\nIHR0cw== 99640\nLlNoZQ== 99641\nIFBhbmU= 99642\n44CRLOOAkA== 99643\nIElPQ1RM 99644\nL2JsYWNr 99645\naW5zY3JpcHRpb24= 99646\nIGJpb3BzeQ== 99647\nIFRpbWVJbnRlcnZhbA== 99648\nLlRlc3RDaGVjaw== 99649\nIEdVSVN0eWxl 99650\nIENhcGFiaWxpdHk= 99651\nIEJlaXRyYWc= 99652\nZG9ubmVlcw== 99653\nVHJlYXRtZW50 99654\nLmJhY2t1cA== 99655\nIHNpZ25pbmdz 99656\nIEJvY2E= 99657\nZHJt 99658\nLk1BSU4= 99659\nIGdvZWRl 99660\nIE1hcmt1cA== 99661\nR1JFRQ== 99662\nIEJhc2VTZXJ2aWNl 99663\nLkNyZWF0b3I= 99664\nIGphaWxz 99665\nIEthaG4= 99666\nSXBBZGRyZXNz 99667\nQUNISQ== 99668\nIGluaGliaXRlZA== 99669\nIEAkXw== 99670\nIEFzc2Fzcw== 99671\nIGVudmlhZG8= 99672\nSGVyb2Vz 99673\n0J/QtdGA 99674\nIE1hdmVu 99675\nLmxz 99676\nIGl2ZQ== 99677\nfFJG 99678\nIHJlc2l6ZU1vZGU= 99679\nIHJ1bXBl 99680\nX2F0dGFjaG1lbnRz 99681\nVFU= 99682\nIHRhY3RpbGU= 99683\nQXR0ZW1wdGluZw== 99684\nIHJvYmlu 99685\neWF3 99686\nIG1lcmNlbmFyaWVz 99687\nIEhhYml0YXQ= 99688\nZW5kZGF0ZQ== 99689\nIG94eQ== 99690\nCVJhbmRvbQ== 99691\nb2hvbg== 99692\nSXNOdWxs 99693\nIFZhbGlkYXRpb25SZXN1bHQ= 99694\n44Oa 99695\ndW1iZWQ= 99696\ncHB2 99697\nIGFycA== 99698\naWNoaWNr 99699\nX3Jubg== 99700\nIFRGVA== 99701\nVGV4SW1hZ2U= 99702\nIk9u 99703\nIFNhbXBsZXI= 99704\ndG9wbA== 99705\nIGphbmU= 99706\neWxpbmc= 99707\nIFVOSUNPREU= 99708\nVGFiSW5kZXg= 99709\nPHsK 99710\nc3VzcGVuZA== 99711\ndXZpYW4= 99712\nLGFwcGxpY2F0aW9u 99713\n0L7Qu9C40YfQtdGB0YLQstC+ 99714\neWF0 99715\nZXppZXI= 99716\nIENIVU5L 99717\nIEFkbGVy 99718\nL0FkZA== 99719\nIEtleVZhbHVl 99720\nIHNwb3PDs2I= 99721\nU2FtcGxpbmc= 99722\nY2hlcnM= 99723\nX0FNRA== 99724\nUnU= 99725\nLk11c3RDb21waWxl 99726\nTmF0aW9u 99727\nQXNzb2M= 99728\nTWFuYWdpbmc= 99729\nIEVuZ2w= 99730\nX0dC 99731\nIHN1Y2NpbmN0 99732\nIGRpc2xpa2Vk 99733\nIElrZQ== 99734\nQnVsbGV0aW4= 99735\nX0FSQ0hJVkU= 99736\nUHJvcG9zYWw= 99737\nIGpvZ2dpbmc= 99738\nLkNSRUFURUQ= 99739\nIGNob2w= 99740\n6KOF 99741\njKg= 99742\nLXB1c2g= 99743\nIHJlc2VydmE= 99744\nY29yZXY= 99745\nw6h0cmU= 99746\nVEhS 99747\nIGluY29tcGV0ZW5jZQ== 99748\nIGNoYXJpc21h 99749\n5oSf 99750\nICI9PQ== 99751\nQlRO 99752\nIExvY2F0b3I= 99753\naXZldA== 99754\nKCcuJykK 99755\nIGZvckluZGV4UGF0aA== 99756\nw7RtZQ== 99757\nIGNhcGFjaXQ= 99758\nd2F0ZXJz 99759\nIFdST05H 99760\naG9h 99761\nIE1JUFM= 99762\nIGVtaXNz 99763\nIEphY3F1ZWxpbmU= 99764\nKGNtcA== 99765\nIGVlbnM= 99766\nTGVv 99767\nLnRpbWluZw== 99768\nQ0xVU0lPTg== 99769\nICgiLQ== 99770\n5ZOI 99771\nLmtvZGU= 99772\nIFVuZGVydA== 99773\nIGJld2lsZA== 99774\nIEVzc2Vu 99775\nLmhk 99776\nIHJlbmVnb3Q= 99777\nIG1vd2Vy 99778\nIGxzcA== 99779\nIHBlbmNoYW50 99780\nIG1hbm9l 99781\nIGFnbGk= 99782\nIHJlY2Fs 99783\nIE9QRVJBVElPTg== 99784\nKF4pKA== 99785\nIM69 99786\nIFNjb3BlZA== 99787\nIEAiCg== 99788\nPWxhYmVs 99789\nW2xvYw== 99790\nSW50bA== 99791\nIE56 99792\ndGFibGV0 99793\nLkNvbHVtbk5hbWU= 99794\nIHNjcmVlblNpemU= 99795\nREJ1cw== 99796\nY29va2Vk 99797\nLXJlZ2lzdHJhdGlvbg== 99798\n4oCcT25l 99799\nLW5vbg== 99800\nIHdpxJlj 99801\nIGNvc3Rh 99802\nLmFkZFRhYg== 99803\nLmNvbmRpdGlvbnM= 99804\nIEhlc3M= 99805\nTUVNT1JZ 99806\nIEF2YWxhbmNoZQ== 99807\nKCl9fQo= 99808\nIHRyaXBsZXQ= 99809\nIGxhYnlyaW50aA== 99810\nIE5vZGVMaXN0 99811\nIE5ZVA== 99812\nIHllbmk= 99813\nZGZm 99814\nLkh0bWxDb250cm9scw== 99815\nQVZJUw== 99816\nL01hdGg= 99817\nIG1lbWNtcA== 99818\n2KfYoQ== 99819\n0L7RgdGM 99820\nY3JhcA== 99821\nKHBhZ2Vz 99822\nIGx4bWw= 99823\nIFFEYXRlVGltZQ== 99824\nX3RjYg== 99825\nIG9wZW5pZA== 99826\nIHN5bmFwdGlj 99827\nIE1ETUE= 99828\nKHNsdWc= 99829\naWdtYXRpYw== 99830\nZW5vcg== 99831\nIGNyYW1wZWQ= 99832\nR09Q 99833\nrZA= 99834\nLmlzRmlsZQ== 99835\nIERpZmZlcmVudGlhbA== 99836\nID0iIjsK 99837\nCQkJICAgIAk= 99838\nIENvb2tl 99839\nCVVGVU5DVElPTg== 99840\nIHBlcnNldmVyYW5jZQ== 99841\nUmVsYXRpdmVMYXlvdXQ= 99842\nSU1QT1JUQU5U 99843\nIGV4b24= 99844\nINC+0L0= 99845\naWJhc2U= 99846\nKENPTlQ= 99847\nbm92YXRpb24= 99848\n5L2V 99849\nW3N1Yg== 99850\nQWRtaW5Db250cm9sbGVy 99851\nSFRUUEhlYWRlcg== 99852\nY3JlYXI= 99853\nIE5JUg== 99854\nIERyb3BEb3duTGlzdA== 99855\nIHZhbGlkZQ== 99856\nIGRlaHlkcmF0aW9u 99857\nLidd 99858\nKFdJTg== 99859\nIC4uLlw= 99860\nIHBob3Rvc2hvcA== 99861\nCUluaXQ= 99862\nX2NvdQ== 99863\nIHRpbWVab25l 99864\nZGFyd2lu 99865\ncm9tYXRpYw== 99866\nTmF2aWdhdGlvbkl0ZW1TZWxlY3RlZExpc3RlbmVy 99867\nYnJhdGVz 99868\nXS0tOwo= 99869\nIHRyYWdlZGllcw== 99870\nIFBlZGlhdHJpY3M= 99871\nU01BUlQ= 99872\nLUFQSQ== 99873\nIE1lc3NhZ2VMb29rdXA= 99874\nCXZv 99875\nIHByZWp1ZGljZXM= 99876\nIG1B 99877\nVXBz 99878\nIE1JU1NJTkc= 99879\nCWFk 99880\nQ3JlYW0= 99881\nIFRi 99882\nIE1vbmE= 99883\nX2dob3N0 99884\nCXR5cGVz 99885\nRW1i 99886\nIERvY3VtZW50YXJ5 99887\nJyk7CgoKCg== 99888\nIGx1cA== 99889\nX1JlZmVyZW5jZQ== 99890\nIEJBVENI 99891\nIGludGVydHdpbmVk 99892\nPENlbGw= 99893\nIENhYnI= 99894\nbmF0aW9u 99895\nIGlzQ29ubmVjdGVk 99896\nLnJlbW92ZUxpc3RlbmVy 99897\nIGNvbmc= 99898\nX3Rp 99899\nIFNpbGljb25l 99900\nIOqysOqzvA== 99901\nIFdBTg== 99902\nIEdpYnJhbHRhcg== 99903\nL3Jlc3BvbnNl 99904\nCXBlcnNvbg== 99905\nY2hhbnRz 99906\nVklQ 99907\nZW1lcmdlbmN5 99908\nUGl4ZWxGb3JtYXQ= 99909\nLUFt 99910\nIHNvdXRod2VzdGVybg== 99911\nX3BsbA== 99912\naWZlcnM= 99913\nX09OQ0U= 99914\nIEZheWV0dGU= 99915\nLm5jYmk= 99916\nX1BhbmVs 99917\nLlF1YWw= 99918\nIHBvbHlz 99919\nIGNyZWF0ZVN0YWNrTmF2aWdhdG9y 99920\n77+9dA== 99921\nIGxheW9mZnM= 99922\nIEJsYW5jbw== 99923\nRmVhdA== 99924\nIFZpbWVv 99925\nX2NoaQ== 99926\nX2xpZmV0aW1l 99927\nUE9JTlRT 99928\nLHByaXZhdGU= 99929\nIHVuYmVhcmFibGU= 99930\ncHJpbnRpbmc= 99931\nIGNnaQ== 99932\nLkJBQ0s= 99933\nIGludGVybnM= 99934\nIE5ld2x5 99935\naW5mZWxk 99936\nKElC 99937\nIEthdGE= 99938\nIERlZmVuZGFudHM= 99939\nVGhy 99940\n6aKE 99941\nX1ZG 99942\nRkZGRkZGRkY= 99943\nIGRhdmlkamw= 99944\nIGJpdHRlcmx5 99945\nU3VnZ2VzdGlvbnM= 99946\nLnNldENhbmNlbGFibGU= 99947\nRklOQUw= 99948\nYXNvbnM= 99949\nX3J3bG9jaw== 99950\nX1dSQVBQRVI= 99951\nIGhhcHBpZXN0 99952\nKHJvd0luZGV4 99953\nw7NzaXRv 99954\nVE9UWVBF 99955\nQXV0b21hdGlvbg== 99956\nTG9nRmlsZQ== 99957\nIGNvbnNvbGF0aW9u 99958\n44OA 99959\nIHTDqm0= 99960\nIHByZXI= 99961\ncmd5eg== 99962\nIEdlZw== 99963\nCWR0bw== 99964\nLmRlZmF1bHRWYWx1ZQ== 99965\nIEthbWk= 99966\nIEFTRQ== 99967\nb3B0aW1pemVk 99968\nIO2PrA== 99969\nIG9yaWdpbmF0ZXM= 99970\nZXJyTXNn 99971\nIGVzcGHDp28= 99972\nKFNZUw== 99973\nIE1jQg== 99974\nZGFuY2U= 99975\nX2RldGVjdGVk 99976\nIGZyw7w= 99977\nCQkgICAgCQk= 99978\nPERhdGU= 99979\nKGNvbWI= 99980\nIERlY2lkZQ== 99981\nXEZpZWxk 99982\nIFByb3Bvc2Vk 99983\nUmli 99984\nIGRpc2xpa2Vz 99985\nIFdpZW4= 99986\nCURvY3VtZW50 99987\nIHRyYWY= 99988\nIHN0b3JpYQ== 99989\nIFRlbGxz 99990\nJyk9PQ== 99991\nQ3Jp 99992\nKFZBTFVF 99993\nIEJ1cm5ldHQ= 99994\nLHZvaWQ= 99995\nIGRhbmg= 99996\nIGNjcA== 99997\nQmxvY2tjaGFpbg== 99998\nOiItImAK 99999\nSUNsaWVudA== 100000\nSVNPREU= 100001\nSXNzdWVy 100002\nKX0NCg== 100003\nLGJ1dA== 100004\nIFVwaA== 100005\nKFN1Yg== 100006\nIHTDqWzDqXBob25l 100007\nIG9uRGF0YUNoYW5nZQ== 100008\nIG1hcnNoYWxsZXI= 100009\nLWFuYWx5dGljcw== 100010\nLGNvbnRlbnQ= 100011\nIGRlYmFjbGU= 100012\nX1ZhbHVlQ2hhbmdlZA== 100013\nIGZhdW5h 100014\nICM9Pg== 100015\nIGZveWVy 100016\nJ3V0aWxpc2F0aW9u 100017\nIE3DvGxsZXI= 100018\nIEZldGlzaA== 100019\nIGRlZmF1bHRNYW5hZ2Vy 100020\nIGJhY2t0cmFjaw== 100021\nQmFo 100022\nRXhwbGljaXQ= 100023\nX0FTQ0lJ 100024\nIG1BY3Rpdml0eQ== 100025\nKE1zZw== 100026\nIOqyjA== 100027\nIFRFUk1T 100028\nIEFuZ2ll 100029\nSFNW 100030\nIE1vc3F1ZQ== 100031\nLk5hbWVz 100032\n7Yq8 100033\ncmVzdGU= 100034\nX3Bhcm1z 100035\nIGdhcGluZw== 100036\nIGNyb3BwaW5n 100037\nRGF0YUZyYW1l 100038\nIHJlc3BvbnNpdmVuZXNz 100039\nX3VuZG8= 100040\nX3RyYW4= 100041\nLnRlcm1pbmF0ZQ== 100042\nIGl0YWxpYW5l 100043\nIHdhbGt0aHJvdWdo 100044\nIGF0dHJhY3RpdmVuZXNz 100045\n0LTQtQ== 100046\nX1NUUw== 100047\nX2xlYXJu 100048\nIGNob2NvbGF0ZXM= 100049\naWVyYXJjaGljYWw= 100050\nLXRoaW5raW5n 100051\nICkpKQ== 100052\naXNobWVudHM= 100053\nLkxvZ2Y= 100054\nIFRNWg== 100055\nIENhbmFyeQ== 100056\nZm9pbA== 100057\nIFZhY2NpbmU= 100058\nLnZ4 100059\nIFN1cnJvdW5k 100060\nSW50ZXJtZWRpYXRl 100061\nIGlvdg== 100062\ndmFpcw== 100063\nJzsiOwo= 100064\n772eCgo= 100065\n6YCB5paZ 100066\n4oCmaXQ= 100067\nU2VhdHM= 100068\nQ2xhcg== 100069\nV2Fycw== 100070\nIEh1dGNoaW5zb24= 100071\nIEhhc2Fu 100072\nIScpCgo= 100073\nIFJpY2hpZQ== 100074\nY2hlaWRlbg== 100075\nKCQoJw== 100076\nWW9yaw== 100077\nIGxpZHM= 100078\nIGFscGhhbnVtZXJpYw== 100079\nIEdsb2Nr 100080\nLnNoYXBlcw== 100081\nIHNwYXJraW5n 100082\nX2Vwc2lsb24= 100083\ndXBsaWNhdGVk 100084\nLmRpcnR5 100085\nXSk9PQ== 100086\nIOychOy5mA== 100087\nIHNjbg== 100088\nIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 100089\nX1BSRVZJRVc= 100090\nX0hD 100091\naWVsZGluZw== 100092\nZmdldHM= 100093\nIEFkZGlzb24= 100094\nIHByb2R1Y3RTZXJ2aWNl 100095\nLWZpZ3VyZQ== 100096\nKHJldHZhbA== 100097\nemFubw== 100098\nIGF1dG9i 100099\nCXNk 100100\nX251bWVy 100101\nIFNldExhc3RFcnJvcg== 100102\nIEZpb3I= 100103\naWZpY2FuY2U= 100104\nVW50aXRsZWQ= 100105\nIGluZmllbGQ= 100106\nIHt9KSk7Cg== 100107\nIHNwYWM= 100108\nIHJvb2tpZXM= 100109\nKGRlc2NyaWJpbmc= 100110\nbmdlbg== 100111\n4K6/4K4= 100112\nLnJkZg== 100113\nLk11dGV4 100114\nIGtuZWVsaW5n 100115\nIFFF 100116\nc2V0TWF4 100117\nUmVhZFN0cmVhbQ== 100118\nIHZlbnRhcw== 100119\nc3V0 100120\nY21wZXE= 100121\nLldyaXRlQWxsVGV4dA== 100122\nIEV4cGVyaWVuY2Vk 100123\nJF9f 100124\nIGthdW0= 100125\nIExJUw== 100126\nIGRvY3VtZW50b3M= 100127\nX0hFQUxUSA== 100128\naWNvbnRhaW5z 100129\nIGFydGlzYW5z 100130\nT1dORVI= 100131\nIGJsaW5rZWQ= 100132\nZ2V0RGlzcGxheQ== 100133\nIHRvZW4= 100134\nIHJvd051bQ== 100135\nIGF2cmls 100136\nIGludmlz 100137\nIEtlYXI= 100138\ndG9CZUluVGhlRG9jdW1lbnQ= 100139\nYXB1cg== 100140\nIHJhY2tlZA== 100141\nIE1jTWFzdGVy 100142\nX0FUVFJJQg== 100143\nSGF6 100144\nIGZhY3R1cmE= 100145\nL3Rz 100146\nINGA0LDQt9C80LXRgA== 100147\nIHpm 100148\nIHNob3J0ZmFsbA== 100149\nLmZhc3Rh 100150\nIENPTlNUQU5U 100151\nLm1hbmFnZWQ= 100152\nZ2Vtcw== 100153\nU2hhcmVkUG9pbnRlcg== 100154\nIGJsdXJyeQ== 100155\nYnJpZ2h0bmVzcw== 100156\nKGNvbXBvbmVudHM= 100157\nIC4uLiIKCg== 100158\nU0VMTA== 100159\nIElsbHVzdHJhdG9y 100160\nLmdldENoYW5uZWw= 100161\nIHRyb3V2w6k= 100162\neXN0ZXJz 100163\nIHZvaXM= 100164\nIExpbmRlbg== 100165\nIGVtb2ppcw== 100166\nIGJyYXds 100167\nIE1TUg== 100168\nIEVsbw== 100169\nIENyb2F0aWFu 100170\nUG9wdXBNZW51 100171\nTGV3aXM= 100172\nLkpXVA== 100173\nIGFzdG9uaXNoZWQ= 100174\nQnVzaA== 100175\nKGl0ZW1JZA== 100176\nIGRldGFjaG1lbnQ= 100177\nIEVuY29yZQ== 100178\n5bCU 100179\nIHJla2w= 100180\nIGNyYW0= 100181\nKSQv 100182\nLmdldEhvc3Q= 100183\nX3JlY29tbWVuZA== 100184\nLUhU 100185\nX2NhbGlicmF0aW9u 100186\nQXV0aGVudGljYXRl 100187\nLmZpcmViYXNlYXBw 100188\nVU5JWA== 100189\nCUNhbWVyYQ== 100190\nIEhFQVA= 100191\nSWRlYWw= 100192\nLm9mZmljZQ== 100193\nIGdvb2Z5 100194\nKFN5bWJvbA== 100195\nIGpvdWVy 100196\nX3BhcnRpdGlvbnM= 100197\nIHJhcGlkZW1lbnQ= 100198\nIEdOVU5FVA== 100199\naWRVc2Vy 100200\nIHN1cGVydmlzZQ== 100201\nKENvbnRhY3Q= 100202\nQVdO 100203\n44GY 100204\nIG5hYW0= 100205\nIGF1c3Q= 100206\n5Zyo57q/ 100207\nX3NvZnRtYXg= 100208\nQWxsb3dBbm9ueW1vdXM= 100209\nYW1tYWJsZQ== 100210\nUk9VVEU= 100211\nKkQ= 100212\nIGFkZW4= 100213\nIENyaXN0aW5h 100214\nIENyaXN0aWFubw== 100215\nIGJsb29kc3RyZWFt 100216\nc3ViY2xhc3M= 100217\nX3BlcnNvbmE= 100218\nQ0hJTEQ= 100219\nLWtub3c= 100220\nIG5hdmlnYXRpb25PcHRpb25z 100221\nIFp1a3VuZnQ= 100222\nIFBpeGFy 100223\nVHlsZXI= 100224\nIHVuZGVyd29ybGQ= 100225\nIHNpbmNlcml0eQ== 100226\nIGRpc3BlbnNlcg== 100227\nIGt0ZXI= 100228\naWRkZXJz 100229\nLmFkZE5vZGU= 100230\nLWNoZWNrZWQ= 100231\nIGtleXN0 100232\nIFdUTw== 100233\nLnNpZ25hbHM= 100234\nIGFkdmVudHVyZXI= 100235\nIFBhbmc= 100236\nXFI= 100237\nPXBvcw== 100238\nIGRpc3BlbnNhcmllcw== 100239\nIENsb3NldA== 100240\nKCJ7XCI= 100241\naWRlb24= 100242\nIG7DqWNlc3NhaXJl 100243\nKCkiCg== 100244\nX1JFQ0VJVkVE 100245\nIHLDqXN1bHRhdHM= 100246\nIG1vZGVu 100247\nIEljZWxhbmRpYw== 100248\nO2Q= 100249\nLmFsbG93ZWQ= 100250\nKG5ld1VzZXI= 100251\nIG1lcmNpbGVzcw== 100252\nLldhaXRGb3I= 100253\nIGRheWNhcmU= 100254\nIENvbnZleW9y 100255\n"
  },
  {
    "path": "Tool/Sources/TokenEncoder/TiktokenCl100kBaseTokenEncoder.swift",
    "content": "import Foundation\nimport Tiktoken\n\npublic final class TiktokenCl100kBaseTokenEncoder: TokenEncoder {\n    static var encoding: Encoding?\n    static var isLoadingEncoding = false\n\n    public init() {}\n\n    public func encode(text: String) -> [Int] {\n        guard let encoding = Self.createEncodingIfNeeded() else { return [] }\n        return encoding.encode(value: text)\n    }\n\n    static func createEncodingIfNeeded() -> Encoding? {\n        if let encoding = Self.encoding { return encoding }\n        let encoding = Tiktoken.shared.getEncoding(\n            for: Vocab.cl100kBase,\n            name: \"gpt-4\",\n            fileURL: Bundle.module.url(forResource: \"cl100k_base\", withExtension: \"tiktoken\")!\n        )!\n        Self.encoding = encoding\n        return encoding\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/TokenEncoder/Tokenizer.swift",
    "content": "import Foundation\n\npublic protocol TokenEncoder: TokenCounter {\n    func encode(text: String) async -> [Int]\n}\n\npublic extension TokenEncoder {\n    func countToken(text: String) async -> Int {\n        await encode(text: text).count\n    }\n}\n\npublic protocol TokenCounter {\n    func countToken(text: String) async -> Int\n}\n"
  },
  {
    "path": "Tool/Sources/USearchIndex/UsearchIndex.swift",
    "content": "import Foundation\nimport ObjectiveCExceptionHandling\nimport USearch\n\npublic typealias USearchLabel = USearch.USearchLabel\npublic typealias USearchScalar = USearch.USearchScalar\npublic typealias USearchMetric = USearch.USearchMetric\n\n/// It provides a simplified interface for `USearch.USearchIndex`.\npublic actor USearchIndex {\n    let index: USearch.USearchIndex\n\n    enum State {\n        case initialized\n        case loaded\n        case viewing\n    }\n\n    var state: State = .initialized\n\n    public init(\n        metric: USearchMetric,\n        dimensions: UInt32,\n        connectivity: UInt32,\n        quantization: USearchScalar\n    ) {\n        index = USearch.USearchIndex.make(\n            metric: metric,\n            dimensions: dimensions,\n            connectivity: connectivity,\n            quantization: quantization\n        )\n        state = .initialized\n    }\n\n    enum Error: Swift.Error, LocalizedError {\n        case indexNotFound\n        case alreadyLoaded\n        case mutationNotAllowedInViewingIndex\n        case invalidVectorSize\n        case exception(Swift.Error)\n        \n        var errorDescription: String? {\n            switch self {\n            case .indexNotFound:\n                return \"Can not find the index file.\"\n            case .alreadyLoaded:\n                return \"Index already loaded.\"\n            case .mutationNotAllowedInViewingIndex:\n                return \"Mutation not allowed in viewing index.\"\n            case .invalidVectorSize:\n                return \"Invalid vector size.\"\n            case .exception(let error):\n                return error.localizedDescription\n            }\n        }\n    }\n\n    public func load(path: String) throws {\n        guard state != .loaded else { throw Error.alreadyLoaded }\n        guard FileManager.default.fileExists(atPath: path) else {\n            throw Error.indexNotFound\n        }\n        do {\n            try ObjcExceptionHandler.catchException {\n                self.index.load(path: path)\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n        state = .loaded\n    }\n\n    public func view(path: String) throws {\n        guard state != .loaded else { throw Error.alreadyLoaded }\n        guard FileManager.default.fileExists(atPath: path) else {\n            throw Error.indexNotFound\n        }\n        do {\n            try ObjcExceptionHandler.catchException {\n                self.index.view(path: path)\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n        state = .viewing\n    }\n\n    public func save(path: String) throws {\n        if !FileManager.default.fileExists(atPath: path) {\n            FileManager.default.createFile(atPath: path, contents: nil, attributes: nil)\n        }\n        do {\n            try ObjcExceptionHandler.catchException {\n                self.index.save(path: path)\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n    }\n\n    public func clear() throws {\n        guard state != .viewing else { throw Error.mutationNotAllowedInViewingIndex }\n        do {\n            try ObjcExceptionHandler.catchException {\n                self.index.clear()\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n    }\n\n    public func add(label: USearchLabel, vector: [Float]) throws {\n        guard state != .viewing else { throw Error.mutationNotAllowedInViewingIndex }\n\n        guard vector.count == index.dimensions else {\n            throw Error.invalidVectorSize\n        }\n\n        if index.count + 1 >= index.capacity {\n            index.reserve(UInt32(index.count + 1))\n        }\n\n        do {\n            try ObjcExceptionHandler.catchException {\n                self.index.add(label: label, vector: vector[...])\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n    }\n\n    public func set(items: [(label: USearchLabel, vector: [Float])]) throws {\n        guard state != .viewing else { throw Error.mutationNotAllowedInViewingIndex }\n\n        try clear()\n        index.reserve(UInt32(items.count))\n\n        do {\n            try ObjcExceptionHandler.catchException {\n                for item in items {\n                    self.index.add(label: item.label, vector: item.vector[...])\n                }\n            }\n        } catch {\n            throw Error.exception(error)\n        }\n    }\n\n    public func search(\n        vector: [Float],\n        count: Int\n    ) throws -> [(label: USearchLabel, distance: Float)] {\n        guard vector.count == index.dimensions else { throw Error.invalidVectorSize }\n\n        do {\n            var result: ([USearch.USearchIndex.Label], [Float]) = ([], [])\n            try ObjcExceptionHandler.catchException {\n                result = self.index.search(vector: vector[...], count: count)\n            }\n            return zip(result.0, result.1).map { ($0, $1) }\n        } catch {\n            throw Error.exception(error)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/UserDefaultsObserver/UserDefaultsObserver.swift",
    "content": "import Foundation\n\npublic final class UserDefaultsObserver: NSObject {\n    public var onChange: (() -> Void)?\n    private weak var object: NSObject?\n    private let keyPaths: [String]\n\n    public init(\n        object: NSObject,\n        forKeyPaths keyPaths: [String],\n        context: UnsafeMutableRawPointer?\n    ) {\n        self.object = object\n        self.keyPaths = keyPaths\n        super.init()\n        for keyPath in keyPaths {\n            object.addObserver(self, forKeyPath: keyPath, options: .new, context: context)\n        }\n    }\n\n    deinit {\n        for keyPath in keyPaths {\n            object?.removeObserver(self, forKeyPath: keyPath)\n        }\n    }\n\n    public override func observeValue(\n        forKeyPath keyPath: String?,\n        of object: Any?,\n        change: [NSKeyValueChangeKey: Any]?,\n        context: UnsafeMutableRawPointer?\n    ) {\n        onChange?()\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WebScrapper/WebScrapper.swift",
    "content": "import Foundation\nimport SwiftSoup\nimport WebKit\n\n@MainActor\npublic final class WebScrapper {\n    final class NavigationDelegate: NSObject, WKNavigationDelegate {\n        weak var scrapper: WebScrapper?\n\n        public nonisolated func webView(_ webView: WKWebView, didFinish _: WKNavigation!) {\n            Task { @MainActor in\n                let scrollToBottomScript = \"window.scrollTo(0, document.body.scrollHeight);\"\n                _ = try? await webView.evaluateJavaScript(scrollToBottomScript)\n                self.scrapper?.webViewDidFinishLoading = true\n            }\n        }\n\n        public nonisolated func webView(\n            _: WKWebView,\n            didFail _: WKNavigation!,\n            withError error: Error\n        ) {\n            Task { @MainActor in\n                self.scrapper?.navigationError = error\n                self.scrapper?.webViewDidFinishLoading = true\n            }\n        }\n    }\n\n    public var webView: WKWebView\n\n    var webViewDidFinishLoading = false\n    var navigationError: (any Error)?\n    let navigationDelegate: NavigationDelegate = .init()\n\n    enum WebScrapperError: Error {\n        case retry\n    }\n\n    public init() async {\n        let jsonRuleList = ###\"\"\"\n        [\n          {\n            \"trigger\": {\n              \"url-filter\": \".*\",\n              \"resource-type\": [\"font\"]\n            },\n            \"action\": {\n              \"type\": \"block\"\n            }\n          },\n          {\n            \"trigger\": {\n              \"url-filter\": \".*\",\n              \"resource-type\": [\"image\"]\n            },\n            \"action\": {\n              \"type\": \"block\"\n            }\n          },\n          {\n            \"trigger\": {\n              \"url-filter\": \".*\",\n              \"resource-type\": [\"media\"]\n            },\n            \"action\": {\n              \"type\": \"block\"\n            }\n          }\n        ]\n        \"\"\"###\n\n        let list = try? await WKContentRuleListStore.default().compileContentRuleList(\n            forIdentifier: \"web-scrapping\",\n            encodedContentRuleList: jsonRuleList\n        )\n\n        let configuration = WKWebViewConfiguration()\n        if let list {\n            configuration.userContentController.add(list)\n        }\n        configuration.allowsAirPlayForMediaPlayback = false\n        configuration.mediaTypesRequiringUserActionForPlayback = .all\n        configuration.defaultWebpagePreferences.preferredContentMode = .desktop\n        configuration.defaultWebpagePreferences.allowsContentJavaScript = true\n        configuration.websiteDataStore = .nonPersistent()\n        configuration.applicationNameForUserAgent =\n            \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Safari/605.1.15\"\n\n        if #available(iOS 17.0, macOS 14.0, *) {\n            configuration.allowsInlinePredictions = false\n        }\n\n        // The web page need the web view to have a size to load correctly.\n        let webView = WKWebView(\n            frame: .init(x: 0, y: 0, width: 800, height: 5000),\n            configuration: configuration\n        )\n        self.webView = webView\n        navigationDelegate.scrapper = self\n        webView.navigationDelegate = navigationDelegate\n    }\n\n    public func fetch(\n        url: URL,\n        validate: @escaping (SwiftSoup.Document) -> Bool = { _ in true },\n        timeout: TimeInterval = 15,\n        retryLimit: Int = 50\n    ) async throws -> String {\n        webViewDidFinishLoading = false\n        navigationError = nil\n        var retryCount = 0\n        _ = webView.load(.init(url: url))\n        while !webViewDidFinishLoading {\n            try await Task.sleep(nanoseconds: 10_000_000)\n        }\n        let deadline = Date().addingTimeInterval(timeout)\n        if let navigationError { throw navigationError }\n        while retryCount < retryLimit, Date() < deadline {\n            if let html = try? await getHTML(), !html.isEmpty,\n               let document = try? SwiftSoup.parse(html, url.path),\n               validate(document)\n            {\n                return html\n            }\n            retryCount += 1\n            try await Task.sleep(nanoseconds: 100_000_000)\n        }\n\n        enum Error: Swift.Error, LocalizedError {\n            case failToValidate\n\n            var errorDescription: String? {\n                switch self {\n                case .failToValidate:\n                    return \"Failed to validate the HTML content within the given timeout and retry limit.\"\n                }\n            }\n        }\n        throw Error.failToValidate\n    }\n\n    func getHTML() async throws -> String {\n        do {\n            let isReady = try await webView.evaluateJavaScript(checkIfReady) as? Bool ?? false\n            if !isReady { throw WebScrapperError.retry }\n            return try await webView.evaluateJavaScript(getHTMLText) as? String ?? \"\"\n        } catch {\n            throw WebScrapperError.retry\n        }\n    }\n}\n\nprivate let getHTMLText = \"\"\"\ndocument.documentElement.outerHTML;\n\"\"\"\n\nprivate let checkIfReady = \"\"\"\ndocument.readyState === \"ready\" || document.readyState === \"complete\";\n\"\"\"\n\n"
  },
  {
    "path": "Tool/Sources/WebSearchService/SearchServices/AppleDocumentationSearchService.swift",
    "content": "import Foundation\nimport SwiftSoup\nimport WebKit\nimport WebScrapper\n\nstruct AppleDocumentationSearchService: SearchService {\n    func search(query: String) async throws -> WebSearchResult {\n        let queryEncoded = query\n            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? \"\"\n        let url = URL(string: \"https://developer.apple.com/search/?q=\\(queryEncoded)\")!\n\n        let scrapper = await WebScrapper()\n        let html = try await scrapper.fetch(url: url) { document in\n            DeveloperDotAppleResultParser.validate(document: document)\n        }\n\n        return try DeveloperDotAppleResultParser.parse(html: html)\n    }\n}\n\nenum DeveloperDotAppleResultParser {\n    static func validate(document: SwiftSoup.Document) -> Bool {\n        guard let _ = try? document.select(\"ul.search-results\").first\n        else { return false }\n        return true\n    }\n\n    static func parse(html: String) throws -> WebSearchResult {\n        let document = try SwiftSoup.parse(html)\n        let searchResult = try? document.select(\"ul.search-results\").first\n\n        guard let searchResult else { return .init(webPages: []) }\n\n        var results: [WebSearchResult.WebPage] = []\n        for element in searchResult.children() {\n            if let titleElement = try? element.select(\"p.result-title\"),\n               let link = try? titleElement.select(\"a\").attr(\"href\"),\n               !link.isEmpty\n            {\n                let title = (try? titleElement.text()) ?? \"\"\n                let snippet = (try? element.select(\"p.result-description\").text())\n                    ?? (try? element.select(\"ul.breadcrumb-list\").text())\n                    ?? \"\"\n                results.append(WebSearchResult.WebPage(\n                    urlString: {\n                        if link.hasPrefix(\"/\") {\n                            return \"https://developer.apple.com\\(link)\"\n                        }\n                        return link\n                    }(),\n                    title: title,\n                    snippet: snippet\n                ))\n            }\n        }\n\n        return WebSearchResult(webPages: results)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WebSearchService/SearchServices/BingSearchService.swift",
    "content": "import Foundation\n\nstruct BingSearchResult: Codable {\n    var webPages: WebPages\n\n    struct WebPages: Codable {\n        var webSearchUrl: String\n        var totalEstimatedMatches: Int\n        var value: [WebPageValue]\n\n        struct WebPageValue: Codable {\n            var id: String\n            var name: String\n            var url: String\n            var displayUrl: String\n            var snippet: String\n        }\n    }\n}\n\nstruct BingSearchResponseError: Codable, Error, LocalizedError {\n    struct E: Codable {\n        var code: String?\n        var message: String?\n    }\n\n    var error: E\n    var errorDescription: String? { error.message }\n}\n\nenum BingSearchError: Error, LocalizedError {\n    case searchURLFormatIncorrect(String)\n    case subscriptionKeyNotAvailable\n\n    var errorDescription: String? {\n        switch self {\n        case let .searchURLFormatIncorrect(url):\n            return \"The search URL format is incorrect: \\(url)\"\n        case .subscriptionKeyNotAvailable:\n            return \"Bing search subscription key is not available, please set it up in the service tab.\"\n        }\n    }\n}\n\nstruct BingSearchService: SearchService {\n    var subscriptionKey: String\n    var searchURL: String\n\n    init(subscriptionKey: String, searchURL: String) {\n        self.subscriptionKey = subscriptionKey\n        self.searchURL = searchURL\n    }\n\n    func search(query: String) async throws -> WebSearchResult {\n        let result = try await search(query: query, numberOfResult: 10)\n        return WebSearchResult(webPages: result.webPages.value.map {\n            WebSearchResult.WebPage(\n                urlString: $0.url,\n                title: $0.name,\n                snippet: $0.snippet\n            )\n        })\n    }\n\n    func search(\n        query: String,\n        numberOfResult: Int,\n        freshness: String? = nil\n    ) async throws -> BingSearchResult {\n        guard !subscriptionKey.isEmpty else { throw BingSearchError.subscriptionKeyNotAvailable }\n        guard let url = URL(string: searchURL)\n        else { throw BingSearchError.searchURLFormatIncorrect(searchURL) }\n\n        var components = URLComponents(url: url, resolvingAgainstBaseURL: true)\n        components?.queryItems = [\n            .init(name: \"q\", value: query),\n            .init(name: \"count\", value: String(numberOfResult)),\n            freshness.map { .init(name: \"freshness\", value: $0) },\n        ].compactMap { $0 }\n        var request = URLRequest(url: components?.url ?? url)\n        request.httpMethod = \"GET\"\n        request.addValue(subscriptionKey, forHTTPHeaderField: \"Ocp-Apim-Subscription-Key\")\n\n        let (data, _) = try await URLSession.shared.data(for: request)\n        do {\n            let result = try JSONDecoder().decode(BingSearchResult.self, from: data)\n            return result\n        } catch {\n            let e = try JSONDecoder().decode(BingSearchResponseError.self, from: data)\n            throw e\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WebSearchService/SearchServices/HeadlessBrowserSearchService.swift",
    "content": "import Foundation\nimport SwiftSoup\nimport WebKit\nimport WebScrapper\n\nstruct HeadlessBrowserSearchService: SearchService {\n    let engine: WebSearchProvider.HeadlessBrowserEngine\n\n    func search(query: String) async throws -> WebSearchResult {\n        let queryEncoded = query\n            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? \"\"\n        let url = switch engine {\n        case .google:\n            URL(string: \"https://www.google.com/search?q=\\(queryEncoded)\")!\n        case .baidu:\n            URL(string: \"https://www.baidu.com/s?wd=\\(queryEncoded)\")!\n        case .duckDuckGo:\n            URL(string: \"https://duckduckgo.com/?q=\\(queryEncoded)\")!\n        case .bing:\n            URL(string: \"https://www.bing.com/search?q=\\(queryEncoded)\")!\n        }\n\n        let scrapper = await WebScrapper()\n        let html = try await scrapper.fetch(url: url) { document in\n            switch engine {\n            case .google:\n                return GoogleSearchResultParser.validate(document: document)\n            case .baidu:\n                return BaiduSearchResultParser.validate(document: document)\n            case .duckDuckGo:\n                return DuckDuckGoSearchResultParser.validate(document: document)\n            case .bing:\n                return BingSearchResultParser.validate(document: document)\n            }\n        }\n\n        switch engine {\n        case .google:\n            return try GoogleSearchResultParser.parse(html: html)\n        case .baidu:\n            return await BaiduSearchResultParser.parse(html: html)\n        case .duckDuckGo:\n            return DuckDuckGoSearchResultParser.parse(html: html)\n        case .bing:\n            return BingSearchResultParser.parse(html: html)\n        }\n    }\n}\n\nenum GoogleSearchResultParser {\n    static func validate(document: SwiftSoup.Document) -> Bool {\n        guard let _ = try? document.select(\"#rso\").first\n        else { return false }\n        return true\n    }\n\n    static func parse(html: String) throws -> WebSearchResult {\n        let document = try SwiftSoup.parse(html)\n        let searchResult = try document.select(\"#rso\").first\n\n        guard let searchResult else { return .init(webPages: []) }\n\n        var results: [WebSearchResult.WebPage] = []\n        for element in searchResult.children() {\n            if let title = try? element.select(\"h3\").text(),\n               let link = try? element.select(\"a\").attr(\"href\"),\n               !link.isEmpty,\n               // A magic class name.\n               let snippet = try? element.select(\"div.VwiC3b\").first()?.text()\n               ?? element.select(\"span.st\").first()?.text()\n            {\n                results.append(WebSearchResult.WebPage(\n                    urlString: link,\n                    title: title,\n                    snippet: snippet\n                ))\n            }\n        }\n\n        return WebSearchResult(webPages: results)\n    }\n}\n\nenum BaiduSearchResultParser {\n    static func validate(document: SwiftSoup.Document) -> Bool {\n        return (try? document.select(\"#content_left\").first()) != nil\n    }\n\n    static func getRealLink(from baiduLink: String) async -> String {\n        guard let url = URL(string: baiduLink) else {\n            return baiduLink\n        }\n\n        let config = URLSessionConfiguration.default\n        config.httpShouldSetCookies = true\n        config.httpCookieAcceptPolicy = .always\n\n        var request = URLRequest(url: url)\n        request.httpMethod = \"GET\"\n        request.addValue(\n            \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15\",\n            forHTTPHeaderField: \"User-Agent\"\n        )\n\n        let redirectCapturer = RedirectCapturer()\n        let session = URLSession(\n            configuration: config,\n            delegate: redirectCapturer,\n            delegateQueue: nil\n        )\n\n        do {\n            let _ = try await session.data(for: request)\n\n            if let finalURL = redirectCapturer.finalURL {\n                return finalURL.absoluteString\n            }\n\n            return baiduLink\n        } catch {\n            return baiduLink\n        }\n    }\n\n    class RedirectCapturer: NSObject, URLSessionTaskDelegate {\n        var finalURL: URL?\n\n        func urlSession(\n            _ session: URLSession,\n            task: URLSessionTask,\n            willPerformHTTPRedirection response: HTTPURLResponse,\n            newRequest request: URLRequest,\n            completionHandler: @escaping (URLRequest?) -> Void\n        ) {\n            finalURL = request.url\n            completionHandler(request)\n        }\n    }\n\n    static func parse(html: String) async -> WebSearchResult {\n        let document = try? SwiftSoup.parse(html)\n        let elements = try? document?.select(\"#content_left\").first()?.children()\n\n        var results: [WebSearchResult.WebPage] = []\n        if let elements = elements {\n            for element in elements {\n                if let titleElement = try? element.select(\"h3\").first(),\n                   let link = try? element.select(\"a\").attr(\"href\"),\n                   link.hasPrefix(\"http\")\n                {\n                    let realLink = await getRealLink(from: link)\n                    let title = (try? titleElement.text()) ?? \"\"\n                    let snippet = {\n                        let abstract = try? element.select(\"div[data-module=\\\"abstract\\\"]\").text()\n                        if let abstract, !abstract.isEmpty {\n                            return abstract\n                        }\n                        return (try? titleElement.nextElementSibling()?.text()) ?? \"\"\n                    }()\n                    results.append(WebSearchResult.WebPage(\n                        urlString: realLink,\n                        title: title,\n                        snippet: snippet\n                    ))\n                }\n            }\n        }\n\n        return WebSearchResult(webPages: results)\n    }\n}\n\nenum DuckDuckGoSearchResultParser {\n    static func validate(document: SwiftSoup.Document) -> Bool {\n        return (try? document.select(\".react-results--main\").first()) != nil\n    }\n\n    static func parse(html: String) -> WebSearchResult {\n        let document = try? SwiftSoup.parse(html)\n        let body = document?.body()\n\n        var results: [WebSearchResult.WebPage] = []\n\n        if let reactResults = try? body?.select(\".react-results--main\") {\n            for object in reactResults {\n                for element in object.children() {\n                    if let linkElement = try? element.select(\"a[data-testid=\\\"result-title-a\\\"]\"),\n                       let link = try? linkElement.attr(\"href\"),\n                       link.hasPrefix(\"http\"),\n                       let titleElement = try? element.select(\"span\").first()\n                    {\n                        let title = (try? titleElement.select(\"span\").first()?.text()) ?? \"\"\n                        let snippet = (\n                            try? element.select(\"[data-result=snippet]\").first()?.text()\n                        ) ?? \"\"\n\n                        results.append(WebSearchResult.WebPage(\n                            urlString: link,\n                            title: title,\n                            snippet: snippet\n                        ))\n                    }\n                }\n            }\n        }\n\n        return WebSearchResult(webPages: results)\n    }\n}\n\nenum BingSearchResultParser {\n    static func validate(document: SwiftSoup.Document) -> Bool {\n        return (try? document.select(\"#b_results\").first()) != nil\n    }\n\n    static func getRealLink(from bingLink: String) -> String {\n        guard let url = URL(string: bingLink) else { return bingLink }\n\n        if let components = URLComponents(url: url, resolvingAgainstBaseURL: true),\n           let queryItems = components.queryItems,\n           var uParam = queryItems.first(where: { $0.name == \"u\" })?.value\n        {\n            if uParam.hasPrefix(\"a1aHR\") {\n                uParam.removeFirst()\n                uParam.removeFirst()\n            }\n\n            func decode() -> String? {\n                guard let decodedData = Data(base64Encoded: uParam),\n                      let decodedString = String(data: decodedData, encoding: .utf8)\n                else { return nil }\n                return decodedString\n            }\n\n            if let decodedString = decode() {\n                return decodedString\n            }\n            uParam += \"=\"\n            if let decodedString = decode() {\n                return decodedString\n            }\n            uParam += \"=\"\n            if let decodedString = decode() {\n                return decodedString\n            }\n        }\n\n        return bingLink\n    }\n\n    static func parse(html: String) -> WebSearchResult {\n        let document = try? SwiftSoup.parse(html)\n        let searchResults = try? document?.select(\"#b_results\").first()\n\n        var results: [WebSearchResult.WebPage] = []\n        if let elements = try? searchResults?.select(\"li.b_algo\") {\n            for element in elements {\n                if let titleElement = try? element.select(\"h2\").first(),\n                   let linkElement = try? titleElement.select(\"a\").first(),\n                   let link = try? linkElement.attr(\"href\"),\n                   link.hasPrefix(\"http\")\n                {\n                    let link = getRealLink(from: link)\n                    let title = (try? titleElement.text()) ?? \"\"\n                    let snippet = {\n                        if let it = try? element.select(\".b_caption p\").first()?.text(),\n                           !it.isEmpty { return it }\n                        if let it = try? element.select(\".b_lineclamp2\").first()?.text(),\n                           !it.isEmpty { return it }\n                        return (try? element.select(\"p\").first()?.text()) ?? \"\"\n                    }()\n\n                    results.append(WebSearchResult.WebPage(\n                        urlString: link,\n                        title: title,\n                        snippet: snippet\n                    ))\n                }\n            }\n        }\n\n        return WebSearchResult(webPages: results)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WebSearchService/SearchServices/SerpAPISearchService.swift",
    "content": "import Foundation\n\nstruct SerpAPIResponse: Codable {\n    var organic_results: [OrganicResult]\n\n    struct OrganicResult: Codable {\n        var position: Int?\n        var title: String?\n        var link: String?\n        var snippet: String?\n\n        func toWebSearchResult() -> WebSearchResult.WebPage? {\n            guard let link, let title else { return nil }\n            return WebSearchResult.WebPage(urlString: link, title: title, snippet: snippet ?? \"\")\n        }\n    }\n\n    func toWebSearchResult() -> WebSearchResult {\n        return WebSearchResult(webPages: organic_results.compactMap { $0.toWebSearchResult() })\n    }\n}\n\nstruct SerpAPISearchService: SearchService {\n    let engine: WebSearchProvider.SerpAPIEngine\n    let endpoint: URL = .init(string: \"https://serpapi.com/search.json\")!\n    let apiKey: String\n\n    init(engine: WebSearchProvider.SerpAPIEngine, apiKey: String) {\n        self.engine = engine\n        self.apiKey = apiKey\n    }\n\n    func search(query: String) async throws -> WebSearchResult {\n        var request = URLRequest(url: endpoint)\n        request.httpMethod = \"GET\"\n        var urlComponents = URLComponents(url: endpoint, resolvingAgainstBaseURL: true)!\n        urlComponents.queryItems = [\n            URLQueryItem(name: \"q\", value: query),\n            URLQueryItem(name: \"engine\", value: engine.rawValue),\n            URLQueryItem(name: \"api_key\", value: apiKey)\n        ]\n\n        guard let url = urlComponents.url else {\n            throw URLError(.badURL)\n        }\n\n        request = URLRequest(url: url)\n        request.httpMethod = \"GET\"\n\n        let (data, response) = try await URLSession.shared.data(for: request)\n\n        guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {\n            throw URLError(.badServerResponse)\n        }\n\n        // Parse the response into WebSearchResult\n        let decoder = JSONDecoder()\n\n        do {\n            let searchResponse = try decoder.decode(SerpAPIResponse.self, from: data)\n            return searchResponse.toWebSearchResult()\n        } catch {\n            throw error\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WebSearchService/WebSearchService.swift",
    "content": "import Foundation\nimport Preferences\nimport Keychain\n\npublic enum WebSearchProvider {\n    public enum SerpAPIEngine: String {\n        case google\n        case baidu\n        case bing\n        case duckDuckGo = \"duckduckgo\"\n    }\n\n    public enum HeadlessBrowserEngine: String {\n        case google\n        case baidu\n        case bing\n        case duckDuckGo = \"duckduckgo\"\n    }\n\n    case serpAPI(SerpAPIEngine, apiKey: String)\n    case headlessBrowser(HeadlessBrowserEngine)\n    case appleDocumentation\n\n    public static var userPreferred: WebSearchProvider {\n        switch UserDefaults.shared.value(for: \\.searchProvider) {\n        case .headlessBrowser:\n            return .headlessBrowser(.init(\n                rawValue: UserDefaults.shared.value(for: \\.headlessBrowserEngine).rawValue\n            ) ?? .google)\n        case .serpAPI:\n            let apiKeyName = UserDefaults.shared.value(for: \\.serpAPIKeyName)\n            return .serpAPI(.init(\n                rawValue: UserDefaults.shared.value(for: \\.serpAPIEngine).rawValue\n            ) ?? .google, apiKey: (try? Keychain.apiKey.get(apiKeyName)) ?? \"\")\n        }\n    }\n}\n\npublic struct WebSearchResult: Equatable {\n    public struct WebPage: Equatable {\n        public var urlString: String\n        public var title: String\n        public var snippet: String\n    }\n\n    public var webPages: [WebPage]\n}\n\npublic protocol SearchService {\n    func search(query: String) async throws -> WebSearchResult\n}\n\npublic struct WebSearchService {\n    let service: SearchService\n\n    init(service: SearchService) {\n        self.service = service\n    }\n\n    public init(provider: WebSearchProvider) {\n        switch provider {\n        case let .serpAPI(engine, apiKey):\n            service = SerpAPISearchService(engine: engine, apiKey: apiKey)\n        case let .headlessBrowser(engine):\n            service = HeadlessBrowserSearchService(engine: engine)\n        case .appleDocumentation:\n            service = AppleDocumentationSearchService()\n        }\n    }\n\n    public func search(query: String) async throws -> WebSearchResult {\n        return try await service.search(query: query)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Workspace/FileSaveWatcher.swift",
    "content": "import Foundation\n\nfinal class FileSaveWatcher {\n    let url: URL\n    var fileHandle: FileHandle?\n    var source: DispatchSourceFileSystemObject?\n    var changeHandler: () -> Void = {}\n\n    init(fileURL: URL) {\n        url = fileURL\n        startup()\n    }\n\n    deinit {\n        source?.cancel()\n    }\n\n    func startup() {\n        if let source = source {\n            source.cancel()\n        }\n\n        fileHandle = try? FileHandle(forReadingFrom: url)\n        if let fileHandle = fileHandle {\n            source = DispatchSource.makeFileSystemObjectSource(\n                fileDescriptor: fileHandle.fileDescriptor,\n                eventMask: .link,\n                queue: .main\n            )\n\n            source?.setEventHandler { [weak self] in\n                self?.changeHandler()\n                self?.startup()\n            }\n\n            source?.resume()\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Sources/Workspace/Filespace.swift",
    "content": "import Dependencies\nimport Foundation\nimport GitIgnoreCheck\nimport SuggestionBasic\n\npublic protocol FilespacePropertyKey {\n    associatedtype Value\n    static func createDefaultValue() -> Value\n}\n\npublic final class FilespacePropertyValues {\n    private var storage: [ObjectIdentifier: Any] = [:]\n\n    @WorkspaceActor\n    public subscript<K: FilespacePropertyKey>(_ key: K.Type) -> K.Value {\n        get {\n            if let value = storage[ObjectIdentifier(key)] as? K.Value {\n                return value\n            }\n            let value = key.createDefaultValue()\n            storage[ObjectIdentifier(key)] = value\n            return value\n        }\n        set {\n            storage[ObjectIdentifier(key)] = newValue\n        }\n    }\n}\n\npublic struct FilespaceCodeMetadata: Equatable {\n    public var uti: String?\n    public var tabSize: Int?\n    public var indentSize: Int?\n    public var usesTabsForIndentation: Bool?\n    public var lineEnding: String = \"\\n\"\n\n    init(\n        uti: String? = nil,\n        tabSize: Int? = nil,\n        indentSize: Int? = nil,\n        usesTabsForIndentation: Bool? = nil,\n        lineEnding: String = \"\\n\"\n    ) {\n        self.uti = uti\n        self.tabSize = tabSize\n        self.indentSize = indentSize\n        self.usesTabsForIndentation = usesTabsForIndentation\n        self.lineEnding = lineEnding\n    }\n    \n    public mutating func guessLineEnding(from text: String?) {\n        lineEnding = if let proposedEnding = text?.last {\n            if proposedEnding.isNewline {\n                String(proposedEnding)\n            } else {\n                \"\\n\"\n            }\n        } else {\n            \"\\n\"\n        }\n    }\n}\n\n@dynamicMemberLookup\npublic final class Filespace: @unchecked Sendable {\n    struct GitIgnoreStatus {\n        var isIgnored: Bool\n        var checkTime: Date\n        var isExpired: Bool {\n            Environment.now().timeIntervalSince(checkTime) > 60 * 3\n        }\n    }\n\n    // MARK: Metadata\n\n    public let fileURL: URL\n    public private(set) lazy var language: CodeLanguage = languageIdentifierFromFileURL(fileURL)\n    public var codeMetadata: FilespaceCodeMetadata = .init()\n    public var isTextReadable: Bool {\n        fileURL.pathExtension != \"mlmodel\"\n    }\n\n    // MARK: Suggestions\n\n    public private(set) var suggestionIndex: Int = 0\n    public internal(set) var suggestions: [CodeSuggestion] = [] {\n        didSet { refreshUpdateTime() }\n    }\n\n    public var presentingSuggestion: CodeSuggestion? {\n        guard suggestions.endIndex > suggestionIndex, suggestionIndex >= 0 else {\n            if suggestions.isEmpty {\n                return nil\n            }\n            return suggestions.first\n        }\n        return suggestions[suggestionIndex]\n    }\n\n    // MARK: Life Cycle\n\n    public var isExpired: Bool {\n        Environment.now().timeIntervalSince(lastUpdateTime) > 60 * 60\n    }\n\n    public internal(set) var lastUpdateTime: Date = Environment.now()\n    private var additionalProperties = FilespacePropertyValues()\n    let fileSaveWatcher: FileSaveWatcher\n    let onClose: (URL) -> Void\n\n    // MARK: Git Ignore\n\n    @WorkspaceActor\n    private var gitIgnoreStatus: GitIgnoreStatus?\n    @WorkspaceActor\n    public var isGitIgnored: Bool {\n        get async {\n            @Dependency(\\.gitIgnoredChecker) var gitIgnoredChecker\n            @Dependency(\\.date) var date\n\n            if let gitIgnoreStatus = gitIgnoreStatus, !gitIgnoreStatus.isExpired {\n                return gitIgnoreStatus.isIgnored\n            }\n            let isIgnored = await gitIgnoredChecker.checkIfGitIgnored(fileURL: fileURL)\n            gitIgnoreStatus = .init(isIgnored: isIgnored, checkTime: date())\n            return isIgnored\n        }\n    }\n    \n    @WorkspaceActor\n    public private(set) var version: Int = 0\n\n    // MARK: Methods\n\n    deinit {\n        onClose(fileURL)\n    }\n\n    init(\n        fileURL: URL,\n        onSave: @escaping (Filespace) -> Void,\n        onClose: @escaping (URL) -> Void\n    ) {\n        self.fileURL = fileURL\n        self.onClose = onClose\n        fileSaveWatcher = .init(fileURL: fileURL)\n        fileSaveWatcher.changeHandler = { [weak self] in\n            guard let self else { return }\n            onSave(self)\n        }\n    }\n\n    @WorkspaceActor\n    public subscript<K>(\n        dynamicMember dynamicMember: WritableKeyPath<FilespacePropertyValues, K>\n    ) -> K {\n        get { additionalProperties[keyPath: dynamicMember] }\n        set { additionalProperties[keyPath: dynamicMember] = newValue }\n    }\n\n    @WorkspaceActor\n    public func reset() {\n        suggestions = []\n        suggestionIndex = 0\n    }\n\n    public func refreshUpdateTime() {\n        lastUpdateTime = Environment.now()\n    }\n\n    @WorkspaceActor\n    public func setSuggestions(_ suggestions: [CodeSuggestion]) {\n        self.suggestions = suggestions\n        suggestionIndex = 0\n    }\n\n    @WorkspaceActor\n    public func nextSuggestion() {\n        suggestionIndex += 1\n        if suggestionIndex >= suggestions.endIndex {\n            suggestionIndex = 0\n        }\n    }\n\n    @WorkspaceActor\n    public func previousSuggestion() {\n        suggestionIndex -= 1\n        if suggestionIndex < 0 {\n            suggestionIndex = suggestions.endIndex - 1\n        }\n    }\n    \n    @WorkspaceActor\n    public func bumpVersion() {\n        version += 1\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Workspace/OpenedFileRocoverableStorage.swift",
    "content": "import Foundation\nimport Preferences\n\npublic final class OpenedFileRecoverableStorage {\n    let projectRootURL: URL\n    let userDefault = UserDefaults.shared\n    let key = \"OpenedFileRecoverableStorage\"\n\n    init(projectRootURL: URL) {\n        self.projectRootURL = projectRootURL\n    }\n\n    public func openFile(fileURL: URL) {\n        var dict = userDefault.dictionary(forKey: key) ?? [:]\n        var openedFiles = Set(dict[projectRootURL.path] as? [String] ?? [])\n        openedFiles.insert(fileURL.path)\n        dict[projectRootURL.path] = Array(openedFiles)\n        Task { @MainActor [dict] in\n            userDefault.set(dict, forKey: key)\n        }\n    }\n\n    public func closeFile(fileURL: URL) {\n        var dict = userDefault.dictionary(forKey: key) ?? [:]\n        var openedFiles = dict[projectRootURL.path] as? [String] ?? []\n        openedFiles.removeAll(where: { $0 == fileURL.path })\n        dict[projectRootURL.path] = openedFiles\n        Task { @MainActor [dict] in\n            userDefault.set(dict, forKey: key)\n        }\n    }\n\n    public var openedFiles: [URL] {\n        let dict = userDefault.dictionary(forKey: key) ?? [:]\n        let openedFiles = dict[projectRootURL.path] as? [String] ?? []\n        return openedFiles.map { URL(fileURLWithPath: $0) }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Workspace/Workspace.swift",
    "content": "import Foundation\nimport Preferences\nimport SuggestionBasic\nimport UserDefaultsObserver\nimport XcodeInspector\n\nenum Environment {\n    static var now = { Date() }\n}\n\npublic protocol WorkspacePropertyKey {\n    associatedtype Value\n    static func createDefaultValue() -> Value\n}\n\npublic class WorkspacePropertyValues {\n    private var storage: [ObjectIdentifier: Any] = [:]\n\n    @WorkspaceActor\n    public subscript<K: WorkspacePropertyKey>(_ key: K.Type) -> K.Value {\n        get {\n            if let value = storage[ObjectIdentifier(key)] as? K.Value {\n                return value\n            }\n            let value = key.createDefaultValue()\n            storage[ObjectIdentifier(key)] = value\n            return value\n        }\n        set {\n            storage[ObjectIdentifier(key)] = newValue\n        }\n    }\n}\n\nopen class WorkspacePlugin {\n    public private(set) weak var workspace: Workspace?\n    public var projectRootURL: URL { workspace?.projectRootURL ?? URL(fileURLWithPath: \"/\") }\n    public var workspaceURL: URL { workspace?.workspaceURL ?? projectRootURL }\n    public var filespaces: [URL: Filespace] { workspace?.filespaces ?? [:] }\n\n    public init(workspace: Workspace) {\n        self.workspace = workspace\n    }\n\n    open func didOpenFilespace(_: Filespace) {}\n    open func didSaveFilespace(_: Filespace) {}\n    open func didUpdateFilespace(_: Filespace, content: String) {}\n    open func didCloseFilespace(_: URL) {}\n}\n\n@dynamicMemberLookup\npublic final class Workspace: @unchecked Sendable {\n    public struct UnsupportedFileError: Error, LocalizedError {\n        public var extensionName: String\n        public var errorDescription: String? {\n            \"File type \\(extensionName) unsupported.\"\n        }\n\n        public init(extensionName: String) {\n            self.extensionName = extensionName\n        }\n    }\n\n    public struct CantFindWorkspaceError: Error, LocalizedError {\n        public var errorDescription: String? {\n            \"Can't find workspace.\"\n        }\n    }\n\n    public struct CantFindFileError: Error, LocalizedError {\n        public var fileURL: URL\n        public var errorDescription: String? {\n            \"Can't find \\(fileURL).\"\n        }\n    }\n\n    private var additionalProperties = WorkspacePropertyValues()\n    public internal(set) var plugins = [ObjectIdentifier: WorkspacePlugin]()\n    public let workspaceURL: URL\n    public let projectRootURL: URL\n    public let openedFileRecoverableStorage: OpenedFileRecoverableStorage\n    public private(set) var lastLastUpdateTime = Environment.now()\n    public var isExpired: Bool {\n        Environment.now().timeIntervalSince(lastLastUpdateTime) > 30 * 60 * 1\n    }\n\n    public private(set) var filespaces = [URL: Filespace]()\n\n    let userDefaultsObserver = UserDefaultsObserver(\n        object: UserDefaults.shared, forKeyPaths: [\n            UserDefaultPreferenceKeys().suggestionFeatureEnabledProjectList.key,\n            UserDefaultPreferenceKeys().disableSuggestionFeatureGlobally.key,\n        ], context: nil\n    )\n\n    public subscript<K>(\n        dynamicMember dynamicMember: WritableKeyPath<WorkspacePropertyValues, K>\n    ) -> K {\n        get { additionalProperties[keyPath: dynamicMember] }\n        set { additionalProperties[keyPath: dynamicMember] = newValue }\n    }\n\n    public func plugin<P: WorkspacePlugin>(for type: P.Type) -> P? {\n        plugins[ObjectIdentifier(type)] as? P\n    }\n\n    init(workspaceURL: URL) {\n        self.workspaceURL = workspaceURL\n        self.projectRootURL = WorkspaceXcodeWindowInspector.extractProjectURL(\n            workspaceURL: workspaceURL,\n            documentURL: nil\n        ) ?? workspaceURL\n        openedFileRecoverableStorage = .init(projectRootURL: projectRootURL)\n        let openedFiles = openedFileRecoverableStorage.openedFiles\n        Task { @WorkspaceActor in\n            for fileURL in openedFiles {\n                _ = try? createFilespaceIfNeeded(fileURL: fileURL)\n            }\n        }\n    }\n\n    public func refreshUpdateTime() {\n        lastLastUpdateTime = Environment.now()\n    }\n\n    @WorkspaceActor\n    public func createFilespaceIfNeeded(\n        fileURL: URL,\n        checkIfFileExists: Bool = true\n    ) throws -> Filespace {\n        let extensionName = fileURL.pathExtension\n        if [\"xcworkspace\", \"xcodeproj\"].contains(extensionName) {\n            throw UnsupportedFileError(extensionName: extensionName)\n        }\n        var isDirectory: ObjCBool = false\n        if checkIfFileExists, !FileManager.default.fileExists(\n            atPath: fileURL.path,\n            isDirectory: &isDirectory\n        ) {\n            throw CantFindFileError(fileURL: fileURL)\n        }\n        if isDirectory.boolValue {\n            throw UnsupportedFileError(extensionName: extensionName)\n        }\n\n        let existedFilespace = filespaces[fileURL]\n        let filespace = existedFilespace ?? .init(\n            fileURL: fileURL,\n            onSave: { [weak self] filespace in\n                guard let self else { return }\n                self.didSaveFilespace(filespace)\n            },\n            onClose: { [weak self] url in\n                guard let self else { return }\n                self.didCloseFilespace(url)\n            }\n        )\n        if filespaces[fileURL] == nil {\n            filespaces[fileURL] = filespace\n        }\n        if existedFilespace == nil {\n            didOpenFilespace(filespace)\n        } else {\n            filespace.refreshUpdateTime()\n        }\n        return filespace\n    }\n\n    @WorkspaceActor\n    public func closeFilespace(fileURL: URL) {\n        filespaces[fileURL] = nil\n    }\n\n    @WorkspaceActor\n    public func didUpdateFilespace(fileURL: URL, content: String) {\n        refreshUpdateTime()\n        guard let filespace = filespaces[fileURL] else { return }\n        filespace.bumpVersion()\n        filespace.refreshUpdateTime()\n        for plugin in plugins.values {\n            plugin.didUpdateFilespace(filespace, content: content)\n        }\n    }\n\n    @WorkspaceActor\n    func didOpenFilespace(_ filespace: Filespace) {\n        refreshUpdateTime()\n        openedFileRecoverableStorage.openFile(fileURL: filespace.fileURL)\n        for plugin in plugins.values {\n            plugin.didOpenFilespace(filespace)\n        }\n    }\n\n    @WorkspaceActor\n    func didCloseFilespace(_ fileURL: URL) {\n        for plugin in self.plugins.values {\n            plugin.didCloseFilespace(fileURL)\n        }\n    }\n\n    @WorkspaceActor\n    func didSaveFilespace(_ filespace: Filespace) {\n        refreshUpdateTime()\n        filespace.refreshUpdateTime()\n        for plugin in plugins.values {\n            plugin.didSaveFilespace(filespace)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/Workspace/WorkspacePool.swift",
    "content": "import Dependencies\nimport Foundation\nimport XcodeInspector\n\npublic struct WorkspacePoolDependencyKey: DependencyKey {\n    public static var liveValue: WorkspacePool = .init()\n}\n\npublic extension DependencyValues {\n    var workspacePool: WorkspacePool {\n        get { self[WorkspacePoolDependencyKey.self] }\n        set { self[WorkspacePoolDependencyKey.self] = newValue }\n    }\n}\n\n@globalActor public enum WorkspaceActor {\n    public actor TheActor {}\n    public static let shared = TheActor()\n}\n\npublic class WorkspacePool {\n    public enum Error: Swift.Error, LocalizedError {\n        case invalidWorkspaceURL(URL)\n\n        public var errorDescription: String? {\n            switch self {\n            case let .invalidWorkspaceURL(url):\n                return \"Invalid workspace URL: \\(url)\"\n            }\n        }\n    }\n\n    public internal(set) var workspaces: [URL: Workspace] = [:]\n    var plugins = [ObjectIdentifier: (Workspace) -> WorkspacePlugin]()\n\n    public init(\n        workspaces: [URL: Workspace] = [:],\n        plugins: [ObjectIdentifier: (Workspace) -> WorkspacePlugin] = [:]\n    ) {\n        self.workspaces = workspaces\n        self.plugins = plugins\n    }\n\n    public func registerPlugin<Plugin: WorkspacePlugin>(_ plugin: @escaping (Workspace) -> Plugin) {\n        let id = ObjectIdentifier(Plugin.self)\n        let erasedPlugin: (Workspace) -> WorkspacePlugin = { plugin($0) }\n        plugins[id] = erasedPlugin\n\n        for workspace in workspaces.values {\n            addPlugin(erasedPlugin, id: id, to: workspace)\n        }\n    }\n\n    public func unregisterPlugin<Plugin: WorkspacePlugin>(_: Plugin.Type) {\n        let id = ObjectIdentifier(Plugin.self)\n        plugins[id] = nil\n\n        for workspace in workspaces.values {\n            removePlugin(id: id, from: workspace)\n        }\n    }\n\n    public func fetchFilespaceIfExisted(fileURL: URL) -> Filespace? {\n        // We prefer to get the filespace from the current active workspace.\n        // Just incase there are multiple workspaces opened with the same file.\n        if let currentWorkspaceURL = XcodeInspector.shared.realtimeActiveWorkspaceURL {\n            if let workspace = workspaces[currentWorkspaceURL],\n               let filespace = workspace.filespaces[fileURL]\n            {\n                return filespace\n            }\n        }\n        for workspace in workspaces.values {\n            if let filespace = workspace.filespaces[fileURL] {\n                return filespace\n            }\n        }\n        return nil\n    }\n    \n    @WorkspaceActor\n    public func destroy() {\n        workspaces = [:]\n    }\n\n    @WorkspaceActor\n    public func fetchOrCreateWorkspace(workspaceURL: URL) async throws -> Workspace {\n        guard workspaceURL != URL(fileURLWithPath: \"/\") else {\n            throw Error.invalidWorkspaceURL(workspaceURL)\n        }\n\n        if let existed = workspaces[workspaceURL] {\n            return existed\n        }\n\n        let new = createNewWorkspace(workspaceURL: workspaceURL)\n        workspaces[workspaceURL] = new\n        return new\n    }\n\n    @WorkspaceActor\n    public func fetchOrCreateWorkspaceAndFilespace(\n        fileURL: URL,\n        checkIfFileExists: Bool = true\n    ) async throws\n        -> (workspace: Workspace, filespace: Filespace)\n    {\n        // If we can get the workspace URL directly.\n        if let currentWorkspaceURL = XcodeInspector.shared.realtimeActiveWorkspaceURL {\n            if let existed = workspaces[currentWorkspaceURL] {\n                // Reuse the existed workspace.\n                let filespace = try existed.createFilespaceIfNeeded(\n                    fileURL: fileURL,\n                    checkIfFileExists: checkIfFileExists\n                )\n                return (existed, filespace)\n            }\n\n            let new = createNewWorkspace(workspaceURL: currentWorkspaceURL)\n            workspaces[currentWorkspaceURL] = new\n            let filespace = try new.createFilespaceIfNeeded(\n                fileURL: fileURL,\n                checkIfFileExists: checkIfFileExists\n            )\n            return (new, filespace)\n        }\n\n        // If not, we try to reuse a filespace if found.\n        //\n        // Sometimes, we can't get the project root path from Xcode window, for example, when the\n        // quick open window in displayed.\n        for workspace in workspaces.values {\n            if let filespace = workspace.filespaces[fileURL] {\n                return (workspace, filespace)\n            }\n        }\n\n        // If we can't find the workspace URL, we will try to guess it.\n        // Most of the time we won't enter this branch, just incase.\n\n        if let workspaceURL = WorkspaceXcodeWindowInspector.extractProjectURL(\n            workspaceURL: nil,\n            documentURL: fileURL\n        ) {\n            let workspace = {\n                if let existed = workspaces[workspaceURL] {\n                    return existed\n                }\n                // Reuse existed workspace if possible\n                for (_, workspace) in workspaces {\n                    if fileURL.path.hasPrefix(workspace.projectRootURL.path) {\n                        return workspace\n                    }\n                }\n                return createNewWorkspace(workspaceURL: workspaceURL)\n            }()\n\n            let filespace = try workspace.createFilespaceIfNeeded(\n                fileURL: fileURL,\n                checkIfFileExists: checkIfFileExists\n            )\n            workspaces[workspaceURL] = workspace\n            workspace.refreshUpdateTime()\n            return (workspace, filespace)\n        }\n\n        throw Workspace.CantFindWorkspaceError()\n    }\n\n    @WorkspaceActor\n    public func removeWorkspace(url: URL) {\n        workspaces[url] = nil\n    }\n}\n\nextension WorkspacePool {\n    func addPlugin(\n        _ plugin: (Workspace) -> WorkspacePlugin,\n        id: ObjectIdentifier,\n        to workspace: Workspace\n    ) {\n        if workspace.plugins[id] != nil { return }\n        workspace.plugins[id] = plugin(workspace)\n    }\n\n    func removePlugin(id: ObjectIdentifier, from workspace: Workspace) {\n        workspace.plugins[id] = nil\n    }\n\n    func createNewWorkspace(workspaceURL: URL) -> Workspace {\n        let new = Workspace(workspaceURL: workspaceURL)\n        for (id, plugin) in plugins {\n            addPlugin(plugin, id: id, to: new)\n        }\n        return new\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WorkspaceSuggestionService/Filespace+SuggestionService.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport SuggestionInjector\nimport Workspace\n\n/// The moment when a suggestion is generated.\npublic struct FilespaceSuggestionSnapshot: Equatable {\n    public var editingLine: String\n    public var cursorPosition: CursorPosition\n    public var editingLinePrefix: String\n    public var editingLineSuffix: String\n\n    public static func == (\n        lhs: FilespaceSuggestionSnapshot,\n        rhs: FilespaceSuggestionSnapshot\n    ) -> Bool {\n        lhs.editingLine == rhs.editingLine\n            && lhs.cursorPosition == rhs.cursorPosition\n    }\n\n    public init(lines: [String], cursorPosition: CursorPosition) {\n        self.cursorPosition = cursorPosition\n        editingLine = if cursorPosition.line >= 0 && cursorPosition.line < lines.count {\n            lines[cursorPosition.line]\n        } else {\n            \"\"\n        }\n        let col = cursorPosition.character\n        let view = editingLine.utf16\n        editingLinePrefix = if col >= 0 {\n            String(view.prefix(col)) ?? \"\"\n        } else {\n            \"\"\n        }\n        editingLineSuffix = if col >= 0, col < editingLine.utf16.count {\n            String(view[view.index(view.startIndex, offsetBy: col)...]) ?? \"\"\n        } else {\n            \"\"\n        }\n    }\n}\n\npublic struct FilespaceSuggestionSnapshotKey: FilespacePropertyKey {\n    public static func createDefaultValue()\n        -> FilespaceSuggestionSnapshot { .init(lines: [], cursorPosition: .outOfScope) }\n}\n\npublic extension FilespacePropertyValues {\n    /// The state of the file when a suggestion is generated.\n    @WorkspaceActor\n    var suggestionSourceSnapshot: FilespaceSuggestionSnapshot {\n        get { self[FilespaceSuggestionSnapshotKey.self] }\n        set { self[FilespaceSuggestionSnapshotKey.self] = newValue }\n    }\n}\n\npublic extension Filespace {\n    @WorkspaceActor\n    func resetSnapshot() {\n        self[keyPath: \\.suggestionSourceSnapshot] = FilespaceSuggestionSnapshotKey\n            .createDefaultValue()\n    }\n\n    /// Validate the suggestion is still valid.\n    /// - Parameters:\n    ///    - lines: lines of the file\n    ///    - cursorPosition: cursor position\n    ///    - alwaysTrueIfCursorNotMoved: for unit tests\n    /// - Returns: `true` if the suggestion is still valid\n    @WorkspaceActor\n    func validateSuggestions(\n        lines: [String],\n        cursorPosition: CursorPosition,\n        alwaysTrueIfCursorNotMoved: Bool = true\n    ) -> Bool {\n        guard let presentingSuggestion else { return false }\n        let snapshot = self[keyPath: \\.suggestionSourceSnapshot]\n        if snapshot.cursorPosition == .outOfScope { return false }\n\n        guard Self.validateSuggestion(\n            presentingSuggestion,\n            snapshot: snapshot,\n            lines: lines,\n            cursorPosition: cursorPosition,\n            alwaysTrueIfCursorNotMoved: alwaysTrueIfCursorNotMoved\n        ) else {\n            reset()\n            resetSnapshot()\n            return false\n        }\n\n        return true\n    }\n}\n\nextension Filespace {\n    static func validateSuggestion(\n        _ suggestion: CodeSuggestion,\n        snapshot: FilespaceSuggestionSnapshot,\n        lines: [String],\n        cursorPosition: CursorPosition,\n        // For test\n        alwaysTrueIfCursorNotMoved: Bool = true\n    ) -> Bool {\n        // cursor is not even moved during the generation.\n        if alwaysTrueIfCursorNotMoved, cursorPosition == suggestion.position { return true }\n\n        // cursor has moved to another line\n        if cursorPosition.line != suggestion.position.line { return false }\n\n        // the cursor position is valid\n        guard cursorPosition.line >= 0, cursorPosition.line < lines.count else { return false }\n\n        let editingLine = lines[cursorPosition.line].dropLast(1) // dropping line ending\n        let suggestionLines = suggestion.text.breakLines(appendLineBreakToLastLine: true)\n\n        if Self.validateThatIsNotTypingSuggestion(\n            suggestion,\n            snapshot: snapshot,\n            lines: lines,\n            suggestionLines: suggestionLines,\n            cursorPosition: cursorPosition\n        ) {\n            return false\n        }\n\n        // if the line will not change after accepting the suggestion\n        if Self.validateThatSuggestionMakeNoDifferent(\n            suggestion,\n            lines: lines,\n            suggestionLines: suggestionLines\n        ) {\n            return false\n        }\n\n        // the line content doesn't match the suggestion snapshot\n        if !editingLine.hasPrefix(snapshot.editingLinePrefix) {\n            return false\n        }\n\n        return true\n    }\n\n    static func validateThatIsNotTypingSuggestion(\n        _ suggestion: CodeSuggestion,\n        snapshot: FilespaceSuggestionSnapshot,\n        lines: [String],\n        suggestionLines: [String],\n        cursorPosition: CursorPosition\n    ) -> Bool {\n        let lineIndex = suggestion.range.start.line\n        let typeStart = suggestion.position.character\n        let cursorColumn = cursorPosition.character\n        let suggestionStart = max(\n            0,\n            suggestion.position.character - suggestion.range.start.character\n        )\n        func contentBeforeCursor(\n            _ string: String,\n            start: Int\n        ) -> ArraySlice<String.UTF16View.Element> {\n            if start >= cursorColumn { return [] }\n            let elements = Array(string.utf16)\n            guard start >= 0, start < elements.endIndex else { return [] }\n            let endIndex = min(elements.endIndex, cursorColumn)\n            return elements[start..<endIndex]\n        }\n\n        guard lineIndex >= 0, lineIndex < lines.endIndex else { return false }\n        let editingLine = lines[lineIndex]\n        let suggestionFirstLine = suggestionLines.first ?? \"\"\n\n        let typed = contentBeforeCursor(editingLine, start: typeStart)\n        let expectedTyped = contentBeforeCursor(suggestionFirstLine, start: suggestionStart)\n        return typed != expectedTyped\n    }\n\n    static func validateThatSuggestionMakeNoDifferent(\n        _ suggestion: CodeSuggestion,\n        lines: [String],\n        suggestionLines: [String]\n    ) -> Bool {\n        var editingRange = suggestion.range\n        let startLine = max(0, editingRange.start.line)\n        let endLine = max(startLine, min(editingRange.end.line, lines.count - 1))\n\n        // The editing range is out of the file\n        if startLine < 0 || endLine >= lines.count {\n            return false\n        }\n\n        // The suggestion is apparently longer than the editing range\n        if endLine - startLine + 1 != suggestionLines.count {\n            return false\n        }\n\n        let originalEditingLines = Array(lines[startLine...endLine])\n        var editingLines = originalEditingLines\n        editingRange.end = .init(\n            line: editingRange.end.line - editingRange.start.line,\n            character: editingRange.end.character\n        )\n        editingRange.start = .init(line: 0, character: editingRange.start.character)\n        var cursorPosition = CursorPosition(\n            line: suggestion.position.line - startLine,\n            character: suggestion.position.character\n        )\n        let pseudoSuggestion = CodeSuggestion(\n            id: \"\",\n            text: suggestion.text,\n            position: cursorPosition,\n            range: editingRange\n        )\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        let injector = SuggestionInjector()\n        injector.acceptSuggestion(\n            intoContentWithoutSuggestion: &editingLines,\n            cursorPosition: &cursorPosition,\n            completion: pseudoSuggestion,\n            extraInfo: &extraInfo\n        )\n\n        // We want that finish typing a partial suggestion should also make no difference.\n        if let lastOriginalLine = originalEditingLines.last,\n           cursorPosition.character < lastOriginalLine.utf16.count,\n           // But we also want to separate this case from the case that the suggestion is\n           // shortening the last line. Which does make a difference.\n           suggestion.range.end.character < lastOriginalLine.utf16.count - 1 // for line ending\n        {\n            let editingLinesPrefix = editingLines.dropLast()\n            let originalEditingLinesPrefix = originalEditingLines.dropLast()\n            if editingLinesPrefix != originalEditingLinesPrefix {\n                return false\n            }\n            let lastEditingLine = editingLines.last ?? \"\\n\"\n            return lastOriginalLine.hasPrefix(lastEditingLine.dropLast(1)) // for line ending\n        }\n\n        return editingLines == originalEditingLines\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WorkspaceSuggestionService/SuggestionWorkspacePlugin.swift",
    "content": "import BuiltinExtension\nimport Foundation\nimport Preferences\nimport SuggestionBasic\nimport SuggestionProvider\nimport UserDefaultsObserver\nimport Workspace\n\n#if canImport(ProExtension)\nimport ProExtension\n#endif\n\npublic final class SuggestionServiceWorkspacePlugin: WorkspacePlugin {\n    public typealias SuggestionServiceFactory = () -> any SuggestionServiceProvider\n    let suggestionServiceFactory: SuggestionServiceFactory\n\n    let suggestionFeatureUsabilityObserver = UserDefaultsObserver(\n        object: UserDefaults.shared, forKeyPaths: [\n            UserDefaultPreferenceKeys().suggestionFeatureEnabledProjectList.key,\n            UserDefaultPreferenceKeys().disableSuggestionFeatureGlobally.key,\n        ], context: nil\n    )\n\n    let providerChangeObserver = UserDefaultsObserver(\n        object: UserDefaults.shared,\n        forKeyPaths: [UserDefaultPreferenceKeys().suggestionFeatureProvider.key],\n        context: nil\n    )\n\n    public var isRealtimeSuggestionEnabled: Bool {\n        UserDefaults.shared.value(for: \\.realtimeSuggestionToggle)\n    }\n\n    private var _suggestionService: SuggestionServiceProvider?\n\n    public var suggestionService: SuggestionServiceProvider? {\n        // Check if the workspace is disabled.\n        let isSuggestionDisabledGlobally = UserDefaults.shared\n            .value(for: \\.disableSuggestionFeatureGlobally)\n        if isSuggestionDisabledGlobally {\n            let enabledList = UserDefaults.shared.value(for: \\.suggestionFeatureEnabledProjectList)\n            if !enabledList.contains(where: { path in projectRootURL.path.hasPrefix(path) }) {\n                // If it's disable, remove the service\n                _suggestionService = nil\n                return nil\n            }\n        }\n\n        if _suggestionService == nil {\n            _suggestionService = suggestionServiceFactory()\n        }\n        return _suggestionService\n    }\n\n    public var isSuggestionFeatureEnabled: Bool {\n        let isSuggestionDisabledGlobally = UserDefaults.shared\n            .value(for: \\.disableSuggestionFeatureGlobally)\n        if isSuggestionDisabledGlobally {\n            let enabledList = UserDefaults.shared.value(for: \\.suggestionFeatureEnabledProjectList)\n            if !enabledList.contains(where: { path in projectRootURL.path.hasPrefix(path) }) {\n                return false\n            }\n        }\n        return true\n    }\n\n    public init(\n        workspace: Workspace,\n        suggestionProviderFactory: @escaping SuggestionServiceFactory\n    ) {\n        suggestionServiceFactory = suggestionProviderFactory\n        super.init(workspace: workspace)\n\n        suggestionFeatureUsabilityObserver.onChange = { [weak self] in\n            guard let self else { return }\n            _ = self.suggestionService\n        }\n\n        providerChangeObserver.onChange = { [weak self] in\n            guard let self else { return }\n            self._suggestionService = nil\n        }\n    }\n\n    func notifyAccepted(_ suggestion: CodeSuggestion) async {\n        await suggestionService?.notifyAccepted(\n            suggestion,\n            workspaceInfo: .init(workspaceURL: workspaceURL, projectURL: projectRootURL)\n        )\n    }\n\n    func notifyRejected(_ suggestions: [CodeSuggestion]) async {\n        await suggestionService?.notifyRejected(\n            suggestions,\n            workspaceInfo: .init(workspaceURL: workspaceURL, projectURL: projectRootURL)\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/WorkspaceSuggestionService/Workspace+SuggestionService.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport SuggestionProvider\nimport Workspace\nimport XPCShared\n\npublic extension Workspace {\n    var suggestionPlugin: SuggestionServiceWorkspacePlugin? {\n        plugin(for: SuggestionServiceWorkspacePlugin.self)\n    }\n\n    var suggestionService: SuggestionServiceProvider? {\n        suggestionPlugin?.suggestionService\n    }\n\n    var isSuggestionFeatureEnabled: Bool {\n        suggestionPlugin?.isSuggestionFeatureEnabled ?? false\n    }\n\n    struct SuggestionFeatureDisabledError: Error, LocalizedError {\n        public var errorDescription: String? {\n            \"Suggestion feature is disabled for this project.\"\n        }\n    }\n}\n\npublic extension Workspace {\n    @WorkspaceActor\n    @discardableResult\n    func generateSuggestions(\n        forFileAt fileURL: URL,\n        editor: EditorContent\n    ) async throws -> [CodeSuggestion] {\n        refreshUpdateTime()\n\n        let filespace = try createFilespaceIfNeeded(fileURL: fileURL)\n\n        guard !(await filespace.isGitIgnored) else { return [] }\n\n        if !editor.uti.isEmpty {\n            filespace.codeMetadata.uti = editor.uti\n            filespace.codeMetadata.tabSize = editor.tabSize\n            filespace.codeMetadata.indentSize = editor.indentSize\n            filespace.codeMetadata.usesTabsForIndentation = editor.usesTabsForIndentation\n        }\n\n        filespace.codeMetadata.guessLineEnding(from: editor.lines.first)\n\n        let snapshot = FilespaceSuggestionSnapshot(\n            lines: editor.lines,\n            cursorPosition: editor.cursorPosition\n        )\n\n        filespace.suggestionSourceSnapshot = snapshot\n\n        guard let suggestionService else { throw SuggestionFeatureDisabledError() }\n        let content = editor.lines.joined(separator: \"\")\n        let completions = try await suggestionService.getSuggestions(\n            .init(\n                fileURL: fileURL,\n                relativePath: fileURL.path.replacingOccurrences(of: projectRootURL.path, with: \"\"),\n                content: content,\n                originalContent: content,\n                lines: editor.lines,\n                cursorPosition: editor.cursorPosition,\n                cursorOffset: editor.cursorOffset,\n                tabSize: editor.tabSize,\n                indentSize: editor.indentSize,\n                usesTabsForIndentation: editor.usesTabsForIndentation,\n                relevantCodeSnippets: []\n            ),\n            workspaceInfo: .init(workspaceURL: workspaceURL, projectURL: projectRootURL)\n        )\n\n        filespace.setSuggestions(completions)\n\n        return completions\n    }\n\n    @WorkspaceActor\n    func selectNextSuggestion(forFileAt fileURL: URL) {\n        refreshUpdateTime()\n        guard let filespace = filespaces[fileURL],\n              filespace.suggestions.count > 1\n        else { return }\n        filespace.nextSuggestion()\n    }\n\n    @WorkspaceActor\n    func selectPreviousSuggestion(forFileAt fileURL: URL) {\n        refreshUpdateTime()\n        guard let filespace = filespaces[fileURL],\n              filespace.suggestions.count > 1\n        else { return }\n        filespace.previousSuggestion()\n    }\n\n    @WorkspaceActor\n    func rejectSuggestion(forFileAt fileURL: URL, editor: EditorContent?) {\n        refreshUpdateTime()\n\n        if let editor, !editor.uti.isEmpty {\n            filespaces[fileURL]?.codeMetadata.uti = editor.uti\n            filespaces[fileURL]?.codeMetadata.tabSize = editor.tabSize\n            filespaces[fileURL]?.codeMetadata.indentSize = editor.indentSize\n            filespaces[fileURL]?.codeMetadata.usesTabsForIndentation = editor.usesTabsForIndentation\n        }\n\n        Task {\n            await suggestionService?.notifyRejected(\n                filespaces[fileURL]?.suggestions ?? [],\n                workspaceInfo: .init(\n                    workspaceURL: workspaceURL,\n                    projectURL: projectRootURL\n                )\n            )\n        }\n        filespaces[fileURL]?.reset()\n    }\n\n    @WorkspaceActor\n    func acceptSuggestion(forFileAt fileURL: URL, editor: EditorContent?) -> CodeSuggestion? {\n        refreshUpdateTime()\n        guard let filespace = filespaces[fileURL],\n              !filespace.suggestions.isEmpty,\n              filespace.suggestionIndex >= 0,\n              filespace.suggestionIndex < filespace.suggestions.endIndex\n        else { return nil }\n\n        if let editor, !editor.uti.isEmpty {\n            filespaces[fileURL]?.codeMetadata.uti = editor.uti\n            filespaces[fileURL]?.codeMetadata.tabSize = editor.tabSize\n            filespaces[fileURL]?.codeMetadata.indentSize = editor.indentSize\n            filespaces[fileURL]?.codeMetadata.usesTabsForIndentation = editor.usesTabsForIndentation\n        }\n\n        var allSuggestions = filespace.suggestions\n        let suggestion = allSuggestions.remove(at: filespace.suggestionIndex)\n\n        Task {\n            await suggestionService?.notifyAccepted(\n                suggestion,\n                workspaceInfo: .init(\n                    workspaceURL: workspaceURL,\n                    projectURL: projectRootURL\n                )\n            )\n        }\n\n        filespaces[fileURL]?.reset()\n        filespaces[fileURL]?.resetSnapshot()\n\n        return suggestion\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XPCShared/CommunicationBridgeXPCServiceProtocol.swift",
    "content": "import Foundation\n\n@objc(CommunicationBridgeXPCServiceProtocol)\npublic protocol CommunicationBridgeXPCServiceProtocol {\n    func launchExtensionServiceIfNeeded(withReply reply: @escaping (NSXPCListenerEndpoint?) -> Void)\n    func quit(withReply reply: @escaping () -> Void)\n    func updateServiceEndpoint(\n        endpoint: NSXPCListenerEndpoint,\n        withReply reply: @escaping () -> Void\n    )\n}\n\n"
  },
  {
    "path": "Tool/Sources/XPCShared/Models.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\npublic struct EditorContent: Codable {\n    public struct Selection: Codable {\n        public var start: CursorPosition\n        public var end: CursorPosition\n\n        public init(start: CursorPosition, end: CursorPosition) {\n            self.start = start\n            self.end = end\n        }\n    }\n\n    public init(\n        content: String,\n        lines: [String],\n        uti: String,\n        cursorPosition: CursorPosition,\n        cursorOffset: Int,\n        selections: [Selection],\n        tabSize: Int,\n        indentSize: Int,\n        usesTabsForIndentation: Bool\n    ) {\n        self.content = content\n        self.lines = lines\n        self.uti = uti\n        self.cursorPosition = cursorPosition\n        self.cursorOffset = cursorOffset\n        self.selections = selections\n        self.tabSize = tabSize\n        self.indentSize = indentSize\n        self.usesTabsForIndentation = usesTabsForIndentation\n    }\n\n    public var content: String\n    /// Every line has a trailing newline character.\n    public var lines: [String]\n    public var uti: String\n    public var cursorPosition: CursorPosition\n    public var cursorOffset: Int\n    public var selections: [Selection]\n    public var tabSize: Int\n    public var indentSize: Int\n    public var usesTabsForIndentation: Bool\n\n    public func selectedCode(in selection: Selection) -> String {\n        return XPCShared.selectedCode(in: selection, for: lines)\n    }\n}\n\npublic struct UpdatedContent: Codable {\n    public init(content: String, newSelection: CursorRange? = nil, modifications: [Modification]) {\n        self.content = content\n        self.newSelections = if let newSelection { [newSelection] } else { [] }\n        self.modifications = modifications\n    }\n    \n    public init(content: String, newSelections: [CursorRange], modifications: [Modification]) {\n        self.content = content\n        self.newSelections = newSelections\n        self.modifications = modifications\n    }\n\n    public var content: String\n    public var newSelections: [CursorRange]\n    public var modifications: [Modification]\n}\n\nfunc selectedCode(in selection: EditorContent.Selection, for lines: [String]) -> String {\n    return EditorInformation.code(\n        in: lines,\n        inside: .init(\n            start: .init(line: selection.start.line, character: selection.start.character),\n            end: .init(line: selection.end.line, character: selection.end.character)\n        ),\n        ignoreColumns: false\n    ).code\n}\n"
  },
  {
    "path": "Tool/Sources/XPCShared/XPCCommunicationBridge.swift",
    "content": "import Foundation\nimport Logger\n\npublic enum XPCCommunicationBridgeError: Swift.Error, LocalizedError {\n    case failedToCreateXPCConnection\n    case xpcServiceError(Error)\n\n    public var errorDescription: String? {\n        switch self {\n        case .failedToCreateXPCConnection:\n            return \"Failed to create XPC connection.\"\n        case let .xpcServiceError(error):\n            return \"Connection to communication bridge error: \\(error.localizedDescription)\"\n        }\n    }\n}\n\npublic class XPCCommunicationBridge {\n    let service: XPCService\n    let logger: Logger\n    @XPCServiceActor\n    var serviceEndpoint: NSXPCListenerEndpoint?\n\n    public init(logger: Logger) {\n        service = .init(\n            kind: .machService(\n                identifier: Bundle(for: XPCService.self)\n                    .object(forInfoDictionaryKey: \"BUNDLE_IDENTIFIER_BASE\") as! String +\n                    \".CommunicationBridge\"\n            ),\n            interface: NSXPCInterface(with: CommunicationBridgeXPCServiceProtocol.self),\n            logger: logger\n        )\n        self.logger = logger\n    }\n\n    public func setDelegate(_ delegate: XPCServiceDelegate?) {\n        service.delegate = delegate\n    }\n\n    @discardableResult\n    public func launchExtensionServiceIfNeeded() async throws -> NSXPCListenerEndpoint? {\n        try await withXPCServiceConnected { service, continuation in\n            service.launchExtensionServiceIfNeeded { endpoint in\n                continuation.resume(endpoint)\n            }\n        }\n    }\n\n    public func quit() async throws {\n        try await withXPCServiceConnected { service, continuation in\n            service.quit {\n                continuation.resume(())\n            }\n        }\n    }\n\n    public func updateServiceEndpoint(_ endpoint: NSXPCListenerEndpoint) async throws {\n        try await withXPCServiceConnected { service, continuation in\n            service.updateServiceEndpoint(endpoint: endpoint) {\n                continuation.resume(())\n            }\n        }\n    }\n}\n\nextension XPCCommunicationBridge {\n    @XPCServiceActor\n    func withXPCServiceConnected<T>(\n        _ fn: @escaping (CommunicationBridgeXPCServiceProtocol, AutoFinishContinuation<T>) -> Void\n    ) async throws -> T {\n        guard let connection = service.connection\n        else { throw XPCCommunicationBridgeError.failedToCreateXPCConnection }\n        do {\n            return try await XPCShared.withXPCServiceConnected(connection: connection, fn)\n        } catch {\n            throw XPCCommunicationBridgeError.xpcServiceError(error)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XPCShared/XPCExtensionService.swift",
    "content": "import Foundation\nimport Logger\n\npublic enum XPCExtensionServiceError: Swift.Error, LocalizedError {\n    case failedToGetServiceEndpoint\n    case failedToCreateXPCConnection\n    case xpcServiceError(Error)\n\n    public var errorDescription: String? {\n        switch self {\n        case .failedToGetServiceEndpoint:\n            return \"Waiting for service to connect to the communication bridge.\"\n        case .failedToCreateXPCConnection:\n            return \"Failed to create XPC connection.\"\n        case let .xpcServiceError(error):\n            return \"Connection to extension service error: \\(error.localizedDescription)\"\n        }\n    }\n}\n\npublic class XPCExtensionService {\n    @XPCServiceActor\n    var service: XPCService?\n    @XPCServiceActor\n    var connection: NSXPCConnection? { service?.connection }\n    let logger: Logger\n    let bridge: XPCCommunicationBridge\n\n    public nonisolated\n    init(logger: Logger) {\n        self.logger = logger\n        bridge = XPCCommunicationBridge(logger: logger)\n    }\n\n    /// Launches the extension service if it's not running, returns true if the service has finished\n    /// launching and the communication becomes available.\n    @XPCServiceActor\n    public func launchIfNeeded() async throws -> Bool {\n        try await bridge.launchExtensionServiceIfNeeded() != nil\n    }\n\n    public func getXPCServiceVersion() async throws -> (version: String, build: String) {\n        try await withXPCServiceConnected {\n            service, continuation in\n            service.getXPCServiceVersion { version, build in\n                continuation.resume((version, build))\n            }\n        }\n    }\n\n    public func getXPCServiceAccessibilityPermission() async throws -> Bool {\n        try await withXPCServiceConnected {\n            service, continuation in\n            service.getXPCServiceAccessibilityPermission { isGranted in\n                continuation.resume(isGranted)\n            }\n        }\n    }\n\n    public func getSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getSuggestedCode }\n        )\n    }\n\n    public func getNextSuggestedCode(editorContent: EditorContent) async throws -> UpdatedContent? {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getNextSuggestedCode }\n        )\n    }\n\n    public func getPreviousSuggestedCode(editorContent: EditorContent) async throws\n        -> UpdatedContent?\n    {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getPreviousSuggestedCode }\n        )\n    }\n\n    public func getSuggestionAcceptedCode(editorContent: EditorContent) async throws\n        -> UpdatedContent?\n    {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getSuggestionAcceptedCode }\n        )\n    }\n\n    public func getSuggestionRejectedCode(editorContent: EditorContent) async throws\n        -> UpdatedContent?\n    {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getSuggestionRejectedCode }\n        )\n    }\n\n    public func getRealtimeSuggestedCode(editorContent: EditorContent) async throws\n        -> UpdatedContent?\n    {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getRealtimeSuggestedCode }\n        )\n    }\n\n    public func getPromptToCodeAcceptedCode(editorContent: EditorContent) async throws\n        -> UpdatedContent?\n    {\n        try await suggestionRequest(\n            editorContent,\n            { $0.getPromptToCodeAcceptedCode }\n        )\n    }\n\n    public func toggleRealtimeSuggestion() async throws {\n        try await withXPCServiceConnected {\n            service, continuation in\n            service.toggleRealtimeSuggestion { error in\n                if let error {\n                    continuation.reject(error)\n                    return\n                }\n                continuation.resume(())\n            }\n        } as Void\n    }\n\n    public func prefetchRealtimeSuggestions(editorContent: EditorContent) async {\n        guard let data = try? JSONEncoder().encode(editorContent) else { return }\n        try? await withXPCServiceConnected { service, continuation in\n            service.prefetchRealtimeSuggestions(editorContent: data) {\n                continuation.resume(())\n            }\n        }\n    }\n\n    public func openChat(editorContent: EditorContent) async throws -> UpdatedContent? {\n        try await suggestionRequest(\n            editorContent,\n            { $0.openChat }\n        )\n    }\n\n    public func promptToCode(editorContent: EditorContent) async throws -> UpdatedContent? {\n        try await suggestionRequest(\n            editorContent,\n            { $0.promptToCode }\n        )\n    }\n\n    public func customCommand(\n        id: String,\n        editorContent: EditorContent\n    ) async throws -> UpdatedContent? {\n        try await suggestionRequest(\n            editorContent,\n            { service in { service.customCommand(id: id, editorContent: $0, withReply: $1) } }\n        )\n    }\n    \n    public func quitService() async throws {\n        try await withXPCServiceConnectedWithoutLaunching {\n            service, continuation in\n            service.quit {\n                continuation.resume(())\n            }\n        }\n    }\n\n    public func postNotification(name: String) async throws {\n        try await withXPCServiceConnected {\n            service, continuation in\n            service.postNotification(name: name) {\n                continuation.resume(())\n            }\n        }\n    }\n\n    public func send<M: ExtensionServiceRequestType>(\n        requestBody: M\n    ) async throws -> M.ResponseBody {\n        try await withXPCServiceConnected { service, continuation in\n            do {\n                let requestBodyData = try JSONEncoder().encode(requestBody)\n                service.send(endpoint: M.endpoint, requestBody: requestBodyData) { data, error in\n                    if let error {\n                        continuation.reject(error)\n                    } else {\n                        do {\n                            guard let data = data else {\n                                continuation.reject(NoDataError())\n                                return\n                            }\n                            let responseBody = try JSONDecoder().decode(\n                                M.ResponseBody.self,\n                                from: data\n                            )\n                            continuation.resume(responseBody)\n                        } catch {\n                            continuation.reject(error)\n                        }\n                    }\n                }\n            } catch {\n                continuation.reject(error)\n            }\n        }\n    }\n}\n\nextension XPCExtensionService: XPCServiceDelegate {\n    public func connectionDidInterrupt() async {\n        Task { @XPCServiceActor in\n            service = nil\n        }\n    }\n\n    public func connectionDidInvalidate() async {\n        Task { @XPCServiceActor in\n            service = nil\n        }\n    }\n}\n\nextension XPCExtensionService {\n    @XPCServiceActor\n    private func updateEndpoint(_ endpoint: NSXPCListenerEndpoint) {\n        service = XPCService(\n            kind: .anonymous(endpoint: endpoint),\n            interface: NSXPCInterface(with: XPCServiceProtocol.self),\n            logger: logger,\n            delegate: self\n        )\n    }\n\n    @XPCServiceActor\n    private func withXPCServiceConnected<T>(\n        _ fn: @escaping (XPCServiceProtocol, AutoFinishContinuation<T>) -> Void\n    ) async throws -> T {\n        if let service, let connection = service.connection {\n            do {\n                return try await XPCShared.withXPCServiceConnected(connection: connection, fn)\n            } catch {\n                throw XPCExtensionServiceError.xpcServiceError(error)\n            }\n        } else {\n            guard let endpoint = try await bridge.launchExtensionServiceIfNeeded()\n            else { throw XPCExtensionServiceError.failedToGetServiceEndpoint }\n            updateEndpoint(endpoint)\n\n            if let service, let connection = service.connection {\n                do {\n                    return try await XPCShared.withXPCServiceConnected(connection: connection, fn)\n                } catch {\n                    throw XPCExtensionServiceError.xpcServiceError(error)\n                }\n            } else {\n                throw XPCExtensionServiceError.failedToCreateXPCConnection\n            }\n        }\n    }\n    \n    @XPCServiceActor\n    private func withXPCServiceConnectedWithoutLaunching<T>(\n        _ fn: @escaping (XPCServiceProtocol, AutoFinishContinuation<T>) -> Void\n    ) async throws -> T {\n        if let service, let connection = service.connection {\n            do {\n                return try await XPCShared.withXPCServiceConnected(connection: connection, fn)\n            } catch {\n                throw XPCExtensionServiceError.xpcServiceError(error)\n            }\n        }\n        throw XPCExtensionServiceError.failedToCreateXPCConnection\n    }\n\n    @XPCServiceActor\n    private func suggestionRequest(\n        _ editorContent: EditorContent,\n        _ fn: @escaping (any XPCServiceProtocol) -> (Data, @escaping (Data?, Error?) -> Void)\n            -> Void\n    ) async throws -> UpdatedContent? {\n        let data = try JSONEncoder().encode(editorContent)\n        return try await withXPCServiceConnected {\n            service, continuation in\n            fn(service)(data) { updatedData, error in\n                if let error {\n                    continuation.reject(error)\n                    return\n                }\n                do {\n                    if let updatedData {\n                        let updatedContent = try JSONDecoder()\n                            .decode(UpdatedContent.self, from: updatedData)\n                        continuation.resume(updatedContent)\n                    } else {\n                        continuation.resume(nil)\n                    }\n                } catch {\n                    continuation.reject(error)\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XPCShared/XPCService.swift",
    "content": "import Foundation\nimport Logger\n\n@globalActor\npublic enum XPCServiceActor {\n    public actor TheActor {}\n    public static let shared = TheActor()\n}\n\nclass XPCService {\n    enum Kind {\n        case machService(identifier: String)\n        case anonymous(endpoint: NSXPCListenerEndpoint)\n    }\n\n    let kind: Kind\n    let interface: NSXPCInterface\n    let logger: Logger\n    weak var delegate: XPCServiceDelegate?\n\n    @XPCServiceActor\n    private var isInvalidated = false\n\n    @XPCServiceActor\n    private lazy var _connection: InvalidatingConnection? = buildConnection()\n\n    @XPCServiceActor\n    var connection: NSXPCConnection? {\n        if isInvalidated { _connection = nil }\n        if _connection == nil { rebuildConnection() }\n        return _connection?.connection\n    }\n\n    init(\n        kind: Kind,\n        interface: NSXPCInterface,\n        logger: Logger,\n        delegate: XPCServiceDelegate? = nil\n    ) {\n        self.kind = kind\n        self.interface = interface\n        self.logger = logger\n        self.delegate = delegate\n    }\n\n    @XPCServiceActor\n    private func buildConnection() -> InvalidatingConnection {\n//        logger.info(\"Rebuilding connection\")\n        let connection = switch kind {\n        case let .machService(name):\n            NSXPCConnection(machServiceName: name)\n        case let .anonymous(endpoint):\n            NSXPCConnection(listenerEndpoint: endpoint)\n        }\n        connection.remoteObjectInterface = interface\n        connection.invalidationHandler = { [weak self] in\n//            self?.logger.info(\"XPCService Invalidated\")\n            Task { [weak self] in\n                self?.markAsInvalidated()\n                await self?.delegate?.connectionDidInvalidate()\n            }\n        }\n        connection.interruptionHandler = { [weak self] in\n//            self?.logger.info(\"XPCService interrupted\")\n            Task { [weak self] in\n                await self?.delegate?.connectionDidInterrupt()\n            }\n        }\n        connection.resume()\n        return .init(connection)\n    }\n\n    @XPCServiceActor\n    private func markAsInvalidated() {\n        isInvalidated = true\n    }\n\n    @XPCServiceActor\n    private func rebuildConnection() {\n        _connection = buildConnection()\n    }\n}\n\npublic protocol XPCServiceDelegate: AnyObject {\n    func connectionDidInvalidate() async\n    func connectionDidInterrupt() async\n}\n\nprivate class InvalidatingConnection {\n    let connection: NSXPCConnection\n    init(_ connection: NSXPCConnection) {\n        self.connection = connection\n    }\n\n    deinit {\n        connection.invalidationHandler = {}\n        connection.interruptionHandler = {}\n        connection.invalidate()\n    }\n}\n\nstruct NoDataError: Error {}\n\nstruct EmptyResponseError: Error, LocalizedError {\n    var errorDescription: String? {\n        \"The server is not returning a response. The app may be installed in the wrong directory.\"\n    }\n}\n\nstruct AutoFinishContinuation<T> {\n    var continuation: AsyncThrowingStream<T, Error>.Continuation\n\n    func resume(_ value: T) {\n        continuation.yield(value)\n        continuation.finish()\n    }\n\n    func reject(_ error: Error) {\n        if (error as NSError).code == -100 {\n            continuation.finish(throwing: CancellationError())\n        } else {\n            continuation.finish(throwing: error)\n        }\n    }\n}\n\n@XPCServiceActor\nfunc withXPCServiceConnected<T, P>(\n    connection: NSXPCConnection,\n    _ fn: @escaping (P, AutoFinishContinuation<T>) -> Void\n) async throws -> T {\n    let stream: AsyncThrowingStream<T, Error> = AsyncThrowingStream { continuation in\n        let service = connection.remoteObjectProxyWithErrorHandler {\n            continuation.finish(throwing: $0)\n        } as! P\n        fn(service, .init(continuation: continuation))\n    }\n    guard let result = try await stream.first(where: { _ in true }) else {\n        throw EmptyResponseError()\n    }\n    return result\n}\n\n@XPCServiceActor\npublic func testXPCListenerEndpoint(_ endpoint: NSXPCListenerEndpoint) async -> Bool {\n    let connection = NSXPCConnection(listenerEndpoint: endpoint)\n    defer { connection.invalidate() }\n    let stream: AsyncThrowingStream<Void, Error> = AsyncThrowingStream { continuation in\n        _ = connection.remoteObjectProxyWithErrorHandler {\n            continuation.finish(throwing: $0)\n        }\n        continuation.yield(())\n        continuation.finish()\n    }\n    do {\n        guard let _ = try await stream.first(where: { _ in true }) else {\n            throw EmptyResponseError()\n        }\n        return true\n    } catch {\n        return false\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XPCShared/XPCServiceProtocol.swift",
    "content": "import Foundation\nimport SuggestionBasic\n\n@objc(XPCServiceProtocol)\npublic protocol XPCServiceProtocol {\n    func getSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func getNextSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func getPreviousSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func getSuggestionAcceptedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func getSuggestionRejectedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func getRealtimeSuggestedCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    )\n    func getPromptToCodeAcceptedCode(\n        editorContent: Data,\n        withReply reply: @escaping (_ updatedContent: Data?, Error?) -> Void\n    )\n    func openChat(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    )\n    func promptToCode(\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    )\n    func customCommand(\n        id: String,\n        editorContent: Data,\n        withReply reply: @escaping (Data?, Error?) -> Void\n    )\n\n    func toggleRealtimeSuggestion(withReply reply: @escaping (Error?) -> Void)\n\n    func prefetchRealtimeSuggestions(\n        editorContent: Data,\n        withReply reply: @escaping () -> Void\n    )\n\n    func getXPCServiceVersion(withReply reply: @escaping (String, String) -> Void)\n    func getXPCServiceAccessibilityPermission(withReply reply: @escaping (Bool) -> Void)\n    func postNotification(name: String, withReply reply: @escaping () -> Void)\n    func send(endpoint: String, requestBody: Data, reply: @escaping (Data?, Error?) -> Void)\n    func quit(reply: @escaping () -> Void)\n}\n\npublic struct NoResponse: Codable {\n    public static let none = NoResponse()\n}\n\npublic protocol ExtensionServiceRequestType: Codable {\n    associatedtype ResponseBody: Codable\n    static var endpoint: String { get }\n}\n\npublic enum ExtensionServiceRequests {\n    public struct OpenExtensionManager: ExtensionServiceRequestType {\n        public typealias ResponseBody = NoResponse\n        public static let endpoint = \"OpenExtensionManager\"\n\n        public init() {}\n    }\n\n    public struct GetExtensionSuggestionServices: ExtensionServiceRequestType {\n        public struct ServiceInfo: Codable {\n            public var bundleIdentifier: String\n            public var name: String\n\n            public init(bundleIdentifier: String, name: String) {\n                self.bundleIdentifier = bundleIdentifier\n                self.name = name\n            }\n        }\n\n        public typealias ResponseBody = [ServiceInfo]\n        public static let endpoint = \"GetExtensionSuggestionServices\"\n\n        public init() {}\n    }\n\n    public struct GetExtensionOpenChatHandlers: ExtensionServiceRequestType {\n        public struct HandlerInfo: Codable {\n            public var bundleIdentifier: String\n            public var id: String\n            public var tabName: String\n            public var isBuiltIn: Bool\n\n            public init(bundleIdentifier: String, id: String, tabName: String, isBuiltIn: Bool) {\n                self.bundleIdentifier = bundleIdentifier\n                self.id = id\n                self.tabName = tabName\n                self.isBuiltIn = isBuiltIn\n            }\n        }\n\n        public typealias ResponseBody = [HandlerInfo]\n        public static let endpoint = \"GetExtensionOpenChatHandlers\"\n\n        public init() {}\n    }\n\n    public struct GetSuggestionLineAcceptedCode: ExtensionServiceRequestType {\n        public typealias ResponseBody = UpdatedContent?\n\n        public static let endpoint = \"GetSuggestionLineAcceptedCode\"\n\n        public let editorContent: EditorContent\n\n        public init(editorContent: EditorContent) {\n            self.editorContent = editorContent\n        }\n    }\n}\n\npublic struct XPCRequestHandlerHitError: Error, LocalizedError {\n    public var errorDescription: String? {\n        \"This is not an actual error, it just indicates a request handler was hit, and no more check is needed.\"\n    }\n\n    public init() {}\n}\n\npublic struct XPCRequestNotHandledError: Error, LocalizedError {\n    public var errorDescription: String? {\n        \"The request was not handled by the XPC server.\"\n    }\n\n    public init() {}\n}\n\nextension ExtensionServiceRequestType {\n    /// A helper method to handle requests.\n    static func _handle<Request: Codable, Response: Codable>(\n        endpoint: String,\n        requestBody data: Data,\n        reply: @escaping (Data?, Error?) -> Void,\n        handler: @escaping (Request) async throws -> Response\n    ) throws {\n        guard endpoint == Self.endpoint else {\n            return\n        }\n        do {\n            let requestBody = try JSONDecoder().decode(Request.self, from: data)\n            Task {\n                do {\n                    let responseBody = try await handler(requestBody)\n                    let responseBodyData = try JSONEncoder().encode(responseBody)\n                    reply(responseBodyData, nil)\n                } catch {\n                    reply(nil, error)\n                }\n            }\n        } catch {\n            reply(nil, error)\n        }\n        throw XPCRequestHandlerHitError()\n    }\n\n    public static func handle(\n        endpoint: String,\n        requestBody data: Data,\n        reply: @escaping (Data?, Error?) -> Void,\n        handler: @escaping (Self) async throws -> Self.ResponseBody\n    ) throws {\n        try _handle(\n            endpoint: endpoint,\n            requestBody: data,\n            reply: reply\n        ) { (request: Self) async throws -> Self.ResponseBody in\n            try await handler(request)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/AppInstanceInspector.swift",
    "content": "import AppKit\nimport Foundation\n\nopen class AppInstanceInspector: @unchecked Sendable {\n    public let runningApplication: NSRunningApplication\n    public let processIdentifier: pid_t\n    public let bundleURL: URL?\n    public let bundleIdentifier: String?\n    public let name: String\n\n    public var appElement: AXUIElement {\n        let app = AXUIElementCreateApplication(runningApplication.processIdentifier)\n        app.setMessagingTimeout(2)\n        return app\n    }\n\n    public var isTerminated: Bool {\n        return runningApplication.isTerminated\n    }\n\n    public var isActive: Bool {\n        guard !runningApplication.isTerminated else { return false }\n        return runningApplication.isActive\n    }\n\n    public var isXcode: Bool {\n        guard !runningApplication.isTerminated else { return false }\n        return runningApplication.isXcode\n    }\n\n    public var isExtensionService: Bool {\n        guard !runningApplication.isTerminated else { return false }\n        return runningApplication.isCopilotForXcodeExtensionService\n    }\n\n    public func activate() -> Bool {\n        return runningApplication.activate()\n    }\n\n    init(runningApplication: NSRunningApplication) {\n        self.runningApplication = runningApplication\n        name = runningApplication.localizedName ?? \"Unknown\"\n        processIdentifier = runningApplication.processIdentifier\n        bundleURL = runningApplication.bundleURL\n        bundleIdentifier = runningApplication.bundleIdentifier\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/Apps/XcodeAppInstanceInspector.swift",
    "content": "@preconcurrency import AppKit\nimport AsyncPassthroughSubject\nimport AXExtension\nimport AXNotificationStream\nimport Combine\nimport Foundation\nimport Perception\n\n@XcodeInspectorActor\n@Perceptible\npublic final class XcodeAppInstanceInspector: AppInstanceInspector, @unchecked Sendable {\n    public struct AXNotification: Sendable {\n        public var kind: AXNotificationKind\n        public var element: AXUIElement\n    }\n\n    public enum AXNotificationKind: Sendable {\n        case titleChanged\n        case applicationActivated\n        case applicationDeactivated\n        case moved\n        case resized\n        case mainWindowChanged\n        case focusedWindowChanged\n        case focusedUIElementChanged\n        case windowMoved\n        case windowResized\n        case windowMiniaturized\n        case windowDeminiaturized\n        case created\n        case uiElementDestroyed\n        case xcodeCompletionPanelChanged\n\n        public init?(rawValue: String) {\n            switch rawValue {\n            case kAXTitleChangedNotification:\n                self = .titleChanged\n            case kAXApplicationActivatedNotification:\n                self = .applicationActivated\n            case kAXApplicationDeactivatedNotification:\n                self = .applicationDeactivated\n            case kAXMovedNotification:\n                self = .moved\n            case kAXResizedNotification:\n                self = .resized\n            case kAXMainWindowChangedNotification:\n                self = .mainWindowChanged\n            case kAXFocusedWindowChangedNotification:\n                self = .focusedWindowChanged\n            case kAXFocusedUIElementChangedNotification:\n                self = .focusedUIElementChanged\n            case kAXWindowMovedNotification:\n                self = .windowMoved\n            case kAXWindowResizedNotification:\n                self = .windowResized\n            case kAXWindowMiniaturizedNotification:\n                self = .windowMiniaturized\n            case kAXWindowDeminiaturizedNotification:\n                self = .windowDeminiaturized\n            case kAXCreatedNotification:\n                self = .created\n            case kAXUIElementDestroyedNotification:\n                self = .uiElementDestroyed\n            default:\n                return nil\n            }\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var focusedWindow: XcodeWindowInspector? {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .focusedWindowDidChange, object: self)\n            }\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var documentURL: URL? = nil {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .activeDocumentURLDidChange, object: self)\n            }\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var workspaceURL: URL? = nil {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .activeWorkspaceURLDidChange, object: self)\n            }\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var projectRootURL: URL? = nil {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .activeProjectRootURLDidChange, object: self)\n            }\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var workspaces = [WorkspaceIdentifier: Workspace]() {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .xcodeWorkspacesDidChange, object: self)\n            }\n        }\n    }\n\n    @MainActor\n    public private(set) var completionPanel: AXUIElement? {\n        didSet {\n            if runningApplication.isActive {\n                NotificationCenter.default.post(name: .completionPanelDidChange, object: self)\n            }\n        }\n    }\n\n    private let observer = XcodeInspector.createObserver()\n\n    public nonisolated var realtimeWorkspaces: [WorkspaceIdentifier: WorkspaceInfo] {\n        Self.fetchVisibleWorkspaces(runningApplication).mapValues { $0.info }\n    }\n\n    public nonisolated let axNotifications = AsyncPassthroughSubject<AXNotification>()\n\n    public nonisolated\n    var realtimeDocumentURL: URL? {\n        guard let window = appElement.focusedWindow,\n              window.identifier == \"Xcode.WorkspaceWindow\"\n        else { return nil }\n\n        return WorkspaceXcodeWindowInspector.extractDocumentURL(windowElement: window)\n    }\n\n    public nonisolated\n    var realtimeWorkspaceURL: URL? {\n        guard let window = appElement.focusedWindow,\n              window.identifier == \"Xcode.WorkspaceWindow\"\n        else { return nil }\n\n        return WorkspaceXcodeWindowInspector.extractWorkspaceURL(windowElement: window)\n    }\n\n    public nonisolated\n    var realtimeProjectURL: URL? {\n        let workspaceURL = realtimeWorkspaceURL\n        let documentURL = realtimeDocumentURL\n        return WorkspaceXcodeWindowInspector.extractProjectURL(\n            workspaceURL: workspaceURL,\n            documentURL: documentURL\n        )\n    }\n\n    var _version: String?\n    public var version: String? {\n        if let _version { return _version }\n        guard let plistPath = runningApplication.bundleURL?\n            .appendingPathComponent(\"Contents\")\n            .appendingPathComponent(\"version.plist\")\n            .path\n        else { return nil }\n        guard let plistData = FileManager.default.contents(atPath: plistPath) else { return nil }\n        var format = PropertyListSerialization.PropertyListFormat.xml\n        guard let plistDict = try? PropertyListSerialization.propertyList(\n            from: plistData,\n            options: .mutableContainersAndLeaves,\n            format: &format\n        ) as? [String: AnyObject] else { return nil }\n        let result = plistDict[\"CFBundleShortVersionString\"] as? String\n        _version = result\n        return result\n    }\n\n    @PerceptionIgnored private var longRunningTasks = Set<Task<Void, Error>>()\n\n    deinit {\n        axNotifications.finish()\n        for task in longRunningTasks { task.cancel() }\n    }\n\n    override init(runningApplication: NSRunningApplication) {\n        super.init(runningApplication: runningApplication)\n\n        Task { @XcodeInspectorActor in\n            await observeFocusedWindow()\n            observeAXNotifications()\n\n            try await Task.sleep(nanoseconds: 3_000_000_000)\n            // Sometimes the focused window may not be ready on app launch.\n            if await !(focusedWindow is WorkspaceXcodeWindowInspector) {\n                await observeFocusedWindow()\n            }\n        }\n    }\n\n    func refresh() {\n        Task { @MainActor in\n            if let focusedWindow = focusedWindow as? WorkspaceXcodeWindowInspector {\n                await focusedWindow.refresh()\n            } else {\n                observeFocusedWindow()\n            }\n        }\n    }\n\n    @MainActor\n    private func observeFocusedWindow() {\n        if let window = appElement.focusedWindow {\n            if window.identifier == \"Xcode.WorkspaceWindow\" {\n                let window = WorkspaceXcodeWindowInspector(\n                    app: runningApplication,\n                    uiElement: window,\n                    axNotifications: axNotifications\n                )\n\n                focusedWindow = window\n                documentURL = window.documentURL\n                workspaceURL = window.workspaceURL\n                projectRootURL = window.projectRootURL\n\n                observer.observe { [weak self] in\n                    let url = window.documentURL\n                    if url != .init(fileURLWithPath: \"/\") {\n                        self?.documentURL = url\n                    }\n                }\n\n                observer.observe { [weak self] in\n                    let url = window.workspaceURL\n                    if url != .init(fileURLWithPath: \"/\") {\n                        self?.workspaceURL = url\n                    }\n                }\n\n                observer.observe { [weak self] in\n                    let url = window.projectRootURL\n                    if url != .init(fileURLWithPath: \"/\") {\n                        self?.projectRootURL = url\n                    }\n                }\n            } else {\n                let window = XcodeWindowInspector(app: runningApplication, uiElement: window)\n                focusedWindow = window\n            }\n        } else {\n            focusedWindow = nil\n        }\n    }\n\n    func observeAXNotifications() {\n        longRunningTasks.forEach { $0.cancel() }\n        longRunningTasks = []\n\n        let axNotificationStream = AXNotificationStream(\n            app: runningApplication,\n            notificationNames:\n            kAXTitleChangedNotification,\n            kAXApplicationActivatedNotification,\n            kAXApplicationDeactivatedNotification,\n            kAXMovedNotification,\n            kAXResizedNotification,\n            kAXMainWindowChangedNotification,\n            kAXFocusedWindowChangedNotification,\n            kAXFocusedUIElementChangedNotification,\n            kAXWindowMovedNotification,\n            kAXWindowResizedNotification,\n            kAXWindowMiniaturizedNotification,\n            kAXWindowDeminiaturizedNotification,\n            kAXCreatedNotification,\n            kAXUIElementDestroyedNotification\n        )\n\n        let observeAXNotificationTask = Task { @XcodeInspectorActor [weak self] in\n            var updateWorkspaceInfoTask: Task<Void, Error>?\n\n            for await notification in axNotificationStream {\n                guard let self else { return }\n                try Task.checkCancellation()\n                await Task.yield()\n\n                guard let event = AXNotificationKind(rawValue: notification.name) else {\n                    continue\n                }\n\n                self.axNotifications.send(.init(kind: event, element: notification.element))\n\n                if event == .focusedWindowChanged {\n                    await observeFocusedWindow()\n                }\n\n                if event == .focusedUIElementChanged || event == .applicationDeactivated {\n                    updateWorkspaceInfoTask?.cancel()\n                    updateWorkspaceInfoTask = Task { [weak self] in\n                        guard let self else { return }\n                        try await Task.sleep(nanoseconds: 2_000_000_000)\n                        try Task.checkCancellation()\n                        await self.updateWorkspaceInfo()\n                    }\n                }\n\n                if event == .created || event == .uiElementDestroyed {\n                    switch event {\n                    case .created:\n                        if isCompletionPanel(notification.element) {\n                            await MainActor.run {\n                                self.completionPanel = notification.element\n                                self.completionPanel?.setMessagingTimeout(1)\n                            }\n                            self.axNotifications.send(.init(\n                                kind: .xcodeCompletionPanelChanged,\n                                element: notification.element\n                            ))\n                        }\n                    case .uiElementDestroyed:\n                        let completionPanel = await self.completionPanel\n                        if let completionPanel {\n                            if isCompletionPanel(notification.element) {\n                                await MainActor.run {\n                                    self.completionPanel = nil\n                                }\n                                self.axNotifications.send(.init(\n                                    kind: .xcodeCompletionPanelChanged,\n                                    element: notification.element\n                                ))\n                            } else if completionPanel.parent == nil {\n                                await MainActor.run {\n                                    self.completionPanel = nil\n                                }\n                                self.axNotifications.send(.init(\n                                    kind: .xcodeCompletionPanelChanged,\n                                    element: notification.element\n                                ))\n                            }\n                        }\n                    default: continue\n                    }\n                }\n            }\n        }\n\n        longRunningTasks.insert(observeAXNotificationTask)\n\n        Task { @MainActor in\n            updateWorkspaceInfo()\n        }\n    }\n}\n\n// MARK: - Workspace Info\n\nextension XcodeAppInstanceInspector {\n    public enum WorkspaceIdentifier: Hashable, Sendable {\n        case url(URL)\n        case unknown\n    }\n\n    public class Workspace {\n        public let element: AXUIElement\n        public var info: WorkspaceInfo\n\n        /// When a window is closed, all it's properties will be set to nil.\n        /// Since we can't get notification for window closing,\n        /// we will use it to check if the window is closed.\n        var isValid: Bool {\n            element.parent != nil\n        }\n\n        init(element: AXUIElement) {\n            self.element = element\n            info = .init(tabs: [])\n        }\n    }\n\n    public struct WorkspaceInfo: Sendable {\n        public let tabs: Set<String>\n\n        public func combined(with info: WorkspaceInfo) -> WorkspaceInfo {\n            return .init(tabs: tabs.union(info.tabs))\n        }\n    }\n\n    @MainActor\n    func updateWorkspaceInfo() {\n        let workspaceInfoInVisibleSpace = Self.fetchVisibleWorkspaces(runningApplication)\n        let workspaces = Self.updateWorkspace(workspaces, with: workspaceInfoInVisibleSpace)\n        self.workspaces = workspaces\n    }\n    \n    public func workspaceWindow(\n        forWorkspaceURL url: URL\n    ) -> AXUIElement? {\n        let windows = appElement.windows.filter { $0.identifier == \"Xcode.WorkspaceWindow\" }\n\n        for window in windows {\n            if let workspaceURL = WorkspaceXcodeWindowInspector\n                .extractWorkspaceURL(windowElement: window),\n                workspaceURL == url\n            {\n                return window\n            }\n        }\n        return nil\n    }\n\n    /// Use the project path as the workspace identifier.\n    nonisolated static func workspaceIdentifier(_ window: AXUIElement) -> WorkspaceIdentifier {\n        if let url = WorkspaceXcodeWindowInspector.extractWorkspaceURL(windowElement: window) {\n            return WorkspaceIdentifier.url(url)\n        }\n        return WorkspaceIdentifier.unknown\n    }\n\n    /// With Accessibility API, we can ONLY get the information of visible windows.\n    nonisolated static func fetchVisibleWorkspaces(\n        _ app: NSRunningApplication\n    ) -> [WorkspaceIdentifier: Workspace] {\n        let app = AXUIElementCreateApplication(app.processIdentifier)\n        let windows = app.windows.filter { $0.identifier == \"Xcode.WorkspaceWindow\" }\n\n        var dict = [WorkspaceIdentifier: Workspace]()\n\n        for window in windows {\n            let workspaceIdentifier = workspaceIdentifier(window)\n            var traverseCount = 0\n\n            let tabs = {\n                guard let editArea = window.firstChild(where: { $0.description == \"editor area\" })\n                else { return Set<String>() }\n                var allTabs = Set<String>()\n                let tabBars = editArea.tabBars\n                for tabBar in tabBars {\n                    tabBar.traverse { element, _ in\n                        traverseCount += 1\n                        if element.roleDescription == \"tab\" {\n                            allTabs.insert(element.title)\n                            return .skipDescendants\n                        }\n                        return .continueSearching(())\n                    }\n                }\n                return allTabs\n            }()\n\n            let workspace = Workspace(element: window)\n            workspace.info = .init(tabs: tabs)\n            dict[workspaceIdentifier] = workspace\n        }\n        return dict\n    }\n\n    nonisolated static func updateWorkspace(\n        _ old: [WorkspaceIdentifier: Workspace],\n        with new: [WorkspaceIdentifier: Workspace]\n    ) -> [WorkspaceIdentifier: Workspace] {\n        var updated = old.filter { $0.value.isValid } // remove closed windows.\n        for (identifier, workspace) in new {\n            if let existed = updated[identifier] {\n                existed.info = workspace.info\n            } else {\n                updated[identifier] = workspace\n            }\n        }\n        return updated\n    }\n}\n\nprivate func isCompletionPanel(_ element: AXUIElement) -> Bool {\n    let matchXcode15CompletionPanel =\n        element.firstChild { element in\n            element.identifier == \"_XC_COMPLETION_TABLE_\"\n        } != nil\n\n    if matchXcode15CompletionPanel {\n        return true\n    }\n\n    let matchXcode16CompletionPanel = {\n        if element.parent?.parent != nil { return false }\n        if element.role != \"AXWindow\" { return false }\n        if element.roleDescription != \"dialog\" { return false }\n        guard let group = element.firstChild(where: { $0.role == \"AXGroup\" }),\n              let scrollArea = group.firstChild(where: { $0.role == \"AXScrollArea\" }),\n              let list = scrollArea.firstChild(where: { $0.role == \"AXOpaqueProviderGroup\" }),\n              let _ = list.children.first(where: { $0.value == \"code completion\" })\n        else { return false }\n        return true\n    }()\n\n    return matchXcode16CompletionPanel\n}\n\npublic extension AXUIElement {\n    var editorArea: AXUIElement? {\n        if description == \"editor area\" { return self }\n        var area: AXUIElement?\n        traverse { element, level in\n            if level > 10 {\n                return .skipDescendants\n            }\n            if element.description == \"editor area\" {\n                area = element\n                return .stopSearching\n            }\n            if element.description == \"navigator\" {\n                return .skipDescendants\n            }\n\n            return .continueSearching(())\n        }\n        return area\n    }\n\n    var tabBars: [AXUIElement] {\n        guard let editorArea else { return [] }\n\n        var tabBars = [AXUIElement]()\n        editorArea.traverse { element, _ in\n            let description = element.description\n            if description == \"Tab Bar\" {\n                element.traverse { element, _ in\n                    if element.description == \"tab bar\" {\n                        tabBars.append(element)\n                        return .stopSearching\n                    }\n                    return .continueSearching(())\n                }\n\n                return .skipDescendantsAndSiblings\n            }\n\n            if element.identifier == \"editor context\" {\n                return .skipDescendantsAndSiblings\n            }\n\n            if element.isSourceEditor {\n                return .skipDescendantsAndSiblings\n            }\n\n            if description == \"Code Coverage Ribbon\" {\n                return .skipDescendants\n            }\n\n            if description == \"Debug Area\" {\n                return .skipDescendants\n            }\n\n            if description == \"debug bar\" {\n                return .skipDescendants\n            }\n\n            return .continueSearching(())\n        }\n\n        return tabBars\n    }\n\n    var debugArea: AXUIElement? {\n        guard let editorArea else { return nil }\n\n        var debugArea: AXUIElement?\n        editorArea.traverse { element, _ in\n            let description = element.description\n            if description == \"Tab Bar\" {\n                return .skipDescendants\n            }\n\n            if element.identifier == \"editor context\" {\n                return .skipDescendantsAndSiblings\n            }\n\n            if element.isSourceEditor {\n                return .skipDescendantsAndSiblings\n            }\n\n            if description == \"Code Coverage Ribbon\" {\n                return .skipDescendants\n            }\n\n            if description == \"Debug Area\" {\n                debugArea = element\n                return .skipDescendants\n            }\n\n            if description == \"debug bar\" {\n                return .skipDescendants\n            }\n\n            return .continueSearching(())\n        }\n\n        return debugArea\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/Helpers.swift",
    "content": "import AppKit\nimport Foundation\n\npublic extension NSRunningApplication {\n    var isXcode: Bool { bundleIdentifier == \"com.apple.dt.Xcode\" }\n    var isCopilotForXcodeExtensionService: Bool {\n        bundleIdentifier == Bundle.main.bundleIdentifier\n    }\n}\n\npublic extension FileManager {\n    func fileIsDirectory(atPath path: String) -> Bool {\n        var isDirectory: ObjCBool = false\n        let exists = fileExists(atPath: path, isDirectory: &isDirectory)\n        return isDirectory.boolValue && exists\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/SourceEditor.swift",
    "content": "@preconcurrency import AppKit\nimport AsyncPassthroughSubject\nimport AXNotificationStream\nimport Foundation\nimport Logger\nimport SuggestionBasic\n\n/// Representing a source editor inside Xcode.\npublic class SourceEditor: @unchecked Sendable {\n    public typealias Content = EditorInformation.SourceEditorContent\n\n    public struct AXNotification: Hashable, Sendable {\n        public var kind: AXNotificationKind\n        public var element: AXUIElement\n\n        public func hash(into hasher: inout Hasher) {\n            kind.hash(into: &hasher)\n        }\n    }\n\n    public enum AXNotificationKind: Hashable, Equatable, Sendable {\n        case selectedTextChanged\n        case valueChanged\n        case scrollPositionChanged\n        case evaluatedContentChanged\n    }\n\n    let runningApplication: NSRunningApplication\n    public let element: AXUIElement\n    var observeAXNotificationsTask: Task<Void, Never>?\n    public let axNotifications = AsyncPassthroughSubject<AXNotification>()\n\n    /// To prevent expensive calculations in ``getContent()``.\n    private let cache = Cache()\n    \n    public func getLatestEvaluatedContent() -> Content {\n        let selectionRange = element.selectedTextRange\n        let (content, lines, selections) = cache.latest()\n        let lineAnnotationElements = element.children.filter { $0.identifier == \"Line Annotation\" }\n        let lineAnnotations = lineAnnotationElements.map(\\.description)\n\n        return .init(\n            content: content,\n            lines: lines,\n            selections: selections,\n            cursorPosition: selections.first?.start ?? .outOfScope,\n            cursorOffset: selectionRange?.lowerBound ?? 0,\n            lineAnnotations: lineAnnotations\n        )\n    }\n\n    /// Get the content of the source editor.\n    ///\n    /// - note: This method is expensive. It needs to convert index based ranges to line based\n    /// ranges.\n    public func getContent() -> Content {\n        let content = element.value\n        let selectionRange = element.selectedTextRange\n        let (lines, selections) = cache.get(content: content, selectedTextRange: selectionRange)\n\n        let lineAnnotationElements = element.children.filter { $0.identifier == \"Line Annotation\" }\n        let lineAnnotations = lineAnnotationElements.map(\\.description)\n\n        axNotifications.send(.init(kind: .evaluatedContentChanged, element: element))\n\n        return .init(\n            content: content,\n            lines: lines,\n            selections: selections,\n            cursorPosition: selections.first?.start ?? .outOfScope,\n            cursorOffset: selectionRange?.lowerBound ?? 0,\n            lineAnnotations: lineAnnotations\n        )\n    }\n\n    public init(runningApplication: NSRunningApplication, element: AXUIElement) {\n        self.runningApplication = runningApplication\n        self.element = element\n        element.setMessagingTimeout(2)\n        observeAXNotifications()\n    }\n\n    private func observeAXNotifications() {\n        observeAXNotificationsTask?.cancel()\n        observeAXNotificationsTask = Task { [weak self] in\n            guard let self else { return }\n            await withThrowingTaskGroup(of: Void.self) { [weak self] group in\n                guard let self else { return }\n                let editorNotifications = AXNotificationStream(\n                    app: runningApplication,\n                    element: element,\n                    notificationNames:\n                    kAXSelectedTextChangedNotification,\n                    kAXValueChangedNotification\n                )\n\n                group.addTask { [weak self] in\n                    for await notification in editorNotifications {\n                        try Task.checkCancellation()\n                        await Task.yield()\n                        guard let self else { return }\n                        if let kind: AXNotificationKind = {\n                            switch notification.name {\n                            case kAXSelectedTextChangedNotification: return .selectedTextChanged\n                            case kAXValueChangedNotification: return .valueChanged\n                            default: return nil\n                            }\n                        }() {\n                            self.axNotifications.send(.init(\n                                kind: kind,\n                                element: notification.element\n                            ))\n                        }\n                    }\n                }\n\n                if let scrollView = element.parent, let scrollBar = scrollView.verticalScrollBar {\n                    let scrollViewNotifications = AXNotificationStream(\n                        app: runningApplication,\n                        element: scrollBar,\n                        notificationNames: kAXValueChangedNotification\n                    )\n\n                    group.addTask { [weak self] in\n                        for await notification in scrollViewNotifications {\n                            try Task.checkCancellation()\n                            await Task.yield()\n                            guard let self else { return }\n                            self.axNotifications.send(.init(\n                                kind: .scrollPositionChanged,\n                                element: notification.element\n                            ))\n                        }\n                    }\n                }\n\n                try? await group.waitForAll()\n            }\n        }\n    }\n}\n\nextension SourceEditor {\n    final class Cache {\n        static let queue = DispatchQueue(label: \"SourceEditor.Cache\")\n\n        private var sourceContent: String?\n        private var cachedLines = [String]()\n        private var sourceSelectedTextRange: ClosedRange<Int>?\n        private var cachedSelections = [CursorRange]()\n\n        init(\n            sourceContent: String? = nil,\n            cachedLines: [String] = [String](),\n            sourceSelectedTextRange: ClosedRange<Int>? = nil,\n            cachedSelections: [CursorRange] = [CursorRange]()\n        ) {\n            self.sourceContent = sourceContent\n            self.cachedLines = cachedLines\n            self.sourceSelectedTextRange = sourceSelectedTextRange\n            self.cachedSelections = cachedSelections\n        }\n\n        func get(content: String, selectedTextRange: ClosedRange<Int>?) -> (\n            lines: [String],\n            selections: [CursorRange]\n        ) {\n            Self.queue.sync {\n                let contentMatch = content == sourceContent\n                let selectedRangeMatch = selectedTextRange == sourceSelectedTextRange\n                let lines: [String] = {\n                    if contentMatch {\n                        return cachedLines\n                    }\n                    return content.breakLines(appendLineBreakToLastLine: false)\n                }()\n                let selections: [CursorRange] = {\n                    if contentMatch, selectedRangeMatch {\n                        return cachedSelections\n                    }\n                    if let selectedTextRange {\n                        return [SourceEditor.convertRangeToCursorRange(\n                            selectedTextRange,\n                            in: lines\n                        )]\n                    }\n                    return []\n                }()\n\n                sourceContent = content\n                cachedLines = lines\n                sourceSelectedTextRange = selectedTextRange\n                cachedSelections = selections\n\n                return (lines, selections)\n            }\n        }\n        \n        func latest() -> (content: String, lines: [String], selections: [CursorRange]) {\n            Self.queue.sync {\n                (sourceContent ?? \"\", cachedLines, cachedSelections)\n            }\n        }\n    }\n}\n\n// MARK: - Helpers\n\npublic extension SourceEditor {\n    static func convertCursorRangeToRange(\n        _ cursorRange: CursorRange,\n        in lines: [String]\n    ) -> CFRange {\n        var countS = 0\n        var countE = 0\n        var range = CFRange(location: 0, length: 0)\n        for (i, line) in lines.enumerated() {\n            if i == cursorRange.start.line {\n                countS = countS + cursorRange.start.character\n                range.location = countS\n            }\n            if i == cursorRange.end.line {\n                countE = countE + cursorRange.end.character\n                range.length = max(countE - range.location, 0)\n                break\n            }\n            countS += line.utf16.count\n            countE += line.utf16.count\n        }\n        return range\n    }\n\n    static func convertCursorRangeToRange(\n        _ cursorRange: CursorRange,\n        in content: String\n    ) -> CFRange {\n        let lines = content.breakLines(appendLineBreakToLastLine: false)\n        return convertCursorRangeToRange(cursorRange, in: lines)\n    }\n\n    static func convertRangeToCursorRange(\n        _ range: ClosedRange<Int>,\n        in lines: [String]\n    ) -> CursorRange {\n        guard !lines.isEmpty else { return CursorRange(start: .zero, end: .zero) }\n        var countS = 0\n        var countE = 0\n        var cursorRange = CursorRange(start: .zero, end: .outOfScope)\n        for (i, line) in lines.enumerated() {\n            if countS <= range.lowerBound,\n               range.lowerBound < countS + line.utf16.count\n            {\n                cursorRange.start = .init(line: i, character: range.lowerBound - countS)\n            }\n            if countE <= range.upperBound,\n               range.upperBound < countE + line.utf16.count\n            {\n                cursorRange.end = .init(line: i, character: range.upperBound - countE)\n                break\n            }\n            countS += line.utf16.count\n            countE += line.utf16.count\n        }\n        if cursorRange.end == .outOfScope {\n            if range.lowerBound == range.upperBound { return .outOfScope }\n            cursorRange.end = .init(\n                line: lines.endIndex - 1,\n                character: lines.last?.utf16.count ?? 0\n            )\n        }\n        return cursorRange\n    }\n\n    static func convertRangeToCursorRange(\n        _ range: ClosedRange<Int>,\n        in content: String\n    ) -> CursorRange {\n        let lines = content.breakLines(appendLineBreakToLastLine: false)\n        return convertRangeToCursorRange(range, in: lines)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/XcodeInspector+TriggerCommand.swift",
    "content": "import AppKit\nimport AXExtension\nimport Foundation\nimport Logger\n\npublic extension XcodeAppInstanceInspector {\n    func triggerCopilotCommand(name: String, activateXcode: Bool = true) async throws {\n        let bundleName = Bundle.main\n            .object(forInfoDictionaryKey: \"EXTENSION_BUNDLE_NAME\") as! String\n        try await triggerMenuItem(path: [\"Editor\", bundleName, name], activateApp: activateXcode)\n    }\n}\n\npublic extension AppInstanceInspector {\n    struct CantRunCommand: Error, LocalizedError {\n        let path: String\n        let reason: String\n        public var errorDescription: String? {\n            \"Can't run command \\(path): \\(reason)\"\n        }\n    }\n\n    @MainActor\n    func triggerMenuItem(path: [String], activateApp: Bool) async throws {\n        let sourcePath = path.joined(separator: \"/\")\n        func cantRunCommand(_ reason: String) -> CantRunCommand {\n            return CantRunCommand(path: sourcePath, reason: reason)\n        }\n\n        guard path.count >= 2 else { throw cantRunCommand(\"Path too short.\") }\n\n        if activateApp {\n            if !runningApplication.isActive {\n                // we prefer `.activate()` because it only brings the active window to the front\n                if !activate() {\n                    appElement.isFrontmost = true\n                }\n            }\n        } else {\n            if !runningApplication.isActive {\n                Logger.service.error(\"\"\"\n                Trigger menu item \\(sourcePath): \\\n                Xcode not activated.\n                \"\"\")\n            }\n        }\n\n        await Task.yield()\n\n        if UserDefaults.shared.value(for: \\.triggerActionWithAccessibilityAPI) {\n            let app = AXUIElementCreateApplication(runningApplication.processIdentifier)\n\n            guard let menuBar = app.menuBar else {\n                Logger.service.error(\"\"\"\n                Trigger menu item \\(sourcePath) failed: \\\n                Menu not found.\n                \"\"\")\n                throw cantRunCommand(\"Menu not found.\")\n            }\n            var path = path\n            var currentMenu = menuBar\n            while !path.isEmpty {\n                let item = path.removeFirst()\n\n                if path.isEmpty, let button = currentMenu.child(title: item, role: \"AXMenuItem\") {\n                    let error = AXUIElementPerformAction(button, kAXPressAction as CFString)\n                    if error != AXError.success {\n                        Logger.service.error(\"\"\"\n                        Trigger menu item \\(sourcePath) failed: \\\n                        \\(error.localizedDescription)\n                        \"\"\")\n                        throw cantRunCommand(error.localizedDescription)\n                    } else {\n                        #if DEBUG\n                        Logger.service.info(\"\"\"\n                        Trigger menu item \\(sourcePath) succeeded.\n                        \"\"\")\n                        #endif\n                        return\n                    }\n                } else if let menu = currentMenu.child(title: item) {\n                    #if DEBUG\n                    Logger.service.info(\"\"\"\n                    Trigger menu item \\(sourcePath): Move to \\(item).\n                    \"\"\")\n                    #endif\n                    currentMenu = menu\n                } else {\n                    Logger.service.error(\"\"\"\n                    Trigger menu item \\(sourcePath) failed: \\\n                    \\(item) is not found.\n                    \"\"\")\n                    throw cantRunCommand(\"\\(item) is not found.\")\n                }\n            }\n        } else {\n            let clickTask = {\n                var path = path\n                let button = path.removeLast()\n                let menuBarItem = path.removeFirst()\n                let list = path\n                    .reversed()\n                    .map { \"menu 1 of menu item \\\"\\($0)\\\"\" }\n                    .joined(separator: \" of \")\n                return \"\"\"\n                click menu item \"\\(button)\" of \\(list) \\\n                of menu 1 \\\n                of menu bar item \"\\(menuBarItem)\" \\\n                of menu bar 1\n                \"\"\"\n            }()\n            /// check if menu is open, if not, click the menu item.\n            let appleScript = \"\"\"\n            tell application \"System Events\"\n                set theprocs to every process whose unix id is \\\n                \\(runningApplication.processIdentifier)\n                repeat with proc in theprocs\n                    tell proc\n                        repeat with theMenu in menus of menu bar 1\n                            set theValue to value of attribute \"AXVisibleChildren\" of theMenu\n                            if theValue is not {} then\n                                return\n                            end if\n                        end repeat\n                        \\(clickTask)\n                    end tell\n                end repeat\n            end tell\n            \"\"\"\n\n            do {\n                try await runAppleScript(appleScript)\n            } catch {\n                Logger.service.error(\"\"\"\n                Trigger menu item \\(path.joined(separator: \"/\")) failed: \\\n                \\(error.localizedDescription)\n                \"\"\")\n                throw cantRunCommand(error.localizedDescription)\n            }\n        }\n    }\n}\n\n@discardableResult\nfunc runAppleScript(_ appleScript: String) async throws -> String {\n    let task = Process()\n    task.launchPath = \"/usr/bin/osascript\"\n    task.arguments = [\"-e\", appleScript]\n    let outpipe = Pipe()\n    task.standardOutput = outpipe\n    task.standardError = Pipe()\n\n    return try await withUnsafeThrowingContinuation { continuation in\n        do {\n            task.terminationHandler = { _ in\n                do {\n                    if let data = try outpipe.fileHandleForReading.readToEnd(),\n                       let content = String(data: data, encoding: .utf8)\n                    {\n                        continuation.resume(returning: content)\n                        return\n                    }\n                    continuation.resume(returning: \"\")\n                } catch {\n                    continuation.resume(throwing: error)\n                }\n            }\n            try task.run()\n        } catch {\n            continuation.resume(throwing: error)\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/XcodeInspector.swift",
    "content": "import AppKit\nimport AsyncAlgorithms\nimport AXExtension\nimport Combine\nimport Foundation\nimport Logger\nimport Perception\nimport Preferences\nimport SuggestionBasic\nimport SwiftNavigation\nimport Toast\n\npublic extension Notification.Name {\n    static let accessibilityAPIMalfunctioning = Notification\n        .Name(\"XcodeInspector.accessibilityAPIMalfunctioning\")\n    static let activeApplicationDidChange = Notification\n        .Name(\"XcodeInspector.activeApplicationDidChange\")\n    static let previousActiveApplicationDidChange = Notification\n        .Name(\"XcodeInspector.previousActiveApplicationDidChange\")\n    static let activeXcodeDidChange = Notification\n        .Name(\"XcodeInspector.activeXcodeDidChange\")\n    static let latestActiveXcodeDidChange = Notification\n        .Name(\"XcodeInspector.latestActiveXcodeDidChange\")\n    static let xcodesDidChange = Notification.Name(\"XcodeInspector.xcodesDidChange\")\n    static let activeProjectRootURLDidChange = Notification\n        .Name(\"XcodeInspector.activeProjectRootURLDidChange\")\n    static let activeDocumentURLDidChange = Notification\n        .Name(\"XcodeInspector.activeDocumentURLDidChange\")\n    static let activeWorkspaceURLDidChange = Notification\n        .Name(\"XcodeInspector.activeWorkspaceURLDidChange\")\n    static let focusedWindowDidChange = Notification\n        .Name(\"XcodeInspector.focusedWindowDidChange\")\n    static let focusedEditorDidChange = Notification\n        .Name(\"XcodeInspector.focusedEditorDidChange\")\n    static let focusedElementDidChange = Notification\n        .Name(\"XcodeInspector.focusedElementDidChange\")\n    static let completionPanelDidChange = Notification\n        .Name(\"XcodeInspector.completionPanelDidChange\")\n    static let xcodeWorkspacesDidChange = Notification\n        .Name(\"XcodeInspector.xcodeWorkspacesDidChange\")\n}\n\n@globalActor\npublic enum XcodeInspectorActor: GlobalActor {\n    public actor Actor {}\n    public static let shared = Actor()\n}\n\n@XcodeInspectorActor\n@Perceptible\npublic final class XcodeInspector: Sendable {\n    public final class PerceptionObserver: Sendable {\n        public struct Cancellable {\n            let token: ObserveToken\n            public func cancel() {\n                token.cancel()\n            }\n        }\n\n        final class Object: NSObject, Sendable {}\n\n        let object = Object()\n\n        @MainActor\n        @discardableResult public func observe(\n            _ block: @Sendable @escaping @MainActor () -> Void\n        ) -> Cancellable {\n            let token = object.observe { block() }\n            return Cancellable(token: token)\n        }\n    }\n\n    public nonisolated static func createObserver() -> PerceptionObserver {\n        PerceptionObserver()\n    }\n\n    public nonisolated static let shared = XcodeInspector()\n\n    private var toast: ToastController { ToastControllerDependencyKey.liveValue }\n\n    @PerceptionIgnored private var activeXcodeObservations = Set<Task<Void, Error>>()\n    @PerceptionIgnored private var appChangeObservations = Set<Task<Void, Never>>()\n\n    @MainActor\n    public fileprivate(set) var activeApplication: AppInstanceInspector? {\n        didSet {\n            NotificationCenter.default.post(name: .activeApplicationDidChange, object: nil)\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var previousActiveApplication: AppInstanceInspector? {\n        didSet {\n            NotificationCenter.default.post(name: .previousActiveApplicationDidChange, object: nil)\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var activeXcode: XcodeAppInstanceInspector? {\n        didSet {\n            NotificationCenter.default.post(name: .activeXcodeDidChange, object: nil)\n            NotificationCenter.default.post(name: .focusedWindowDidChange, object: nil)\n            NotificationCenter.default.post(name: .activeDocumentURLDidChange, object: self)\n            NotificationCenter.default.post(name: .activeWorkspaceURLDidChange, object: self)\n            NotificationCenter.default.post(name: .activeProjectRootURLDidChange, object: self)\n            NotificationCenter.default.post(name: .completionPanelDidChange, object: self)\n            NotificationCenter.default.post(name: .xcodeWorkspacesDidChange, object: self)\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var latestActiveXcode: XcodeAppInstanceInspector? {\n        didSet {\n            _nonIsolatedLatestActiveXcode = latestActiveXcode\n            NotificationCenter.default.post(name: .latestActiveXcodeDidChange, object: nil)\n        }\n    }\n\n    @MainActor\n    public fileprivate(set) var xcodes: [XcodeAppInstanceInspector] = [] {\n        didSet {\n            NotificationCenter.default.post(name: .xcodesDidChange, object: nil)\n        }\n    }\n\n    @MainActor\n    public var activeProjectRootURL: URL? {\n        (activeXcode ?? latestActiveXcode)?.projectRootURL\n    }\n\n    @MainActor\n    public var activeDocumentURL: URL? {\n        (activeXcode ?? latestActiveXcode)?.documentURL\n    }\n\n    @MainActor\n    public var activeWorkspaceURL: URL? {\n        (activeXcode ?? latestActiveXcode)?.workspaceURL\n    }\n\n    @MainActor\n    public var focusedWindow: XcodeWindowInspector? {\n        (activeXcode ?? latestActiveXcode)?.focusedWindow\n    }\n\n    @MainActor\n    public var completionPanel: AXUIElement? {\n        (activeXcode ?? latestActiveXcode)?.completionPanel\n    }\n\n    @MainActor\n    public fileprivate(set) var focusedEditor: SourceEditor? {\n        didSet {\n            NotificationCenter.default.post(name: .focusedEditorDidChange, object: nil)\n        }\n    }\n    \n    @MainActor\n    public fileprivate(set) var latestFocusedEditor: SourceEditor?\n\n    @MainActor\n    public fileprivate(set) var focusedElement: AXUIElement? {\n        didSet {\n            NotificationCenter.default.post(name: .focusedElementDidChange, object: nil)\n        }\n    }\n\n    /// Get the content of the source editor.\n    ///\n    /// - note: This method is expensive. It needs to convert index based ranges to line based\n    /// ranges.\n    public func getFocusedEditorContent() async -> EditorInformation? {\n        guard let documentURL = realtimeActiveDocumentURL,\n              let workspaceURL = realtimeActiveWorkspaceURL,\n              let projectURL = realtimeActiveProjectURL\n        else { return nil }\n\n        let editorContent = await latestFocusedEditor?.getContent()\n        let language = languageIdentifierFromFileURL(documentURL)\n        let relativePath = documentURL.path.replacingOccurrences(of: projectURL.path, with: \"\")\n\n        if let editorContent, let range = editorContent.selections.first {\n            let (selectedContent, selectedLines) = EditorInformation.code(\n                in: editorContent.lines,\n                inside: range\n            )\n            return .init(\n                editorContent: editorContent,\n                selectedContent: selectedContent,\n                selectedLines: selectedLines,\n                documentURL: documentURL,\n                workspaceURL: workspaceURL,\n                projectRootURL: projectURL,\n                relativePath: relativePath,\n                language: language\n            )\n        }\n\n        return .init(\n            editorContent: editorContent,\n            selectedContent: \"\",\n            selectedLines: [],\n            documentURL: documentURL,\n            workspaceURL: workspaceURL,\n            projectRootURL: projectURL,\n            relativePath: relativePath,\n            language: language\n        )\n    }\n\n    @PerceptionIgnored\n    private nonisolated(unsafe) var _nonIsolatedLatestActiveXcode: XcodeAppInstanceInspector?\n\n    public nonisolated var realtimeActiveDocumentURL: URL? {\n        _nonIsolatedLatestActiveXcode?.realtimeDocumentURL\n    }\n\n    public nonisolated var realtimeActiveWorkspaceURL: URL? {\n        _nonIsolatedLatestActiveXcode?.realtimeWorkspaceURL\n    }\n\n    public nonisolated var realtimeActiveProjectURL: URL? {\n        _nonIsolatedLatestActiveXcode?.realtimeProjectURL\n    }\n\n    nonisolated init() {\n        AXUIElement.setGlobalMessagingTimeout(3)\n        Task { await restart() }\n    }\n\n    public func restart(cleanUp: Bool = false) async {\n        if cleanUp {\n            activeXcodeObservations.forEach { $0.cancel() }\n            activeXcodeObservations.removeAll()\n            await MainActor.run {\n                self.activeXcode = nil\n                latestActiveXcode = nil\n                activeApplication = nil\n                focusedEditor = nil\n                latestFocusedEditor = nil\n                focusedElement = nil\n            }\n        }\n\n        let runningApplications = NSWorkspace.shared.runningApplications\n\n        await MainActor.run {\n            xcodes = runningApplications\n                .filter { $0.isXcode }\n                .map(XcodeAppInstanceInspector.init(runningApplication:))\n            let activeXcode = xcodes.first(where: \\.isActive)\n            latestActiveXcode = activeXcode ?? xcodes.first\n            activeApplication = activeXcode ?? runningApplications\n                .first(where: \\.isActive)\n                .map(AppInstanceInspector.init(runningApplication:))\n            self.activeXcode = activeXcode\n        }\n\n        appChangeObservations.forEach { $0.cancel() }\n        appChangeObservations.removeAll()\n\n        let appChangeTask = Task(priority: .utility) { [weak self] in\n            guard let self else { return }\n            if let activeXcode = await self.activeXcode {\n                await setActiveXcode(activeXcode)\n            }\n\n            await withThrowingTaskGroup(of: Void.self) { [weak self] group in\n                group.addTask { [weak self] in // Did activate app\n                    let sequence = NSWorkspace.shared.notificationCenter\n                        .notifications(named: NSWorkspace.didActivateApplicationNotification)\n                    for await notification in sequence {\n                        try Task.checkCancellation()\n                        guard let self else { return }\n                        guard let app = notification\n                            .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication\n                        else { continue }\n                        if app.isXcode {\n                            if let existed = await self.xcodes.first(where: {\n                                $0.processIdentifier == app.processIdentifier && !$0.isTerminated\n                            }) {\n                                Task {\n                                    await self.setActiveXcode(existed)\n                                }\n                            } else {\n                                let new = XcodeAppInstanceInspector(runningApplication: app)\n                                Task { @MainActor in\n                                    self.xcodes.append(new)\n                                    await self.setActiveXcode(new)\n                                }\n                            }\n                        } else {\n                            let appInspector = AppInstanceInspector(runningApplication: app)\n                            Task { @MainActor in\n                                self.previousActiveApplication = self.activeApplication\n                                self.activeApplication = appInspector\n                            }\n                        }\n                    }\n                }\n\n                group.addTask { [weak self] in // Did terminate app\n                    let sequence = NSWorkspace.shared.notificationCenter\n                        .notifications(named: NSWorkspace.didTerminateApplicationNotification)\n                    for await notification in sequence {\n                        try Task.checkCancellation()\n                        guard let self else { return }\n                        guard let app = notification\n                            .userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication\n                        else { continue }\n                        if app.isXcode {\n                            let processIdentifier = app.processIdentifier\n                            Task { @MainActor in\n                                self.xcodes.removeAll {\n                                    $0.processIdentifier == processIdentifier || $0.isTerminated\n                                }\n                                if self.latestActiveXcode?.runningApplication\n                                    .processIdentifier == processIdentifier\n                                {\n                                    self.latestActiveXcode = nil\n                                }\n\n                                if let activeXcode = self.xcodes.first(where: \\.isActive) {\n                                    await self.setActiveXcode(activeXcode)\n                                }\n                            }\n                        }\n                    }\n                }\n\n                if UserDefaults.shared\n                    .value(for: \\.restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning)\n                {\n                    group.addTask { [weak self] in\n                        while true {\n                            guard let self else { return }\n                            if UserDefaults.shared.value(\n                                for: \\.restartXcodeInspectorIfAccessibilityAPIIsMalfunctioningNoTimer\n                            ) {\n                                return\n                            }\n\n                            try await Task.sleep(nanoseconds: 10_000_000_000)\n                            Task {\n                                await self.checkForAccessibilityMalfunction(\"Timer\")\n                            }\n                        }\n                    }\n                }\n\n                group.addTask { [weak self] in // malfunctioning\n                    let sequence = NotificationCenter.default\n                        .notifications(named: .accessibilityAPIMalfunctioning)\n                    for await notification in sequence {\n                        try Task.checkCancellation()\n                        guard let self else { return }\n                        await self\n                            .recoverFromAccessibilityMalfunctioning(notification.object as? String)\n                    }\n                }\n            }\n        }\n\n        appChangeObservations.insert(appChangeTask)\n    }\n\n    public func reactivateObservationsToXcode() async {\n        if let activeXcode = await activeXcode {\n            await setActiveXcode(activeXcode)\n            activeXcode.observeAXNotifications()\n        }\n    }\n\n    private func setActiveXcode(_ xcode: XcodeAppInstanceInspector) async {\n        await MainActor.run {\n            previousActiveApplication = activeApplication\n            activeApplication = xcode\n        }\n        xcode.refresh()\n        for task in activeXcodeObservations { task.cancel() }\n        activeXcodeObservations.removeAll()\n        await MainActor.run {\n            activeXcode = xcode\n            latestActiveXcode = xcode\n        }\n\n        let setFocusedElement = { [weak self] in\n            guard let self else { return }\n            await MainActor.run {\n                self.focusedElement = xcode.appElement.focusedElement\n                if let editorElement = self.focusedElement, editorElement.isSourceEditor {\n                    self.focusedEditor = .init(\n                        runningApplication: xcode.runningApplication,\n                        element: editorElement\n                    )\n                    self.latestFocusedEditor = self.focusedEditor\n                } else if let element = self.focusedElement,\n                          let editorElement = element.firstParent(where: \\.isSourceEditor)\n                {\n                    self.focusedEditor = .init(\n                        runningApplication: xcode.runningApplication,\n                        element: editorElement\n                    )\n                    self.latestFocusedEditor = self.focusedEditor\n                } else {\n                    self.focusedEditor = nil\n                }\n            }\n        }\n\n        await setFocusedElement()\n        let focusedElementChanged = Task {\n            for await notification in await xcode.axNotifications.notifications() {\n                if notification.kind == .focusedUIElementChanged {\n                    try Task.checkCancellation()\n                    await setFocusedElement()\n                }\n            }\n        }\n\n        activeXcodeObservations.insert(focusedElementChanged)\n\n        if UserDefaults.shared\n            .value(for: \\.restartXcodeInspectorIfAccessibilityAPIIsMalfunctioning)\n        {\n            let malfunctionCheck = Task { [weak self] in\n                if #available(macOS 13.0, *) {\n                    let notifications = await xcode.axNotifications.notifications().filter {\n                        $0.kind == .uiElementDestroyed\n                    }.debounce(for: .milliseconds(1000))\n                    for await _ in notifications {\n                        guard let self else { return }\n                        try Task.checkCancellation()\n                        await self.checkForAccessibilityMalfunction(\"Element Destroyed\")\n                    }\n                }\n            }\n\n            activeXcodeObservations.insert(malfunctionCheck)\n\n            await checkForAccessibilityMalfunction(\"Reactivate Xcode\")\n        }\n    }\n\n    private var lastRecoveryFromAccessibilityMalfunctioningTimeStamp = Date()\n\n    private func checkForAccessibilityMalfunction(_ source: String) async {\n        guard Date().timeIntervalSince(lastRecoveryFromAccessibilityMalfunctioningTimeStamp) > 5\n        else { return }\n\n        if let editor = await focusedEditor, !editor.element.isSourceEditor {\n            NotificationCenter.default.post(\n                name: .accessibilityAPIMalfunctioning,\n                object: \"Source Editor Element Corrupted: \\(source)\"\n            )\n        } else if let element = await activeXcode?.appElement.focusedElement {\n            let focusedElement = await focusedElement\n            if element.description != focusedElement?.description ||\n                element.role != focusedElement?.role\n            {\n                NotificationCenter.default.post(\n                    name: .accessibilityAPIMalfunctioning,\n                    object: \"Element Inconsistency: \\(source)\"\n                )\n            }\n        }\n    }\n\n    private func recoverFromAccessibilityMalfunctioning(_ source: String?) async {\n        let message = \"\"\"\n        Accessibility API malfunction detected: \\\n        \\(source ?? \"\").\n        Resetting active Xcode.\n        \"\"\"\n\n        if UserDefaults.shared.value(for: \\.toastForTheReasonWhyXcodeInspectorNeedsToBeRestarted) {\n            toast.toast(content: message, type: .warning)\n        } else {\n            Logger.service.info(message)\n        }\n        if let activeXcode = await activeXcode {\n            lastRecoveryFromAccessibilityMalfunctioningTimeStamp = Date()\n            await setActiveXcode(activeXcode)\n            activeXcode.observeAXNotifications()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Sources/XcodeInspector/XcodeWindowInspector.swift",
    "content": "import AppKit\nimport AsyncPassthroughSubject\nimport AXExtension\nimport Combine\nimport CoreGraphics\nimport Foundation\nimport Logger\nimport Perception\n\npublic class XcodeWindowInspector {\n    public let app: NSRunningApplication\n    public let windowID: CGWindowID\n    public var uiElement: AXUIElement {\n        let windowID = self.windowID\n        if _uiElement.parent == nil {\n            let app = AXUIElementCreateApplication(app.processIdentifier)\n            app.setMessagingTimeout(2)\n            if let newWindowElement = app.windows.first(where: { $0.windowID == windowID }) {\n                self._uiElement = newWindowElement\n                newWindowElement.setMessagingTimeout(2)\n            }\n        }\n        return _uiElement\n    }\n\n    var _uiElement: AXUIElement\n\n    init(\n        app: NSRunningApplication,\n        uiElement: AXUIElement\n    ) {\n        self.app = app\n        _uiElement = uiElement\n        uiElement.setMessagingTimeout(2)\n        windowID = uiElement.windowID ?? 0\n    }\n\n    public var isInvalid: Bool {\n        uiElement.parent == nil\n    }\n}\n\n@XcodeInspectorActor\n@Perceptible\npublic final class WorkspaceXcodeWindowInspector: XcodeWindowInspector, Sendable {\n    @MainActor\n    public private(set) var documentURL: URL = .init(fileURLWithPath: \"/\")\n    @MainActor\n    public private(set) var workspaceURL: URL = .init(fileURLWithPath: \"/\")\n    @MainActor\n    public private(set) var projectRootURL: URL = .init(fileURLWithPath: \"/\")\n    @PerceptionIgnored private var focusedElementChangedTask: Task<Void, Error>?\n\n    public func refresh() {\n        Task { @MainActor in updateURLs() }\n    }\n\n    @MainActor\n    public init(\n        app: NSRunningApplication,\n        uiElement: AXUIElement,\n        axNotifications: AsyncPassthroughSubject<XcodeAppInstanceInspector.AXNotification>\n    ) {\n        super.init(app: app, uiElement: uiElement)\n\n        focusedElementChangedTask = Task { @MainActor [weak self, axNotifications] in\n            self?.updateURLs()\n\n            await withThrowingTaskGroup(of: Void.self) { [weak self] group in\n                group.addTask { [weak self] in\n                    // prevent that documentURL may not be available yet\n                    try await Task.sleep(nanoseconds: 500_000_000)\n                    if await self?.documentURL == .init(fileURLWithPath: \"/\") {\n                        await self?.updateURLs()\n                    }\n                }\n\n                group.addTask { [weak self] in\n                    for await notification in await axNotifications.notifications() {\n                        guard notification.kind == .focusedUIElementChanged\n                            || notification.kind == .titleChanged\n                        else { continue }\n                        guard let self else { return }\n                        try Task.checkCancellation()\n                        await Task.yield()\n                        await self.updateURLs()\n                    }\n                }\n            }\n        }\n    }\n\n    @MainActor\n    func updateURLs() {\n        let documentURL = Self.extractDocumentURL(windowElement: uiElement)\n        if let documentURL {\n            self.documentURL = documentURL\n        }\n        let workspaceURL = Self.extractWorkspaceURL(windowElement: uiElement)\n        if let workspaceURL {\n            self.workspaceURL = workspaceURL\n        }\n        let projectURL = Self.extractProjectURL(\n            workspaceURL: workspaceURL,\n            documentURL: documentURL\n        )\n        if let projectURL {\n            projectRootURL = projectURL\n        }\n    }\n\n    nonisolated static func extractDocumentURL(\n        windowElement: AXUIElement\n    ) -> URL? {\n        // fetch file path of the frontmost window of Xcode through Accessibility API.\n        let path = windowElement.document\n        if let path = path?.removingPercentEncoding {\n            let url = URL(\n                fileURLWithPath: path\n                    .replacingOccurrences(of: \"file://\", with: \"\")\n            )\n            return adjustFileURL(url)\n        }\n        return nil\n    }\n\n    nonisolated static func extractWorkspaceURL(\n        windowElement: AXUIElement\n    ) -> URL? {\n        for child in windowElement.children {\n            if child.description.starts(with: \"/\"), child.description.count > 1 {\n                let path = child.description\n                let trimmedNewLine = path.trimmingCharacters(in: .newlines)\n                let url = URL(fileURLWithPath: trimmedNewLine)\n                return url\n            }\n        }\n        return nil\n    }\n\n    public nonisolated static func extractProjectURL(\n        workspaceURL: URL?,\n        documentURL: URL?\n    ) -> URL? {\n        guard var currentURL = workspaceURL ?? documentURL else { return nil }\n        var firstDirectoryURL: URL?\n        var lastGitDirectoryURL: URL?\n        while currentURL.pathComponents.count > 1 {\n            defer { currentURL.deleteLastPathComponent() }\n            guard FileManager.default.fileIsDirectory(atPath: currentURL.path) else { continue }\n            guard currentURL.pathExtension != \"xcodeproj\" else { continue }\n            guard currentURL.pathExtension != \"xcworkspace\" else { continue }\n            guard currentURL.pathExtension != \"playground\" else { continue }\n            if firstDirectoryURL == nil { firstDirectoryURL = currentURL }\n            let gitURL = currentURL.appendingPathComponent(\".git\")\n            if FileManager.default.fileIsDirectory(atPath: gitURL.path) {\n                lastGitDirectoryURL = currentURL\n            } else if let text = try? String(contentsOf: gitURL) {\n                if !text.hasPrefix(\"gitdir: ../\"), // it's not a sub module\n                   text.range(of: \"/.git/worktrees/\") != nil // it's a git worktree\n                {\n                    lastGitDirectoryURL = currentURL\n                }\n            }\n        }\n\n        return lastGitDirectoryURL ?? firstDirectoryURL ?? workspaceURL\n    }\n\n    nonisolated static func adjustFileURL(_ url: URL) -> URL {\n        if url.pathExtension == \"playground\",\n           FileManager.default.fileIsDirectory(atPath: url.path)\n        {\n            return url.appendingPathComponent(\"Contents.swift\")\n        }\n        return url\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/ASTParserTests/CursorDeepFirstSearchTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import ASTParser\n\nclass CursorDeepFirstSearchTests: XCTestCase {\n    class TN {\n        var parent: TN?\n        var value: Int\n        var children: [TN] = []\n        \n        init(_ value: Int, _ children: [TN] = []) {\n            self.value = value\n            self.children = children\n            children.forEach { $0.parent = self }\n        }\n    }\n    \n    class ACursor: Cursor {\n        var currentNode: TN?\n        init(currentNode: TN?) {\n            self.currentNode = currentNode\n        }\n        \n        func goToFirstChild() -> Bool {\n            if let first = currentNode?.children.first {\n                currentNode = first\n                return true\n            }\n            return false\n        }\n        \n        func goToNextSibling() -> Bool {\n            if let parent = currentNode?.parent,\n               let index = parent.children.firstIndex(where: { $0 === currentNode }),\n               index < parent.children.count - 1 {\n                currentNode = parent.children[index + 1]\n                return true\n            }\n            return false\n        }\n        \n        func goToParent() -> Bool {\n            if let parent = currentNode?.parent {\n                currentNode = parent\n                return true\n            }\n            return false\n        }\n    }\n    \n    func test_deep_first_search() {\n        let root = TN(0, [\n            TN(1, [\n                TN(2),\n                TN(3)\n            ]),\n            TN(4, [\n                TN(5, [TN(6, [TN(7)])]),\n                TN(8)\n            ])\n        ])\n        let cursor = ACursor(currentNode: root)\n        var result = [Int]()\n        for node in CursorDeepFirstSearchSequence(cursor: cursor, skipChildren: { _ in true }) {\n            result.append(node.value)\n        }\n        \n        XCTAssertEqual(result, result.sorted())\n    }\n    \n    func test_deep_first_search_skip_children() {\n        let root = TN(0, [\n            TN(1, [\n                TN(2),\n                TN(3)\n            ]),\n            TN(4, [\n                TN(5, [TN(6, [TN(7)])]),\n                TN(8)\n            ])\n        ])\n        let cursor = ACursor(currentNode: root)\n        var result = [Int]()\n        for node in CursorDeepFirstSearchSequence(cursor: cursor, skipChildren: { $0.value == 5 }) {\n            result.append(node.value)\n        }\n        \n        XCTAssertEqual(result, [0, 1, 2, 3, 4, 5, 8])\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/ActiveDocumentChatContextCollectorTests/File.swift",
    "content": "\n"
  },
  {
    "path": "Tool/Tests/CodeDiffTests/CodeDiffTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import CodeDiff\n\nclass CodeDiffTests: XCTestCase {\n    func test_diff_snippets_empty_snippets() {\n        XCTAssertEqual(\n            CodeDiff().diff(snippet: \"\", from: \"\"),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [.init(text: \"\")],\n                    newSnippet: [.init(text: \"\")]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_from_empty_to_content() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                \"\"\",\n                from: \"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [.init(text: \"\", diff: .mutated(changes: []))],\n                    newSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [.init(\n                                offset: 0,\n                                element: \"let foo = Foo()\"\n                            )])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"foo.bar()\")])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_insert_at_top() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                \"\"\",\n                from: \"\"\"\n                foo.bar()\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [],\n                    newSnippet: [.init(\n                        text: \"let foo = Foo()\",\n                        diff: .mutated(changes: [CodeDiff.SnippetDiff.Change(\n                            offset: 0,\n                            element: \"let foo = Foo()\"\n                        )])\n                    )]\n                ),\n\n                .init(\n                    oldOffset: 0,\n                    newOffset: 1,\n                    oldSnippet: [.init(text: \"foo.bar()\", diff: .unchanged)],\n                    newSnippet: [.init(text: \"foo.bar()\", diff: .unchanged)]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_from_one_line_to_content() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                \"\"\",\n                from: \"\"\"\n                // comment\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [.init(text: \"// comment\", diff: .mutated(changes: [\n                        .init(offset: 0, element: \"// comm\"),\n                        .init(offset: 8, element: \"n\"),\n                    ]))],\n                    newSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"l\"),\n                                .init(offset: 3, element: \" foo = Foo()\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"foo.bar()\")])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_from_content_to_empty() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\",\n                from: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [.init(\n                                offset: 0,\n                                element: \"let foo = Foo()\"\n                            )])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"foo.bar()\")])\n                        ),\n                    ],\n                    newSnippet: [.init(text: \"\", diff: .mutated(changes: []))]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_from_content_to_one_line() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                // comment\n                    let foo = Bar()\n                    print(bar)\n                    print(foo)\n                \"\"\",\n                from: \"\"\"\n                    let foo = Bar()\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [],\n                    newSnippet: [\n                        .init(\n                            text: \"// comment\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"// comment\")])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 0,\n                    newOffset: 1,\n                    oldSnippet: [\n                        .init(text: \"    let foo = Bar()\"),\n                    ],\n                    newSnippet: [\n                        .init(text: \"    let foo = Bar()\"),\n                    ]\n                ),\n                .init(oldOffset: 1, newOffset: 2, oldSnippet: [], newSnippet: [\n                    .init(\n                        text: \"    print(bar)\",\n                        diff: .mutated(changes: [.init(offset: 0, element: \"    print(bar)\")])\n                    ),\n                    .init(\n                        text: \"    print(foo)\",\n                        diff: .mutated(changes: [.init(offset: 0, element: \"    print(foo)\")])\n                    ),\n                ]),\n            ])\n        )\n    }\n\n    func test_diff_snippets_mutation() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                var foo = Bar()\n                foo.baz()\n                print(foo)\n                \"\"\",\n                from: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"let\"),\n                                .init(offset: 10, element: \"Foo\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"r\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"var foo = Bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"var\"),\n                                .init(offset: 10, element: \"Bar\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.baz()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"z\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"print(foo)\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"print(foo)\"),\n                            ])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_multiple_sections() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                var foo = Bar()\n                foo.baz()\n                // divider a\n                print(foo)\n                // divider b\n                // divider c\n                func bar() {\n                    print(foo)\n                }\n                \"\"\",\n                from: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                // divider a\n                // divider b\n                // divider c\n                func bar() {}\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"let\"),\n                                .init(offset: 10, element: \"Foo\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"r\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"var foo = Bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"var\"),\n                                .init(offset: 10, element: \"Bar\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.baz()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"z\"),\n                            ])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 2,\n                    newOffset: 2,\n                    oldSnippet: [.init(text: \"// divider a\")],\n                    newSnippet: [.init(text: \"// divider a\")]\n                ),\n                .init(\n                    oldOffset: 3,\n                    newOffset: 3,\n                    oldSnippet: [],\n                    newSnippet: [\n                        .init(\n                            text: \"print(foo)\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"print(foo)\"),\n                            ])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 3,\n                    newOffset: 4,\n                    oldSnippet: [.init(text: \"// divider b\"), .init(text: \"// divider c\")],\n                    newSnippet: [.init(text: \"// divider b\"), .init(text: \"// divider c\")]\n                ),\n                .init(\n                    oldOffset: 5,\n                    newOffset: 6,\n                    oldSnippet: [\n                        .init(\n                            text: \"func bar() {}\",\n                            diff: .mutated(changes: [\n                                .init(offset: 12, element: \"}\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"func bar() {\",\n                            diff: .mutated(changes: [])\n                        ),\n                        .init(\n                            text: \"    print(foo)\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"    print(foo)\")])\n                        ),\n                        .init(\n                            text: \"}\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"}\")])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_multiple_sections_beginning_unchanged() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                // unchanged\n                // unchanged\n                var foo = Bar()\n                foo.baz()\n                // divider a\n                print(foo)\n                \"\"\",\n                from: \"\"\"\n                // unchanged\n                // unchanged\n                let foo = Foo()\n                foo.bar()\n                // divider a\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [.init(text: \"// unchanged\"), .init(text: \"// unchanged\")],\n                    newSnippet: [.init(text: \"// unchanged\"), .init(text: \"// unchanged\")]\n                ),\n                .init(\n                    oldOffset: 2,\n                    newOffset: 2,\n                    oldSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"let\"),\n                                .init(offset: 10, element: \"Foo\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"r\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"var foo = Bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"var\"),\n                                .init(offset: 10, element: \"Bar\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.baz()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"z\"),\n                            ])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 4,\n                    newOffset: 4,\n                    oldSnippet: [.init(text: \"// divider a\")],\n                    newSnippet: [.init(text: \"// divider a\")]\n                ),\n                .init(\n                    oldOffset: 5,\n                    newOffset: 5,\n                    oldSnippet: [],\n                    newSnippet: [\n                        .init(\n                            text: \"print(foo)\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"print(foo)\"),\n                            ])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_multiple_sections_beginning_unchanged_reversed() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                // unchanged\n                // unchanged\n                let foo = Foo()\n                foo.bar()\n                // divider a\n                \"\"\",\n                from: \"\"\"\n                // unchanged\n                // unchanged\n                var foo = Bar()\n                foo.baz()\n                // divider a\n                print(foo)\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [.init(text: \"// unchanged\"), .init(text: \"// unchanged\")],\n                    newSnippet: [.init(text: \"// unchanged\"), .init(text: \"// unchanged\")]\n                ),\n                .init(\n                    oldOffset: 2,\n                    newOffset: 2,\n                    oldSnippet: [\n                        .init(\n                            text: \"var foo = Bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"var\"),\n                                .init(offset: 10, element: \"Bar\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.baz()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"z\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"let\"),\n                                .init(offset: 10, element: \"Foo\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"r\"),\n                            ])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 4,\n                    newOffset: 4,\n                    oldSnippet: [.init(text: \"// divider a\")],\n                    newSnippet: [.init(text: \"// divider a\")]\n                ),\n                .init(\n                    oldOffset: 5,\n                    newOffset: 5,\n                    oldSnippet: [.init(\n                        text: \"print(foo)\",\n                        diff: .mutated(changes: [\n                            .init(offset: 0, element: \"print(foo)\"),\n                        ])\n                    )],\n                    newSnippet: []\n                ),\n            ])\n        )\n    }\n\n    func test_diff_snippets_multiple_sections_more_unbalanced_sections_reversed() {\n        XCTAssertEqual(\n            CodeDiff().diff(\n                snippet: \"\"\"\n                let foo = Foo()\n                foo.bar()\n                // divider a\n                // divider b\n                // divider c\n                func bar() {}\n                \"\"\",\n                from: \"\"\"\n                var foo = Bar()\n                foo.baz()\n                // divider a\n                print(foo)\n                // divider b\n                print(foo)\n                // divider c\n                func bar() {\n                    print(foo)\n                }\n                \"\"\"\n            ),\n            .init(sections: [\n                .init(\n                    oldOffset: 0,\n                    newOffset: 0,\n                    oldSnippet: [\n                        .init(\n                            text: \"var foo = Bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"var\"),\n                                .init(offset: 10, element: \"Bar\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.baz()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"z\"),\n                            ])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"let foo = Foo()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 0, element: \"let\"),\n                                .init(offset: 10, element: \"Foo\"),\n                            ])\n                        ),\n                        .init(\n                            text: \"foo.bar()\",\n                            diff: .mutated(changes: [\n                                .init(offset: 6, element: \"r\"),\n                            ])\n                        ),\n                    ]\n                ),\n                .init(\n                    oldOffset: 2,\n                    newOffset: 2,\n                    oldSnippet: [.init(text: \"// divider a\")],\n                    newSnippet: [.init(text: \"// divider a\")]\n                ),\n                .init(\n                    oldOffset: 3,\n                    newOffset: 3,\n                    oldSnippet: [.init(\n                        text: \"print(foo)\",\n                        diff: .mutated(changes: [\n                            .init(offset: 0, element: \"print(foo)\"),\n                        ])\n                    )],\n                    newSnippet: []\n                ),\n                .init(\n                    oldOffset: 4,\n                    newOffset: 3,\n                    oldSnippet: [.init(text: \"// divider b\")],\n                    newSnippet: [.init(text: \"// divider b\")]\n                ),\n                .init(\n                    oldOffset: 5,\n                    newOffset: 4,\n                    oldSnippet: [.init(\n                        text: \"print(foo)\",\n                        diff: .mutated(changes: [\n                            .init(offset: 0, element: \"print(foo)\"),\n                        ])\n                    )],\n                    newSnippet: []\n                ),\n                .init(\n                    oldOffset: 6,\n                    newOffset: 4,\n                    oldSnippet: [.init(text: \"// divider c\")],\n                    newSnippet: [.init(text: \"// divider c\")]\n                ),\n                .init(\n                    oldOffset: 7,\n                    newOffset: 5,\n                    oldSnippet: [\n                        .init(\n                            text: \"func bar() {\",\n                            diff: .mutated(changes: [])\n                        ),\n                        .init(\n                            text: \"    print(foo)\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"    print(foo)\")])\n                        ),\n                        .init(\n                            text: \"}\",\n                            diff: .mutated(changes: [.init(offset: 0, element: \"}\")])\n                        ),\n                    ],\n                    newSnippet: [\n                        .init(\n                            text: \"func bar() {}\",\n                            diff: .mutated(changes: [\n                                .init(offset: 12, element: \"}\"),\n                            ])\n                        ),\n                    ]\n                ),\n            ])\n        )\n    }\n\n    func test_removing_last_line() {\n        let originalCode = \"\"\"\n        1\n        2\n        3\n        \"\"\"\n        let newCode = \"\"\"\n        1\n        2\n        \"\"\"\n\n        let diff = CodeDiff().diff(snippet: newCode, from: originalCode)\n        XCTAssertEqual(diff, .init(sections: [\n            .init(oldOffset: 0, newOffset: 0, oldSnippet: [\n                .init(text: \"1\", diff: .unchanged),\n                .init(text: \"2\", diff: .unchanged),\n            ], newSnippet: [\n                .init(text: \"1\", diff: .unchanged),\n                .init(text: \"2\", diff: .unchanged),\n            ]),\n            .init(oldOffset: 2, newOffset: 2, oldSnippet: [\n                .init(text: \"3\", diff: .mutated(changes: [.init(offset: 0, element: \"3\")])),\n            ], newSnippet: [\n            ]),\n        ]))\n    }\n\n    func test_removing_multiple_sections() {\n        let originalCode = \"\"\"\n        1\n        2\n        3\n        4\n        5\n        \"\"\"\n        let newCode = \"\"\"\n        1\n        3\n        5\n        \"\"\"\n\n        let diff = CodeDiff().diff(snippet: newCode, from: originalCode)\n        XCTAssertEqual(diff, .init(sections: [\n            .init(oldOffset: 0, newOffset: 0, oldSnippet: [\n                .init(text: \"1\", diff: .unchanged),\n            ], newSnippet: [\n                .init(text: \"1\", diff: .unchanged),\n            ]),\n            .init(oldOffset: 1, newOffset: 1, oldSnippet: [\n                .init(text: \"2\", diff: .mutated(changes: [.init(offset: 0, element: \"2\")])),\n            ], newSnippet: [\n            ]),\n            .init(oldOffset: 2, newOffset: 1, oldSnippet: [\n                .init(text: \"3\", diff: .unchanged),\n            ], newSnippet: [\n                .init(text: \"3\", diff: .unchanged),\n            ]),\n            .init(oldOffset: 3, newOffset: 2, oldSnippet: [\n                .init(text: \"4\", diff: .mutated(changes: [.init(offset: 0, element: \"4\")])),\n            ], newSnippet: [\n            ]),\n            .init(oldOffset: 4, newOffset: 2, oldSnippet: [\n                .init(text: \"5\", diff: .unchanged),\n            ], newSnippet: [\n                .init(text: \"5\", diff: .unchanged),\n            ]),\n        ]))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/FocusedCodeFinderTests/ObjectiveCFocusedCodeFinderTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import FocusedCodeFinder\n\nfinal class ObjectiveCFocusedCodeFinder_Selection_Tests: XCTestCase {\n    func test_selecting_a_line_inside_the_method_the_scope_should_be_the_method() {\n        let code = \"\"\"\n        @implementation Foo\n        - (void)fooWith:(NSInteger)foo {\n            NSInteger foo = 0;\n            NSLog(@\"Hello\");\n            NSLog(@\"World\");\n        }\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 2, character: 4)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@implementation Foo\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (6, 4))\n                ),\n                .init(\n                    signature: \"- (void)fooWith:(NSInteger)foo\",\n                    name: \"fooWith:(NSInteger)foo\",\n                    range: .init(startPair: (1, 0), endPair: (5, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (6, 4)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n                NSInteger foo = 0;\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_a_function_the_scope_should_be_the_function() {\n        let code = \"\"\"\n        void foo(char name[]) {\n            NSInteger foo = 0;\n            NSLog(@\"Hello\");\n            NSLog(@\"World\");\n        }\n        \"\"\"\n        let range = CursorRange(startPair: (2, 0), endPair: (2, 4))\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"void foo(char name[])\",\n                    name: \"foo\",\n                    range: .init(startPair: (0, 0), endPair: (4, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 1)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n                NSLog(@\"Hello\");\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_method_inside_an_implementation_the_scope_should_be_the_implementation() {\n        let code = \"\"\"\n        __attribute__((objc_nonlazy_class))\n        @implementation Foo (Category)\n        - (void)fooWith:(NSInteger)foo {\n            NSInteger foo = 0;\n            NSLog(@\"Hello\");\n            NSLog(@\"World\");\n        }\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 6, character: 1)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"__attribute__((objc_nonlazy_class)) @implementation Foo (Category)\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (7, 4))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (7, 4)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n            - (void)fooWith:(NSInteger)foo {\n                NSInteger foo = 0;\n                NSLog(@\"Hello\");\n                NSLog(@\"World\");\n            }\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_an_interface_the_scope_should_be_the_interface() {\n        let code = \"\"\"\n        @interface ViewController <ObjectType: id<UITableViewDelegate, UITableViewDataSource>>: NSObject <ProtocolName>\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@interface ViewController<ObjectType: id<UITableViewDelegate, UITableViewDataSource>>: NSObject<ProtocolName>\",\n                    name: \"ViewController\",\n                    range: .init(startPair: (0, 0), endPair: (4, 4))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 4)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_an_interface_category_the_scope_should_be_the_interface() {\n        let code = \"\"\"\n        @interface __GENERICS(NSArray, ObjectType) (BlocksKit)\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@interface __GENERICS(NSArray, ObjectType) (BlocksKit)\",\n                    name: \"NSArray\",\n                    range: .init(startPair: (0, 0), endPair: (4, 4))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 4)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_a_protocol_the_scope_should_be_the_protocol() {\n        let code = \"\"\"\n        @protocol Foo<A, B>\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@protocol Foo<A, B>\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (4, 4))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 4)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_a_struct_the_scope_should_be_the_struct() {\n        let code = \"\"\"\n        struct Foo {\n            NSInteger foo;\n            NSInteger bar;\n            NSInteger baz;\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"struct Foo\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (4, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 1)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n                NSInteger foo;\n                NSInteger bar;\n                NSInteger baz;\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_a_enum_the_scope_should_be_the_enum() {\n        let code = \"\"\"\n        enum Foo {\n            foo,\n            bar,\n            baz\n        };\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"enum Foo\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (4, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 1)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n                foo,\n                bar,\n                baz\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_an_NSEnum_the_scope_should_be_the_enum() {\n        let code = \"\"\"\n        typedef NS_ENUM(NSInteger, Foo) {\n            foo,\n            bar,\n            baz\n        };\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 3, character: 31)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"typedef NS_ENUM(NSInteger, Foo)\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (4, 2))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (4, 2)),\n            smallestContextRange: range,\n            focusedRange: range,\n            focusedCode: \"\"\"\n                foo,\n                bar,\n                baz\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n}\n\nfinal class ObjectiveCFocusedCodeFinder_Focus_Tests: XCTestCase {\n    func test_get_focused_code_inside_method_the_method_should_be_the_focused_code() {\n        let code = \"\"\"\n        @implementation Foo\n        - (void)fooWith:(NSInteger)foo {\n            NSInteger foo = 0;\n            NSLog(@\"Hello\");\n            NSLog(@\"World\");\n        }\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 2, character: 0)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@implementation Foo\",\n                    name: \"Foo\",\n                    range: .init(startPair: (0, 0), endPair: (6, 4))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (6, 4)),\n            smallestContextRange: .init(startPair: (1, 0), endPair: (5, 1)),\n            focusedRange: .init(startPair: (1, 0), endPair: (5, 1)),\n            focusedCode: \"\"\"\n            - (void)fooWith:(NSInteger)foo {\n                NSInteger foo = 0;\n                NSLog(@\"Hello\");\n                NSLog(@\"World\");\n            }\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_get_focused_code_inside_an_interface_category_the_focused_code_should_be_the_interface(\n    ) {\n        let code = \"\"\"\n        @interface __GENERICS(NSArray, ObjectType) (BlocksKit)\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        - (void)fooWith:(NSInteger)foo;\n        @end\n\n        @implementation Foo\n        @end\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 1, character: 0)\n        )\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .file,\n            contextRange: .init(startPair: (0, 0), endPair: (0, 0)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (4, 4)),\n            focusedRange: .init(startPair: (0, 0), endPair: (4, 4)),\n            focusedCode: \"\"\"\n            @interface __GENERICS(NSArray, ObjectType) (BlocksKit)\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n            - (void)fooWith:(NSInteger)foo;\n            @end\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n}\n\nfinal class ObjectiveCFocusedCodeFinder_Imports_Tests: XCTestCase {\n    func test_parsing_imports() {\n        let code = \"\"\"\n        #import <Foundation/Foundation.h>\n        @import UIKit;\n        #import \"Foo.h\"\n        #include \"Bar.h\"\n        \"\"\"\n\n        let context = ObjectiveCFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: .zero\n        )\n\n        XCTAssertEqual(context.imports, [\n            \"<Foundation/Foundation.h>\",\n            \"UIKit\",\n            \"\\\"Foo.h\\\"\",\n        ])\n        XCTAssertEqual(context.includes, [\n            \"\\\"Bar.h\\\"\",\n        ])\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/FocusedCodeFinderTests/SwiftFocusedCodeFinderTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import FocusedCodeFinder\n\nfunc document(code: String) -> FocusedCodeFinder.Document {\n    .init(\n        documentURL: URL(fileURLWithPath: \"/\"),\n        content: code,\n        lines: code.components(separatedBy: \"\\n\").map { \"\\($0)\\n\" }\n    )\n}\n\nfinal class SwiftFocusedCodeFinder_Selection_Tests: XCTestCase {\n    func test_selecting_a_line_inside_the_function_the_scope_should_be_the_function() {\n        let code = \"\"\"\n        public struct A: B, C {\n            @ViewBuilder private func f(_ a: String) -> String {\n                let a = 1\n                let b = 2\n                let c = 3\n                let d = 4\n                let e = 5\n            }\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 4, character: 0),\n            end: CursorPosition(line: 4, character: 13)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"public struct A: B, C\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (8, 1))\n                ),\n                .init(\n                    signature: \"@ViewBuilder private func f(_ a: String) -> String\",\n                    name: \"f\",\n                    range: .init(startPair: (1, 4), endPair: (7, 5))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            smallestContextRange: .init(startPair: (4, 0), endPair: (4, 13)),\n            focusedRange: .init(startPair: (4, 0), endPair: (4, 13)),\n            focusedCode: \"\"\"\n                    let c = 3\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_function_inside_a_struct_the_scope_should_be_the_struct() {\n        let code = \"\"\"\n        @MainActor\n        public struct A: B, C {\n            func f() {\n                let a = 1\n                let b = 2\n                let c = 3\n                let d = 4\n                let e = 5\n            }\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 7, character: 5)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@MainActor public struct A: B, C\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (9, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (9, 1)),\n            smallestContextRange: .init(startPair: (2, 0), endPair: (7, 5)),\n            focusedRange: .init(startPair: (2, 0), endPair: (7, 5)),\n            focusedCode: \"\"\"\n                func f() {\n                    let a = 1\n                    let b = 2\n                    let c = 3\n                    let d = 4\n                    let e = 5\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_variable_inside_a_class_the_scope_should_be_the_class() {\n        let code = \"\"\"\n        @MainActor final public class A: P<B, C, D>, K {\n            var a = 1\n            var b = 2\n            var c = 3\n            var d = 4\n            var e = 5\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 1, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@MainActor final public class A: P<B, C, D>, K\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (6, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (6, 1)),\n            smallestContextRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedCode: \"\"\"\n                var a = 1\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_function_inside_a_protocol_the_scope_should_be_the_protocol() {\n        let code = \"\"\"\n        public protocol A: Hashable {\n            func f()\n            func g()\n            func h()\n            func i()\n            func j()\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 1, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"public protocol A: Hashable\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (6, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (6, 1)),\n            smallestContextRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedCode: \"\"\"\n                func f()\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_variable_inside_an_extension_the_scope_should_be_the_extension() {\n        let code = \"\"\"\n        private extension A: Equatable {\n            var a = 1\n            var b = 2\n            var c = 3\n            var d = 4\n            var e = 5\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 1, character: 0),\n            end: CursorPosition(line: 1, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"private extension A: Equatable\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (6, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (6, 1)),\n            smallestContextRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedRange: .init(startPair: (1, 0), endPair: (1, 9)),\n            focusedCode: \"\"\"\n                var a = 1\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_static_function_from_an_actor_the_scope_should_be_the_actor() {\n        let code = \"\"\"\n        @globalActor\n        public actor A {\n            static func f() {}\n            static func g() {}\n            static func h() {}\n            static func i() {}\n            static func j() {}\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 2, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@globalActor public actor A\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (7, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (7, 1)),\n            smallestContextRange: .init(startPair: (2, 0), endPair: (2, 9)),\n            focusedRange: .init(startPair: (2, 0), endPair: (2, 9)),\n            focusedCode: \"\"\"\n                static func f() {}\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_case_inside_an_enum_the_scope_should_be_the_enum() {\n        let code = \"\"\"\n        @MainActor\n        public\n        indirect enum A {\n            case a\n            case b\n            case c\n            case d\n            case e\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 3, character: 0),\n            end: CursorPosition(line: 3, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"@MainActor public indirect enum A\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (8, 1))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            smallestContextRange: .init(startPair: (3, 0), endPair: (3, 9)),\n            focusedRange: .init(startPair: (3, 0), endPair: (3, 9)),\n            focusedCode: \"\"\"\n                case a\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_inside_computed_variable_the_scope_should_be_the_variable() {\n        let code = \"\"\"\n        struct A {\n            @SomeWrapper public private(set) var a: Int {\n                let a = 1\n                let b = 2\n                let c = 3\n                let d = 4\n                let e = 5\n            }\n        }\n        \"\"\"\n        let range = CursorRange(\n            start: CursorPosition(line: 2, character: 0),\n            end: CursorPosition(line: 2, character: 9)\n        )\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: .max).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .scope(signature: [\n                .init(\n                    signature: \"struct A\",\n                    name: \"A\",\n                    range: .init(startPair: (0, 0), endPair: (8, 1))\n                ),\n                .init(\n                    signature: \"@SomeWrapper public private(set) var a: Int\",\n                    name: \"a\",\n                    range: .init(startPair: (1, 4), endPair: (7, 5))\n                ),\n            ]),\n            contextRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            smallestContextRange: .init(startPair: (2, 0), endPair: (2, 9)),\n            focusedRange: .init(startPair: (2, 0), endPair: (2, 9)),\n            focusedCode: \"\"\"\n                    let a = 1\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_selecting_a_line_in_freestanding_macro_the_scope_should_be_the_macro() {\n        // TODO:\n    }\n}\n\nfinal class SwiftFocusedCodeFinder_FocusedCode_Tests: XCTestCase {\n    func test_get_focused_code_on_top_level_should_fallback_to_unknown_language() {\n        let code = \"\"\"\n        @MainActor\n        public\n        indirect enum A {\n            case a\n            case b\n            case c\n            case d\n            case e\n        }\n\n        func hello() {\n            print(\"hello\")\n            print(\"hello\")\n        }\n        \"\"\"\n        let range = CursorRange(startPair: (0, 0), endPair: (0, 0))\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: 1000).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (0, 0), endPair: (13, 2)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (13, 2)),\n            focusedRange: .init(startPair: (0, 0), endPair: (13, 2)),\n            focusedCode: \"\"\"\n            @MainActor\n            public\n            indirect enum A {\n                case a\n                case b\n                case c\n                case d\n                case e\n            }\n\n            func hello() {\n                print(\"hello\")\n                print(\"hello\")\n            }\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_get_focused_code_inside_enum_the_whole_enum_will_be_the_focused_code() {\n        let code = \"\"\"\n        @MainActor\n        public\n        indirect enum A {\n            case a\n            case b\n            case c\n            case d\n            case e\n        }\n        \"\"\"\n        let range = CursorRange(startPair: (3, 0), endPair: (3, 0))\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: 1000).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .file,\n            contextRange: .init(startPair: (0, 0), endPair: (0, 0)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            focusedRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            focusedCode: \"\"\"\n            @MainActor\n            public\n            indirect enum A {\n                case a\n                case b\n                case c\n                case d\n                case e\n            }\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_get_focused_code_inside_enum_with_limited_max_line_count() {\n        let code = \"\"\"\n        @MainActor\n        public\n        indirect enum A {\n            case a\n            case b\n            case c\n            case d\n            case e\n        }\n        \"\"\"\n        let range = CursorRange(startPair: (3, 0), endPair: (3, 0))\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: 3).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context, .init(\n            scope: .file,\n            contextRange: .init(startPair: (0, 0), endPair: (0, 0)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (8, 1)),\n            focusedRange: .init(startPair: (2, 0), endPair: (4, 11)),\n            focusedCode: \"\"\"\n            indirect enum A {\n                case a\n                case b\n\n            \"\"\",\n            imports: [],\n            includes: []\n        ))\n    }\n}\n\nfinal class SwiftFocusedCodeFinder_Import_Tests: XCTestCase {\n    func test_parsing_imports() {\n        let code = \"\"\"\n        import OnTop\n        import Second\n        import Third\n\n        struct Foo {\n\n        }\n\n        import BelowStructFoo\n\n        class Bar {\n\n        }\n\n        import BelowClassBar\n        \"\"\"\n\n        let range = CursorRange.zero\n        let context = SwiftFocusedCodeFinder(maxFocusedCodeLineCount: 3).findFocusedCode(\n            in: document(code: code),\n            containingRange: range\n        )\n        XCTAssertEqual(context.imports, [\n            \"OnTop\",\n            \"Second\",\n            \"Third\",\n            \"BelowStructFoo\",\n            \"BelowClassBar\",\n        ])\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/FocusedCodeFinderTests/UnknownLanguageFocusedCodeFinderTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import FocusedCodeFinder\n\nclass UnknownLanguageFocusedCodeFinderTests: XCTestCase {\n    func test_the_code_is_long_enough_for_the_search_range() {\n        let code = stride(from: 0, through: 100, by: 1).map { \"\\($0)\\n\" }.joined()\n        let context = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            .findFocusedCode(\n                in: document(code: code),\n                containingRange: .init(startPair: (50, 0), endPair: (50, 0))\n            )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (40, 0), endPair: (60, 3)),\n            smallestContextRange: .init(startPair: (40, 0), endPair: (60, 3)),\n            focusedRange: .init(startPair: (45, 0), endPair: (55, 3)),\n            focusedCode: stride(from: 45, through: 55, by: 1).map { \"\\($0)\\n\" }.joined(),\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_the_upper_side_is_not_long_enough_expand_the_lower_end() {\n        let code = stride(from: 0, through: 100, by: 1).map { \"\\($0)\\n\" }.joined()\n        let context = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            .findFocusedCode(\n                in: document(code: code),\n                containingRange: .init(startPair: (2, 0), endPair: (2, 0))\n            )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (0, 0), endPair: (15, 3)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (15, 3)),\n            focusedRange: .init(startPair: (0, 0), endPair: (10, 3)),\n            focusedCode: stride(from: 0, through: 10, by: 1).map { \"\\($0)\\n\" }.joined(),\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_the_lower_side_is_not_long_enough_do_not_expand_the_upper_end() {\n        let code = stride(from: 0, through: 100, by: 1).map { \"\\($0)\\n\" }.joined()\n        let context = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            .findFocusedCode(\n                in: document(code: code),\n                containingRange: .init(startPair: (99, 0), endPair: (99, 0))\n            )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (89, 0), endPair: (101, 1)),\n            smallestContextRange: .init(startPair: (89, 0), endPair: (101, 1)),\n            focusedRange: .init(startPair: (94, 0), endPair: (101, 1)),\n            focusedCode: stride(from: 94, through: 100, by: 1).map { \"\\($0)\\n\" }.joined() + \"\\n\",\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_both_sides_are_just_long_enough() {\n        let code = stride(from: 0, through: 10, by: 1).map { \"\\($0)\\n\" }.joined()\n        let context = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            .findFocusedCode(\n                in: document(code: code),\n                containingRange: .init(startPair: (5, 0), endPair: (5, 0))\n            )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (0, 0), endPair: (11, 1)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (11, 1)),\n            focusedRange: .init(startPair: (0, 0), endPair: (10, 3)),\n            focusedCode: code,\n            imports: [],\n            includes: []\n        ))\n    }\n\n    func test_both_sides_are_not_long_enough() {\n        let code = stride(from: 0, through: 4, by: 1).map { \"\\($0)\\n\" }.joined()\n        let context = UnknownLanguageFocusedCodeFinder(proposedSearchRange: 5)\n            .findFocusedCode(\n                in: document(code: code),\n                containingRange: .init(startPair: (3, 0), endPair: (3, 0))\n            )\n        XCTAssertEqual(context, .init(\n            scope: .top,\n            contextRange: .init(startPair: (0, 0), endPair: (5, 1)),\n            smallestContextRange: .init(startPair: (0, 0), endPair: (5, 1)),\n            focusedRange: .init(startPair: (0, 0), endPair: (5, 1)),\n            focusedCode: code + \"\\n\",\n            imports: [],\n            includes: []\n        ))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/GitHubCopilotServiceTests/FetchSuggestionsTests.swift",
    "content": "import CopilotForXcodeKit\nimport LanguageServerProtocol\nimport XCTest\n\n@testable import GitHubCopilotService\n\nstruct TestServiceLocator: ServiceLocatorType {\n    let server: GitHubCopilotLSP\n    func getService(from workspace: WorkspaceInfo) async -> GitHubCopilotService? {\n        .init(designatedServer: server)\n    }\n}\n\nfinal class FetchSuggestionTests: XCTestCase {\n    func test_process_suggestions_from_server() async throws {\n        struct TestServer: GitHubCopilotLSP {\n            func sendNotification(_: LanguageServerProtocol.ClientNotification) async throws {\n                return\n            }\n\n            func sendRequest<E>(_: E, timeout: TimeInterval?) async throws -> E.Response\n                where E: GitHubCopilotRequestType\n            {\n                return GitHubCopilotRequest.InlineCompletion.Response(items: [\n                    .init(\n                        insertText: \"Hello World\\n\",\n                        filterText: nil,\n                        range: .init(start: .init((0, 0)), end: .init((0, 4))),\n                        command: nil\n                    ),\n                    .init(\n                        insertText: \" \",\n                        filterText: nil,\n                        range: .init(start: .init((0, 0)), end: .init((0, 1))),\n                        command: nil\n                    ),\n                    .init(\n                        insertText: \" \\n\",\n                        filterText: nil,\n                        range: .init(start: .init((0, 0)), end: .init((0, 2))),\n                        command: nil\n                    ),\n                ]) as! E.Response\n            }\n        }\n        let service =\n            GitHubCopilotSuggestionService(serviceLocator: TestServiceLocator(server: TestServer()))\n        let completions = try await service.getSuggestions(\n            .init(\n                fileURL: .init(fileURLWithPath: \"/file.swift\"),\n                relativePath: \"\",\n                language: .builtIn(.swift),\n                content: \"\",\n                originalContent: \"\",\n                cursorPosition: .outOfScope,\n                tabSize: 4,\n                indentSize: 4,\n                usesTabsForIndentation: false,\n                relevantCodeSnippets: []\n            ),\n            workspace: .init(\n                workspaceURL: .init(fileURLWithPath: \"/\"),\n                projectURL: .init(fileURLWithPath: \"/file.swift\")\n            )\n        )\n        XCTAssertEqual(completions.count, 3)\n    }\n\n    func test_if_language_identifier_is_unknown_returns_correctly() async throws {\n        class TestServer: GitHubCopilotLSP {\n            func sendNotification(_: LanguageServerProtocol.ClientNotification) async throws {\n                // unimplemented\n            }\n\n            func sendRequest<E>(_: E, timeout: TimeInterval?) async throws -> E.Response\n                where E: GitHubCopilotRequestType\n            {\n                return GitHubCopilotRequest.InlineCompletion.Response(items: [\n                    .init(\n                        insertText: \"Hello World\\n\",\n                        filterText: nil,\n                        range: .init(start: .init((0, 0)), end: .init((0, 4))),\n                        command: nil\n                    ),\n                ]) as! E.Response\n            }\n        }\n        let testServer = TestServer()\n        let service =\n            GitHubCopilotSuggestionService(serviceLocator: TestServiceLocator(server: testServer))\n        let completions = try await service.getSuggestions(\n            .init(\n                fileURL: .init(fileURLWithPath: \"/\"),\n                relativePath: \"\",\n                language: .builtIn(.swift),\n                content: \"\",\n                originalContent: \"\",\n                cursorPosition: .outOfScope,\n                tabSize: 4,\n                indentSize: 4,\n                usesTabsForIndentation: false,\n                relevantCodeSnippets: []\n            ),\n            workspace: .init(\n                workspaceURL: .init(fileURLWithPath: \"/\"),\n                projectURL: .init(fileURLWithPath: \"/file.swift\")\n            )\n        )\n        XCTAssertEqual(completions.count, 1)\n        XCTAssertEqual(completions.first?.text, \"Hello World\\n\")\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/GitHubCopilotServiceTests/FileExtensionToLanguageIdentifierTests.swift",
    "content": "import LanguageServerProtocol\nimport XCTest\n\n@testable import GitHubCopilotService\n\nfinal class FileExtensionToLanguageIdentifierTests: XCTestCase {\n    func test_no_conflicts_in_map() {\n        var dict = [String: [String]]()\n        for languageId in LanguageIdentifier.allCases {\n            for e in languageId.fileExtensions {\n                if dict[e] == nil {\n                    dict[e] = []\n                }\n                dict[e]?.append(languageId.rawValue)\n            }\n        }\n\n        let confilicts = dict.filter { $0.value.count > 1 }\n        XCTAssertEqual(confilicts, [:])\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/JoinJSONTests/JoinJSONTests.swift",
    "content": "import Foundation\n\nimport XCTest\n@testable import JoinJSON\n\nfinal class JoinJSONTests: XCTestCase {\n    var sut: JoinJSON!\n    \n    override func setUp() {\n        super.setUp()\n        sut = JoinJSON()\n    }\n    \n    override func tearDown() {\n        sut = nil\n        super.tearDown()\n    }\n    \n    func test_join_two_valid_json_strings() throws {\n        let json1 = \"\"\"\n        {\"name\": \"John\"}\n        \"\"\"\n        let json2 = \"\"\"\n        {\"age\": 30}\n        \"\"\"\n        \n        let result = sut.join(json1, with: json2)\n        let dict = try JSONSerialization.jsonObject(with: result) as? [String: Any]\n        \n        XCTAssertEqual(dict?[\"name\"] as? String, \"John\")\n        XCTAssertEqual(dict?[\"age\"] as? Int, 30)\n    }\n    \n    func test_join_with_invalid_json_returns_first_data() {\n        let json1 = \"\"\"\n        {\"name\": \"John\"}\n        \"\"\"\n        let invalidJSON = \"invalid json\"\n        \n        let result = sut.join(json1, with: invalidJSON)\n        XCTAssertEqual(result, json1.data(using: .utf8))\n    }\n    \n    func test_join_with_overlapping_keys_prefers_second_value() throws {\n        let json1 = \"\"\"\n        {\"name\": \"John\", \"age\": 25}\n        \"\"\"\n        let json2 = \"\"\"\n        {\"age\": 30}\n        \"\"\"\n        \n        let result = sut.join(json1, with: json2)\n        let dict = try JSONSerialization.jsonObject(with: result) as? [String: Any]\n        \n        XCTAssertEqual(dict?[\"name\"] as? String, \"John\")\n        XCTAssertEqual(dict?[\"age\"] as? Int, 30)\n    }\n    \n    func test_join_with_data_input() throws {\n        let data1 = \"\"\"\n        {\"name\": \"John\"}\n        \"\"\".data(using: .utf8)!\n        \n        let data2 = \"\"\"\n        {\"age\": 30}\n        \"\"\".data(using: .utf8)!\n        \n        let result = sut.join(data1, with: data2)\n        let dict = try JSONSerialization.jsonObject(with: result) as? [String: Any]\n        \n        XCTAssertEqual(dict?[\"name\"] as? String, \"John\")\n        XCTAssertEqual(dict?[\"age\"] as? Int, 30)\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/KeychainTests/KeychainTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import Keychain\n\nclass KeychainTests: XCTestCase {\n    func test_scope_key() {\n        let keychain = Keychain(scope: \"scope\")\n        XCTAssertEqual(keychain.scopeKey(\"key\"), \"scope::key\")\n    }\n    \n    func test_escape_scope() {\n        let keychain = Keychain(scope: \"scope\")\n        XCTAssertEqual(keychain.escapeScope(\"scope::key\"), \"key\")\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/ChatAgentTests.swift",
    "content": "import XCTest\n@testable import LangChain\n\nprivate struct FakeChatModel: ChatModel {\n    func generate(\n        prompt: [LangChain.ChatMessage],\n        stops: [String],\n        callbackManagers: [LangChain.CallbackManager]\n    ) async throws -> LangChain.ChatMessage {\n        return .init(role: .assistant, content: \"New Message\")\n    }\n}\n\nfinal class ChatAgentParseOutputTests: XCTestCase {\n    func test_parsing_well_formatted_final_answer() async throws {\n        let finalAnswer = \"\"\"\n        Final Answer: The answer is 42.\n        Because 42 is the answer to everything.\n        \"\"\"\n\n        let agent = ChatAgent(chatModel: FakeChatModel(), tools: [], preferredLanguage: \"\")\n        let result = await agent.parseOutput(.init(role: .assistant, content: finalAnswer))\n        XCTAssertEqual(result, .finish(.init(\n            returnValue: .structured(\"\"\"\n            The answer is 42.\n            Because 42 is the answer to everything.\n            \"\"\"),\n            log: finalAnswer\n        )))\n    }\n    \n    func test_parsing_final_answer_with_random_prefix() async throws {\n        let finalAnswer = \"\"\"\n        Now I have the final answer.\n        Final Answer: The answer is 42.\n        Because 42 is the answer to everything.\n        \"\"\"\n\n        let agent = ChatAgent(chatModel: FakeChatModel(), tools: [], preferredLanguage: \"\")\n        let result = await agent.parseOutput(.init(role: .assistant, content: finalAnswer))\n        XCTAssertEqual(result, .finish(.init(\n            returnValue: .structured(\"\"\"\n            The answer is 42.\n            Because 42 is the answer to everything.\n            \"\"\"),\n            log: finalAnswer\n        )))\n    }\n    \n    func test_parsing_action() async throws {\n        let reply = \"\"\"\n        Question: How to setup langchain python?\n        Thought: I am not familiar with langchain python, I should use the Search tool to find more information on how to set it up.\n        Action:\n        ```\n        {\n          \"action\": \"Search\",\n          \"action_input\": \"how to setup langchain python\"\n        }\n        ```\n        \"\"\"\n        \n        let agent = ChatAgent(chatModel: FakeChatModel(), tools: [], preferredLanguage: \"\")\n        let result = await agent.parseOutput(.init(role: .assistant, content: reply))\n        XCTAssertEqual(result, .actions([\n            .init(\n                toolName: \"Search\",\n                toolInput: \"how to setup langchain python\",\n                log: reply\n            )\n        ]))\n    }\n    \n    func test_parsing_broken_action_and_return_everything_ahead_of_it() async {\n        let reply = \"\"\"\n        Question: How to setup langchain python?\n        Thought: I am not familiar with langchain python, I should use the Search tool to find more information on how to set it up.\n        Action:\n        ```\n        lkjaskdjalksjdlkasjdklj\n        ```\n        \"\"\"\n        \n        let agent = ChatAgent(chatModel: FakeChatModel(), tools: [], preferredLanguage: \"\")\n        let result = await agent.parseOutput(.init(role: .assistant, content: reply))\n        XCTAssertEqual(result, .finish(.init(\n            returnValue: .structured(\"\"\"\n            Question: How to setup langchain python?\n            Thought: I am not familiar with langchain python, I should use the Search tool to find more information on how to set it up.\n            \"\"\"),\n            log: reply\n        )))\n    }\n    \n    func test_parsing_simple_reply_that_does_not_follow_the_format() async {\n        let reply = \"\"\"\n        The answer is 42.\n        Because 42 is the answer to everything.\n        \"\"\"\n        \n        let agent = ChatAgent(chatModel: FakeChatModel(), tools: [], preferredLanguage: \"\")\n        let result = await agent.parseOutput(.init(role: .assistant, content: reply))\n        XCTAssertEqual(result, .finish(.init(\n            returnValue: .structured(reply),\n            log: reply\n        )))\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/TextSplitterTests/RecursiveCharacterTextSplitterTests.swift",
    "content": "import XCTest\n\n@testable import LangChain\n\nfinal class RecursiveCharacterTextSplitterTests: XCTestCase {\n    func test_split_text() async throws {\n        let splitter = RecursiveCharacterTextSplitter(\n            separators: [\"\\n\\n\", \"\\n\", \" \", \"\"],\n            chunkSize: 100,\n            chunkOverlap: 20\n        )\n\n        let text = \"\"\"\n        Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.\n        \"\"\"\n\n        let result = try await splitter.split(text: text)\n\n        XCTAssertEqual(result, [\n            .init(\n                text: \"Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and\",\n                startUTF16Offset: 0,\n                endUTF16Offset: 97\n            ),\n            .init(\n                text: \" of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.\",\n                startUTF16Offset: 81,\n                endUTF16Offset: 162\n            ),\n        ])\n    }\n\n    func test_split_swift_code() async throws {\n        let splitter = RecursiveCharacterTextSplitter(\n            separatorSet: .swift,\n            chunkSize: 100,\n            chunkOverlap: 20\n        )\n\n        let code = \"\"\"\n        protocol Animal {\n            var name: String { get }\n            var legs: Int { get }\n            func makeSound()\n        }\n\n        @MainActor\n        private class Dog: Animal {\n            var name: String\n            var legs: Int\n            init(name: String, legs: Int) {\n                self.name = name\n                self.legs = legs\n            }\n            func makeSound() {\n                print(\"Woof!\")\n            }\n        }\n\n        final class Cat: Animal {\n            var name: String\n            var legs: Int\n            init(name: String, legs: Int) {\n                self.name = name\n                self.legs = legs\n            }\n            func makeSound() {\n                print(\"Meow!\")\n            }\n        }\n        \"\"\"\n\n        let result = try await splitter.split(text: code)\n        XCTAssertEqual(\n            result,\n            [\n                .init(\n                    text: \"protocol Animal {\\n    var name: String { get }\\n    var legs: Int { get }\\n    func makeSound()\\n}\\n\",\n                    startUTF16Offset: 0,\n                    endUTF16Offset: 96\n                ),\n                .init(\n                    text: \"\\n@MainActor\",\n                    startUTF16Offset: 96,\n                    endUTF16Offset: 107\n                ),\n                .init(\n                    text: \"\\nprivate class Dog: Animal {\\n    var name: String\\n    var legs: Int\\n    init(name: String, legs:\",\n                    startUTF16Offset: 107,\n                    endUTF16Offset: 203\n                ),\n                .init(\n                    text: \" String, legs: Int) {\\n        self.name = name\\n        self.legs = legs\\n    }\\n    func makeSound()\",\n                    startUTF16Offset: 189,\n                    endUTF16Offset: 287\n                ),\n                .init(\n                    text: \"    func makeSound() {\\n        print(\\\"Woof!\\\")\\n    }\\n}\\n\",\n                    startUTF16Offset:267,\n                    endUTF16Offset: 321\n                ),\n                .init(\n                    text: \"\\nfinal class Cat: Animal {\\n    var name: String\\n    var legs: Int\\n    init(name: String, legs: Int)\",\n                    startUTF16Offset: 321,\n                    endUTF16Offset: 420\n                ),\n                .init(\n                    text: \" String, legs: Int) {\\n        self.name = name\\n        self.legs = legs\\n    }\\n    func makeSound()\",\n                    startUTF16Offset: 401,\n                    endUTF16Offset: 499\n                ),\n                .init(\n                    text: \"    func makeSound() {\\n        print(\\\"Meow!\\\")\\n    }\\n}\",\n                    startUTF16Offset: 479,\n                    endUTF16Offset: 532\n                ),\n            ]\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/TextSplitterTests/TextChunkTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import LangChain\n\nclass TextChunkTests: XCTestCase {\n    func test_merging_overlapping_text_chunks() {\n        let chunk1 = TextChunk(text: \"abc\", startUTF16Offset: 0, endUTF16Offset: 3)\n        let chunk2 = TextChunk(text: \"cdef\", startUTF16Offset: 2, endUTF16Offset: 6)\n        let mergedChunk = chunk1.merged(with: chunk2)\n        XCTAssertEqual(mergedChunk?.text, \"abcdef\")\n        XCTAssertEqual(mergedChunk?.startUTF16Offset, 0)\n        XCTAssertEqual(mergedChunk?.endUTF16Offset, 6)\n    }\n    \n    func test_merging_adjacent_text_chunks() {\n        let chunk1 = TextChunk(text: \"abc\", startUTF16Offset: 0, endUTF16Offset: 3)\n        let chunk2 = TextChunk(text: \"def\", startUTF16Offset: 3, endUTF16Offset: 6)\n        let mergedChunk = chunk1.merged(with: chunk2)\n        XCTAssertEqual(mergedChunk?.text, \"abcdef\")\n        XCTAssertEqual(mergedChunk?.startUTF16Offset, 0)\n        XCTAssertEqual(mergedChunk?.endUTF16Offset, 6)\n    }\n    \n    func test_merging_overlapping_text_chunks_reversed_order() {\n        let chunk1 = TextChunk(text: \"abc\", startUTF16Offset: 0, endUTF16Offset: 3)\n        let chunk2 = TextChunk(text: \"cdef\", startUTF16Offset: 2, endUTF16Offset: 6)\n        let mergedChunk = chunk2.merged(with: chunk1)\n        XCTAssertEqual(mergedChunk?.text, \"abcdef\")\n        XCTAssertEqual(mergedChunk?.startUTF16Offset, 0)\n        XCTAssertEqual(mergedChunk?.endUTF16Offset, 6)\n    }\n    \n    func test_merging_adjacent_text_chunks_reversed_order() {\n        let chunk1 = TextChunk(text: \"abc\", startUTF16Offset: 0, endUTF16Offset: 3)\n        let chunk2 = TextChunk(text: \"def\", startUTF16Offset: 3, endUTF16Offset: 6)\n        let mergedChunk = chunk2.merged(with: chunk1)\n        XCTAssertEqual(mergedChunk?.text, \"abcdef\")\n        XCTAssertEqual(mergedChunk?.startUTF16Offset, 0)\n        XCTAssertEqual(mergedChunk?.endUTF16Offset, 6)\n    }\n    \n    func test_do_not_merge_non_overlapping_text_chunks() {\n        let chunk1 = TextChunk(text: \"abc\", startUTF16Offset: 0, endUTF16Offset: 3)\n        let chunk2 = TextChunk(text: \"def\", startUTF16Offset: 4, endUTF16Offset: 7)\n        let mergedChunk = chunk1.merged(with: chunk2)\n        XCTAssertNil(mergedChunk)\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/TextSplitterTests/TextSplitterTests.swift",
    "content": "import XCTest\n\n@testable import LangChain\n\nfinal class TextSplitterTests: XCTestCase {\n    struct Splitter: TextSplitter {\n        var chunkSize: Int\n        var chunkOverlap: Int\n        var lengthFunction: (String) -> Int = { $0.count }\n        func split(text: String) async throws -> [TextChunk] {\n            []\n        }\n    }\n\n    func test_split_text_with_text_separator() async throws {\n        let splitter = Splitter(\n            chunkSize: 1,\n            chunkOverlap: 1\n        )\n\n        let result = splitter.split(\n            text: \"Madam Speaker, Madam Vice President, our First\",\n            separator: \" \"\n        )\n\n        XCTAssertEqual(\n            result,\n            [\n                .init(text: \"Madam\", startUTF16Offset: 0, endUTF16Offset: 5),\n                .init(text: \" Speaker,\", startUTF16Offset: 5, endUTF16Offset: 14),\n                .init(text: \" Madam\", startUTF16Offset: 14, endUTF16Offset: 20),\n                .init(text: \" Vice\", startUTF16Offset: 20, endUTF16Offset: 25),\n                .init(text: \" President,\", startUTF16Offset: 25, endUTF16Offset: 36),\n                .init(text: \" our\", startUTF16Offset: 36, endUTF16Offset: 40),\n                .init(text: \" First\", startUTF16Offset: 40, endUTF16Offset: 46),\n            ]\n        )\n    }\n\n    func test_split_text_with_regex_separator() async throws {\n        let splitter = Splitter(\n            chunkSize: 1,\n            chunkOverlap: 1\n        )\n\n        let result = splitter.split(\n            text: \"Madam Speaker, Madam Vice President, our First\",\n            separator: \"\\\\s\\\\w\\\\w\\\\w\\\\w\\\\s\" // split at \" Vice \"\n        )\n\n        XCTAssertEqual(\n            result,\n            [\n                .init(text: \"Madam Speaker, Madam\", startUTF16Offset: 0, endUTF16Offset: 20),\n                .init(text: \" Vice President, our First\", startUTF16Offset: 20, endUTF16Offset: 46),\n            ]\n        )\n    }\n\n    func test_merge_splits() async throws {\n        let splitter = Splitter(\n            chunkSize: 15,\n            chunkOverlap: 5\n        )\n\n        let result = splitter.mergeSplits(\n            [\n                .init(text: \"Madam\", startUTF16Offset: 0, endUTF16Offset: 5),\n                .init(text: \" Speaker,\", startUTF16Offset: 5, endUTF16Offset: 14),\n                .init(text: \" Madam\", startUTF16Offset: 14, endUTF16Offset: 20),\n                .init(text: \" Vice\", startUTF16Offset: 20, endUTF16Offset: 25),\n                .init(text: \" President,\", startUTF16Offset: 25, endUTF16Offset: 36),\n                .init(text: \" our\", startUTF16Offset: 36, endUTF16Offset: 40),\n                .init(text: \" First\", startUTF16Offset: 40, endUTF16Offset: 46),\n            ]\n        )\n\n        XCTAssertEqual(\n            result,\n            [\n                .init(text: \"Madam Speaker,\", startUTF16Offset: 0, endUTF16Offset: 14),\n                .init(text: \" Madam Vice\", startUTF16Offset: 14, endUTF16Offset: 25),\n                .init(text: \" President, our\", startUTF16Offset: 25, endUTF16Offset: 40),\n                .init(text: \" our First\", startUTF16Offset: 36, endUTF16Offset: 46),\n            ]\n        )\n        XCTAssertTrue(result.allSatisfy { $0.text.count <= 15 })\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/VectorStoreTests/EmbeddingDataForTests.swift",
    "content": "struct EmbeddingData {\n    var text: String\n    var embedding: [Float]\n\n    static let data: [EmbeddingData] = [\n        .init(\n            text: \"SwiftSoup is a pure Swift library, cross-platform (macOS, iOS, tvOS, watchOS and Linux!), for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jQuery-like methods. SwiftSoup implements the WHATWG HTML5 specification, and parses HTML to the same DOM as modern browsers do. Scrape and parse HTML from a URL, file, or string Find and extract data, using DOM traversal or CSS selectors Manipulate the HTML elements, attributes, and text Clean user-submitted content against a safe white-list, to prevent XSS attacks Output tidy HTML SwiftSoup is designed to deal with all varieties of HTML found in the wild; from pristine and validating, to invalid tag-soup; SwiftSoup will create a sensible parse tree. Swift Swift 5 >=2.0.0 Swift 4.2 1.7.4 Installation Cocoapods SwiftSoup is available through CocoaPods. To install it, simply add the following line to your Podfile: pod 'SwiftSoup' Carthage SwiftSoup is also\",\n            embedding: [\n                -0.0016676204,\n                0.014146253,\n                0.016656071,\n                -0.004912266,\n                0.008911870000000001,\n                0.01801164,\n                0.004157307,\n                -0.014522054,\n                0.015139443,\n                -0.034144275,\n                0.005130365,\n                -0.009656764,\n                -0.031996835,\n                -0.0024108354,\n                -0.017689526,\n                0.016172897,\n                0.006361787,\n                -0.023474189,\n                -0.008415275,\n                -0.013797293,\n                -0.022561528,\n                0.018145857,\n                0.0043116543,\n                0.011005623,\n                -0.011656566,\n                0.0048350925,\n                -0.007630118,\n                -0.029661497,\n                -0.005640382,\n                -0.019689329,\n                0.018884039,\n                -0.037231218,\n                -0.017488204,\n                -0.009603077999999999,\n                0.0041237534,\n                0.0043854723,\n                -0.011623012,\n                -0.024708966,\n                -0.0012993681,\n                -0.014616004,\n                0.015676303,\n                0.013649657,\n                -0.015085757,\n                0.0011064342,\n                -0.028560935,\n                0.00854949,\n                -0.0115559045,\n                -0.011757227,\n                0.0073549775,\n                0.007985787499999999,\n                0.017031873,\n                0.0007797048,\n                0.005821572,\n                -0.02501766,\n                0.00030387097,\n                -0.0061940183,\n                0.0101869125,\n                0.013247012,\n                0.029232008,\n                0.008697127000000001,\n                0.018226385,\n                0.029580968,\n                -0.037284903,\n                -0.019904071,\n                0.000532246,\n                -0.011220367,\n                -0.016508434,\n                0.02033356,\n                -0.014750219,\n                -0.017555311,\n                0.04004973,\n                0.02601085,\n                0.004093555,\n                0.0036003152,\n                0.024494221,\n                -0.009388333,\n                -0.03843915,\n                0.0011978681,\n                0.01943432,\n                -0.0018639097,\n                0.0055665635,\n                -0.027191943,\n                0.0009848019000000001,\n                0.030788902,\n                0.0142402025,\n                0.013025558,\n                0.007636829,\n                0.051055353,\n                -0.02134017,\n                -0.006066514,\n                0.023259444,\n                0.014374417,\n                0.009589655000000001,\n                0.010683508,\n                -0.014495211,\n                0.03462745,\n                0.0036741332,\n                0.024547908,\n                -0.026561132,\n                -0.008797788000000001,\n                -0.0031607612,\n                0.027420107,\n                -0.029285695,\n                -0.0101869125,\n                -0.04708259,\n                -0.018642452,\n                0.021434123,\n                -0.012247111,\n                0.0051806956,\n                0.022561528,\n                -0.005486035,\n                0.015582352,\n                0.004563307,\n                -0.037123844,\n                0.019622222,\n                -0.0030466786,\n                0.024521066,\n                -0.026507447,\n                -0.026145065,\n                0.004895489,\n                0.01719293,\n                0.027299315,\n                0.05626289,\n                -0.018910881,\n                0.036586985,\n                -0.0004072584,\n                -0.011569326,\n                -0.0036372242,\n                -0.013723475,\n                -0.028775677,\n                0.03618434,\n                0.030735215,\n                0.013354384,\n                0.025849793,\n                -0.0077710436,\n                0.01700503,\n                -0.033795316,\n                -0.012851078,\n                -0.037929136,\n                -0.016427906,\n                0.012018946,\n                0.024105,\n                -0.000481496,\n                0.013072533,\n                0.013099376,\n                -0.017260037,\n                0.016615806,\n                0.003989538,\n                0.014736798,\n                0.012106186,\n                0.023272866,\n                -0.01484417,\n                -0.002578604,\n                -0.009468862,\n                0.0030517117,\n                0.020534882,\n                0.04568676,\n                0.010361391,\n                -0.0030466786,\n                0.00019062712,\n                -0.008992399,\n                0.007623407,\n                0.0015384385,\n                -0.02465528,\n                -0.03167472,\n                0.024427114,\n                0.02681614,\n                -0.018790089,\n                -0.016535278,\n                0.0065295557,\n                -0.019286683,\n                -0.00019754758,\n                -0.014441525,\n                -0.013669789,\n                0.009166878999999999,\n                -0.0011534095,\n                0.015340765,\n                0.013730186,\n                -0.0037647283,\n                -0.009884927999999999,\n                -0.03564748,\n                -0.014790484,\n                0.014334153,\n                0.029929927,\n                -0.0039996044,\n                -0.0069053574,\n                0.0020551658,\n                0.0016365831,\n                -0.018588766,\n                -0.011529061,\n                0.019769857,\n                0.010408367,\n                -0.006747655,\n                -0.0024863314,\n                -0.630488,\n                0.005553142,\n                -0.012260533,\n                -0.030896274,\n                0.039808143,\n                0.010005722,\n                0.011844466,\n                0.009616499000000001,\n                0.008348168,\n                0.022991015,\n                -0.008328035500000001,\n                0.021850187,\n                0.021554915,\n                -0.013260433,\n                0.01071035,\n                -0.013723475,\n                -0.004073423,\n                -0.030278886,\n                -0.018132435,\n                0.016803708,\n                -0.0275409,\n                0.018467972,\n                -0.038627055,\n                0.002659133,\n                0.0059893406,\n                -0.016776865,\n                0.016481591,\n                -0.026749033,\n                -0.0036909103,\n                -0.008797788000000001,\n                -0.022816535,\n                0.021192536,\n                0.02124622,\n                -0.00026150938,\n                0.048988443,\n                -0.0041707284,\n                -0.02941991,\n                0.006704035,\n                0.029983612,\n                0.048907917,\n                -0.026064537,\n                0.0043351417,\n                0.007026151,\n                -0.012159871,\n                -0.026842983,\n                -0.0015434715,\n                0.0275409,\n                0.016495014,\n                -0.0063181673,\n                0.0007289547400000001,\n                0.015354186,\n                -0.011032466,\n                -0.004039869,\n                0.013824136,\n                0.014696533,\n                0.009455441,\n                0.040532906,\n                -0.023608403,\n                0.00097305817,\n                0.01675002,\n                -0.018467972,\n                0.017931113,\n                -0.019488005,\n                -0.0071737873,\n                0.006704035,\n                0.0050498364,\n                -0.010045987,\n                0.008106581,\n                -0.008059606,\n                -0.012609491,\n                0.016441327,\n                0.006821473,\n                0.0196088,\n                -0.017568732,\n                0.001145021,\n                0.020118816,\n                0.032614224,\n                -0.00016273558,\n                -0.0035432738,\n                0.010817722,\n                -0.00418415,\n                0.007918680000000001,\n                4.275479e-05,\n                -0.020991214,\n                0.05658501,\n                0.003248001,\n                -0.029580968,\n                0.017421097,\n                -0.008871606000000001,\n                -0.02519214,\n                0.027943546,\n                0.038385466,\n                0.0118981525,\n                -0.023219181,\n                -0.012233689,\n                0.00809987,\n                -0.011092863,\n                0.019004833,\n                0.004687456,\n                -0.04294877,\n                -0.011435111,\n                -0.0048216707,\n                0.027675116,\n                0.0040834886,\n                0.0424656,\n                0.021286486,\n                -0.008871606000000001,\n                0.0032429679,\n                0.024521066,\n                -0.018561922,\n                0.0021793146,\n                -0.0009948680999999999,\n                -0.011817623,\n                0.0066201505,\n                -0.0011022399,\n                -0.014857591,\n                0.0030450008,\n                -0.023608403,\n                0.016803708,\n                -0.016615806,\n                0.016897658,\n                -0.015676303,\n                0.0024360006,\n                0.028104603,\n                -0.0050162827,\n                0.0010762359,\n                0.024521066,\n                -0.027943546,\n                -0.024802916,\n                -0.028158288,\n                0.023997627,\n                0.020266453,\n                -0.006073225,\n                -0.02025303,\n                0.011374714,\n                0.026749033,\n                0.014468368,\n                -0.006009473,\n                0.0023420502,\n                -0.0076972255,\n                0.0028151579,\n                0.0070865476,\n                -0.0011592814,\n                -0.0034761664,\n                0.0042512575,\n                -0.008173688,\n                -0.03221158,\n                -0.0010930127,\n                0.0023034634,\n                0.0018890749,\n                -0.0119451275,\n                0.0052343816,\n                -0.010998912,\n                0.010180201,\n                -0.02195756,\n                -0.009737292,\n                -0.0047377865,\n                -0.032587383,\n                -0.0033218192,\n                0.00029233686,\n                0.0012188392,\n                0.025755843,\n                0.013273855,\n                -0.00034518397,\n                -0.007046283,\n                -0.006324878,\n                -0.0060631586,\n                0.0016818807,\n                -0.0023621826,\n                -0.040291317,\n                0.009676895,\n                0.0019075295,\n                -0.007958945,\n                0.012804103,\n                -0.0055095223,\n                0.022078354,\n                -0.035271678,\n                0.0061134896,\n                0.00010338743,\n                -0.0040901997,\n                0.0075160353,\n                0.00391572,\n                -0.01430731,\n                -0.017219774,\n                0.010482185,\n                0.015676303,\n                0.020145658,\n                0.005660514,\n                -0.015045492,\n                -0.0049894396,\n                0.020803312,\n                0.0050901007,\n                -0.0055564977,\n                0.008650151,\n                -0.0153005,\n                0.01853508,\n                -0.026896669,\n                0.013153061,\n                0.005173985,\n                -0.0017095625,\n                0.009750714000000001,\n                0.03545958,\n                0.00075412006,\n                -0.004714299,\n                0.027138256,\n                -0.01287121,\n                0.023259444,\n                -0.0031926373,\n                -0.010945226,\n                0.030037299,\n                0.021541495,\n                -0.019192733,\n                -0.023272866,\n                -0.009448730000000001,\n                0.0076166964,\n                0.028587777,\n                0.028131446,\n                -0.007864994,\n                -0.0045935055,\n                0.01889746,\n                0.02644034,\n                -0.010945226,\n                0.011737094,\n                -0.011072731,\n                -0.03266791,\n                0.016951343,\n                0.0041069766,\n                0.025621627,\n                -0.02807776,\n                -0.04498884,\n                -0.019675907,\n                -0.008348168,\n                0.016213162,\n                -0.0025098189,\n                0.0012758805,\n                0.0028285794,\n                0.015112599,\n                -0.015891045,\n                0.018306915,\n                -0.012696731,\n                -0.0040700673,\n                0.011918285,\n                0.01403888,\n                -0.009965457,\n                0.016333954,\n                -0.0016072236,\n                0.042868245,\n                -0.013159772,\n                0.008502515,\n                -0.0149246985,\n                -0.0010376491,\n                -0.006170531,\n                -0.005341754,\n                0.007703936,\n                -0.010589557,\n                0.0007771882,\n                -0.01484417,\n                0.017662684,\n                0.011683408,\n                0.022091774,\n                0.012341062,\n                -0.026064537,\n                -0.0039660507,\n                0.009327937,\n                0.01547498,\n                0.003617092,\n                -0.024319742,\n                -0.008166977000000001,\n                -0.018682716,\n                -0.02213204,\n                -0.012086053,\n                -0.018964568,\n                0.020132238,\n                -0.009388333,\n                0.024708966,\n                0.009200432,\n                -0.01791769,\n                0.013441624,\n                0.0031389513,\n                0.013173194,\n                -0.032963183,\n                -0.027782487,\n                0.009690317,\n                0.027460372,\n                -0.00962992,\n                -0.00783144,\n                -0.013743607,\n                -0.0038788111,\n                0.023903677,\n                0.023219181,\n                -0.00041292058,\n                0.00046849393,\n                0.009703738999999999,\n                0.004717654,\n                -0.008448829,\n                0.012790682,\n                0.026494024,\n                -0.0063919853,\n                -0.035781696,\n                0.0028319347,\n                0.0048350925,\n                -0.0029091083,\n                -0.013005425,\n                0.002771538,\n                0.0520217,\n                0.01313964,\n                -0.010925094,\n                -0.022601793,\n                -0.0070328615,\n                -0.019300105,\n                0.0003376344,\n                -0.011106284,\n                -0.004120398,\n                -0.000107162225,\n                -0.017877426,\n                0.010509028,\n                0.009509126999999999,\n                0.0042814557,\n                0.020910684,\n                0.009938614,\n                -0.022615213,\n                -0.032587383,\n                0.003546629,\n                0.015340765,\n                0.042787716,\n                0.018414287,\n                0.012394748,\n                0.0017095625,\n                0.0018051906,\n                -0.017608996,\n                -0.02303128,\n                -0.009576233999999999,\n                0.0033201415,\n                -0.020078551,\n                -0.00013400521,\n                -0.013293987,\n                -0.0015761864,\n                0.010670085,\n                0.0112136565,\n                0.017850583,\n                0.013864401,\n                -0.015152864,\n                -0.0050364146,\n                -0.011495507,\n                0.016951343,\n                -0.0106164,\n                0.003989538,\n                0.010059408,\n                0.03245317,\n                0.009656764,\n                -0.004533109,\n                0.018253228,\n                0.017810319,\n                -0.013468467,\n                -0.024037892,\n                0.009079639,\n                0.007898548,\n                -0.00013044012,\n                -0.01889746,\n                0.00962992,\n                0.037714392,\n                0.018387444,\n                -0.005227671,\n                0.0015619261,\n                0.013119508,\n                0.00040893606,\n                -0.001588769,\n                0.0030248687,\n                0.015488401,\n                0.005184051,\n                -0.024427114,\n                0.039083384,\n                -0.016696336,\n                -0.014803905,\n                0.0061336216,\n                0.021474386,\n                -0.011824334,\n                0.0044693565,\n                -0.00051463034,\n                -0.000102234015,\n                0.010327837,\n                -0.0038922327,\n                -0.023299709,\n                -0.0455257,\n                0.0029997034,\n                -0.007623407,\n                -0.011502218,\n                -0.0008975622499999999,\n                0.0060967123,\n                -0.011368004,\n                0.005200828,\n                0.004767985,\n                -0.0055464315,\n                0.013609393,\n                0.01619974,\n                -0.033795316,\n                0.0037513068,\n                0.04031816,\n                0.021487808,\n                -0.019447742,\n                0.00508339,\n                0.0032865878,\n                -0.0062477044,\n                0.015716566,\n                0.005130365,\n                -0.02241389,\n                0.008153555999999999,\n                -0.032963183,\n                0.019689329,\n                -0.014454947,\n                -0.02006513,\n                -0.0019276617,\n                0.023165494,\n                0.042036112,\n                0.018951146,\n                0.03401006,\n                -0.0055195885,\n                0.0054759686,\n                0.008770945,\n                0.015260236,\n                0.03607697,\n                0.007079837,\n                0.0025534388,\n                -0.006593308,\n                -0.007945522999999999,\n                0.0037378855,\n                -0.033365827,\n                -0.015568931,\n                0.011468665,\n                0.0006970787,\n                -0.0021541493,\n                -0.006053093,\n                -0.024011048,\n                0.0065463325,\n                0.025245825,\n                0.0074153743,\n                0.015501822,\n                -0.0016927856,\n                0.0062409937,\n                0.021031477,\n                -0.023232602,\n                0.035164308,\n                -0.009824532,\n                -0.007918680000000001,\n                -0.01089154,\n                -0.026789296,\n                -0.0015602484,\n                -0.0009009176,\n                -0.0146294255,\n                0.0041807946,\n                -0.0023034634,\n                -0.02744695,\n                0.003815059,\n                0.0012658144,\n                0.0029309182,\n                0.011482086,\n                -0.017635839,\n                0.018682716,\n                0.019863807,\n                -0.016213162,\n                0.0023454058,\n                0.009529259,\n                -0.04335142,\n                -0.005398795,\n                0.0034392572,\n                -0.00548939,\n                -0.009972168,\n                -0.0089185815,\n                -0.0035768275,\n                -0.0365333,\n                -0.0045096213,\n                -0.0024058023,\n                -0.0070328615,\n                0.03103049,\n                -0.0024913643,\n                0.013944929,\n                0.029205166,\n                0.024990818,\n                0.008307903,\n                0.0072677378,\n                -0.032963183,\n                -0.005153853,\n                0.039002854,\n                0.03033257,\n                0.02134017,\n                -0.0059591425,\n                -0.0010720417,\n                0.0029762157,\n                -0.002585315,\n                -0.014508632,\n                -0.02419895,\n                0.0052478034,\n                0.014709955,\n                0.012468565,\n                0.02132675,\n                0.032614224,\n                -0.012992004,\n                -0.020360403,\n                -0.013877822,\n                0.015542087,\n                -0.00026738129,\n                -0.0046773897,\n                -0.01205921,\n                -0.019783279,\n                0.016696336,\n                -0.004006315,\n                0.008052894999999999,\n                0.037284903,\n                -0.009603077999999999,\n                0.00097893,\n                -0.012797392,\n                0.010421788,\n                0.019152468,\n                0.00746906,\n                0.038895484,\n                0.021568337,\n                -0.0046773897,\n                -0.0056068283,\n                0.00567058,\n                -0.0071939193,\n                0.00013106926,\n                -0.021138849,\n                -0.016669493,\n                0.009314515000000001,\n                -0.01349531,\n                0.0003063875,\n                0.021850187,\n                0.008435408,\n                -0.012435012,\n                0.024883445,\n                0.010045987,\n                -0.021635445,\n                0.022346783,\n                -0.00620744,\n                0.003050034,\n                -0.013193326,\n                -0.053444378,\n                -0.012622912,\n                -0.01799822,\n                -0.00069246505,\n                0.004516332,\n                0.006083291,\n                -0.027701959,\n                -0.017582154,\n                -0.009173590000000001,\n                -0.012240401,\n                0.025943743,\n                0.015260236,\n                0.037365433,\n                0.035942756,\n                -0.030788902,\n                0.00041627596,\n                0.0058786133,\n                0.0066369274,\n                -0.0070597045,\n                0.010817722,\n                0.045659915,\n                0.008958845,\n                -0.010488896,\n                -0.0363454,\n                0.0004441675,\n                -0.0128242355,\n                -0.018682716,\n                0.0197967,\n                0.005657159,\n                0.010059408,\n                -0.011683408,\n                -0.018293492,\n                -0.04418355,\n                0.06759063,\n                -0.023138652,\n                -0.0043787616,\n                0.0019360501,\n                -0.0034174472,\n                -0.017125823,\n                0.046438362,\n                0.015327344,\n                0.01782374,\n                -0.0026071246,\n                0.010636532,\n                0.0060497373,\n                -0.039915517,\n                0.002793348,\n                0.00675101,\n                0.015864203,\n                0.03143313,\n                -0.004331786,\n                0.009374911999999999,\n                0.007294581,\n                0.00863673,\n                0.004757919,\n                -0.028936736,\n                -0.0023118518,\n                0.030252041,\n                0.011978681,\n                -0.00809987,\n                0.009958747,\n                0.0013278888,\n                -0.001759893,\n                -0.03591591,\n                -0.018776666,\n                -0.011032466,\n                -0.012616202,\n                -0.037848607,\n                0.0197967,\n                0.014777062,\n                -0.0010200334,\n                0.015891045,\n                -0.00059599814,\n                -0.011730384,\n                -0.01943432,\n                -0.034332175,\n                0.009851375000000001,\n                -0.005455836,\n                -0.0367212,\n                -0.0097440025,\n                -0.017649261,\n                0.022185726,\n                0.016172897,\n                -0.016562121,\n                0.015850782,\n                0.05427651,\n                -0.04786104,\n                0.0048988443,\n                0.007985787499999999,\n                0.025151875,\n                -0.029473595,\n                0.0039996044,\n                -0.03210421,\n                -0.029849397,\n                0.011817623,\n                0.0017028517,\n                -0.031808935,\n                -0.025312932,\n                -0.004113687,\n                0.014763641,\n                0.007818019000000001,\n                -0.013864401,\n                -0.00142855,\n                0.0022665544,\n                0.010388235,\n                -0.021434123,\n                -0.015676303,\n                0.0012632979,\n                -0.027285893,\n                -0.0052243154,\n                0.011200234,\n                -0.023152074,\n                0.009267539999999999,\n                0.01943432,\n                -0.00679463,\n                -0.0071737873,\n                -0.012891343,\n                -0.034063745,\n                -0.0067610764,\n                -0.0006777853,\n                -0.023621826,\n                0.0003651065,\n                -0.017528469,\n                0.0020350337,\n                -0.00069749815,\n                0.01025402,\n                -0.008113291999999999,\n                -0.015515245,\n                -0.01350202,\n                0.01520655,\n                0.0010359713,\n                -0.013186616,\n                -0.016333954,\n                0.010361391,\n                -0.05867876,\n                -0.030708373,\n                0.006126911,\n                -0.018669294,\n                -0.009079639,\n                0.005543076,\n                0.021299908,\n                -0.022897065,\n                -0.023863412,\n                0.008260928000000001,\n                -0.038546525,\n                -0.015568931,\n                0.008301193,\n                0.017112402,\n                0.0004099846,\n                0.009650052500000001,\n                0.015193128,\n                0.030117827,\n                -0.027339578,\n                0.018253228,\n                -0.03229211,\n                0.0030902985,\n                -0.0056739356,\n                -0.0042244145,\n                0.007952234000000001,\n                -0.017796898,\n                -0.020091973,\n                -0.018548502,\n                0.0043150093,\n                0.008328035500000001,\n                -0.0044492246,\n                0.009240697000000001,\n                0.0035365631,\n                0.008609887,\n                -0.019823544,\n                0.013461756,\n                0.020387245,\n                -0.0074556386,\n                0.015488401,\n                -0.017501624,\n                -0.015636038,\n                0.024185527,\n                -0.013797293,\n                -0.007683804,\n                -0.0010410044,\n                0.015958153,\n                0.005730977,\n                0.0021575047,\n                -0.021809924,\n                -0.037714392,\n                -0.009327937,\n                -0.0025114967,\n                0.021796502,\n                -0.014562318,\n                -0.009663474,\n                0.00746906,\n                0.0039526294,\n                0.0012918186,\n                -0.012810813,\n                -0.0097440025,\n                -0.021487808,\n                -0.0037714392,\n                0.0014142897,\n                -0.014320731,\n                -0.0045129764,\n                -0.027393265,\n                0.02583637,\n                -0.013797293,\n                0.0067879194,\n                0.012159871,\n                -0.033446357,\n                -0.02068252,\n                -0.0061235554,\n                0.0023235958,\n                -0.02249442,\n                -0.011475375,\n                0.02826566,\n                0.004264679,\n                -0.0009621531999999999,\n                0.005274646,\n                0.010045987,\n                -0.0101869125,\n                0.0119451275,\n                -0.0065295557,\n                0.009448730000000001,\n                -0.046304148,\n                0.00037580176,\n                0.01889746,\n                -0.0069254898,\n                0.0040834886,\n                0.21495861,\n                -0.015273658,\n                0.027057728,\n                0.04399565,\n                0.009683606000000001,\n                0.002199447,\n                0.008187109999999999,\n                0.036560144,\n                -0.028587777,\n                0.021071741,\n                0.023098387,\n                0.0059524314,\n                -0.023259444,\n                -0.00035566953,\n                -0.022561528,\n                -0.014052302,\n                -0.013649657,\n                -0.02626586,\n                -0.003851968,\n                -0.02717852,\n                0.012528962,\n                -0.007576432,\n                -0.0137033425,\n                -0.01799822,\n                -0.008455539999999999,\n                -0.009784266999999999,\n                -0.0031859265,\n                -0.011502218,\n                0.025487412,\n                0.010857986,\n                -0.009415177,\n                0.012005524,\n                -0.014481789,\n                -0.0073482664,\n                0.012092764,\n                -0.0049793734,\n                0.029070951,\n                -0.0052075386,\n                0.0008765912,\n                0.007052994,\n                -0.0097440025,\n                -0.008428697000000001,\n                -0.0067543657,\n                -0.005828283,\n                0.00045675013,\n                -0.0394055,\n                0.0027916702,\n                0.009871507,\n                -0.0068718037,\n                0.027675116,\n                -0.012408169,\n                0.006157109,\n                0.014656269,\n                0.0018773312,\n                -0.015622616,\n                0.0022766206,\n                0.0058484147,\n                0.023017857,\n                0.03178209,\n                0.019394055,\n                -0.018400865,\n                0.035379052,\n                -0.017058715,\n                0.038653895,\n                -0.017286882,\n                0.012730285,\n                -0.00092524407,\n                -1.6147733e-05,\n                0.014522054,\n                -0.0021927361,\n                -0.023205759,\n                -0.01196526,\n                -0.011784069,\n                0.0057276217,\n                -0.012844368,\n                -0.020763047,\n                -0.004976018,\n                0.0042512575,\n                0.01701845,\n                0.046921536,\n                -0.039432343,\n                0.0010066119,\n                -0.017716369,\n                0.016535278,\n                0.010811011,\n                -0.040452376,\n                0.0334732,\n                7.9952246e-05,\n                -0.022736007,\n                -0.0113076065,\n                0.007281159,\n                -0.010898251,\n                0.0034174472,\n                -0.010019143,\n                -0.0015912856,\n                -0.0073549775,\n                -0.0009277606,\n                0.039888673,\n                0.005130365,\n                0.0066906135,\n                -0.009207142999999999,\n                0.034224804,\n                0.0072476054,\n                0.036748044,\n                0.0014377773,\n                -0.011723673,\n                0.011166681,\n                -0.013065822,\n                -0.002028323,\n                0.0034795217,\n                -0.0016516823,\n                -0.030305728,\n                0.011643144,\n                -0.010106383,\n                0.011569326,\n                0.036506455,\n                -0.010193623,\n                -0.033070557,\n                0.011864599,\n                0.023380239,\n                -0.0013438269,\n                0.0022111908,\n                -0.007368399,\n                0.018588766,\n                0.006408762,\n                -0.022615213,\n                -0.01952827,\n                0.004986084,\n                -0.029312538,\n                -0.0367212,\n                -0.004616993,\n                -0.0019595379,\n                0.015367608,\n                0.022736007,\n                -0.0019628932,\n                -0.02383657,\n                -0.0050431252,\n                -0.01727346,\n                0.0008598143,\n                -0.011696829,\n                -0.00350972,\n                -0.021729395,\n                0.016817128,\n                0.013273855,\n                -0.005828283,\n                -0.005371952,\n                0.010462053,\n                0.009495705,\n                -0.023165494,\n                -0.0044492246,\n                0.00238567,\n                -0.0030802323,\n                0.017515047,\n                -0.02087042,\n                -0.001086302,\n                -0.033043712,\n                -0.018400865,\n                -0.0051907618,\n                0.017528469,\n                -0.009301093,\n                -0.04614309,\n                0.017635839,\n                0.0061671752,\n                0.024534486,\n                -0.02078989,\n                -0.030708373,\n                -0.170614,\n                0.01727346,\n                0.009099771,\n                -0.011931706,\n                0.012341062,\n                0.026762454,\n                0.029768867,\n                -0.0046673235,\n                0.010562714,\n                -0.022736007,\n                0.024440536,\n                -0.014253624,\n                -0.034305334,\n                -0.035862226,\n                -0.0009604755,\n                -0.0105761355,\n                -0.014616004,\n                0.0063852747,\n                0.014656269,\n                -0.002991315,\n                0.033231612,\n                -0.008824630999999999,\n                0.017058715,\n                0.00661344,\n                0.00648258,\n                0.022521263,\n                0.019944336,\n                0.011005623,\n                0.00029023975,\n                -0.0035835383,\n                -0.00070001464,\n                0.014978385,\n                0.010113094,\n                -0.015407872,\n                -0.019957758,\n                0.017984798,\n                0.002273265,\n                0.0013941574,\n                0.0022162239,\n                0.021917297,\n                0.028211975,\n                0.02087042,\n                0.02653429,\n                -0.0061034234,\n                -0.014656269,\n                0.018239807,\n                0.006992597,\n                -0.030762058,\n                0.02842672,\n                -0.0016508434,\n                0.029554125,\n                -0.0150723355,\n                -0.0024544552,\n                0.009173590000000001,\n                -0.006157109,\n                -0.012783971,\n                0.011294185,\n                0.017434517,\n                0.005056547,\n                0.010811011,\n                0.0030248687,\n                -0.04139188,\n                0.02194414,\n                -0.011381425,\n                -0.0197967,\n                -0.009529259,\n                -0.008455539999999999,\n                0.02762143,\n                -0.009777556,\n                0.003355373,\n                -0.022064932,\n                0.0361575,\n                0.00656982,\n                -0.0029627942,\n                -0.0014042235,\n                0.031889465,\n                -0.0010208722,\n                0.012025656,\n                0.0130188465,\n                -0.00014690241,\n                0.007026151,\n                -0.003888877,\n                -0.01566288,\n                0.0070127295,\n                0.01772979,\n                -0.007677093,\n                -0.00783144,\n                -0.007925391,\n                -0.0077307792,\n                -0.0075160353,\n                0.025487412,\n                -0.011072731,\n                -0.008059606,\n                -4.8233484e-05,\n                0.027514057,\n                -0.011824334,\n                0.031137861,\n                0.020091973,\n                0.0021407278,\n                -0.030439943,\n                0.029285695,\n                -0.026869826,\n                -0.019917494,\n                0.013797293,\n                0.038573366,\n                0.015891045,\n                -0.01250883,\n                0.015515245,\n                0.02861462,\n                -0.011576037,\n                -0.021299908,\n                0.0072677378,\n                0.034493234,\n                -0.0009906738999999999,\n                -0.02167571,\n                0.041955583,\n                0.004355274,\n                -0.009817820999999999,\n                -0.011857888,\n                -0.029070951,\n                0.03602328,\n                0.00032651972,\n                -0.009663474,\n                0.012300797,\n                -0.010898251,\n                -0.008388433000000001,\n                -0.07424769000000001,\n                -0.022011247,\n                0.008341457,\n                0.0051236544,\n                -0.035620637,\n                -0.010287574,\n                -0.019394055,\n                -0.011851177,\n                -0.0005880291,\n                0.02383657,\n                0.005798084,\n                -0.033687945,\n                -0.013455045,\n                -0.0156091945,\n                0.039512873,\n                0.022628635,\n                -0.008032762000000001,\n                -0.011918285,\n                -0.0022766206,\n                0.025728999,\n                -0.0131664835,\n                -0.0019326948,\n                -0.024856603,\n                0.0015845748,\n                -0.008254216999999999,\n                0.020642255,\n                -0.030252041,\n                0.004049935,\n                0.021997824,\n                0.019152468,\n                0.010327837,\n                -0.005398795,\n                0.018400865,\n                -0.02599743,\n                -0.0050095716,\n                0.0060195387,\n                -0.01852166,\n                -0.014817326,\n                0.019689329,\n                -0.024064735,\n                -0.014280467,\n                0.0019914138,\n                0.003489588,\n                -0.01853508,\n                -0.0212328,\n                -0.0064121177,\n                0.0014168062,\n                0.008408564,\n                0.02933938,\n                -0.02501766,\n                -0.017702946,\n                -0.008784366,\n                -0.013958352,\n                -0.024963975,\n                0.02241389,\n                0.0009764135,\n                0.009140036000000001,\n                -0.010072829,\n                -0.025715578,\n                -0.01575683,\n                -0.02492371,\n                -0.015448137,\n                -0.020091973,\n                -0.0050095716,\n                0.0027547611,\n                0.005771241,\n                -0.0067778532,\n                -2.4798303e-05,\n                0.023876833,\n                -0.014199938,\n                -0.014401261,\n                -0.008415275,\n                -0.035056937,\n                0.009690317,\n                0.0013228557,\n                -0.013173194,\n                -0.012173293,\n                0.005113588,\n                0.0048820674,\n                -0.007623407,\n                0.007234184,\n                -0.02709799,\n                -0.020320138,\n                -0.00070714485,\n                0.0039928937,\n                0.002466199,\n                0.009495705,\n                -0.0008489093,\n                0.022803115,\n                -0.05229013,\n                0.022172304,\n                -0.00064003735,\n                0.030252041,\n                -0.009314515000000001,\n                -0.013985194,\n                -0.012045789,\n                0.012710152,\n                -0.019944336,\n                -0.011045887,\n                0.03140629,\n                -0.013931508,\n                -0.0027967033,\n                -0.06780537,\n                -0.006311456,\n                -0.003221158,\n                -0.0074824817,\n                7.329393e-05,\n                -0.025353197,\n                -0.009723871,\n                -0.020279873,\n                0.016213162,\n                0.008247506999999999,\n                -0.053041734,\n                -0.02303128,\n                -0.01735399,\n                0.02482976,\n                -0.009811111000000001,\n                -0.01277726,\n                0.027567744,\n                -0.006828184,\n                0.0036439348,\n                0.02599743,\n                -0.024427114,\n                -0.0056068283,\n                -0.004596861,\n                -0.0021625378,\n                -0.0075361677,\n                0.012743706,\n                -0.021460965,\n                0.013434913,\n                0.005210894,\n                -0.024158685,\n                0.019031676,\n                -0.018884039,\n                -0.018226385,\n                -0.00017143859,\n                0.0064993575,\n                -0.015340765,\n                0.006693969,\n                0.0078045973,\n                0.019300105,\n                0.020494618,\n                -0.013877822,\n                -0.013119508,\n                -0.0013899632,\n                -0.0100392755,\n                -0.0052880677,\n                0.00065136177,\n                -0.0026322901,\n                0.016615806,\n                0.0197967,\n                0.0031204969,\n                0.05186064,\n                0.030090984,\n                0.0027950257,\n                -0.027245628,\n                -0.0010686863,\n                -0.029634653,\n                0.0390297,\n                0.010059408,\n                0.006009473,\n                -0.013757029,\n                0.002852067,\n                0.024158685,\n                0.010180201,\n                -0.001947794,\n                0.0028453562,\n                0.005254514,\n                -0.026869826,\n                -0.031191546,\n                0.018763246,\n                -0.012891343,\n                -0.025353197,\n                -0.018977989,\n                0.007636829,\n                0.009958747,\n                0.008858184,\n                -0.0023386949,\n                -0.040022887,\n                -0.0021692486,\n                -0.0153139215,\n                0.01520655,\n                -0.0006798824,\n                0.00041187202,\n                -0.017622419,\n                0.037553333,\n                0.045659915,\n                0.017058715,\n                -0.020843577,\n                -0.0038385466,\n                -0.016535278,\n                0.014964963,\n                -0.010059408,\n                0.006737589,\n                0.0017733146,\n                -0.006244349,\n                0.00854278,\n                -0.019461162,\n                -0.0037714392,\n                0.013206747,\n                -0.007952234000000001,\n                0.016132632,\n                -0.0010208722,\n                -0.0039928937,\n                -0.009858086,\n                -0.050679553,\n                -0.03094996,\n                -0.03143313,\n                -0.01818612,\n                0.005543076,\n                -0.0036238027,\n                0.0049894396,\n                0.017743211,\n                -0.015085757,\n                0.0027597942,\n                0.013864401,\n                -0.012086053,\n                -0.010294284,\n                0.013206747,\n                -0.009126614,\n                -0.02151465,\n                0.0181727,\n                0.017582154,\n                0.01744794,\n                0.04249244,\n                -0.020910684,\n                -0.015797095,\n                -0.0009722193,\n                0.004247902,\n                -0.020132238,\n                0.018964568,\n                0.0116028795,\n                -0.013918087,\n                -0.04093555,\n                -0.019246418,\n                -0.019810122,\n                0.003311753,\n                -0.02653429,\n                0.014548897,\n                0.013461756,\n                0.007703936,\n                0.07451612000000001,\n                0.0145354755,\n                0.013743607,\n                -0.022064932,\n                -0.018414287,\n                0.025702156,\n                0.022709163,\n                0.0050498364,\n                -0.013475178,\n                -0.022628635,\n                0.02627928,\n                -0.010717061,\n                -0.008354878,\n                -0.026762454,\n                -0.003868745,\n                -0.0037143978,\n                -0.025071347,\n                0.01106602,\n                -0.025205562,\n                0.0070865476,\n                0.014481789,\n                0.009824532,\n                -0.011616301,\n                0.0068181176,\n                -0.026749033,\n                0.010220466,\n                0.0118981525,\n                0.0011970293,\n                -0.0226689,\n                -0.042331383,\n                -0.004210993,\n                0.022118619,\n                -0.023326552,\n                -0.021219378,\n                0.0060765804,\n                0.03465429,\n                -0.013642946,\n                0.019380635,\n                0.023648668,\n                0.012669888,\n                -0.023246024,\n                0.029285695,\n                -0.013428202,\n                -0.013146351,\n                0.006532911,\n                -0.0138509795,\n                -0.003382216,\n                -0.013367806,\n                -0.00953597,\n            ]\n        ),\n        .init(\n            text: \"\\n} Description The parse(_ html: String, _ baseUri: String) method parses the input HTML into a new Document. The base URI argument is used to resolve relative URLs into absolute URLs, and should be set to the URL where the document was fetched from. If that's not applicable, or if you know the HTML has a base element, you can use the parse(_ html: String) method. As long as you pass in a non-null string, you're guaranteed to have a successful, sensible parse, with a Document containing (at least) a head and a body element. Once you have a Document, you can get at the data using the appropriate methods in Document and its supers Element and Node. Parsing a body fragment Problem You have a fragment of body HTML (e.g. div containing a couple of p tags; as opposed to a full HTML document) that you want to parse. Perhaps it was provided by a user submitting a comment, or editing the body of a page in a CMS. Solution Use the SwiftSoup.parseBodyFragment(_ html: String) method. do {\",\n            embedding: [\n                0.0069225957,\n                0.059692178,\n                0.007030381,\n                0.002374753,\n                0.020500062,\n                0.034519102,\n                -0.030569293,\n                -0.030458031,\n                0.004683444,\n                -0.028302325,\n                -0.017607246,\n                0.0027415706,\n                -0.01970732,\n                0.015896589,\n                -0.024060454,\n                -0.011564316,\n                -0.009450333999999999,\n                0.010284801,\n                -0.0033691588,\n                0.006727887,\n                0.008518513,\n                0.012878601,\n                -0.00050850306,\n                0.009874522,\n                -0.015618433,\n                0.0078231245,\n                0.011293115,\n                -0.027996354,\n                -0.008921838,\n                -0.029373225,\n                0.018719867,\n                -0.027704291,\n                -0.03565954,\n                -0.0140538085,\n                0.039331194,\n                0.0044678734,\n                -0.0035882064,\n                -0.0055770185,\n                0.0049059684,\n                -0.019456979,\n                0.022864385,\n                -0.018107925,\n                -0.005239755,\n                -0.011842472,\n                -0.025367785,\n                -0.015382001,\n                0.017482076,\n                -0.03685561,\n                -0.0041619022,\n                0.0034699903,\n                0.050874647,\n                0.017120473,\n                -0.0166337,\n                0.010305663,\n                -0.021668317,\n                -0.027412228,\n                0.0036855608,\n                0.007044289,\n                0.005730004,\n                -0.016731055,\n                0.0116408095,\n                0.015660157,\n                -0.04036037,\n                -0.008664544999999999,\n                -0.013935592,\n                -0.0024842767,\n                -0.0023156449,\n                0.014165071,\n                -0.024255162,\n                -0.019137101,\n                0.01082025,\n                0.021348437,\n                -0.0061159446,\n                0.012440506,\n                0.045645323,\n                -0.0010908912,\n                -0.014338918,\n                -0.045061197,\n                0.007051243,\n                0.015340278,\n                0.022600137,\n                -0.005118062,\n                -0.02483929,\n                0.038135123,\n                0.022655768,\n                -0.004606951,\n                0.030346768,\n                0.035631724,\n                0.0014099008,\n                -0.005730004,\n                0.019985475,\n                0.010966282,\n                0.0012282305,\n                0.02226635,\n                0.0016376408,\n                0.010715942,\n                -0.007983063,\n                0.03070837,\n                -0.023309434,\n                -0.049650762,\n                -0.006675733,\n                0.023156447,\n                -0.024352517,\n                -0.0029588796,\n                -0.03482507,\n                -0.02126499,\n                0.0080247875,\n                -0.03396279,\n                0.00016993565,\n                -0.01047951,\n                -0.007927432999999999,\n                0.01688404,\n                -0.008268173,\n                -0.015980035,\n                0.010556002,\n                -0.026243975,\n                0.033601187,\n                -0.023490235,\n                -0.023128632,\n                0.0017654184,\n                0.016438993,\n                0.027106257,\n                0.020221908,\n                -0.009505965999999999,\n                0.03552046,\n                -0.02839968,\n                -0.02151533,\n                -0.010973236,\n                -0.00747543,\n                -0.040026583,\n                0.045784403,\n                0.010430832,\n                -1.1130296e-05,\n                0.0056813266,\n                -0.0029380177,\n                0.018984115,\n                -0.04233527,\n                -0.0024355995,\n                -0.044894304,\n                -0.018302634,\n                0.021557054,\n                0.02577111,\n                -0.00229826,\n                0.005660465,\n                0.0054518483,\n                -0.01232229,\n                -0.012030227,\n                -0.016063482,\n                0.015062122,\n                -0.035158858,\n                0.015521078,\n                0.004669536,\n                0.012134535,\n                -0.0068565337,\n                -0.008782761,\n                0.024255162,\n                0.035381384,\n                0.012871647,\n                0.013567036,\n                -0.032377303,\n                0.016939672,\n                0.002117459,\n                0.0101665845,\n                -0.02627179,\n                -0.01257263,\n                0.030124243,\n                0.013845191,\n                -0.0077396776,\n                -0.014137255,\n                -0.029095069,\n                -0.0011734687,\n                0.0125448145,\n                -0.011348746,\n                -0.009554642,\n                -0.011619948,\n                0.002743309,\n                0.021334529,\n                -0.0011647763,\n                -0.0033152662,\n                -0.029734826,\n                -0.008379434999999999,\n                -0.01369916,\n                0.02251669,\n                0.020875573,\n                0.0072598592,\n                0.00329962,\n                -0.0062758843,\n                -0.014192886,\n                -0.0039011315,\n                0.0033708974,\n                0.0341575,\n                0.0025642463,\n                -0.0055735414,\n                -0.02258623,\n                -0.5758932,\n                0.0063697617,\n                -0.023935284,\n                -0.008831439,\n                0.005740435,\n                0.0015750558,\n                0.012927278,\n                -0.0030857879,\n                0.0074406606,\n                0.02970701,\n                -0.00455132,\n                0.028441403,\n                0.025131352,\n                0.0076214615,\n                0.0039532855,\n                0.010834158,\n                0.0071903206,\n                -0.008880114999999999,\n                -0.013991224,\n                0.031542838,\n                -0.04252998,\n                0.006707025,\n                -0.031793177,\n                -0.012064996,\n                -0.014839598,\n                -0.013831284,\n                -0.000920521,\n                0.0030006028,\n                -0.010208308,\n                0.01940135,\n                -0.024658488,\n                -0.009172179000000001,\n                0.014714427,\n                0.0040993174,\n                0.051959455,\n                -0.031626284,\n                -0.039331194,\n                -0.0016854487,\n                -0.0048259986,\n                0.028928176,\n                -0.016536346,\n                -0.0012099766,\n                0.013615713,\n                -0.031209052,\n                -0.008706268,\n                0.000291846,\n                0.023309434,\n                0.0026842009,\n                0.0056430805,\n                -0.01219712,\n                0.0071277358,\n                -0.01094542,\n                0.022002103,\n                0.033684634,\n                0.035603907,\n                -0.0015133399,\n                0.023017371,\n                -0.017231734,\n                -0.008497652,\n                0.0058412664,\n                -0.0067417948,\n                0.024213439,\n                -0.010611634,\n                -0.015173384,\n                0.033795897,\n                0.01013877,\n                -0.005504003,\n                0.025993634,\n                -0.0064358236,\n                -0.012078904,\n                0.0004294026,\n                0.005413602,\n                -0.0291507,\n                -0.011529547,\n                0.006905211,\n                0.009714581999999999,\n                0.050568677,\n                0.023017371,\n                0.007711862,\n                0.012391829,\n                -0.01060468,\n                -0.013149803,\n                -0.01876159,\n                -0.020333169,\n                0.029734826,\n                -0.019498702,\n                -0.04447707,\n                0.008108234000000001,\n                -0.012148443,\n                -0.024380332,\n                0.008539375,\n                0.02383793,\n                0.019443072,\n                -0.009658951000000001,\n                -0.031487208,\n                0.01391473,\n                0.006602717,\n                -0.0050763385,\n                0.008567191,\n                -0.011835518,\n                -0.0034195746,\n                -0.007732724,\n                0.0045095966,\n                0.010924558,\n                0.019053655,\n                -0.0030266799,\n                0.006533178,\n                -0.008136048999999999,\n                0.035576094,\n                -0.0024129993,\n                -0.008101280000000001,\n                -0.024004823,\n                0.008643682999999999,\n                0.017801953,\n                0.023671037,\n                -0.014394549,\n                0.014060762,\n                -0.031542838,\n                0.025701571,\n                0.018344358,\n                -0.00342479,\n                -0.017788047,\n                -0.012516999,\n                0.022447152,\n                -0.014811782,\n                -0.00045504505,\n                0.025632033,\n                -0.025632033,\n                0.0022600137,\n                -0.009457287999999999,\n                -0.0090609165,\n                0.030263321,\n                0.022168996,\n                -0.008706268,\n                0.018566882,\n                0.044699594,\n                0.021501422,\n                -0.019735135,\n                -0.0025972773,\n                -0.035381384,\n                -0.011675579,\n                -0.0064323465,\n                0.018177465,\n                0.016800594,\n                0.007141643,\n                -0.028413588,\n                -0.020319263,\n                0.0046486743,\n                0.025339969,\n                0.0341575,\n                -0.016689332,\n                -0.016383361,\n                -0.014992584,\n                -0.008483744,\n                -0.023434604,\n                -0.024741935,\n                0.011014959,\n                -0.043253187,\n                0.012725616,\n                0.0023434605,\n                0.0014942167,\n                0.04367042,\n                -0.007781401,\n                -0.00041918908,\n                -0.012558722,\n                -0.017495982,\n                -0.022920016,\n                0.01870596,\n                -0.009547689,\n                -0.033378664,\n                0.009088732,\n                0.04397639,\n                0.0010143984,\n                0.013052449,\n                0.0055144336,\n                0.009165225000000001,\n                -0.032516383,\n                0.005716096,\n                -0.009095686,\n                0.008129096000000001,\n                -0.023977008,\n                0.013733929,\n                0.028816912,\n                -0.020555694,\n                0.0024477686,\n                0.027509583,\n                0.008692360499999999,\n                0.028288418,\n                -0.008817530000000001,\n                -0.013010725,\n                0.0141511625,\n                0.020152368,\n                -0.0026685547,\n                0.0033430818,\n                -0.0078092166,\n                0.020847756,\n                -0.024922736,\n                0.018664237,\n                -0.00797611,\n                0.02965138,\n                0.009304303,\n                0.02995735,\n                0.0060255444,\n                -0.006112468,\n                0.015924403,\n                -0.008254265,\n                -0.009040055,\n                0.00076101616,\n                0.003622976,\n                0.0055526798,\n                0.0068321954,\n                -0.01457535,\n                -0.0164529,\n                0.006484501,\n                0.0025068768,\n                0.0034595595,\n                0.048065275,\n                -0.022141181,\n                0.00026881124,\n                0.015924403,\n                0.015187292,\n                -0.022461059,\n                0.012238843,\n                0.0006971273,\n                -0.0495395,\n                -0.012315337,\n                -0.02119545,\n                0.012663031,\n                -5.09318e-06,\n                -0.041890223,\n                0.00844202,\n                0.0005975998,\n                0.002202644,\n                -0.0070547196,\n                -0.0073224446,\n                0.008567191,\n                0.010861973,\n                0.00066453096,\n                0.013455774,\n                -0.018107925,\n                -0.0035882064,\n                0.02226635,\n                0.009533781,\n                -0.029512303,\n                0.04303066,\n                -0.017551614,\n                0.037690073,\n                -0.034574732,\n                -0.014630981,\n                0.0073154904,\n                0.00059021125,\n                0.022822661,\n                -0.0071764127,\n                0.027189704,\n                0.004227964,\n                -0.024547227,\n                -0.012955094,\n                0.042947214,\n                -0.0142554715,\n                0.014644889,\n                0.02571548,\n                -0.006560994,\n                0.008302943,\n                0.008831439,\n                0.019818582,\n                0.012767339,\n                -0.03234949,\n                -0.008372482000000001,\n                -0.026869824,\n                -0.024102177,\n                0.01838608,\n                -0.032683276,\n                -0.0007119043,\n                -0.027495675,\n                0.027036717,\n                0.022113364,\n                0.0028215402,\n                0.009186086,\n                0.014505811,\n                -0.0058030197,\n                -0.0532946,\n                -0.01675887,\n                -0.0011960688,\n                0.023810113,\n                0.012092812,\n                -0.031181235,\n                -0.0063697617,\n                -0.024477687,\n                0.008921838,\n                0.02577111,\n                -0.015604526,\n                -0.009248671,\n                0.015312462,\n                -0.014185932,\n                -0.022725306,\n                0.01369916,\n                0.025173075,\n                0.009916245000000001,\n                -0.015813142,\n                0.032989245,\n                -0.03985969,\n                0.020291446,\n                -0.009109594,\n                0.0017306489,\n                0.056020524,\n                0.023184264,\n                -0.031598467,\n                -0.0071173045,\n                -0.0035395292,\n                -0.011786841,\n                0.006957365,\n                -0.022933925,\n                -0.0073780757,\n                0.008574144000000001,\n                0.006839149,\n                0.016925763,\n                -0.001244746,\n                0.016286006,\n                0.02965138,\n                -0.00011647763,\n                0.0079900175,\n                -0.02439424,\n                -0.0077953087,\n                -0.00592819,\n                0.029067254,\n                0.04998455,\n                0.0049546454,\n                -0.004662582,\n                0.024547227,\n                0.00517717,\n                -0.013469682,\n                -0.04839906,\n                0.023253802,\n                -0.050652124,\n                -0.0013681775,\n                -0.017092658,\n                -0.025659848,\n                0.013768699,\n                0.010382155,\n                0.020917296,\n                0.012496137,\n                0.0009031363,\n                -0.004412242,\n                0.003921993,\n                0.012656077,\n                -0.0035812524,\n                -0.0013629621,\n                0.023253802,\n                0.010403017,\n                0.012774293,\n                -0.006202868,\n                0.020819942,\n                0.0129481405,\n                0.005166739,\n                0.011056682,\n                0.013003771,\n                0.019359626,\n                0.022530599,\n                -0.021598777,\n                0.034491286,\n                0.01432501,\n                -0.00897747,\n                0.020291446,\n                -0.007204228,\n                0.005528341,\n                0.009179133000000001,\n                0.0074615222,\n                -0.0062515456,\n                0.03902522,\n                -0.0123779215,\n                -0.031487208,\n                0.015771419,\n                0.0024355995,\n                -3.047759e-05,\n                -0.005055477,\n                0.008414204999999999,\n                -0.027996354,\n                -0.022975648,\n                0.018970208,\n                0.0026894163,\n                0.012016319,\n                -0.024422055,\n                -0.0058795125,\n                -0.043614786,\n                -0.0038176847,\n                -0.0147561515,\n                0.004179287,\n                -0.006602717,\n                0.0140190385,\n                -0.020583509,\n                0.0004120179,\n                -0.003793346,\n                -0.027481766,\n                0.031487208,\n                0.033990607,\n                -0.03896959,\n                0.022447152,\n                0.04787057,\n                0.022614045,\n                -0.016564162,\n                0.0058377893,\n                -0.004978984,\n                -0.008504606,\n                0.023031278,\n                -0.008129096000000001,\n                -0.010250031,\n                0.009255625,\n                -0.0074545685,\n                0.019095378,\n                0.013400143,\n                -0.006122899,\n                -0.015048214,\n                -0.00152464,\n                0.018219188,\n                0.009144363000000001,\n                0.016258191,\n                -0.0063662846,\n                0.008358574000000001,\n                0.016272098,\n                0.012064996,\n                0.011592132,\n                0.023003463,\n                -0.0035916832,\n                -0.0015124707,\n                -0.004961599,\n                -0.016355546,\n                -0.020221908,\n                -0.005281478,\n                0.008421158,\n                -0.0008666283,\n                -0.0055770185,\n                0.017899308,\n                -0.019554334,\n                -0.0058760354,\n                0.014783966,\n                0.018135741,\n                0.012211028,\n                0.0019418733,\n                0.013900823,\n                0.0154932635,\n                -0.014603166,\n                0.034491286,\n                -0.023253802,\n                -0.01951261,\n                0.013991224,\n                -0.029484486,\n                0.0144223645,\n                0.017162196,\n                -0.014895229,\n                0.0136852525,\n                -0.01983249,\n                -0.020611325,\n                0.015896589,\n                -0.023559773,\n                -0.0039046083,\n                0.013768699,\n                0.012030227,\n                -0.0004906838,\n                -0.018900668,\n                -0.011501731,\n                -0.013866053,\n                -0.016661517,\n                -0.027926816,\n                -0.012113674,\n                -0.0017801954,\n                -0.004478304,\n                -0.013274973,\n                0.0040749786,\n                -0.028093709,\n                -0.024255162,\n                -0.019665597,\n                0.005371879,\n                0.03465818,\n                0.010375202,\n                -0.00040050052,\n                0.0066444403,\n                0.03646619,\n                0.01607739,\n                -0.0066444403,\n                -0.002486015,\n                -0.0008770592,\n                0.0014403241,\n                0.041834593,\n                0.012989864,\n                0.027008902,\n                -0.013156757,\n                0.005253663,\n                -0.0055631106,\n                0.0006219384,\n                -0.0053371093,\n                -0.004544366,\n                0.013511405,\n                -0.018942391,\n                0.016647609,\n                0.013351466,\n                0.016550254,\n                -0.022655768,\n                -0.03460255,\n                -0.026855918,\n                0.027314873,\n                -0.0029780027,\n                -0.004725167,\n                0.0036299296,\n                -0.03855236,\n                0.0024773227,\n                0.022933925,\n                -0.012593492,\n                -0.0020444433,\n                -0.020444432,\n                -0.00014277201,\n                -0.009964921999999999,\n                -0.027440043,\n                0.014783966,\n                -0.012350106,\n                0.04347571,\n                -0.008191680999999999,\n                -0.009658951000000001,\n                -0.028566573,\n                0.001369916,\n                -0.0051354463,\n                0.014505811,\n                -0.0147561515,\n                0.014867413,\n                0.006404531,\n                0.027857278,\n                0.013886915,\n                0.02471412,\n                0.0030110336,\n                -0.010270893,\n                0.016967488,\n                -0.004252303,\n                -0.017023118,\n                -0.006425393,\n                0.008365528000000001,\n                -0.02527043,\n                -0.01582705,\n                -0.028413588,\n                -0.017050935,\n                -0.0120093655,\n                0.004304457,\n                0.006084652,\n                0.012600446,\n                -0.009109594,\n                -0.030430214,\n                -0.037884783,\n                -0.0076979543,\n                0.026160527,\n                -0.002990172,\n                0.023281619,\n                -0.0006328038,\n                -0.0009196517,\n                -0.025103537,\n                0.016536346,\n                -0.008455928,\n                0.0067626564,\n                0.027453952,\n                0.029206332,\n                0.02176567,\n                0.0103682475,\n                -0.016355546,\n                0.004857291,\n                -0.022558413,\n                -0.0028302325,\n                0.03435221,\n                0.020597417,\n                0.024978368,\n                0.00031162112,\n                -0.005976867,\n                -0.01588268,\n                0.06191742,\n                -0.01094542,\n                -0.0007579737999999999,\n                -0.010208308,\n                -0.007030381,\n                -0.034685995,\n                0.033350848,\n                0.014283286,\n                0.012975955,\n                -0.014589258,\n                0.045144644,\n                0.021543145,\n                -0.014936952,\n                0.0062376377,\n                0.021946471,\n                0.019053655,\n                0.026007542,\n                -0.028232787,\n                -0.009860613000000001,\n                0.002894556,\n                0.023114724,\n                0.017259551,\n                -0.003101434,\n                -0.0011317453,\n                0.040861048,\n                -0.009123500999999999,\n                0.02795463,\n                0.011327884,\n                0.014491904,\n                -0.0020670432,\n                -0.0064740703,\n                -0.027481766,\n                -0.015340278,\n                -0.005743912,\n                -0.006477547,\n                0.032182597,\n                0.016299915,\n                -0.014992584,\n                -0.004227964,\n                -0.012308382,\n                -0.0010326524,\n                -0.022252442,\n                -0.028816912,\n                -0.0053753555,\n                -0.019860305,\n                -0.07504636000000001,\n                0.0038698388,\n                -0.019359626,\n                0.052766103,\n                -0.010827204,\n                -0.0025294768,\n                -0.01607739,\n                0.045506246,\n                -0.0052849553,\n                0.00024903612,\n                -0.01963778,\n                0.012989864,\n                -0.02226635,\n                -0.020110644,\n                -0.014227656,\n                -0.015187292,\n                0.018539065,\n                -0.0007023427,\n                -0.017746324,\n                -0.026925456,\n                9.876694999999999e-05,\n                0.003530837,\n                -0.0030770956,\n                -0.012419645,\n                -0.0037724844,\n                -0.0063419463,\n                0.009811937,\n                -0.029039437,\n                -0.035297938,\n                0.0020409662,\n                0.008080418000000001,\n                0.000854459,\n                -0.007419799,\n                -0.0068669645,\n                0.022405429,\n                0.019623874,\n                0.014658797,\n                -0.00522237,\n                -0.0063906233,\n                -0.012169304,\n                -0.0018879807,\n                0.0019244886,\n                -0.037050318,\n                0.008330759,\n                -0.039331194,\n                -0.0047147362,\n                -0.008344666000000001,\n                -0.0038315924,\n                0.0022148134,\n                -0.04636853,\n                -0.03635493,\n                -0.011619948,\n                0.010430832,\n                8.007837e-05,\n                -0.032321673,\n                -0.016313823,\n                -0.049789842,\n                -0.035798617,\n                0.013101126,\n                -0.032238226,\n                -0.026577761,\n                0.04038818,\n                0.00081056263,\n                -0.018135741,\n                -0.022349797,\n                -0.013462728,\n                -0.04152862,\n                0.0040993174,\n                0.017746324,\n                -0.005225847,\n                0.03285017,\n                0.026035357,\n                0.021223268,\n                0.031181235,\n                -0.01833045,\n                -0.0058412664,\n                -0.043336634,\n                0.01557671,\n                0.008678452999999999,\n                0.005910805,\n                0.021459699,\n                -0.01838608,\n                0.002242629,\n                -0.016035667,\n                0.0092625795,\n                -0.0073572136,\n                0.025200892,\n                0.02088948,\n                0.0154932635,\n                0.01353922,\n                -0.033629004,\n                0.028566573,\n                0.018038386,\n                -0.010667264,\n                0.0130802635,\n                -0.02739832,\n                -0.003214435,\n                0.010034461,\n                -0.01391473,\n                -0.031932253,\n                0.011494777,\n                0.033183955,\n                -0.008497652,\n                0.0010465602,\n                0.012774293,\n                -0.019290086,\n                -0.022113364,\n                -0.0164529,\n                0.02507572,\n                -0.00697475,\n                -0.021849116,\n                0.030736186,\n                0.01876159,\n                0.011376562,\n                -1.1497004e-05,\n                0.016007852,\n                -0.050568677,\n                -0.018358266,\n                0.011411331,\n                -0.010722896,\n                0.003556914,\n                -0.010625541,\n                0.019943751,\n                -0.020305354,\n                0.027690383,\n                0.008156911500000001,\n                -0.019290086,\n                -0.0065922863,\n                0.0013499236,\n                0.024366425,\n                -0.030012982,\n                -0.02219681,\n                0.030736186,\n                0.008595006000000001,\n                -4.2348092e-05,\n                0.00021633111,\n                0.011049729,\n                -0.007906570999999999,\n                0.026911547,\n                0.0009926675,\n                0.007524107,\n                -0.038524542,\n                0.025381692,\n                0.016216468,\n                -0.0048329523,\n                -0.0045687044,\n                0.19893683,\n                -0.0063280384,\n                0.018274818,\n                0.018552974,\n                -0.03521449,\n                0.003682084,\n                -0.0145197185,\n                0.008038695,\n                -0.026424775,\n                -0.018107925,\n                0.012391829,\n                -0.0010908912,\n                -0.03301706,\n                0.009971875999999999,\n                -0.008928793000000001,\n                -0.010653357,\n                -0.026577761,\n                -0.0149230445,\n                -0.023253802,\n                -0.014234609,\n                -0.0026685547,\n                -0.009067871,\n                -0.03145939,\n                0.0047182133,\n                -0.001119576,\n                -0.022182904,\n                -0.020597417,\n                -0.016591977,\n                -0.0024512457,\n                0.023851836,\n                -0.008824484,\n                0.0020357508,\n                0.0083238045,\n                0.005921236,\n                0.007169459,\n                0.0029467102,\n                0.025006182,\n                0.0004919876,\n                -0.0053266785,\n                0.0019488272,\n                0.008073464000000001,\n                -0.0008935747,\n                -0.004593043,\n                -0.014617073,\n                0.004342703,\n                0.012753431,\n                0.017621152,\n                -0.0069886576,\n                -0.005399694,\n                0.040193476,\n                -0.03727284,\n                -0.0082890345,\n                0.0482878,\n                -0.0007901356,\n                -0.0020148891,\n                -0.0013534005,\n                0.018149648,\n                0.03140376,\n                0.03304488,\n                -0.004158425,\n                -0.044059835,\n                0.035103228,\n                -0.0113557,\n                0.030318953,\n                -0.009269533,\n                0.0022287213,\n                -0.0032578968,\n                -0.027231427,\n                0.0076284157,\n                0.006300223,\n                -0.021946471,\n                -0.025214799,\n                -0.008010879,\n                -0.0048259986,\n                -0.031209052,\n                -0.0316541,\n                0.010688126,\n                0.029734826,\n                0.009672859000000001,\n                0.018191371,\n                -0.04386513,\n                0.0069260728,\n                0.009519873,\n                -0.011126221,\n                0.009290394,\n                -0.025089629,\n                0.009269533,\n                0.011418285,\n                0.0004633028,\n                -0.020374892,\n                -0.00601859,\n                0.009582458,\n                0.020180184,\n                -0.0052675703,\n                -0.0079204785,\n                0.008629776,\n                -0.027064534,\n                0.015534987,\n                -0.012871647,\n                0.0138521455,\n                -0.031932253,\n                0.055992708,\n                -0.008247311,\n                0.03170973,\n                -0.014714427,\n                -0.0067904717,\n                -0.0012743,\n                -0.003807254,\n                -0.009026147,\n                -0.016369453,\n                0.021904748,\n                -0.014283286,\n                0.005354494,\n                0.0077466317,\n                0.024825381,\n                0.0112374835,\n                -0.0089427,\n                -0.015966127,\n                -0.00071233895,\n                -0.016299915,\n                0.012906416,\n                0.0031727115,\n                -0.0025938004,\n                0.019804673,\n                0.0011995457,\n                0.0068982574,\n                -0.0042627337,\n                -0.0253956,\n                -0.0035708216,\n                -0.0049581225,\n                -0.008880114999999999,\n                -0.019359626,\n                0.0038976544,\n                0.010722896,\n                -0.020847756,\n                -0.032683276,\n                0.0042696875,\n                -0.016216468,\n                -0.0056848037,\n                0.020750403,\n                0.027634753,\n                -0.017468167,\n                0.032572012,\n                0.004238395,\n                -0.031876624,\n                -0.00074363145,\n                0.015924403,\n                0.013052449,\n                -0.02502009,\n                -0.009610274,\n                0.0109384665,\n                0.0013933853,\n                0.009533781,\n                -0.057689458,\n                -0.0023956145,\n                -0.04787057,\n                -0.0052988627,\n                -0.00517717,\n                -0.014491904,\n                -0.0082890345,\n                -0.040499445,\n                0.03696687,\n                0.00547271,\n                -0.02408827,\n                -0.04258561,\n                -0.045561876,\n                -0.17546052,\n                0.010674219,\n                0.047202993,\n                -0.023865744,\n                0.030847449,\n                0.0045582736,\n                0.036271483,\n                -0.0005424033,\n                -0.015993943,\n                -0.027551306,\n                0.012989864,\n                -0.015437632,\n                -0.032738905,\n                -0.028357957,\n                -0.015896589,\n                -0.010500371,\n                -0.01557671,\n                0.0060707447,\n                0.027467858,\n                0.01094542,\n                0.015660157,\n                -0.0059351437,\n                0.0012177997,\n                -0.0073224446,\n                -0.004975507,\n                -0.010966282,\n                -0.011021913,\n                -0.018539065,\n                0.012280567,\n                0.02514526,\n                0.0032213887,\n                0.0045304582,\n                0.010590772,\n                -0.01688404,\n                0.0040297783,\n                -0.0047008283,\n                0.009241717999999999,\n                -0.0044678734,\n                -0.0027885092,\n                0.016383361,\n                0.0059872977,\n                0.01782977,\n                -0.0143528255,\n                -0.008455928,\n                0.0026685547,\n                -0.012899463,\n                0.015312462,\n                -0.0025729386,\n                0.028483126,\n                -0.00847679,\n                -0.0061437604,\n                -0.009735443999999999,\n                0.008156911500000001,\n                -0.00079926255,\n                -0.015715787,\n                -0.012364013,\n                -0.0064497315,\n                0.016272098,\n                0.002239152,\n                -0.0029414948,\n                -0.026007542,\n                -0.020666957,\n                0.006102037,\n                0.0017923648,\n                -0.0097980285,\n                0.0113070225,\n                -0.0038003,\n                0.009283441,\n                -0.011939826,\n                0.002805894,\n                -0.025006182,\n                -0.015687972,\n                0.009742397999999999,\n                0.0054448945,\n                -0.0053301556,\n                0.022794846,\n                0.008233404,\n                0.021682223,\n                0.021696132,\n                0.002091382,\n                -0.008518513,\n                0.021153728,\n                -0.013733929,\n                0.0068043796,\n                -0.0045200274,\n                0.008191680999999999,\n                0.0030910033,\n                -0.034018423,\n                -0.010500371,\n                -0.013796515,\n                0.012739523,\n                -0.023253802,\n                -0.0063176076,\n                0.0040784557,\n                0.0036473144,\n                9.865829e-05,\n                0.007614508,\n                0.0005132839,\n                0.014533627,\n                -0.0058377893,\n                0.006477547,\n                -0.024602856,\n                -0.024185624,\n                0.009978829999999999,\n                0.024797566,\n                0.008664544999999999,\n                0.001760203,\n                0.010646403,\n                0.006727887,\n                -0.01303854,\n                -0.02502009,\n                -0.0011873764,\n                0.014380641,\n                0.031125603,\n                -0.014964768,\n                0.030875264,\n                0.013149803,\n                -0.009095686,\n                -0.013295835,\n                -0.027370505,\n                0.050429597,\n                0.0047077825,\n                -0.008560237,\n                -0.005173693,\n                -0.023601497,\n                -0.026730746,\n                -0.05791198,\n                -0.008567191,\n                0.0050589535,\n                0.0015759249,\n                -0.011585178,\n                -0.038246386,\n                -0.018872853,\n                -0.017176105,\n                -0.0012169305,\n                0.00037051187,\n                -0.05304426,\n                -0.0068321954,\n                9.990781999999999e-05,\n                -0.0030840496,\n                0.010270893,\n                0.0067661335,\n                -0.015854865,\n                -0.0034995442,\n                -0.0065644705,\n                0.020541785,\n                -0.025562493,\n                -0.015868774,\n                -0.0130802635,\n                -0.008017833,\n                0.0227114,\n                0.0062063453,\n                -0.0366609,\n                0.012231889,\n                0.015562802,\n                0.01098019,\n                0.00722509,\n                -0.013838238,\n                0.022627953,\n                -0.02196038,\n                0.016007852,\n                0.0054066484,\n                -0.012113674,\n                0.029512303,\n                0.023990914,\n                -0.02126499,\n                0.014658797,\n                0.021251082,\n                0.014964768,\n                -0.009492057,\n                -0.01988812,\n                -0.011550409,\n                -0.014533627,\n                0.010215262,\n                0.022488875,\n                0.0038385463,\n                -0.03310051,\n                0.006338469,\n                -0.012530907,\n                -0.005712619,\n                0.029873904,\n                -0.019067561,\n                -0.018497342,\n                0.010284801,\n                -0.026939364,\n                -0.021167636,\n                -0.036299296,\n                -0.019303994,\n                -0.007857894000000001,\n                -0.0016663255,\n                6.617059e-05,\n                0.0067139794,\n                -0.018163556,\n                0.012433552,\n                -0.008991377,\n                -0.029206332,\n                9.333422e-05,\n                0.02258623,\n                -0.009464241999999999,\n                -0.0071972744,\n                -0.0074476143,\n                -0.016216468,\n                0.014046854,\n                0.021334529,\n                0.011863333,\n                -0.007343306,\n                0.0010413448,\n                -0.005215416,\n                0.0047043054,\n                0.004294026,\n                0.022335889,\n                0.005601357,\n                0.023434604,\n                0.007301583,\n                0.01995766,\n                -0.04347571,\n                0.01298291,\n                0.043364447,\n                0.012489184,\n                -0.02483929,\n                -0.018358266,\n                -0.017342998,\n                0.013706114,\n                0.0002775036,\n                -0.02108419,\n                0.015729696,\n                -0.022822661,\n                -0.011724256,\n                -0.059580915,\n                0.005305817,\n                0.01995766,\n                -0.03234949,\n                -0.0005497918000000001,\n                -0.01851125,\n                -0.0053684018,\n                -0.011939826,\n                -0.0017323875,\n                0.004961599,\n                -0.04258561,\n                -0.016689332,\n                -0.012183213,\n                0.014436272,\n                -0.019345718,\n                -0.026410868,\n                -0.012016319,\n                -0.02088948,\n                0.0029797412,\n                -0.0009944061,\n                -0.00472169,\n                -0.008435066999999999,\n                -0.0010013599,\n                0.0053753555,\n                0.020319263,\n                -0.00697475,\n                -0.0014777012,\n                0.016675424,\n                0.010180493,\n                -0.01457535,\n                0.004540889,\n                -0.026536038,\n                0.00062845764,\n                0.014297195,\n                0.011446101,\n                0.012002411,\n                -0.016286006,\n                0.033156138,\n                0.029623564,\n                0.011508686,\n                -0.021849116,\n                -0.022113364,\n                -0.0016776256,\n                -0.023337249,\n                0.0061854837,\n                0.018344358,\n                -0.0048329523,\n                0.023351157,\n                0.010966282,\n                0.022043826,\n                0.04723081,\n                0.026480407,\n                -0.008469836,\n                -0.018483436,\n                -0.025242615,\n                -0.027287059,\n                0.019192731,\n                0.015910497,\n                0.002607708,\n                0.0037829152,\n                0.043002844,\n                0.0004315757,\n                0.019067561,\n                -0.0031049112,\n                0.010771573,\n                0.015980035,\n                -0.018219188,\n                0.004992892,\n                0.028218878,\n                -0.006334992,\n                -0.016063482,\n                -0.0017906262,\n                -0.009582458,\n                0.0042801183,\n                0.026855918,\n                0.015785327,\n                -0.024116084,\n                -0.017245643,\n                0.020806033,\n                0.024867104,\n                0.00919304,\n                -0.004985938,\n                -0.0031049112,\n                0.013726976,\n                0.050262704,\n                0.0035882064,\n                0.0010135293,\n                0.008386388999999999,\n                0.0069921347,\n                0.025284339,\n                0.002124413,\n                0.0047008283,\n                0.027036717,\n                -0.003546483,\n                -0.00039571972,\n                -0.021779578,\n                0.021459699,\n                0.0078231245,\n                0.0147561515,\n                0.025868464,\n                -0.0073224446,\n                -0.0022999987,\n                0.008031741,\n                -0.023156447,\n                -0.046618868,\n                0.013789561,\n                -0.035687353,\n                -0.021167636,\n                0.037439734,\n                -0.032627646,\n                0.00032748468,\n                0.010792435,\n                0.0011282684,\n                0.0216405,\n                -0.023239896,\n                -0.010743758,\n                0.0142554715,\n                0.01570188,\n                -0.024797566,\n                0.02784337,\n                0.01652244,\n                0.02959575,\n                0.03721721,\n                -0.0099996915,\n                0.010715942,\n                0.0034282668,\n                -0.0054031713,\n                -0.0057647736,\n                0.028816912,\n                0.027203612,\n                -0.009665905000000001,\n                -0.023935284,\n                -0.03883051,\n                -0.0028528327,\n                -0.0056848037,\n                -0.031626284,\n                0.01307331,\n                0.019721227,\n                0.02426907,\n                0.09451725,\n                0.0023260757,\n                -1.2026696e-05,\n                -0.018622514,\n                -0.017273458,\n                0.013094172,\n                -0.001101322,\n                0.010514279,\n                0.018914577,\n                -0.012085858,\n                0.03646619,\n                0.0057508657,\n                0.0031605423,\n                -0.040916678,\n                -0.023907468,\n                0.021348437,\n                -0.011724256,\n                0.02652213,\n                0.006793949,\n                -0.020416616,\n                0.041111387,\n                0.013268019,\n                0.0008935747,\n                0.008435066999999999,\n                -0.019846397,\n                0.025604216,\n                0.011752071,\n                -0.011724256,\n                -0.018594697,\n                -0.024338609,\n                0.0014742244,\n                0.0227114,\n                -0.06981704,\n                -0.024575042,\n                -0.0033969744,\n                0.0017541184,\n                -0.012628261,\n                0.011835518,\n                0.052654844,\n                0.0063697617,\n                -0.0047182133,\n                0.01920664,\n                -0.023281619,\n                -0.028872544,\n                -0.015256831,\n                -0.00025772848,\n                -0.019317903,\n                -0.024825381,\n                -0.013504451,\n            ]\n        ),\n    ]\n}\n\n"
  },
  {
    "path": "Tool/Tests/LangChainTests/VectorStoreTests/TemporaryUSearchTests.swift",
    "content": "import Foundation\nimport USearchIndex\nimport XCTest\n\nimport USearch\n\n@testable import LangChain\n\nclass TemporaryUSearchTests: XCTestCase {\n    func test_usearch() async throws {\n        let index = USearchIndex(\n            metric: USearchMetric.l2sq,\n            dimensions: 4,\n            connectivity: 8,\n            quantization: USearchScalar.F32\n        )\n        let vectorA: [Float] = [0.3, 0.5, 1.2, 1.4]\n        let vectorB: [Float] = [0.4, 0.2, 1.2, 1.1]\n        try await index.clear()\n        try await index.add(label: 42, vector: vectorA)\n        try await index.add(label: 43, vector: vectorB)\n\n        let results = try await index.search(vector: vectorA, count: 10)\n        assert(results[0].label == 42)\n    }\n\n    func test_setting_data() async throws {\n        let identifier = \"hello-world\"\n        let store = TemporaryUSearch(identifier: identifier, dimensions: 4)\n        try await store.set(EmbeddingData.data.map { datum in\n            .init(\n                document: .init(pageContent: datum.text, metadata: [:]),\n                embeddings: datum.embedding\n            )\n        })\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/ModificationBasicTests/ExplanationThenCodeStreamParserTests.swift",
    "content": "import Foundation\nimport XCTest\n@testable import ModificationBasic\n\nclass ExplanationThenCodeStreamParserTests: XCTestCase {\n    func collectFragments(_ fragments: [ExplanationThenCodeStreamParser.Fragment]) -> (\n        code: String,\n        explanation: String\n    ) {\n        var code = \"\"\n        var explanation = \"\"\n        for fragment in fragments {\n            switch fragment {\n            case let .code(c):\n                code += c\n            case let .explanation(e):\n                explanation += e\n            }\n        }\n        return (code: code, explanation: explanation)\n    }\n\n    func process(_ code: String) async -> (code: String, explanation: String) {\n        let parser = ExplanationThenCodeStreamParser()\n        var allFragments: [ExplanationThenCodeStreamParser.Fragment] = []\n\n        func chunks(from code: String, chunkSize: Int) -> [String] {\n            var chunks: [String] = []\n            var currentIndex = code.startIndex\n\n            while currentIndex < code.endIndex {\n                let endIndex = code.index(\n                    currentIndex,\n                    offsetBy: chunkSize,\n                    limitedBy: code.endIndex\n                ) ?? code.endIndex\n                let chunk = String(code[currentIndex..<endIndex])\n                chunks.append(chunk)\n                currentIndex = endIndex\n            }\n\n            return chunks\n        }\n\n        for chunk in chunks(from: code, chunkSize: 8) {\n            let output = await parser.yield(chunk)\n            allFragments.append(contentsOf: output)\n        }\n\n        await allFragments.append(contentsOf: parser.finish())\n\n        return collectFragments(allFragments)\n    }\n\n    func test_parse_only_explanation() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Hello World!\n        Hello World!\n\n\n        \"\"\")\n\n        XCTAssertEqual(code, \"\")\n        XCTAssertEqual(explanation, \"Hello World!\\nHello World!\")\n    }\n\n    func test_parse_only_code() async throws {\n        let (code, explanation) = await process(\"\"\"\n        ```swift\n        struct Cat {\n            var name: String\n        }\n\n        print(\"Hello world!\")\n\n\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n        }\n\n        print(\"Hello world!\")\n\n\n        \"\"\")\n        XCTAssertEqual(explanation, \"\")\n    }\n\n    func test_parse_mixed_explanation_and_code() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Here is the explanation of the code change.\n\n\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n        }\n        \"\"\")\n        XCTAssertEqual(explanation, \"\"\"\n        Here is the explanation of the code change.\n        \"\"\")\n    }\n\n    func test_parse_mixed_explanation_contains_code_delimiters() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Use ``` for code blocks. Use ` for inline code.\n\n\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n        }\n        \"\"\")\n        XCTAssertEqual(explanation, \"\"\"\n        Use ``` for code blocks. Use ` for inline code.\n        \"\"\")\n    }\n\n    func test_parse_extra_content_after_code_block_should_ignore_the_extra() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Hello World!\n\n        ```swift\n        print(\"Hello, world!\")\n        print(\"Hello, world!\")\n        ```\n        Hello\n\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        print(\"Hello, world!\")\n        print(\"Hello, world!\")\n        \"\"\")\n        XCTAssertEqual(explanation, \"Hello World!\")\n    }\n\n    func test_parse_incomplete_code_block() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Here is some explanation.\n\n        ```swift\n        struct Cat {\n            var name: String\n\n\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n\n\n        \"\"\")\n        XCTAssertEqual(explanation, \"Here is some explanation.\")\n    }\n\n    func test_parse_extra_code_block_cant_tell() async throws {\n        let (code, explanation) = await process(\"\"\"\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        ```\n\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n        }\n        ```\n\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        \"\"\")\n        XCTAssertEqual(explanation, \"\")\n    }\n\n    func test_parse_extra_code_block_no_language_name_cant_tell() async throws {\n        let (code, explanation) = await process(\"\"\"\n        ```swift\n        struct Cat {\n            var name: String\n        }\n        ```\n\n        ```\n        struct Cat {\n            var name: String\n        }\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        struct Cat {\n            var name: String\n        }\n        ```\n\n        ```\n        struct Cat {\n            var name: String\n        }\n        \"\"\")\n        XCTAssertEqual(explanation, \"\")\n    }\n\n    func test_code_delimiters_within_code_block_with_indentation() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Here is some explanation.\n\n        ```swift\n        let codeBlock = \\\"\"\"\n            ```plaintext\n            code\n            ```\n            \\\"\"\"\n\n        print(\"Hello world!\")\n        ```\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        let codeBlock = \\\"\"\"\n            ```plaintext\n            code\n            ```\n            \\\"\"\"\n\n        print(\"Hello world!\")\n        \"\"\")\n        XCTAssertEqual(explanation, \"Here is some explanation.\")\n    }\n\n    func test_code_delimiters_within_code_block() async throws {\n        let (code, explanation) = await process(\"\"\"\n        Here is some explanation.\n\n        ```swift\n        let codeBlock = \\\"\"\"\n        ```plaintext\n        code\n        ```\n        \\\"\"\"\n\n        print(\"Hello world!\")\n        ```\n\n        End.\n        \"\"\")\n\n        XCTAssertEqual(code, \"\"\"\n        let codeBlock = \\\"\"\"\n        ```plaintext\n        code\n        ```\n        \\\"\"\"\n\n        print(\"Hello world!\")\n        \"\"\")\n        XCTAssertEqual(explanation, \"Here is some explanation.\")\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/OpenAIServiceTests/AutoManagedChatGPTMemoryRetrievedContentTests.swift",
    "content": "import ChatBasic\nimport Foundation\nimport XCTest\n\n@testable import OpenAIService\n\nclass AutoManagedChatGPTMemoryRetrievedContentTests: XCTestCase {\n    let separator = String(repeating: \"=\", count: 32)\n\n    func ref(_ text: String) -> ChatMessage.Reference {\n        .init(\n            title: \"\",\n            content: text,\n            kind: .text\n        )\n    }\n\n    func test_retrieved_content_when_the_context_window_is_large_enough() async {\n        let strategy = Strategy()\n\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: UserPreferenceChatGPTConfiguration().overriding {\n                $0.maxTokens = 999999\n            },\n            functionProvider: EmptyFunctionProvider()\n        )\n\n        await memory.mutateRetrievedContent([\n            ref(\"A\"), ref(\"B\"), ref(\"C\"), ref(\"D\"), ref(\"E\"),\n        ])\n\n        let fullContent = \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n\n        \\(separator)[DOCUMENT 1]\n\n        B\n\n        \\(separator)[DOCUMENT 2]\n\n        C\n\n        \\(separator)[DOCUMENT 3]\n\n        D\n\n        \\(separator)[DOCUMENT 4]\n\n        E\n        \"\"\"\n\n        let maxTokenCount = await strategy.countToken(.init(role: .user, content: fullContent))\n\n        let result = await memory.generateRetrievedContentMessage(\n            maxTokenCount: maxTokenCount,\n            strategy: strategy\n        )\n\n        XCTAssertEqual(result.references.count, 5)\n        XCTAssertEqual(result.retrievedContent.role, .user)\n        XCTAssertEqual(result.retrievedContent.content, \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n\n        \\(separator)[DOCUMENT 1]\n\n        B\n\n        \\(separator)[DOCUMENT 2]\n\n        C\n\n        \\(separator)[DOCUMENT 3]\n\n        D\n\n        \\(separator)[DOCUMENT 4]\n\n        E\n        \"\"\")\n    }\n\n    func test_retrieved_content_when_the_context_window_is_just_not_large_enough() async {\n        let strategy = Strategy()\n\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: UserPreferenceChatGPTConfiguration().overriding {\n                $0.maxTokens = 999999\n            },\n            functionProvider: EmptyFunctionProvider()\n        )\n\n        await memory.mutateRetrievedContent([\n            ref(\"A\"), ref(\"B\"), ref(\"C\"), ref(\"D\"), ref(\"E\"),\n        ])\n\n        let fullContent = \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n\n        \\(separator)[DOCUMENT 1]\n\n        B\n\n        \\(separator)[DOCUMENT 2]\n\n        C\n\n        \\(separator)[DOCUMENT 3]\n\n        D\n\n        \\(separator)[DOCUMENT 4]\n\n        E\n        \"\"\"\n\n        let maxTokenCount = await strategy.countToken(.init(role: .user, content: fullContent))\n\n        let result = await memory.generateRetrievedContentMessage(\n            maxTokenCount: maxTokenCount - 1,\n            strategy: strategy\n        )\n\n        XCTAssertEqual(result.references.count, 4)\n        XCTAssertEqual(result.retrievedContent.role, .user)\n        XCTAssertEqual(result.retrievedContent.content, \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n\n        \\(separator)[DOCUMENT 1]\n\n        B\n\n        \\(separator)[DOCUMENT 2]\n\n        C\n\n        \\(separator)[DOCUMENT 3]\n\n        D\n        \"\"\")\n    }\n\n    func test_retrieved_content_when_the_context_window_can_take_only_one_document() async {\n        let strategy = Strategy()\n\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: UserPreferenceChatGPTConfiguration().overriding {\n                $0.maxTokens = 999999\n            },\n            functionProvider: EmptyFunctionProvider()\n        )\n\n        await memory.mutateRetrievedContent([\n            ref(\"A\"), ref(\"B\"), ref(\"C\"), ref(\"D\"), ref(\"E\"),\n        ])\n\n        let fullContent = \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n        \"\"\"\n\n        let maxTokenCount = await strategy.countToken(.init(role: .user, content: fullContent))\n\n        let result = await memory.generateRetrievedContentMessage(\n            maxTokenCount: maxTokenCount + 1,\n            strategy: strategy\n        )\n\n        XCTAssertEqual(result.references.count, 1)\n        XCTAssertEqual(result.retrievedContent.role, .user)\n        XCTAssertEqual(result.retrievedContent.content, \"\"\"\n        Here are the information you know about the system and the project, \\\n        separated by \\(separator)\n\n        \\(separator)[DOCUMENT 0]\n\n        A\n        \"\"\")\n    }\n\n    func test_retrieved_content_when_the_context_window_empty() async {\n        let strategy = Strategy()\n\n        let memory = AutoManagedChatGPTMemory(\n            systemPrompt: \"\",\n            configuration: UserPreferenceChatGPTConfiguration().overriding {\n                $0.maxTokens = 999999\n            },\n            functionProvider: EmptyFunctionProvider()\n        )\n\n        await memory.mutateRetrievedContent([\n            ref(\"A\"), ref(\"B\"), ref(\"C\"), ref(\"D\"), ref(\"E\"),\n        ])\n\n        let result = await memory.generateRetrievedContentMessage(\n            maxTokenCount: 0,\n            strategy: strategy\n        )\n\n        XCTAssertEqual(result.references.count, 0)\n        XCTAssertEqual(result.retrievedContent.role, .user)\n        XCTAssertEqual(result.retrievedContent.content, \"\")\n    }\n}\n\nprivate struct EmptyFunctionProvider: ChatGPTFunctionProvider {\n    var functions: [any ChatGPTFunction] { [] }\n    var functionCallStrategy: FunctionCallStrategy? { nil }\n}\n\nprivate struct Strategy: AutoManagedChatGPTMemoryStrategy {\n    func countToken(_ message: OpenAIService.ChatMessage) async -> Int {\n        message.content?.count ?? 0\n    }\n\n    func countToken<F>(_: F) async -> Int where F: ChatGPTFunction {\n        0\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/OpenAIServiceTests/ChatGPTServiceTests.swift",
    "content": "import AIModel\nimport ChatBasic\nimport Dependencies\nimport Foundation\nimport XCTest\n\n@testable import OpenAIService\n\nclass ChatGPTServiceTests: XCTestCase {\n    func test_send_memory_and_handles_responses_with_chunks() async throws {\n        let api = ChunksChatCompletionsStreamAPI(chunks: [\n            .token(\"hello\"),\n            .token(\" \"),\n            .token(\"world\"),\n            .token(\"!\"),\n            .finish(reason: \"finished\"),\n        ])\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration(),\n                functionProvider: NoChatGPTFunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        let response = try await stream.asArray()\n        XCTAssertEqual(response, [\n            .partialText(\"hello\"),\n            .partialText(\" \"),\n            .partialText(\"world\"),\n            .partialText(\"!\"),\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n        ])\n\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: \"hello world!\"\n            ),\n        ])\n    }\n\n    func test_send_memory_returns_tool_calls() async throws {\n        let api = ChunksChatCompletionsStreamAPI(\n            chunks: [\n                .partialToolCalls([\n                    .init(index: 0, id: \"1\", type: \"function\", function: .init(name: \"foo\")),\n                    .init(index: 1, id: \"2\", type: \"function\", function: .init(name: \"bar\")),\n                ]),\n                .partialToolCalls([\n                    .init(\n                        index: 0,\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"foo\\\": \\\"hi\\\"}\")\n                    ),\n                    .init(\n                        index: 1,\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"bar\\\": \\\"bye\\\"}\")\n                    ),\n                ]),\n            ]\n        )\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration(),\n                functionProvider: FunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        let response = try await stream.asArray()\n        XCTAssertEqual(response, [\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n            .toolCalls([\n                .init(\n                    id: \"1\",\n                    type: \"function\",\n                    function: .init(name: \"foo\", arguments: \"{\\\"foo\\\": \\\"hi\\\"}\"),\n                    response: nil\n                ),\n                .init(\n                    id: \"2\",\n                    type: \"function\",\n                    function: .init(name: \"bar\", arguments: \"{\\\"bar\\\": \\\"bye\\\"}\"),\n                    response: nil\n                ),\n            ]),\n        ])\n\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: nil,\n                toolCalls: [\n                    .init(\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(name: \"foo\", arguments: \"{\\\"foo\\\": \\\"hi\\\"}\"),\n                        response: nil\n                    ),\n                    .init(\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(name: \"bar\", arguments: \"{\\\"bar\\\": \\\"bye\\\"}\"),\n                        response: nil\n                    ),\n                ]\n            ),\n        ])\n    }\n\n    func test_send_memory_and_automatically_handles_multiple_tool_calls() async throws {\n        let api = ChunksChatCompletionsStreamAPI(chunks: [[\n                .partialToolCalls([\n                    .init(index: 0, id: \"1\", type: \"function\", function: .init(name: \"foo\")),\n                    .init(index: 1, id: \"2\", type: \"function\", function: .init(name: \"bar\")),\n                ]),\n                .partialToolCalls([\n                    .init(\n                        index: 0,\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"foo\\\": \\\"hi\\\"}\")\n                    ),\n                    .init(\n                        index: 1,\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"bar\\\": \\\"bye\\\"}\")\n                    ),\n                ]),\n            ],\n            [\n                .token(\"hello\"),\n                .token(\" \"),\n                .token(\"world\"),\n                .token(\"!\"),\n                .finish(reason: \"finished\"),\n            ],\n            ])\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration().overriding {\n                    $0.runFunctionsAutomatically = true\n                },\n                functionProvider: FunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        let response = try await stream.asArray()\n        XCTAssertEqual(response, [\n            .status([\"start foo 1\"]),\n            .status([\"start foo 2\"]),\n            .status([\"start foo 3\"]),\n            .status([\"start bar 1\", \"start foo 3\"]),\n            .status([\"start bar 2\", \"start foo 3\"]),\n            .status([\"start bar 3\", \"start foo 3\"]),\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n            .status([\"foo hi\"]),\n            .status([]),\n            .status([\"bar bye\"]),\n            .status([]),\n            .partialText(\"hello\"),\n            .partialText(\" \"),\n            .partialText(\"world\"),\n            .partialText(\"!\"),\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n        ])\n\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: nil,\n                toolCalls: [\n                    .init(\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(name: \"foo\", arguments: \"{\\\"foo\\\": \\\"hi\\\"}\"),\n                        response: .init(content: \"foo hi\", summary: \"foo hi\")\n                    ),\n                    .init(\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(name: \"bar\", arguments: \"{\\\"bar\\\": \\\"bye\\\"}\"),\n                        response: .init(content: \"Error: bar error\", summary: \"Error: bar error\")\n                    ),\n                ]\n            ),\n            .init(\n                id: \"00000000-0000-0000-0000-000000000001\",\n                role: .assistant,\n                content: \"hello world!\"\n            ),\n        ])\n    }\n\n    func test_send_memory_and_automatically_handles_unknown_tool_call() async throws {\n        let api = ChunksChatCompletionsStreamAPI(chunks: [[\n                .partialToolCalls([\n                    .init(index: 0, id: \"1\", type: \"function\", function: .init(name: \"python\")),\n                    .init(index: 1, id: \"2\", type: \"function\", function: .init(name: \"unknown\")),\n                ]),\n                .partialToolCalls([\n                    .init(\n                        index: 0,\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"foo\\\": \\\"hi\\\"}\")\n                    ),\n                    .init(\n                        index: 1,\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(arguments: \"{\\\"foo\\\": \\\"hi\\\"}\")\n                    ),\n                ]),\n            ],\n            [\n                .token(\"result a\"),\n            ],\n            [\n                .token(\"result b\"),\n            ],\n            [\n                .token(\"hello\"),\n                .token(\" \"),\n                .token(\"world\"),\n                .token(\"!\"),\n                .finish(reason: \"finished\"),\n            ],\n            ])\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration().overriding {\n                    $0.runFunctionsAutomatically = true\n                },\n                utilityConfiguration: EmptyConfiguration(),\n                functionProvider: FunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        let response = try await stream.asArray()\n        XCTAssertEqual(response, [\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n            .partialText(\"hello\"),\n            .partialText(\" \"),\n            .partialText(\"world\"),\n            .partialText(\"!\"),\n            .usage(promptTokens: 0, completionTokens: 0, cachedTokens: 0, otherUsage: [:]),\n        ])\n\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: nil,\n                toolCalls: [\n                    .init(\n                        id: \"1\",\n                        type: \"function\",\n                        function: .init(name: \"python\", arguments: \"{\\\"foo\\\": \\\"hi\\\"}\"),\n                        response: .init(content: \"result a\", summary: \"Finished running function.\")\n                    ),\n                    .init(\n                        id: \"2\",\n                        type: \"function\",\n                        function: .init(name: \"unknown\", arguments: \"{\\\"foo\\\": \\\"hi\\\"}\"),\n                        response: .init(content: \"result b\", summary: \"Finished running function.\")\n                    ),\n                ]\n            ),\n            .init(\n                id: \"00000000-0000-0000-0000-000000000003\",\n                role: .assistant,\n                content: \"hello world!\"\n            ),\n        ])\n    }\n\n    func test_send_memory_and_handles_error() async throws {\n        struct E: Error, LocalizedError {\n            var errorDescription: String? { \"error happens\" }\n        }\n        let api = ChunksChatCompletionsStreamAPI(chunks: [\n            .token(\"hello\"),\n            .token(\" \"),\n            .failure(E()),\n        ])\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration(),\n                functionProvider: NoChatGPTFunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        var results = [ChatGPTResponse]()\n        let expectError = expectation(description: \"error\")\n        do {\n            for try await item in stream {\n                results.append(item)\n            }\n        } catch is E {\n            expectError.fulfill()\n        } catch {\n            XCTFail(\"Incorrect Error\")\n        }\n\n        await fulfillment(of: [expectError], timeout: 1)\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: \"hello \"\n            ),\n            .init(\n                id: \"00000000-0000-0000-0000-000000000001\",\n                role: .assistant,\n                content: \"error happens\"\n            ),\n        ])\n    }\n\n    func test_send_memory_and_handles_cancellation() async throws {\n        let api = ChunksChatCompletionsStreamAPI(chunks: [\n            .token(\"hello\"),\n            .token(\" \"),\n            .failure(CancellationError()),\n        ])\n        let builder = APIBuilder(api: api)\n        let memory = EmptyChatGPTMemory()\n        let stream = withDependencies { values in\n            values.uuid = .incrementing\n            values.date = .constant(Date())\n            values.chatCompletionsAPIBuilder = builder\n        } operation: {\n            let service = ChatGPTService(\n                configuration: EmptyConfiguration(),\n                functionProvider: NoChatGPTFunctionProvider()\n            )\n            return service.send(memory)\n        }\n\n        var results = [ChatGPTResponse]()\n        let expectError = expectation(description: \"error\")\n        do {\n            for try await item in stream {\n                results.append(item)\n            }\n        } catch is CancellationError {\n            expectError.fulfill()\n        } catch {\n            XCTFail(\"Incorrect Error\")\n        }\n\n        await fulfillment(of: [expectError], timeout: 1)\n        let history = await memory.history\n        XCTAssertEqual(history, [\n            .init(\n                id: \"00000000-0000-0000-0000-000000000000\",\n                role: .assistant,\n                content: \"hello \"\n            ),\n        ])\n    }\n}\n\nprivate struct APIBuilder: ChatCompletionsAPIBuilder {\n    let api: ChatCompletionsStreamAPI\n\n    func buildStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsStreamAPI {\n        api\n    }\n\n    func buildNonStreamAPI(\n        model: ChatModel,\n        endpoint: URL,\n        apiKey: String,\n        requestBody: ChatCompletionsRequestBody\n    ) -> any ChatCompletionsAPI {\n        fatalError()\n    }\n}\n\nprivate struct EmptyConfiguration: ChatGPTConfiguration {\n    var model: AIModel.ChatModel? { .init(id: \"\", name: \"\", format: .openAI, info: .init()) }\n    var temperature: Double { 0 }\n    var stop: [String] { [] }\n    var maxTokens: Int { 99999 }\n    var minimumReplyTokens: Int { 99999 }\n    var runFunctionsAutomatically: Bool { false }\n    var shouldEndTextWindow: (String) -> Bool = { _ in true }\n}\n\nprivate class ChunksChatCompletionsStreamAPI: ChatCompletionsStreamAPI {\n    private(set) var chunks: [[Result<ChatCompletionsStreamDataChunk, Error>]]\n    init(chunks: [Result<ChatCompletionsStreamDataChunk, Error>]) {\n        self.chunks = [chunks]\n    }\n\n    init(chunks: [[Result<ChatCompletionsStreamDataChunk, Error>]]) {\n        self.chunks = chunks\n    }\n\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n    {\n        let chunks = self.chunks.removeFirst()\n        return .init {\n            for chunk in chunks {\n                switch chunk {\n                case let .success(chunk):\n                    $0.yield(chunk)\n                case let .failure(error):\n                    $0.finish(throwing: error)\n                    return\n                }\n            }\n            $0.finish()\n        }\n    }\n}\n\nprivate struct ThrowingChatCompletionsStreamAPI: ChatCompletionsStreamAPI {\n    let error: any Error\n    func callAsFunction() async throws\n        -> AsyncThrowingStream<ChatCompletionsStreamDataChunk, Error>\n    {\n        throw error\n    }\n}\n\nprivate extension Result<ChatCompletionsStreamDataChunk, Error> {\n    static func token(_ string: String) -> Result<ChatCompletionsStreamDataChunk, Error> {\n        .success(.init(\n            id: \"1\",\n            object: \"object\",\n            model: \"model\",\n            message: .some(.init(role: .assistant, content: string)),\n            finishReason: nil\n        ))\n    }\n\n    static func partialToolCalls(_ toolCalls: [ChatCompletionsStreamDataChunk.Delta.ToolCall])\n        -> Result<ChatCompletionsStreamDataChunk, Error>\n    {\n        .success(.init(\n            id: \"1\",\n            object: \"object\",\n            model: \"model\",\n            message: .some(.init(\n                role: .assistant,\n                content: nil,\n                toolCalls: toolCalls\n            )),\n            finishReason: nil\n        ))\n    }\n\n    static func finish(reason: String) -> Result<ChatCompletionsStreamDataChunk, Error> {\n        .success(.init(\n            id: \"1\",\n            object: \"object\",\n            model: \"model\",\n            message: .some(.init(role: .assistant, content: nil)),\n            finishReason: reason\n        ))\n    }\n}\n\nprivate struct FunctionProvider: ChatGPTFunctionProvider {\n    struct Foo: ChatGPTFunction {\n        struct Arguments: Codable {\n            var foo: String\n        }\n\n        struct Result: ChatGPTFunctionResult {\n            var userReadableContent: ChatBasic.ChatGPTFunctionResultUserReadableContent = .text(\"\")\n            var result: String\n            var botReadableContent: String { result }\n        }\n\n        var name: String { \"foo\" }\n\n        var description: String { \"foo\" }\n\n        var argumentSchema: ChatBasic.JSONSchemaValue = .string(\"\")\n\n        func prepare(reportProgress: @escaping ReportProgress) async {\n            await reportProgress(\"start foo 1\")\n            await reportProgress(\"start foo 2\")\n            await reportProgress(\"start foo 3\")\n        }\n\n        func call(\n            arguments: Arguments,\n            reportProgress: @escaping ReportProgress\n        ) async throws -> Result {\n            await reportProgress(\"foo \\(arguments.foo)\")\n            return .init(result: \"foo \\(arguments.foo)\")\n        }\n    }\n\n    struct Bar: ChatGPTFunction {\n        struct Arguments: Codable {\n            var bar: String\n        }\n\n        struct Result: ChatGPTFunctionResult {\n            var userReadableContent: ChatBasic.ChatGPTFunctionResultUserReadableContent = .text(\"\")\n\n            var result: String\n            var botReadableContent: String { result }\n        }\n\n        var name: String { \"bar\" }\n\n        var description: String { \"bar\" }\n\n        var argumentSchema: ChatBasic.JSONSchemaValue = .string(\"\")\n\n        func prepare(reportProgress: @escaping ReportProgress) async {\n            await reportProgress(\"start bar 1\")\n            await reportProgress(\"start bar 2\")\n            await reportProgress(\"start bar 3\")\n        }\n\n        func call(\n            arguments: Arguments,\n            reportProgress: @escaping ReportProgress\n        ) async throws -> Result {\n            await reportProgress(\"bar \\(arguments.bar)\")\n            struct E: Error, LocalizedError {\n                var errorDescription: String? { \"bar error\" }\n            }\n            throw E()\n        }\n    }\n\n    var functions: [any ChatGPTFunction] = [Foo(), Bar()]\n\n    var functionCallStrategy: OpenAIService.FunctionCallStrategy? { nil }\n}\n\n"
  },
  {
    "path": "Tool/Tests/OpenAIServiceTests/GoogleAIChatCompletionsAPITests.swift",
    "content": "import Foundation\nimport GoogleGenerativeAI\nimport XCTest\n\n@testable import OpenAIService\n\nclass GoogleAIChatCompletionsAPITests: XCTestCase {\n    let convert = GoogleAIChatCompletionsService.convertMessages\n\n    func test_top_system_prompt_should_convert_to_user_message_that_does_not_merge_with_others() {\n        let prompt: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .system, content: \"SystemPrompt\"),\n            .init(role: .user, content: \"A\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let expected: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"\"\"\n            System Prompt:\n            SystemPrompt\n            \"\"\"),\n            .init(role: .assistant, content: \"Got it. Let's start our conversation.\"),\n            .init(role: .user, content: \"A\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let converted = convert(prompt)\n\n        XCTAssertEqual(\n            converted.map { $0.parts.reduce(\"\") { $0 + ($1.text ?? \"\") } },\n            expected.map(\\.content)\n        )\n        XCTAssertEqual(\n            converted.map(\\.role),\n            expected.map(\\.role).map(ModelContent.convertRole(_:))\n        )\n    }\n\n    func test_adjacent_same_role_messages_should_be_merged_except_for_the_last_user_message() {\n        let prompt: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .system, content: \"SystemPrompt\"),\n            .init(role: .user, content: \"A\"),\n            .init(role: .user, content: \"B\"),\n            .init(role: .user, content: \"C\"),\n            .init(role: .assistant, content: \"D\"),\n            .init(role: .assistant, content: \"E\"),\n            .init(role: .assistant, content: \"F\"),\n            .init(role: .user, content: \"World\"),\n        ]\n\n        let expected: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"\"\"\n            System Prompt:\n            SystemPrompt\n            \"\"\"),\n            .init(role: .assistant, content: \"Got it. Let's start our conversation.\"),\n            .init(role: .user, content: \"\"\"\n            A\n\n            ======\n\n            B\n\n            ======\n\n            C\n            \"\"\"),\n            .init(role: .assistant, content: \"\"\"\n            D\n\n            ======\n\n            E\n\n            ======\n\n            F\n            \"\"\"),\n            .init(role: .user, content: \"World\"),\n        ]\n\n        let converted = convert(prompt)\n\n        XCTAssertEqual(\n            converted.map { $0.parts.reduce(\"\") { $0 + ($1.text ?? \"\") } },\n            expected.map(\\.content)\n        )\n        XCTAssertEqual(\n            converted.map(\\.role),\n            expected.map(\\.role).map(ModelContent.convertRole(_:))\n        )\n    }\n\n    func test_non_top_system_prompt_should_merge_as_user_prompt() {\n        let prompt: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"A\"),\n            .init(role: .system, content: \"SystemPrompt\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let expected: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"\"\"\n            A\n\n            ======\n\n            System Prompt:\n            SystemPrompt\n            \"\"\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let converted = convert(prompt)\n\n        XCTAssertEqual(\n            converted.map { $0.parts.reduce(\"\") { $0 + ($1.text ?? \"\") } },\n            expected.map(\\.content)\n        )\n        XCTAssertEqual(\n            converted.map(\\.role),\n            expected.map(\\.role).map(ModelContent.convertRole(_:))\n        )\n    }\n\n    func test_function_call_should_convert_assistant_and_user_message_with_text_content() {\n        let prompt: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"A\"),\n            .init(\n                role: .assistant,\n                content: \"\",\n                toolCalls: [\n                    .init(\n                        id: \"id\",\n                        type: \"function\",\n                        function: .init(name: \"ping\", arguments: \"{ \\\"ip\\\": \\\"127.0.0.1\\\" }\")\n                    ),\n                ]\n            ),\n            .init(role: .tool, content: \"42ms\", toolCallId: \"id\"),\n            .init(role: .assistant, content: \"Merge me\"),\n            .init(role: .user, content: \"Merge me\"),\n            .init(role: .user, content: \"Merge me\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let expected: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"A\"),\n            .init(role: .assistant, content: \"\"\"\n            Function ID: id\n            Call function: ping\n            Arguments: { \"ip\": \"127.0.0.1\" }\n            \"\"\"),\n            .init(role: .user, content: \"\"\"\n            Result of function ID: id\n            42ms\n            \"\"\"),\n            .init(role: .assistant, content: \"Merge me\"),\n            .init(role: .user, content: \"\"\"\n            Merge me\n\n            ======\n\n            Merge me\n            \"\"\"),\n            .init(role: .assistant, content: \"B\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let converted = convert(prompt)\n\n        XCTAssertEqual(\n            converted.map { $0.parts.reduce(\"\") { $0 + ($1.text ?? \"\") } },\n            expected.map(\\.content)\n        )\n        XCTAssertEqual(\n            converted.map(\\.role),\n            expected.map(\\.role).map(ModelContent.convertRole(_:))\n        )\n    }\n\n    func test_if_the_second_last_message_is_from_user_add_a_dummy() {\n        let prompt: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"A\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let expected: [ChatCompletionsRequestBody.Message] = [\n            .init(role: .user, content: \"A\"),\n            .init(role: .assistant, content: \"OK\"),\n            .init(role: .user, content: \"Hello\"),\n        ]\n\n        let converted = convert(prompt)\n\n        XCTAssertEqual(\n            converted.map { $0.parts.reduce(\"\") { $0 + ($1.text ?? \"\") } },\n            expected.map(\\.content)\n        )\n        XCTAssertEqual(\n            converted.map(\\.role),\n            expected.map(\\.role).map(ModelContent.convertRole(_:))\n        )\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/OpenAIServiceTests/LimitMessagesTests.swift",
    "content": "import ChatBasic\nimport Foundation\nimport TokenEncoder\nimport XCTest\n\n@testable import OpenAIService\n\nfinal class AutoManagedChatGPTMemoryLimitTests: XCTestCase {\n    func test_send_all_messages_if_not_reached_token_limit() async {\n        let (messages, memory) = await runService(\n            systemPrompt: \"system\", \n            messages: [\n                \"hi\",\n                \"hello\",\n                \"world\",\n            ], \n            maxTokens: 10000,\n            minimumReplyTokens: 200,\n            maxNumberOfMessages: 0 // smaller than 1 means no limit\n        )\n        XCTAssertEqual(messages, [\n            \"system\",\n            \"hi\",\n            \"hello\",\n            \"world\",\n        ])\n\n//        XCTAssertEqual(remainingTokens, 10000 - 12 - 6)\n//        let history = await memory.history\n        \n// token count caching is removed\n//        XCTAssertEqual(history.map(\\.tokensCount), [\n//            5,\n//            8,\n//            8,\n//        ])\n    }\n\n    func test_send_max_message_if_not_reached_token_limit() async {\n        let (messages, _) = await runService(\n            systemPrompt: \"system\", \n            messages: [\n                \"hi\",\n                \"hello\",\n                \"world\",\n            ], \n            maxTokens: 10000,\n            minimumReplyTokens: 200,\n            maxNumberOfMessages: 2\n        )\n        XCTAssertEqual(messages, [\n            \"system\",\n            \"hello\",\n            \"world\",\n        ], \"Count from end to start.\")\n\n//        XCTAssertEqual(remainingTokens, 10000 - 10 - 6)\n    }\n\n    func test_reached_token_limit() async {\n        let (messages, _) = await runService(\n            systemPrompt: \"system\", \n            messages: [\n                \"hi\",\n                \"hello\",\n                \"world\",\n            ],\n            maxTokens: 212,\n            minimumReplyTokens: 200,\n            maxNumberOfMessages: 100\n        )\n        XCTAssertEqual(messages, [\n            \"system\",\n        ])\n\n//        XCTAssertEqual(remainingTokens, 201)\n    }\n\n    func test_minimum_reply_tokens_count() async {\n        let (messages, _) = await runService(\n            systemPrompt: \"system\", \n            messages: [\n                \"hi\",\n                \"hello\",\n                \"world\",\n            ],\n            maxTokens: 200, \n            minimumReplyTokens: 200,\n            maxNumberOfMessages: 100\n        )\n        XCTAssertEqual(messages, [\n            \"system\",\n        ])\n\n//        XCTAssertEqual(remainingTokens, 200)\n    }\n}\n\nclass MockEncoder: TokenEncoder {\n    func encode(text: String) -> [Int] {\n        return .init(repeating: 0, count: text.count)\n    }\n}\n\nstruct MockStrategy: AutoManagedChatGPTMemoryStrategy {\n    let encoder = MockEncoder()\n    func countToken(_ message: ChatBasic.ChatMessage) async -> Int {\n        await encoder.countToken(message)\n    }\n\n    func countToken<F>(_: F) async -> Int where F: ChatBasic.ChatGPTFunction {\n        0\n    }\n\n    func reformat(_ prompt: OpenAIService.ChatGPTPrompt) async -> OpenAIService.ChatGPTPrompt {\n        prompt\n    }\n}\n\nprivate func runService(\n    systemPrompt: String,\n    messages: [String],\n    maxTokens: Int,\n    minimumReplyTokens: Int,\n    maxNumberOfMessages: Int\n) async -> (messages: [String], memory: AutoManagedChatGPTMemory) {\n    let configuration = UserPreferenceChatGPTConfiguration().overriding(.init(\n        maxTokens: maxTokens,\n        minimumReplyTokens: minimumReplyTokens\n    ))\n    let memory = AutoManagedChatGPTMemory(\n        systemPrompt: systemPrompt,\n        configuration: configuration,\n        functionProvider: NoChatGPTFunctionProvider(),\n        maxNumberOfMessages: maxNumberOfMessages\n    )\n\n    for message in messages {\n        await memory.appendMessage(.init(role: .user, content: message))\n    }\n\n    let messages = await memory.generateSendingHistory(\n        strategy: MockStrategy()\n    )\n\n    let contents = messages.history.map { $0.content ?? \"\" }\n    return (contents, memory)\n}\n\n"
  },
  {
    "path": "Tool/Tests/SharedUIComponentsTests/ConvertToCodeLinesTests.swift",
    "content": "import XCTest\n\n@testable import SharedUIComponents\n\nfinal class ConvertToCodeLinesTests: XCTestCase {\n    func test_do_not_remove_common_leading_spaces() async throws {\n        let code = \"\"\"\n            struct Cat {\n            }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"swift\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: false,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 0)\n        print(code.replacingOccurrences(of: \" \", with: \"·\"))\n        XCTAssertEqual(result.map(\\.string), [\n            \"····struct·Cat·{\",\n            \"····}\",\n        ])\n    }\n    \n    func test_wont_remove_common_leading_spaces_2_spaces() async throws {\n        let code = \"\"\"\n          struct Cat {\n            }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 0)\n        XCTAssertEqual(result.map(\\.string), [\n            \"··struct·Cat·{\",\n            \"····}\",\n        ])\n    }\n    \n    func test_remove_common_leading_spaces_4_spaces() async throws {\n        let code = \"\"\"\n            struct Cat {\n            }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 4)\n        XCTAssertEqual(result.map(\\.string), [\n            \"struct·Cat·{\",\n            \"}\",\n        ])\n    }\n    \n    func test_remove_common_leading_spaces_8_spaces() async throws {\n        let code = \"\"\"\n                struct Cat {\n                }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 8)\n        XCTAssertEqual(result.map(\\.string), [\n            \"struct·Cat·{\",\n            \"}\",\n        ])\n    }\n\n    func test_remove_common_leading_spaces_one_line_is_empty() async throws {\n        let code = \"\"\"\n            struct Cat {\n\n            }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 4)\n        XCTAssertEqual(result.map(\\.string), [\n            \"struct·Cat·{\",\n            \"\",\n            \"}\",\n        ])\n    }\n    \n    func test_remove_common_leading_spaces_one_line_has_no_leading_spaces() async throws {\n        let code = \"\"\"\n            struct Cat {\n        //\n            }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 0)\n        XCTAssertEqual(result.map(\\.string), [\n            \"····struct·Cat·{\",\n            \"//\",\n            \"····}\",\n        ])\n    }\n    \n    func test_remove_common_leading_spaces_one_line_has_fewer_leading_spaces() async throws {\n        let code = \"\"\"\n                struct Cat {\n            //\n                }\n        \"\"\"\n        let (result, spaceCount) = CodeHighlighting.highlighted(\n            code: code,\n            language: \"md\",\n            scenario: \"a\",\n            brightMode: true,\n            droppingLeadingSpaces: true,\n            font: .systemFont(ofSize: 14)\n        )\n\n        XCTAssertEqual(spaceCount, 4)\n        XCTAssertEqual(result.map(\\.string), [\n            \"····struct·Cat·{\",\n            \"//\",\n            \"····}\",\n        ])\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/SuggestionBasicTests/BreakLinePerformanceTests.swift",
    "content": "import Foundation\nimport XCTest\n@testable import SuggestionBasic\n\nfinal class BreakLinePerformanceTests: XCTestCase {\n    func test_breakLines() {\n        let string = String(repeating: \"\"\"\n        Hello\n        World\n        \n        \"\"\", count: 50000)\n        \n        measure {\n            let _ = string.breakLines()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/SuggestionBasicTests/LineAnnotationParsingTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import SuggestionBasic\n\nclass LineAnnotationParsingTests: XCTestCase {\n    func test_parse_line_annotation() {\n        let annotation = \"Error Line 25: FileName.swift:25 Cannot convert Type\"\n        let parsed = EditorInformation.parseLineAnnotation(annotation)\n        XCTAssertEqual(parsed.type, \"Error\")\n        XCTAssertEqual(parsed.line, 25)\n        XCTAssertEqual(parsed.message, \"Cannot convert Type\")\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/SuggestionBasicTests/ModificationTests.swift",
    "content": "import XCTest\n\n@testable import SuggestionBasic\n\nfinal class ModificationTests: XCTestCase {\n    func test_nsmutablearray_deleting_an_element() {\n        let a = NSMutableArray(array: [\"a\", \"b\", \"c\"])\n        a.apply([.deleted(0...0)])\n        XCTAssertEqual(a as! [String], [\"b\", \"c\"])\n    }\n\n    func test_nsmutablearray_deleting_all_element() {\n        let a = NSMutableArray(array: [\"a\", \"b\", \"c\"])\n        a.apply([.deleted(0...2)])\n        XCTAssertEqual(a as! [String], [])\n    }\n\n    func test_nsmutablearray_deleting_too_much_element() {\n        let a = NSMutableArray(array: [\"a\", \"b\", \"c\"])\n        a.apply([.deleted(0...100)])\n        XCTAssertEqual(a as! [String], [])\n    }\n\n    func test_nsmutablearray_inserting_elements() {\n        let a = NSMutableArray(array: [\"a\", \"b\", \"c\"])\n        a.apply([.inserted(0, [\"y\", \"z\"])])\n        XCTAssertEqual(a as! [String], [\"y\", \"z\", \"a\", \"b\", \"c\"])\n        a.apply([.inserted(1, [\"0\", \"1\"])])\n        XCTAssertEqual(a as! [String], [\"y\", \"0\", \"1\", \"z\", \"a\", \"b\", \"c\"])\n    }\n\n    func test_nsmutablearray_inserting_elements_at_index_out_of_range() {\n        let a = NSMutableArray(array: [\"a\", \"b\", \"c\"])\n        a.apply([.inserted(1000, [\"z\"])])\n        XCTAssertEqual(a as! [String], [\"a\", \"b\", \"c\", \"z\"])\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/SuggestionBasicTests/TextExtrationFromCodeTests.swift",
    "content": "import Foundation\nimport XCTest\n@testable import SuggestionBasic\n\nfinal class TextExtractionFromCodeTests: XCTestCase {\n    func test_empty_selection() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 0),\n            end: CursorPosition(line: 0, character: 0)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"\")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\"])\n    }\n\n    func test_single_line_selection() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"foo = \")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\"])\n    }\n\n    func test_single_line_selection_with_emoji() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let 🎆🎆o = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"🎆🎆o \")\n        XCTAssertEqual(result.lines, [\"let 🎆🎆o = 1\\n\"])\n    }\n\n    func test_single_line_selection_cutting_emoji() {\n        // undefined behavior\n\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 5),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let 🎆🎆o = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.lines, [\"let 🎆🎆o = 1\\n\"])\n    }\n\n    func test_single_line_selection_at_line_end() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 8),\n            end: CursorPosition(line: 0, character: 11)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"= 1\")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\"])\n    }\n\n    func test_multi_line_selection() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 1, character: 11)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\", \"let baz = 3\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"foo = 1\\nlet bar = 2\")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\", \"let bar = 2\\n\"])\n    }\n\n    func test_multi_line_selection_with_emoji() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 1, character: 11)\n        )\n        let lines = [\"🎆🎆 foo = 1\\n\", \"let bar = 2\\n\", \"let baz = 3\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \" foo = 1\\nlet bar = 2\")\n        XCTAssertEqual(result.lines, [\"🎆🎆 foo = 1\\n\", \"let bar = 2\\n\"])\n    }\n\n    func test_invalid_selection() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 1, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let foo = 1\", \"let bar = 2\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: false\n        )\n        XCTAssertEqual(result.code, \"\")\n        XCTAssertEqual(result.lines, [])\n    }\n    \n    func test_single_line_selection_ignoring_column() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 0, character: 10)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: true\n        )\n        XCTAssertEqual(result.code, \"let foo = 1\\n\")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\"])\n    }\n    \n    func test_multi_line_selection_ignoring_column() {\n        let selection = CursorRange(\n            start: CursorPosition(line: 0, character: 4),\n            end: CursorPosition(line: 1, character: 11)\n        )\n        let lines = [\"let foo = 1\\n\", \"let bar = 2\\n\", \"let baz = 3\\n\"]\n        let result = EditorInformation.code(\n            in: lines,\n            inside: selection,\n            ignoreColumns: true\n        )\n        XCTAssertEqual(result.code, \"let foo = 1\\nlet bar = 2\\n\")\n        XCTAssertEqual(result.lines, [\"let foo = 1\\n\", \"let bar = 2\\n\"])\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/SuggestionInjectorTests/AcceptSuggestionTests.swift",
    "content": "import SuggestionBasic\nimport XCTest\n\n@testable import SuggestionInjector\n\nfinal class AcceptSuggestionTests: XCTestCase {\n    func test_accept_suggestion_no_overlap() async throws {\n        let content = \"\"\"\n        struct Cat {\n\n        }\n        \"\"\"\n        let text = \"\"\"\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 1),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 0)\n            ),\n            replacingLines: \"\".breakLines(appendLineBreakToLastLine: true)\n        )\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 1)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(\n            lines.joined(separator: \"\"),\n            \"\"\"\n            struct Cat {\n                var name: String\n                var age: String\n            }\n\n            \"\"\",\n            \"There is always a new line at the end of each line! When you join them, it will look like this\"\n        )\n    }\n\n    func test_accept_suggestion_start_from_previous_line() async throws {\n        let content = \"\"\"\n        struct Cat {\n        }\n        \"\"\"\n        let text = \"\"\"\n        struct Cat {\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 12),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 12)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 12)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct Cat {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap() async throws {\n        let content = \"\"\"\n        struct Cat {\n            var name\n        }\n        \"\"\"\n        let text = \"\"\"\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 1, character: 12),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 12)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 1, character: 12)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct Cat {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing() async throws {\n        let content = \"\"\"\n        struct Cat {\n            var name: Str\n        }\n        \"\"\"\n        let text = \"\"\"\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 1, character: 12),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 12)\n            ),\n            replacingLines: \"\"\"\n            struct Cat {\n                var name\n            }\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 1, character: 12)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct Cat {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing_has_suffix_typed() async throws {\n        let content = \"\"\"\n        print(\"\")\n        \"\"\" // typed \")\n        let text = \"\"\"\n        print(\"Hello World!\")\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 7),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 7)\n            ),\n            replacingLines: \"\"\"\n            print(\"\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 21)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 21))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        print(\"Hello World!\")\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing_suggestion_in_the_middle() async throws {\n        let content = \"\"\"\n        print(\"He\")\n        \"\"\"\n        let text = \"\"\"\n        print(\"Hello World!\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 7),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 7)\n            ),\n            replacingLines: \"\"\"\n            print(\"\")\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        print(\"Hello World!\")\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing_has_suffix_typed_suggestion_has_multiple_lines(\n    ) async throws {\n        let content = \"\"\"\n        struct Cat {}\n        \"\"\"\n        let text = \"\"\"\n        struct Cat {\n            var name: String\n            var kind: String\n        }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 6),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 6)\n            ),\n            replacingLines: \"\"\"\n            struct\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 12)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 3, character: 1)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 3, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct Cat {\n            var name: String\n            var kind: String\n        }\n\n        \"\"\")\n    }\n\n    func test_propose_suggestion_partial_overlap() async throws {\n        let content = \"func quickSort() {}}\"\n        let text = \"\"\"\n        func quickSort() {\n            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n            var left = 0\n            var right = array.count - 1\n            quickSort(&array, left, right)\n            print(array)\n        }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 18),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 20)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 18)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 6, character: 1)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 6, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        func quickSort() {\n            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n            var left = 0\n            var right = array.count - 1\n            quickSort(&array, left, right)\n            print(array)\n        }\n\n        \"\"\")\n    }\n\n    func test_no_overlap_append_to_the_end() async throws {\n        let content = \"func quickSort() {\"\n        let text = \"\"\"\n            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n            var left = 0\n            var right = array.count - 1\n            quickSort(&array, left, right)\n            print(array)\n        }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 18),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 0)\n            ),\n            replacingLines: \"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 18)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 6, character: 1)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 6, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        func quickSort() {\n            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n            var left = 0\n            var right = array.count - 1\n            quickSort(&array, left, right)\n            print(array)\n        }\n\n        \"\"\")\n    }\n\n    func test_replacing_multiple_lines() async throws {\n        let content = \"\"\"\n        struct Cat {\n            func speak() { print(\"meow\") }\n        }\n        \"\"\"\n        let text = \"\"\"\n        struct Dog {\n            func speak() {\n                print(\"woof\")\n            }\n        }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 7),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 2, character: 1)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 4, character: 1)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 4, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct Dog {\n            func speak() {\n                print(\"woof\")\n            }\n        }\n\n        \"\"\")\n    }\n\n    func test_replacing_multiple_lines_in_the_middle() async throws {\n        let content = \"\"\"\n        protocol Animal {\n            func speak()\n        }\n\n        struct Cat: Animal {\n            func speak() { print(\"meow\") }\n        }\n\n        func foo() {}\n        \"\"\"\n        let text = \"\"\"\n        Dog {\n            func speak() {\n                print(\"woof\")\n            }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 5, character: 34),\n            range: .init(\n                start: .init(line: 4, character: 7),\n                end: .init(line: 5, character: 34)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 5, character: 34)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 4, character: 7),\n                                end: .init(line: 7, character: 5)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 7, character: 5))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        protocol Animal {\n            func speak()\n        }\n\n        struct Dog {\n            func speak() {\n                print(\"woof\")\n            }\n        }\n\n        func foo() {}\n\n        \"\"\")\n    }\n\n    func test_replacing_single_line_in_the_middle_should_not_remove_the_next_character(\n    ) async throws {\n        let content = \"\"\"\n        apiKeyName: ,,\n        \"\"\"\n\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: \"apiKeyName: azureOpenAIAPIKeyName\",\n            position: .init(line: 0, character: 12),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 12)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var lines = content.breakIntoEditorStyleLines()\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var cursor = CursorPosition(line: 5, character: 34)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertEqual(cursor, .init(line: 0, character: 33))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        apiKeyName: azureOpenAIAPIKeyName,,\n\n        \"\"\")\n    }\n\n    func test_remove_the_first_adjacent_placeholder_in_the_last_line(\n    ) async throws {\n        let content = \"\"\"\n        apiKeyName: <#T##value: BinaryInteger##BinaryInteger#> <#Hello#>,\n        \"\"\"\n\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: \"apiKeyName: azureOpenAIAPIKeyName\",\n            position: .init(line: 0, character: 12),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 12)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var lines = content.breakIntoEditorStyleLines()\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var cursor = CursorPosition(line: 5, character: 34)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertEqual(cursor, .init(line: 0, character: 33))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        apiKeyName: azureOpenAIAPIKeyName <#Hello#>,\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_start_from_previous_line_has_emoji_inside() async throws {\n        let content = \"\"\"\n        struct 😹😹 {\n        }\n        \"\"\"\n        let text = \"\"\"\n        struct 😹😹 {\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 13),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 13)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 13)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct 😹😹 {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_with_emoji_in_the_previous_code() async throws {\n        let content = \"\"\"\n        struct 😹😹 {\n            var name\n        }\n        \"\"\"\n        let text = \"\"\"\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 1, character: 13),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 13)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 1, character: 13)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct 😹😹 {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing_has_emoji_inside() async throws {\n        let content = \"\"\"\n        struct 😹😹 {\n            var name: Str\n        }\n        \"\"\"\n        let text = \"\"\"\n            var name: String\n            var age: String\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 1, character: 13),\n            range: .init(\n                start: .init(line: 1, character: 0),\n                end: .init(line: 1, character: 13)\n            ),\n            replacingLines: \"\"\"\n            struct 😹😹 {\n                var name:\n            }\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 1, character: 13)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 1, character: 0),\n                                end: .init(line: 2, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 2, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct 😹😹 {\n            var name: String\n            var age: String\n        }\n\n        \"\"\")\n    }\n\n    func test_replacing_multiple_lines_with_emoji() async throws {\n        let content = \"\"\"\n        struct 😹😹 {\n            func speak() { print(\"meow\") }\n        }\n        \"\"\"\n        let text = \"\"\"\n        struct 🐶🐶 {\n            func speak() {\n                print(\"woof\")\n            }\n        }\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 7),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 2, character: 1)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 4, character: 1)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 4, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        struct 🐶🐶 {\n            func speak() {\n                print(\"woof\")\n            }\n        }\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_overlap_continue_typing_suggestion_with_emoji_in_the_middle(\n    ) async throws {\n        let content = \"\"\"\n        print(\"🐶\")\n        \"\"\"\n        let text = \"\"\"\n        print(\"🐶llo 🐶rld!\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 6),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 6)\n            ),\n            replacingLines: \"\"\"\n            print(\")\n            \"\"\".breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 19)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 19))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        print(\"🐶llo 🐶rld!\")\n\n        \"\"\")\n    }\n\n    func test_replacing_single_line_in_the_middle_should_not_remove_the_next_character_with_emoji(\n    ) async throws {\n        let content = \"\"\"\n        🐶KeyName: ,,\n        \"\"\"\n\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: \"🐶KeyName: azure👩‍❤️‍👨AIAPIKeyName\",\n            position: .init(line: 0, character: 11),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 11)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var lines = content.breakIntoEditorStyleLines()\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var cursor = CursorPosition(line: 5, character: 34)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n\n        XCTAssertEqual(cursor, .init(line: 0, character: 36))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        🐶KeyName: azure👩‍❤️‍👨AIAPIKeyName,,\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_in_the_middle_single_line() async throws {\n        let content = \"\"\"\n        let foobar = 1\n        \"\"\"\n        let text = \"\"\"\n        let fooBar\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 7),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 10)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 10)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 10))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        let fooBar = 1\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_in_the_middle_single_line_case_2() async throws {\n        let content = \"\"\"\n                let pikachecker = 1\n        \"\"\"\n        let text = \"\"\"\n                let pikaChecker\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 16),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 23)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 16)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 23)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 23))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n                let pikaChecker = 1\n\n        \"\"\")\n    }\n\n    func test_accept_suggestion_rewriting_the_single_line() async throws {\n        let content = \"\"\"\n        let foobar =\n        \"\"\"\n        let text = \"\"\"\n        let zooKoo = 2\n        \"\"\"\n        let suggestion = CodeSuggestion(\n            id: \"\",\n            text: text,\n            position: .init(line: 0, character: 12),\n            range: .init(\n                start: .init(line: 0, character: 0),\n                end: .init(line: 0, character: 12)\n            ),\n            replacingLines: content.breakLines(appendLineBreakToLastLine: true)\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 7)\n        SuggestionInjector().acceptSuggestion(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completion: suggestion,\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(\n            extraInfo.modificationRanges,\n            [\n                \"\": CursorRange(start: .init(line: 0, character: 0),\n                                end: .init(line: 0, character: 14)),\n            ]\n        )\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 0, character: 14))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        let zooKoo = 2\n\n        \"\"\")\n    }\n\n    func test_accepting_multiple_suggestions_at_a_time() async throws {\n        let content = \"\"\"\n        protocol Definition {\n            var id: String\n            var name: String\n        }\n\n        struct Foo {\n\n        }\n\n        struct Bar {\n\n        }\n\n        let foo = Foo()\n\n        struct Baz {}\n        \"\"\"\n        let text1 = \"\"\"\n        struct Foo: Definition {\n            var id: String\n            var name: String\n        }\n        \"\"\"\n        let suggestion1 = CodeSuggestion(\n            id: \"1\",\n            text: text1,\n            position: .init(line: 5, character: 0),\n            range: .init(\n                start: .init(line: 5, character: 0),\n                end: .init(line: 7, character: 1)\n            ),\n            replacingLines: Array(content.breakLines(appendLineBreakToLastLine: true)[5...7])\n        )\n\n        let text2 = \"\"\"\n        struct Bar: Definition {\n            var id: String\n            var name: String\n        }\n        \"\"\"\n        let suggestion2 = CodeSuggestion(\n            id: \"2\",\n            text: text2,\n            position: .init(line: 9, character: 0),\n            range: .init(\n                start: .init(line: 9, character: 0),\n                end: .init(line: 11, character: 1)\n            ),\n            replacingLines: Array(content.breakLines(appendLineBreakToLastLine: true)[9...11])\n        )\n\n        let text3 = \"\"\"\n        struct Baz: Definition {\n            var id: String\n            var name: String\n        }\n        \"\"\"\n        let suggestion3 = CodeSuggestion(\n            id: \"3\",\n            text: text3,\n            position: .init(line: 15, character: 0),\n            range: .init(\n                start: .init(line: 15, character: 0),\n                end: .init(line: 15, character: 13)\n            ),\n            replacingLines: Array(content.breakLines(appendLineBreakToLastLine: true)[15...15])\n        )\n\n        var extraInfo = SuggestionInjector.ExtraInfo()\n        var lines = content.breakIntoEditorStyleLines()\n        var cursor = CursorPosition(line: 0, character: 14)\n        SuggestionInjector().acceptSuggestions(\n            intoContentWithoutSuggestion: &lines,\n            cursorPosition: &cursor,\n            completions: [suggestion1, suggestion2, suggestion3],\n            extraInfo: &extraInfo\n        )\n        XCTAssertTrue(extraInfo.didChangeContent)\n        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n        XCTAssertEqual(cursor, .init(line: 20, character: 1))\n        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n        protocol Definition {\n            var id: String\n            var name: String\n        }\n\n        struct Foo: Definition {\n            var id: String\n            var name: String\n        }\n\n        struct Bar: Definition {\n            var id: String\n            var name: String\n        }\n\n        let foo = Foo()\n\n        struct Baz: Definition {\n            var id: String\n            var name: String\n        }\n\n        \"\"\")\n        XCTAssertEqual(extraInfo.modificationRanges, [\n            \"1\": .init(start: .init(line: 5, character: 0), end: .init(line: 8, character: 1)),\n            \"2\": .init(start: .init(line: 10, character: 0), end: .init(line: 13, character: 1)),\n            \"3\": .init(start: .init(line: 17, character: 0), end: .init(line: 20, character: 1)),\n        ])\n    }\n  \n// Not supported yet\n//    func test_accepting_multiple_same_line_suggestions_at_a_time() async throws {\n//        let content = \"let foo = 1\\n\"\n//        let text1 = \"berry\"\n//        let suggestion1 = CodeSuggestion(\n//            id: \"1\",\n//            text: text1,\n//            position: .init(line: 0, character: 4),\n//            range: .init(\n//                start: .init(line: 0, character: 4),\n//                end: .init(line: 0, character: 7)\n//            ),\n//            replacingLines: [content]\n//        )\n//\n//        let text2 = \"\"\"\n//        200\n//        \"\"\"\n//        let suggestion2 = CodeSuggestion(\n//            id: \"2\",\n//            text: text2,\n//            position: .init(line: 0, character: 10),\n//            range: .init(\n//                start: .init(line: 0, character: 10),\n//                end: .init(line: 0, character: 11)\n//            ),\n//            replacingLines: [content]\n//        )\n//\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakIntoEditorStyleLines()\n//        var cursor = CursorPosition(line: 0, character: 0)\n//        SuggestionInjector().acceptSuggestions(\n//            intoContentWithoutSuggestion: &lines,\n//            cursorPosition: &cursor,\n//            completions: [suggestion1, suggestion2],\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(lines, content.breakIntoEditorStyleLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(cursor, .init(line: 0, character: 15))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"let berry = 200\\n\")\n//        XCTAssertEqual(extraInfo.modificationRanges, [\n//            \"1\": .init(start: .init(line: 0, character: 4), end: .init(line: 0, character: 9)),\n//            \"2\": .init(start: .init(line: 0, character: 12), end: .init(line: 0, character: 15)),\n//        ])\n//    }\n}\n\nextension String {\n    func breakIntoEditorStyleLines() -> [String] {\n        split(separator: \"\\n\", omittingEmptySubsequences: false).map { $0 + \"\\n\" }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/SuggestionInjectorTests/ProposeSuggestionTests.swift",
    "content": "//import SuggestionBasic\n//import XCTest\n//\n//@testable import SuggestionInjector\n//\n//final class ProposeSuggestionTests: XCTestCase {\n//    func test_propose_suggestion_no_overlap() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//\n//        }\n//        \"\"\"\n//        let text = \"\"\"\n//            var name: String\n//            var age: String\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 2, character: 19),\n//            range: .init(\n//                start: .init(line: 1, character: 0),\n//                end: .init(line: 2, character: 18)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 2...5)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(\n//            lines.joined(separator: \"\"),\n//            \"\"\"\n//            struct Cat {\n//\n//            /*========== Copilot Suggestion 1/10\n//                var name: String\n//                var age: String\n//            *///======== End of Copilot Suggestion\n//            }\n//            \"\"\",\n//            \"The user may want to keep typing on the empty line, so suggestion is added to the next line\"\n//        )\n//    }\n//\n//    func test_propose_suggestion_no_overlap_start_from_previous_line() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//        }\n//        \"\"\"\n//        let text = \"\"\"\n//            var name: String\n//            var age: String\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 1, character: 0),\n//            range: .init(\n//                start: .init(line: 1, character: 0),\n//                end: .init(line: 2, character: 18)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 1...4)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        struct Cat {\n//        /*========== Copilot Suggestion 1/10\n//            var name: String\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//        }\n//        \"\"\")\n//    }\n//\n//    func test_propose_suggestion_overlap() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//            var name\n//        }\n//        \"\"\"\n//        let text = \"\"\"\n//            var name: String\n//            var age: String\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 1, character: 0),\n//            range: .init(\n//                start: .init(line: 1, character: 0),\n//                end: .init(line: 2, character: 18)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 2...5)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        struct Cat {\n//            var name\n//        /*========== Copilot Suggestion 1/10\n//                   ^: String\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//        }\n//        \"\"\")\n//    }\n//\n//    func test_propose_suggestion_overlap_first_line_is_empty() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//            var name: String\n//        }\n//        \"\"\"\n//        let text = \"\"\"\n//            var name: String\n//            var age: String\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 1, character: 0),\n//            range: .init(\n//                start: .init(line: 1, character: 0),\n//                end: .init(line: 2, character: 18)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 2...5)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        struct Cat {\n//            var name: String\n//        /*========== Copilot Suggestion 1/10\n//                           ^\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//        }\n//        \"\"\")\n//    }\n//\n//    // swiftformat:disable indent trailingSpace\n//    func test_propose_suggestion_overlap_pure_spaces() async throws {\n//        let content = \"\"\"\n//        func quickSort() {\n//            \n//        }\n//        \"\"\" // Yes the second line has 4 spaces!\n//        let text = \"\"\"\n//            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n//            var left = 0\n//            var right = array.count - 1\n//            quickSort(&array, left, right)\n//            print(array)\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 1, character: 0),\n//            range: .init(\n//                start: .init(line: 1, character: 0),\n//                end: .init(line: 2, character: 18)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 2...8)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        func quickSort() {\n//            \n//        /*========== Copilot Suggestion 1/10\n//           ^var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n//            var left = 0\n//            var right = array.count - 1\n//            quickSort(&array, left, right)\n//            print(array)\n//        *///======== End of Copilot Suggestion\n//        }\n//        \"\"\") // Yes the second line still has 4 spaces!\n//    }\n//\n//    // swiftformat:enable all\n//\n//    func test_propose_suggestion_partial_overlap() async throws {\n//        let content = \"func quickSort() {}}\\n\"\n//        let text = \"\"\"\n//        func quickSort() {\n//            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n//            var left = 0\n//            var right = array.count - 1\n//            quickSort(&array, left, right)\n//            print(array)\n//        }\n//        \"\"\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 0, character: 0),\n//            range: .init(\n//                start: .init(line: 0, character: 0),\n//                end: .init(line: 5, character: 15)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertEqual(extraInfo.suggestionRange, 1...9)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        func quickSort() {}}\n//        /*========== Copilot Suggestion 1/10\n//                         ^\n//            var array = [1, 3, 2, 4, 5, 6, 7, 8, 9, 10]\n//            var left = 0\n//            var right = array.count - 1\n//            quickSort(&array, left, right)\n//            print(array)\n//        }\n//        *///======== End of Copilot Suggestion\n//\n//        \"\"\")\n//    }\n//\n//    func test_propose_suggestion_overlap_one_line_adding_only_spaces() async throws {\n//        let content = \"\"\"\n//        if true {\n//            print(\"hello\")\n//        } else {\n//            print(\"world\")\n//        }\n//        \"\"\"\n//        let text = \"} else {\\n\"\n//        let suggestion = CodeSuggestion(\n//            id: \"\",\n//            text: text,\n//            position: .init(line: 2, character: 0),\n//            range: .init(\n//                start: .init(line: 2, character: 0),\n//                end: .init(line: 2, character: 8)\n//            )\n//        )\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        SuggestionInjector().proposeSuggestion(\n//            intoContentWithoutSuggestion: &lines,\n//            completion: suggestion,\n//            index: 0,\n//            count: 10,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertFalse(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertNil(extraInfo.suggestionRange)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        if true {\n//            print(\"hello\")\n//        } else {\n//            print(\"world\")\n//        }\n//        \"\"\")\n//    }\n//}\n"
  },
  {
    "path": "Tool/Tests/SuggestionInjectorTests/RejectSuggestionTests.swift",
    "content": "//import SuggestionBasic\n//import XCTest\n//\n//@testable import SuggestionInjector\n//\n//final class RejectSuggestionTests: XCTestCase {\n//    func test_rejecting_suggestion() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//            var name\n//        /*========== Copilot Suggestion 1/10\n//                   ^: String\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//        }\n//        \"\"\"\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        var cursor = CursorPosition(line: 1, character: 12)\n//        SuggestionInjector().rejectCurrentSuggestions(\n//            from: &lines,\n//            cursorPosition: &cursor,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertFalse(extraInfo.didChangeCursorPosition)\n//        XCTAssertNil(extraInfo.suggestionRange)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        struct Cat {\n//            var name\n//        }\n//        \"\"\")\n//        XCTAssertEqual(\n//            cursor,\n//            .init(line: 1, character: 12),\n//            \"If cursor is above deletion, don't move it.\"\n//        )\n//    }\n//\n//    func test_broken_suggestion() async throws {\n//        let content = \"\"\"\n//        struct Cat {\n//            var name\n//        /*========== Copilot Suggestion 1/10\n//                   ^: String\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//\n//        /*========== Copilot Suggestion 2/10\n//\n//        /*========== Copilot Suggestion 1/10\n//                   ^: String\n//            var age: String\n//        *///======== End of Copilot Suggestion\n//        \"\"\"\n//        var extraInfo = SuggestionInjector.ExtraInfo()\n//        var lines = content.breakLines()\n//        var cursor = CursorPosition(line: 6, character: 0)\n//        SuggestionInjector().rejectCurrentSuggestions(\n//            from: &lines,\n//            cursorPosition: &cursor,\n//            extraInfo: &extraInfo\n//        )\n//        XCTAssertTrue(extraInfo.didChangeContent)\n//        XCTAssertTrue(extraInfo.didChangeCursorPosition)\n//        XCTAssertNil(extraInfo.suggestionRange)\n//        XCTAssertEqual(lines, content.breakLines().applying(extraInfo.modifications))\n//        XCTAssertEqual(lines.joined(separator: \"\"), \"\"\"\n//        struct Cat {\n//            var name\n//\n//        /*========== Copilot Suggestion 2/10\n//\n//\n//        \"\"\")\n//        XCTAssertEqual(\n//            cursor,\n//            .init(line: 2, character: 0),\n//            \"If cursor is below deletion, move it up.\"\n//        )\n//    }\n//}\n"
  },
  {
    "path": "Tool/Tests/SuggestionProviderTests/PostProcessingSuggestionServiceMiddlewareTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import SuggestionProvider\n\nclass PostProcessingSuggestionServiceMiddlewareTests: XCTestCase {\n    func createRequest(\n        _ code: String = \"\",\n        _ cursorPosition: CursorPosition = .zero\n    ) -> SuggestionRequest {\n        let lines = code.breakLines()\n        return SuggestionRequest(\n            fileURL: URL(fileURLWithPath: \"/path/to/file.swift\"),\n            relativePath: \"file.swift\",\n            content: code, \n            originalContent: code,\n            lines: lines,\n            cursorPosition: cursorPosition,\n            cursorOffset: {\n                if cursorPosition == .outOfScope { return 0 }\n                let prefixLines = if cursorPosition.line > 0 {\n                    lines[0..<cursorPosition.line]\n                } else {\n                    [] as ArraySlice<String>\n                }\n                let offset = prefixLines.reduce(0) { $0 + $1.utf8.count }\n                return offset\n                    + lines[cursorPosition.line].prefix(cursorPosition.character).utf8.count\n            }(),\n            tabSize: 4,\n            indentSize: 4,\n            usesTabsForIndentation: false,\n            relevantCodeSnippets: []\n        )\n    }\n    \n    func test_empty() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"\", .init(line: 0, character: 0)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [])\n    }\n\n    func test_trailing_whitespaces_and_new_lines_should_be_removed() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world \\n   \\n\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n                .init(\n                    id: \"2\",\n                    text: \"  \\n  hello world \\n   \\n\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 0),\n                range: .init(startPair: (0, 0), endPair: (0, 0))\n            ),\n            .init(\n                id: \"2\",\n                text: \"  \\n  hello world\",\n                position: .init(line: 0, character: 0),\n                range: .init(startPair: (0, 0), endPair: (0, 0))\n            ),\n        ])\n    }\n\n    func test_remove_suggestions_that_contains_only_whitespaces_and_new_lines() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world \\n   \\n\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n                .init(\n                    id: \"2\",\n                    text: \"     \\n\\n\\r\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n                .init(\n                    id: \"3\",\n                    text: \"   \",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n                .init(\n                    id: \"4\",\n                    text: \"\\n\\n\\n\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 0),\n                range: .init(startPair: (0, 0), endPair: (0, 0))\n            ),\n        ])\n    }\n    \n    func test_remove_suggestion_that_takes_no_effect_after_being_accepted() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world \\n   \\n\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n                .init(\n                    id: \"2\",\n                    text: \"let cat = 100\",\n                    position: .init(line: 0, character: 13),\n                    range: .init(startPair: (0, 0), endPair: (0, 13))\n                ),\n                .init(\n                    id: \"3\",\n                    text: \"let cat = 10\",\n                    position: .init(line: 0, character: 13),\n                    range: .init(startPair: (0, 0), endPair: (0, 13))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"let cat = 100\", .init(line: 0, character: 3)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 0),\n                range: .init(startPair: (0, 0), endPair: (0, 0))\n            ),\n            .init(\n                id: \"3\",\n                text: \"let cat = 10\",\n                position: .init(line: 0, character: 13),\n                range: .init(startPair: (0, 0), endPair: (0, 13))\n            ),\n        ])\n    }\n    \n    func test_remove_duplicated_trailing_closing_parenthesis_single_parenthesis() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world\\n}\",\n                    position: .init(line: 0, character: 1),\n                    range: .init(startPair: (0, 0), endPair: (0, 1))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"h\\n}\\n\", .init(line: 0, character: 1)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 1),\n                range: .init(startPair: (0, 0), endPair: (0, 1)),\n                middlewareComments: [\"Removed redundant closing parenthesis.\"]\n            ),\n        ])\n    }\n    \n    func test_remove_duplicated_trailing_closing_parenthesis_single_line() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"}\",\n                    position: .init(line: 0, character: 0),\n                    range: .init(startPair: (0, 0), endPair: (0, 0))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"\\n}\\n\", .init(line: 0, character: 0)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"\",\n                position: .init(line: 0, character: 0),\n                range: .init(startPair: (0, 0), endPair: (0, 0)),\n                middlewareComments: [\"Removed redundant closing parenthesis.\"]\n            ),\n        ])\n    }\n    \n    func test_remove_duplicated_trailing_closing_parenthesis_leading_space() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world\\n    }\",\n                    position: .init(line: 0, character: 1),\n                    range: .init(startPair: (0, 0), endPair: (0, 1))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"h\\n    }\\n\", .init(line: 0, character: 1)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 1),\n                range: .init(startPair: (0, 0), endPair: (0, 1)),\n                middlewareComments: [\"Removed redundant closing parenthesis.\"]\n            ),\n        ])\n    }\n    \n    func test_remove_duplicated_trailing_closing_parenthesis_commas() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world\\n,},\",\n                    position: .init(line: 0, character: 1),\n                    range: .init(startPair: (0, 0), endPair: (0, 1))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"h\\n,},\\n\", .init(line: 0, character: 1)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 1),\n                range: .init(startPair: (0, 0), endPair: (0, 1)),\n                middlewareComments: [\"Removed redundant closing parenthesis.\"]\n            ),\n        ])\n    }\n    \n    func test_remove_duplicated_trailing_closing_parenthesis_multiple_parenthesis() async throws {\n        let middleware = PostProcessingSuggestionServiceMiddleware()\n\n        let handler: PostProcessingSuggestionServiceMiddleware.Next = { _ in\n            [\n                .init(\n                    id: \"1\",\n                    text: \"hello world\\n}))>}}\",\n                    position: .init(line: 0, character: 1),\n                    range: .init(startPair: (0, 0), endPair: (0, 1))\n                ),\n            ]\n        }\n\n        let suggestions = try await middleware.getSuggestion(\n            createRequest(\"h\\n}))>}}\\n\", .init(line: 0, character: 1)),\n            configuration: .init(\n                acceptsRelevantCodeSnippets: true,\n                mixRelevantCodeSnippetsInSource: true,\n                acceptsRelevantSnippetsFromOpenedFiles: true\n            ),\n            next: handler\n        )\n\n        XCTAssertEqual(suggestions, [\n            .init(\n                id: \"1\",\n                text: \"hello world\",\n                position: .init(line: 0, character: 1),\n                range: .init(startPair: (0, 0), endPair: (0, 1)),\n                middlewareComments: [\"Removed redundant closing parenthesis.\"]\n            ),\n        ])\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/TokenEncoderTests/TiktokenCl100kBaseTokenEncoderTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import TokenEncoder\n\nclass TiktokenCl100kBaseTokenEncoderTests: XCTestCase {\n//    func test_encoding() async throws {\n//        let encoder = TiktokenCl100kBaseTokenEncoder()\n//        let encoded = encoder.encode(text: \"\"\"\n//        我可以吞下玻璃而不伤身体\n//        The quick brown fox jumps over the lazy dog\n//        \"\"\")\n//        XCTAssertEqual(encoded.count, 26)\n//        XCTAssertEqual(\n//            encoded,\n//            [\n//                37046, 74770, 7305, 252, 17297, 29207, 119, 163, 240, 225, 69636, 16937, 17885, 97,\n//                96356, 33014, 198, 791, 4062, 14198, 39935, 35308, 927, 279, 16053, 5679,\n//            ]\n//        )\n//    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/WebSearchServiceTests/HeadlessBrowserSearchServiceTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import WebSearchService\n\nclass HeadlessBrowserSearchServiceTests: XCTestCase {\n    func test_search_on_google() async throws {\n        let search = HeadlessBrowserSearchService(engine: .google)\n        \n        do {\n            let result = try await search.search(query: \"Snoopy\")\n            XCTAssertFalse(result.webPages.isEmpty, \"Expected non-empty search result\")\n        } catch {\n            XCTFail(\"Search failed with error: \\(error)\")\n        }\n    }\n    \n    func test_search_on_baidu() async throws {\n        let search = HeadlessBrowserSearchService(engine: .baidu)\n        \n        do {\n            let result = try await search.search(query: \"Snoopy\")\n            XCTAssertFalse(result.webPages.isEmpty, \"Expected non-empty search result\")\n        } catch {\n            XCTFail(\"Search failed with error: \\(error)\")\n        }\n    }\n    \n    func test_search_on_duckDuckGo() async throws {\n        let search = HeadlessBrowserSearchService(engine: .duckDuckGo)\n        \n        do {\n            let result = try await search.search(query: \"Snoopy\")\n            XCTAssertFalse(result.webPages.isEmpty, \"Expected non-empty search result\")\n        } catch {\n            XCTFail(\"Search failed with error: \\(error)\")\n        }\n    }\n    \n    func test_search_on_bing() async throws {\n        let search = HeadlessBrowserSearchService(engine: .bing)\n        \n        do {\n            let result = try await search.search(query: \"Snoopy\")\n            XCTAssertFalse(result.webPages.isEmpty, \"Expected non-empty search result\")\n        } catch {\n            XCTFail(\"Search failed with error: \\(error)\")\n        }\n    }\n}\n"
  },
  {
    "path": "Tool/Tests/XcodeInspectorTests/EditorRangeConversionTests.swift",
    "content": "import Foundation\nimport SuggestionBasic\nimport XCTest\n\n@testable import XcodeInspector\n\nclass SourceEditorRangeConversionTests: XCTestCase {\n    // MARK: - Convert to CursorRange\n\n    func test_convert_multiline_range() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let range = 21...39\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        XCTAssertEqual(cursorRange.start, .init(line: 1, character: 3))\n        XCTAssertEqual(cursorRange.end, .init(line: 3, character: 6))\n    }\n\n    func test_convert_multiline_range_with_special_line_endings() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\".replacingOccurrences(of: \"\\n\", with: \"\\r\\n\")\n\n        let range = 21...39\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        XCTAssertEqual(cursorRange.start, .init(line: 1, character: 2))\n        XCTAssertEqual(cursorRange.end, .init(line: 3, character: 3))\n    }\n\n    func test_convert_multiline_range_with_emoji() {\n        let code = \"\"\"\n        import Foundation\n        import 🎆🎆🎆🎆🎆🎆\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let range = 21...42\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        XCTAssertEqual(cursorRange.start, .init(line: 1, character: 3))\n        XCTAssertEqual(cursorRange.end, .init(line: 3, character: 3))\n    }\n    \n    func test_convert_multiline_range_cutting_emoji() {\n        // undefined behavior\n        \n        let code = \"\"\"\n        import Foundation\n        import 🎆🎆🎆🎆🎆🎆\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let range = 26...42 // in the middle of the emoji\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        XCTAssertEqual(cursorRange.start, .init(line: 1, character: 8))\n        XCTAssertEqual(cursorRange.end, .init(line: 3, character: 3))\n    }\n\n    func test_convert_range_with_no_code() {\n        let code = \"\"\n        let range = 21...39\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        XCTAssertEqual(cursorRange.start, .zero)\n        XCTAssertEqual(cursorRange.end, .zero)\n    }\n\n    func test_convert_multiline_range_with_out_of_range_cursor() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let range = 999...1000\n        let cursorRange = SourceEditor.convertRangeToCursorRange(range, in: code)\n\n        // undefined behavior\n\n        XCTAssertEqual(cursorRange.start, .zero)\n        XCTAssertEqual(cursorRange.end, .init(line: 8, character: 0))\n    }\n\n    // MARK: - Convert to CFRange\n\n    func test_back_convert_multiline_cursor_range() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let cursorRange = CursorRange(\n            start: .init(line: 1, character: 3),\n            end: .init(line: 3, character: 6)\n        )\n        let range = SourceEditor.convertCursorRangeToRange(cursorRange, in: code)\n\n        XCTAssertEqual(range.range, 21...39)\n    }\n\n    func test_back_convert_multiline_range_with_out_of_range_cursor() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let cursorRange = CursorRange(\n            start: .init(line: 999, character: 0),\n            end: .init(line: 1000, character: 0)\n        )\n        let range = SourceEditor.convertCursorRangeToRange(cursorRange, in: code)\n\n        // undefined behavior\n\n        XCTAssertEqual(range.range, 0...0)\n    }\n\n    func test_back_convert_multiline_range_with_special_line_endings() {\n        let code = \"\"\"\n        import Foundation\n        import XCTest\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\".replacingOccurrences(of: \"\\n\", with: \"\\r\\n\")\n\n        let cursorRange = CursorRange(\n            start: .init(line: 1, character: 2),\n            end: .init(line: 3, character: 3)\n        )\n        let range = SourceEditor.convertCursorRangeToRange(cursorRange, in: code)\n\n        XCTAssertEqual(range.range, 21...39)\n    }\n\n    func test_back_convert_multiline_range_with_emoji() {\n        let code = \"\"\"\n        import Foundation\n        import 🎆🎆🎆🎆🎆🎆\n\n        class SourceEditorRangeConversionTests {\n            func testSomething() {\n                // test\n            }\n        }\n\n        \"\"\"\n\n        let cursorRange = CursorRange(\n            start: .init(line: 1, character: 3),\n            end: .init(line: 3, character: 3)\n        )\n        let range = SourceEditor.convertCursorRangeToRange(cursorRange, in: code)\n        XCTAssertEqual(range.range, 21...42)\n    }\n\n    func test_back_convert_range_with_no_code() {\n        let code = \"\"\n        let range = 21...39\n        let cursorRange = SourceEditor.convertCursorRangeToRange(\n            SourceEditor.convertRangeToCursorRange(range, in: code),\n            in: code\n        )\n\n        XCTAssertEqual(cursorRange.range, 0...0)\n    }\n}\n\nprivate extension CFRange {\n    var range: ClosedRange<Int> {\n        return location...(location + length)\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/XcodeInspectorTests/SourceEditorCachePerformanceTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import XcodeInspector\n\nclass SourceEditorCachePerformanceTests: XCTestCase {\n    func test_source_editor_cache_get_content_comparison() {\n        let content = String(repeating: \"\"\"\n        struct Cat: Animal {\n          var name: String\n        }\n\n        \"\"\", count: 500)\n        let cache = SourceEditor.Cache(sourceContent: content + \"Yes\")\n\n        measure {\n            for _ in 1 ... 10000 {\n                _ = cache.get(content: content, selectedTextRange: nil)\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "Tool/Tests/XcodeInspectorTests/SourceEditorCacheTests.swift",
    "content": "import Foundation\nimport XCTest\n\n@testable import XcodeInspector\n\nclass SourceEditorCacheTests: XCTestCase {\n    func test_source_editor_cache_get_content_thread_safe() {\n        func randomContent() -> String {\n            String(repeating: \"\"\"\n            struct Cat: Animal {\n              var name: String\n            }\n\n            \"\"\", count: Int.random(in: 2...10))\n        }\n\n        func randomSelectionRange() -> ClosedRange<Int> {\n            let random = Int.random(in: 0...20)\n            return random...random\n        }\n\n        let cache = SourceEditor.Cache()\n\n        let max = 5000\n        let exp = expectation(description: \"test_source_editor_cache_get_content_thread_safe\")\n        DispatchQueue.concurrentPerform(iterations: max) { count in\n            let content = randomContent()\n            let selectionRange = randomSelectionRange()\n            let result = cache.get(content: content, selectedTextRange: selectionRange)\n\n            XCTAssertEqual(result.lines, content.breakLines(appendLineBreakToLastLine: false))\n            XCTAssertEqual(result.selections, [SourceEditor.convertRangeToCursorRange(\n                selectionRange,\n                in: result.lines\n            )])\n            \n            if max == count + 1 {\n                exp.fulfill()\n            }\n        }\n        \n        wait(for: [exp], timeout: 10)\n    }\n}\n\n"
  },
  {
    "path": "VERSIONS",
    "content": "Python version: 3.11.0 \nBuild: b1\nMin macOS version: 10.15\n---------------------\nlibFFI: macOS native\nBZip2: 1.0.8\nOpenSSL: 3.0.5\nXZ: 5.2.6\n"
  },
  {
    "path": "Version.xcconfig",
    "content": "APP_VERSION = 0.38.0\nAPP_BUILD = 504\nRELEASE_CHANNEL =\nRELEASE_NUMBER = 1\n"
  },
  {
    "path": "appcast.xml",
    "content": "<?xml version=\"1.0\" standalone=\"yes\"?>\n<rss xmlns:sparkle=\"http://www.andymatuschak.org/xml-namespaces/sparkle\" version=\"2.0\">\n    <channel>\n        <title>Copilot for Xcode</title>\n        <item>\n            <title>0.33.5</title>\n            <pubDate>Tue, 09 Jul 2024 01:29:35 +0800</pubDate>\n            <sparkle:version>396</sparkle:version>\n            <sparkle:shortVersionString>0.33.5</sparkle:shortVersionString>\n            <sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>\n            <sparkle:releaseNotesLink>https://copilotforxcode.intii.com/changelog/0.33.5</sparkle:releaseNotesLink>\n            <enclosure url=\"https://github.com/intitni/CopilotForXcode/releases/download/0.33.5/Copilot.for.Xcode.app.zip\" length=\"50050595\" type=\"application/octet-stream\" sparkle:edSignature=\"A+zAMKTRuyoZnqz4OBXoIcCvZiLsrfbcuUTLVJK+5skwXA6YaxhosHJgcQomR1OWfHmHRNQMcyURmTLT5WoABw==\"/>\n        </item>\n        <item>\n            <title>0.33.5</title>\n            <pubDate>Mon, 08 Jul 2024 23:53:53 +0800</pubDate>\n            <sparkle:version>394</sparkle:version>\n            <sparkle:shortVersionString>0.33.5</sparkle:shortVersionString>\n            <sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>\n            <sparkle:releaseNotesLink>https://copilotforxcode.intii.com/changelog/0.33.5</sparkle:releaseNotesLink>\n            <enclosure url=\"https://github.com/intitni/CopilotForXcode/releases/download/0.33.5/Copilot.for.Xcode.app.zip\" length=\"44354117\" type=\"application/octet-stream\" sparkle:edSignature=\"B+FyeLaH8Wia/trt8sCOxbAsnGRQpJIViLapI/pnimL6hyElPRKYd+aW2tVB5Kb9X4vXpsaUyC0kM9sP+RgwCQ==\"/>\n        </item>\n        <item>\n            <title>0.33.5</title>\n            <pubDate>Tue, 02 Jul 2024 23:07:42 +0800</pubDate>\n            <sparkle:channel>beta</sparkle:channel>\n            <sparkle:version>393</sparkle:version>\n            <sparkle:shortVersionString>0.33.5</sparkle:shortVersionString>\n            <sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>\n            <sparkle:releaseNotesLink>https://github.com/intitni/CopilotForXcode/releases/tag/0.33.5.beta</sparkle:releaseNotesLink>\n            <enclosure url=\"https://github.com/intitni/CopilotForXcode/releases/download/0.33.5.beta/Copilot.for.Xcode.app.beta.2.zip\" length=\"50054458\" type=\"application/octet-stream\" sparkle:edSignature=\"9APrYWxnRrYCFk1om0Xwsl5S3Z+BbpFIgE1Rliwer5Fiq1cgsJpJg79siHGTWNuA6gxmMC6VF7LSjhDE9czbBw==\"/>\n        </item>\n        <item>\n            <title>0.33.4</title>\n            <pubDate>Tue, 18 Jun 2024 14:55:47 +0800</pubDate>\n            <sparkle:version>390</sparkle:version>\n            <sparkle:shortVersionString>0.33.4</sparkle:shortVersionString>\n            <sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>\n            <sparkle:releaseNotesLink>https://github.com/intitni/CopilotForXcode/releases/tag/0.33.4</sparkle:releaseNotesLink>\n            <enclosure url=\"https://github.com/intitni/CopilotForXcode/releases/download/0.33.4/Copilot.for.Xcode.app.zip\" length=\"50149383\" type=\"application/octet-stream\" sparkle:edSignature=\"8jdvlcOPkWyYkXZGtExfvhtQY2/Huij6ukOKuuHbK+nc6U+RT6DepV3JIS7ETcfJ+2TohS79Eq6D3/9c4V/aAA==\"/>\n        </item>\n    </channel>\n</rss>\n"
  },
  {
    "path": "bridgeLaunchAgent.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>Label</key>\n\t<string>com.intii.CopilotForXcode.CommunicationBridge</string>\n\t<key>Program</key>\n\t<string>/Applications/Copilot for Xcode.app/Contents/Applications/CommunicationBridge</string>\n\t<key>MachServices</key>\n\t<dict>\n\t\t<key>com.intii.CopilotForXcode.CommunicationBridge</key>\n\t\t<true/>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "launchAgent.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>Label</key>\n\t<string>com.intii.CopilotForXcode.ExtensionService</string>\n\t<key>Program</key>\n\t<string>/Applications/Copilot for Xcode.app/Contents/Applications/CopilotForXcodeExtensionService.app/Contents/MacOS/CopilotForXcodeExtensionService</string>\n\t<key>MachServices</key>\n\t<dict>\n\t\t<key>com.intii.CopilotForXcode.ExtensionService</key>\n\t\t<true/>\n\t</dict>\n</dict>\n</plist>\n"
  }
]